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.
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.
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"
Register an app at linkedin.com/developers. In the app’s Products tab, add both of these products:
- Sign In with LinkedIn using OpenID Connect — provides the
openid,profile, andemailscopes. - Share on LinkedIn — provides the
w_member_socialscope required to publish posts.
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.
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"
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.