Two calls from
token to published.
Shoutrrr is an open-source scheduler for X, LinkedIn, Bluesky, and Discord. Its REST API covers everything the app does, including posts, media, schedules, and the calendar. Bearer token, JSON in and out, and an OpenAPI spec. One call fans a post out to every account you connected.
curl -X POST 'https://app.shoutrrr.com/api/v1/posts' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{ "base_text": "Ship day. v2 is live.",
"destination": { "kind": "all" } }' {
"id": "pst_8c31f0",
"status": "draft",
"targets": [
{ "account": "x/@shoutrrr", "status": "pending" },
{ "account": "linkedin/shoutrrr", "status": "pending" },
{ "account": "bluesky/shoutrrr", "status": "pending" },
{ "account": "discord/#releases", "status": "pending" }
]
} One post, four networks, four independent targets. Each one publishes and retries on its own.
Publishing returns immediately
The API answers 202 Accepted and works each target in the background. Poll the post to read per-target
status and attempts rather than assuming success.
curl -X POST "$BASE/posts/$ID/publish" \
-H "Authorization: Bearer $TOKEN" Shoutrrr is an open-source social scheduler
Write a post once, adjust the wording per network where you want to, then publish it or drop it in a queue, to many accounts at the same time. It has a composer with live per-network character counts and auto-threading, a calendar with recurring posting slots, per-post analytics, and shared team workspaces.
The REST API drives that same app. It is not a cut-down copy, and it reaches the same features you get in the browser.
Apache 2.0. One Docker image bundles the app, worker, and scheduler, and defaults to SQLite.
We run and update it. Set up in seconds, cancel anytime. Includes $5 of X API usage.
Same app either way, and both include the REST API. There is no developer tier.
The same endpoints the app uses
Not a reduced public subset. Anything the interface can do, your code can do over HTTP.
Posts →
Create drafts, edit text and per-account overrides, list and filter, delete.
Post actions →
Publish now, schedule for a time, queue into the next open slot, retry a failed target.
Media →
Upload images with alt text and attach them to a post. JPEG, PNG, WebP, GIF.
Connected accounts →
List every connected account, read its status, and see which ones need reconnecting.
Account sets →
Create and manage named, reusable groups of accounts to post to as one destination.
Posting schedule →
Read and edit the workspace timezone and its recurring weekly posting slots.
Calendar →
Pull scheduled and published posts for any month in one call.
Shares →
Create public, no-auth preview links for a post, list them, and revoke them.
Nothing to apply for
Most social APIs make you register an application, argue your case to a review team, and then pay for the tier that unlocks the endpoints. This one is a token and a base URL.
Want an agent to call it instead?
MCP exposes the same endpoints, so any MCP client can drive them in plain language. Publishing still needs your confirmation.