POST /v1/posts with targets: [...]. Per-platform quirks (caps, mime types, OAuth shapes) live in preflight rules so failures surface locally with a rule id instead of an opaque upstream error.
Bluesky, X, and Pinterest are live today. The remaining platforms (Instagram, LinkedIn, Facebook, Threads) are gated on their developer-portal reviews and turn on as approvals clear. The API surface is identical regardless of which platforms are approved for your org, same
POST /v1/posts, same error envelope. Live status is also queryable at GET /v1/platform-versions.Twitter / X
v2 API · OAuth 2.0 PKCE · 4-up images, video, reply chains, quote tweets, Premium 25k chars.
Meta Graph · Standalone Instagram Login · Photos, Reels, carousels (≤10) for Business/Creator.
Versioned REST · Personal posting in v1; org posting needs Marketing Developer Platform.
Facebook Pages
Meta Graph · Facebook Login for Business · Page text, photos, videos.
Threads
Threads Graph · Standalone OAuth at threads.net · Text + carousel (2–20, mixed image/video).
v5 API · OAuth 2.0 · Image + video pins · Cover image required for video.
TikTok — in review
Content Posting API · OAuth 2.0 PKCE · Upload-inbox path. Pending TikTok app review — connect is gated until approval lands.
Bluesky
AT Proto · App-password connect (no OAuth) · Text + media + first comment.
What’s the same everywhere
- One request shape.
POST /v1/postswithtargets: [{ accountId, ... }], optionalmedia, optionalscheduledAt. - One error envelope.
code+rule+platformResponse+remediation+docUrl+ruleUrl— no per-platformbody: {}surprises. - Idempotency keys. Every write accepts
Idempotency-Key; replays return the original response. - Preflight, not postflight. Documented platform rules run locally before the upstream call.
- Multi-target fan-out. One request can publish to N targets in parallel with per-target overrides.
What’s different per platform
| concern | varies by |
|---|---|
| Connect flow | OAuth shape (Meta Login for Business, OAuth 2.0 PKCE, etc.); Bluesky uses app passwords |
| Token lifetime | Bluesky: minutes · X: ~2h · Threads/IG/FB: ~60d · LinkedIn: 60d (no refresh) · Pinterest: 30d |
| Media constraints | mime allowlist, size cap, count cap, mixed image+video acceptance |
| Text caps | Twitter 280 · Bluesky 300 · Threads 500 · Instagram 2200 · LinkedIn 3000 · Facebook 63206 |
| Required body shape | Instagram requires media; Facebook accepts text-only; Pinterest needs board id |
| Scope set | minimum scope to publish + optional extended scopes for read access |
Out of v1
Deliberately cut:- Reddit, Telegram, Discord, Snapchat, Google Business, WhatsApp — long-tail platforms with fewer than 1k accounts each in the dataset that drove platform priority decisions.
in review until the upload-inbox track clears.
Build order
Platform priority was decided from the 90-day post-volume / failure-rate corpus (see PRODUCT.md for the data):- Bluesky — first to ship. Simple AT Proto, no app review, minutes-long JWT lifecycle is a good forcing function for the token-refresh architecture.
- LinkedIn — the wedge platform. #1 complaint volume in the 150-citation research corpus, cleanest API of the major networks, no brutal approval gauntlet.
- Twitter / X — table-stakes for the automation-builder ICP.
- Instagram + Facebook + Threads — Meta Graph trio, built together because they share auth (well, Threads is its own).
- Pinterest — cheapest integration, fastest-growing network in the dataset (+1369% over 90 days).

