Skip to content
OpenPostDocs
OpenPostDocs
Social integrations

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

NetworkConnection requirements
BlueskyHandle and app password
MastodonServer OAuth, usually automatic app registration
PixelfedInstance OAuth for photo publishing
PeerTubeInstance login and channel selection
LemmyInstance login and community selection
PieFedInstance login and community selection
DiscordChannel webhook, or bot app with readiness records
TelegramInstance bot, HTTPS webhook, and readiness records
LinkedInDeveloper app; approved Page access if needed
XOAuth 1.0a app with write access
FacebookMeta app and a Page you manage
InstagramProfessional account with direct Instagram login or a linked Facebook Page
ThreadsThreads API app
YouTubeGoogle OAuth client and YouTube channel
TikTokLogin Kit and Content Posting API access
PinterestBusiness account, API app approval, and readiness records

A developer app identifies your OpenPost instance. Connect each workspace's social accounts after configuring that app.

What you need

  1. Set your instance's public HTTPS URLs and check proxy and media access.
  2. Sign in as the instance administrator or prepare to edit the deployment's secret settings.
  3. Follow the network's guide above. You need access to the destination account, Page, channel, or community.

Save your provider credentials

Save the credentials from your network's guide using one method below.

Use the OpenPost settings form

For X, LinkedIn, Facebook, Instagram, Threads, YouTube, TikTok, and Mastodon:

  1. Sign in as the instance administrator.
  2. Open Settings → Instance → Configuration → Provider apps.
  3. Choose the provider and enter its client ID, client secret, and redirect URI. Mastodon also needs the instance URL.
  4. 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. Append other providers to this same array. Keep one OPENPOST_PROVIDER_APPS entry so adding a network does not replace existing credentials.

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 openpost

A 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/callback

Copy the exact path from the provider guide into both the developer portal and OpenPost. Replace the example domain with yours.

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

  1. Open Settings → Workspace → Social accounts.
  2. Choose the configured network and complete its connection flow.
  3. Confirm the account, Page, or channel shown in OpenPost is the one you intended.
  4. Create a small post in a format the network supports. Use the provider guide's suggested test.
  5. Open the post 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 require administrator readiness records, including on self-hosted instances. Discord channel webhooks do not. Valid credentials alone do not enable a gated operation.

  1. Record the app's approval or permitted trial status using the operator readiness guide.
  2. Connect a test account. For Telegram, follow its guide's webhook registration order first.
  3. Run the first publishing test with certification_test intent. It allows testing before earlier evidence exists, but still checks the app, account authorization, provider policy, and enabled runtime controls.
  4. Record local and live test results for each required operation. Normal immediate and scheduled publishing need their own current evidence.

While signed in as an instance administrator, use /api/v1/docs on your own server to submit the records. 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.

There is no equivalent workspace settings form. Keep a provider unavailable until its required records and tests pass.

On this page