Set up social integrations
Choose a social network, configure its credentials, and connect your first account.
Choose the network you want to connect. Each guide takes you through its setup, permissions, and a first test post.
If you use OpenPost Hosted, go straight to connecting your accounts. These guides are for people running their own OpenPost server.
Choose a social network
Bluesky, Mastodon, and Discord webhooks do not need an operator-created developer app in the usual setup. Other networks need credentials for your instance. A developer app identifies your OpenPost server to the network; connecting an account lets that server publish for a particular person, Page, or channel.
Pinterest, Telegram, and Discord bot mode also need administrator readiness records. Read that requirement before starting their setup.
Before you start
- OpenPost runs at a stable public HTTPS address, such as
https://post.example.com. - You can change the deployment configuration or sign in as the instance administrator.
- You have access to the social account and any Page, business, or channel you want to manage.
For networks that download your media, the media address must also work outside your network. Set the URLs in your deployment's .env file:
OPENPOST_APP_URL=https://post.example.com
OPENPOST_PUBLIC_URL=https://post.example.com
OPENPOST_MEDIA_URL=https://post.example.com/mediaThis example serves media through OpenPost. If you use a separate media host, keep its address in OPENPOST_MEDIA_URL. See configuration for storage and URL options.
Save your provider credentials
First follow your network's guide to create its app. Then choose one of these ways to save the credentials. You configure the developer app once per instance; each workspace connects its own social accounts afterward.
Use the OpenPost settings form
For X, LinkedIn, Facebook, Instagram, Threads, YouTube, TikTok, and Mastodon:
- Sign in as the instance administrator.
- Open Settings → Instance → Configuration → Provider apps.
- Choose the provider and enter its client ID, client secret, and redirect URI. Mastodon also needs the instance URL.
- Save the app and restart OpenPost.
OpenPost encrypts saved secrets. Entries supplied by the environment appear as read-only. If an environment entry matches a saved app, the environment entry wins. Edit that entry in your deployment instead.
Use your deployment environment
Set OPENPOST_PROVIDER_APPS to a JSON array. The provider guides include complete examples. For a Docker Compose installation that uses env_file: .env, put the JSON on one line in .env:
OPENPOST_PROVIDER_APPS='[{"provider":"linkedin","client_id":"YOUR_CLIENT_ID","client_secret":"YOUR_CLIENT_SECRET","redirect_uri":"https://post.example.com/api/v1/accounts/linkedin/callback"}]'Replace the example values with your app's credentials. When adding another network, append its object to the same array. Keep one OPENPOST_PROVIDER_APPS entry; a second definition can replace the first and make existing integrations disappear.
Use this method for Pinterest, Telegram, and Discord bot credentials, which the settings form does not yet expose. Bluesky passwords and Discord webhook URLs belong in the workspace connection dialog, not this registry.
Keep .env private and out of Git. If your deployment provides a secret store, set the variable there. You can also set OPENPOST_PROVIDER_APPS_FILE to a mounted file containing the JSON array. Recreate the Compose service to load changed environment values:
docker compose up -d --force-recreate openpostA plain docker compose restart does not reload changed environment variables. Keep the same database, media volumes, and encryption key when recreating the container.
Register the right callback
For OAuth providers other than Mastodon's code flow, the callback has this form:
https://post.example.com/api/v1/accounts/PROVIDER/callbackEach network's guide gives the complete path. Copy it exactly into the developer portal and your OpenPost configuration. Use your own domain; callback paths from Postiz or another scheduler will not work with OpenPost.
Mastodon normally returns an authorization code that you paste back into OpenPost. Bluesky, Telegram, and Discord webhooks use their own connection steps and do not use this callback pattern.
Connect an account and check delivery
- Open Settings → Workspace → Social accounts.
- Choose the configured network and complete its connection flow.
- Confirm the account, Page, or channel shown in OpenPost is the one you intended.
- Create a small post in a format the network supports. Use the provider guide's suggested test.
- Open the publication to check delivery, then check the post on the network itself.
A successful sign-in confirms access to the account. It does not confirm that every publishing permission, media URL, or optional feature works. Test the formats you plan to use before filling your calendar.
If setup fails, use connection troubleshooting. If the account connects but a post fails, start with publishing troubleshooting.
Readiness records for bot apps and Pinterest
Pinterest, Telegram, and Discord bot mode currently require administrator readiness records even on a self-hosted instance. A saved credential can be valid while connection or publishing remains unavailable. Discord channel webhooks do not need this workflow.
An instance administrator records the app's approval status first, connects a test account, then records the results of local and live publishing tests. The first publishing test uses certification_test intent so it can run before prior test evidence exists. It still requires the correct app, approval or trial permission, account authorization, and enabled runtime controls. Normal immediate and scheduled publishing each need current evidence.
Use the operator readiness guide for the required records. While signed in as an instance administrator, open /api/v1/docs on your own OpenPost server to submit them through the API reference. Choose The OpenPost instance serving this contract as the server and leave openpost_session blank; the browser sends your session cookie. API tokens cannot perform these administrator operations.
The provider pages explain the order for each network, including Telegram's webhook registration. These steps currently use the administrator API; there is no equivalent workspace settings form.