Documentation menu

Connecting accounts

Link your X, Bluesky, LinkedIn, Meta (Facebook, Instagram, Threads), and Discord accounts so Shoutrrr can publish on your behalf.

Shoutrrr publishes through your own accounts. Bluesky works out of the box — no developer app or credentials — thanks to ATProto OAuth, and Discord works without a developer app too. X, LinkedIn, and the Meta networks (Facebook, Instagram, Threads) publish through apps you register, so they need a few credentials in your environment.

Warning

Publishing and scheduling rely on a running queue worker and scheduler. The provided Docker setups start both for you automatically.

Bluesky

Bluesky connects over ATProto OAuth — the recommended method — with nothing to configure. There’s no developer app to register and no client ID or secret to set: Shoutrrr publishes its own OAuth client-metadata document from your instance, and the DPoP signing key is generated and stored automatically on first use.

From the Connected accounts screen, click Connect Bluesky, enter your handle (e.g. you.bsky.social) or leave it blank to pick your account on Bluesky, then authorize. To connect an account on a self-hosted PDS or another ATProto service, open Advanced and set the Service URL.

Note

OAuth requires your instance to be reachable at its real, public APP_URL over HTTPS — Bluesky’s authorization server fetches your client-metadata and JWKS documents directly from that URL during the handshake. If you run behind a reverse proxy, make sure the HTTPS settings are correct so the generated client_id and callback URLs use https://.

App passwords (fallback)

If OAuth isn’t an option, you can connect with a Bluesky app password instead — open Use app password on the connect dialog. This is not recommended: app passwords bypass two-factor authentication, and disconnecting the account in Shoutrrr does not revoke the password on Bluesky — manage those from Bluesky’s app-password settings.

X (Twitter)

Register an app at developer.x.com and add its credentials to your .env. The redirect URI must match what you register; it defaults to ${APP_URL}/accounts/callback/x.

X_CLIENT_ID=
X_CLIENT_SECRET=
X_REDIRECT_URI="${APP_URL}/accounts/callback/x"

LinkedIn

Register an app at linkedin.com/developers. In the app’s Products tab, add both of these products:

Shoutrrr requests all four scopes when connecting an account. If either product is missing, LinkedIn may show only a generic Bummer, something went wrong error during authorization.

Add the app credentials to your .env. The redirect URI defaults to ${APP_URL}/accounts/callback/linkedin and must also be listed under the app’s authorized redirect URLs.

LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
LINKEDIN_REDIRECT_URI="${APP_URL}/accounts/callback/linkedin"

Facebook & Instagram

Facebook and Instagram are both powered by a single Meta app. Register one at developers.facebook.com, add Facebook Login, and share its credentials with your .env. The redirect URI defaults to ${APP_URL}/accounts/callback/meta — register that exact value on the app.

FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
FACEBOOK_REDIRECT_URI="${APP_URL}/accounts/callback/meta"
FACEBOOK_GRAPH_VERSION=v25.0

When connecting, you pick which Facebook Page to publish as. To connect an Instagram account, that Page must have a linked Instagram Professional (Business) account — a Page without one can’t be connected as Instagram.

Note

To publish for accounts other than your own test users, Meta requires App Review and Business Verification on the app, with the relevant pages_* and instagram_* permissions approved.

Threads

Threads uses a separate Meta app from Facebook and Instagram. Create a Threads app at developers.facebook.com with the Threads API use case, then add its credentials. The redirect URI defaults to ${APP_URL}/accounts/callback/threads.

THREADS_CLIENT_ID=
THREADS_CLIENT_SECRET=
THREADS_REDIRECT_URI="${APP_URL}/accounts/callback/threads"

Discord

No developer app or environment variables required. In Discord, open Server Settings → Integrations → Webhooks, create a webhook for the channel you want to post to, and copy its Webhook URL. Paste that URL on the Connected accounts screen to link the channel.

Shoutrrr only accepts official Discord webhook URLs (discord.com or discordapp.com, including the canary/ptb subdomains). Posts longer than Discord’s 2000-character limit are split automatically across multiple messages.

Optional: social login

Let people sign in with a social account instead of a password:

SOCIALITE_ENABLED=true
SOCIALITE_PROVIDERS=google            # comma-separated: google,x,linkedin
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI="${APP_URL}/auth/google/callback"
Note

After editing .env, restart the container so the new values are picked up. Make sure each redirect URI registered with the provider exactly matches your APP_URL.