Skip to content
SendFlow

6 networks available now · one API

Post once. Know exactly where it landed.

Connect your accounts and publish across 6 social networks from one app or API. SendFlow refreshes tokens before they expire, retries without double-posting, and hands back a receipt from every network you post to.

Get startedRead the API docs
docker compose up
An example post sent to 5 networks: all 5 have published.
POST/v1/posts5 of 5 published

Request

{
  "content": "Spring drop is live →",
  "publishNow": true,
  "platforms": [
    { "platform": "twitter",    … },
    { "platform": "linkedin",   … },
    { "platform": "bluesky",    … },
    { "platform": "discord",    … },
    { "platform": "telegram",   … }
  ]
}

Idempotency-Key: 7f3c…e19a

  1. Twitter/X@acmePublished0.41 sx.com/acme/status/18…
  2. LinkedInAcme StudioPublished1.18 slinkedin.com/feed/update/…
  3. Bluesky@acme.bsky.socialPublished0.62 ssession refreshed first
  4. DiscordAcme / #announcementsPublished0.53 smessage delivered
  5. TelegramAcme NewsPublished0.37 st.me/acmenews/412
next · webhook post.published → hooks.acme.dev/socapiX-SocAPI-Signature: sha256=9c1f…

Reliability

The HTTP call is easy. Everything around it is the product.

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.

03:00:04 linkedinexpires in 10 min
03:00:05 refresh✓ stored encrypted

09:00:01 post_8Hq2Zt✓ published

Retries that never double-post.

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.

POST /v1/postskey 7f3c…e19a
✕ client timed outrequest had landed

POST /v1/postskey 7f3c…e19a
✓ 200post_8Hq2Zt · original

Failures you actually hear about.

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.

POST hooks.acme.dev/socapi
X-SocAPI-Eventpost.partial_failure
X-SocAPI-Signaturesha256=9c1f…

✓ 200 OK84 ms

Channels

Connect and publish today.

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.

  • Twitter/X280 · text
  • LinkedIn3,000 · text
  • Bluesky300 · text
  • Telegram4,096 · text
  • Discord2,000 · media optional
  • Snapchat250 · finish on phone

Choose a platform, connect your account, and create your first post. Snapchat prepares a share link for you to finish posting on your phone.

App and API

Your team uses the app. Your code uses the 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.

New post
To@acmeAcme Studio@acme.bsky.social

Spring drop is live: 40 new pieces, made in small batches. First come, first served → acme.studio/spring

Tue 4 Nov · 09:00Schedule
The same post, as a request
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": "bluesky",   "accountId": "acc_m3Rx0" }
    ]
  }'

Self-host

Your infrastructure. Your keys.

Prefer to run it yourself? API keys, provider credentials, the database and uploaded media all stay in your deployment.

  1. Browseryour team
  2. AppNext.js
  3. SendFlowFastAPI · /v1
  4. Postgresencrypted tokens
  5. Workerscheduler + webhooks
  6. 6 networksyour connected accounts
One command, production shape
$ 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.
Ready for agents

Point an agent at the machine-readable docs and it can connect accounts and post, with idempotency keys keeping its retries safe.

Send your first post today.

Connect your social accounts, create a post, and choose when it goes out.

Get started
docker compose up