Tokens that expire at 3 a.m.
Access tokens are refreshed before they expire. If a network revokes access, the account is marked needs_reconnect and a webhook tells you, instead of tomorrow's post failing quietly.
Self-hosted · 15 networks · one API
SendFlow is the publishing API, and the app on top of it, for fifteen social networks. It refreshes tokens before they expire, retries without double-posting, and hands back a receipt from every network you post to.
Request
{
"content": "Spring drop is live →",
"publishNow": true,
"platforms": [
{ "platform": "twitter", … },
{ "platform": "linkedin", … },
{ "platform": "instagram", … },
{ "platform": "threads", … },
{ "platform": "youtube", … },
{ "platform": "telegram", … }
]
}Idempotency-Key: 7f3c…e19a
Reliability
Access tokens are refreshed before they expire. If a network revokes access, the account is marked needs_reconnect and a webhook tells you, instead of tomorrow's post failing quietly.
Send the same Idempotency-Key twice and you get the original post back. The worker claims each due post atomically, so more replicas add throughput, not duplicates.
Every post returns a result per network, so a partial failure is visible. Webhooks are signed over timestamp and body, retried with backoff, and kept in a delivery history.
Channels
Every network has its own limits. The composer checks them as you type, against the same spec the API validates with, so a post is fixed before a network can refuse it.
No credentials for a network yet? It runs against a test stub, and every test account is hatched like this, so a test is never mistaken for a real post.
App and API
The app holds no data of its own: every screen runs on the same public API your code calls. Click it in the app today, automate it tomorrow.
Spring drop is live: 40 new pieces, made in small batches. First come, first served → acme.studio/spring
curl -X POST https://social.acme.dev/v1/posts \ -H "Authorization: Bearer $SOCAPI_KEY" \ -H "Idempotency-Key: 7f3c…e19a" \ -d '{ "content": "Spring drop is live: 40 new…", "scheduledFor": "2026-11-04T09:00:00", "timezone": "Europe/Berlin", "platforms": [ { "platform": "twitter", "accountId": "acc_7Kd2p" }, { "platform": "linkedin", "accountId": "acc_Q1muv" }, { "platform": "instagram", "accountId": "acc_m3Rx0" } ] }'
Self-host
There is no hosted tier to sign up for. API keys, provider credentials, the database and uploaded media all stay in your deployment.
$ docker compose up # Postgres, migrations, the API, a separate # publisher worker and the app. Health and # readiness probes and JSON logs included.A Render blueprint ships too. Locally it is one script against SQLite.
Point an agent at the machine-readable docs and it can connect accounts and post, with idempotency keys keeping its retries safe.
Start against test accounts on your laptop. Add each network's credentials when you are ready to go live.