POST /api/v1/posts) —
what changes is the per-platform options blob you pass on each target.
Feed, Reels, carousels. Business + Creator accounts only.
Feed, Photo, Photo Carousel, Video, Reels. Page accounts only.
TikTok
Video uploads + photo carousels with branded-content disclosure.
X (Twitter)
Tweets, threads (up to 25), replies. Pay-Per-Use billing.
Personal + Company pages. Photo gallery + PDF carousel.
YouTube
Long-form + Shorts. First-comment via Community surface.
Single + carousel pins. Board, title, link per pin.
Threads
Text, image, video, mixed-media carousels (up to 20 items).
Capability matrix
| Platform | Post types | First comment | Carousel | Alt text | Analytics |
|---|---|---|---|---|---|
| Feed, Reel | ✅ | 2–10 (mixed) | ❌ Not in API | ✅ | |
| Feed, Photo, Carousel, Video, Reel | ✅ | 2–10 (photo only) | ❌ Not in API | ✅ | |
| TikTok | Video, Photo Carousel | ❌ Not in API | 1–35 (photo only) | ❌ Not in API | ✅ |
| X | Tweet, Thread, Reply | ✅ | 1–4 (photos only) | ✅ | ✅ |
| Personal, Company, PDF Carousel | ✅ | 2–20 (photo or PDF) | ✅ | ⚠️ MDP required | |
| YouTube | Video upload | ✅ | ❌ | ❌ | ✅ |
| Pin, Carousel pin | ❌ Not in API | 2–5 (photo only) | ❌ | ✅ | |
| Threads | Text, Image, Video, Carousel | ✅ | 2–20 (mixed) | ✅ | ✅ |
The single API surface
Every platform reaches the same endpoint with the same payload shape. Workspace is inferred from the API key — you don’t pass it.platforms or targets — sending both
returns 400 MUST_SPECIFY_EXACTLY_ONE.
See the API reference for the full schema,
or pick a platform on the left for the per-platform options you’d pass.
A note on media
Three precedence rules apply for what media a target actually publishes:- If the target has its own non-empty
mediaIds→ use those. - Otherwise → use the post-level
mediaIds(after URL ingest). - If both are empty → text-only post (only some platforms accept this — Threads ✅, X ✅, Facebook ✅, LinkedIn ✅; the others reject).
Provider behavior + retry policy
Postbreeze wraps every publish in a Temporal workflow that retries up to 5 attempts with exponential backoff (initial 10s, max 15 min, coefficient 2). Non-retryable validation errors (e.g. caption too long) terminate immediately and surface asPostStatus.FAILED.
Network blips, rate limits, and provider 5xx’s get retried
automatically.
The full retry timeline:
- Attempt 1: immediate
- Attempt 2: ~10s later
- Attempt 3: ~30s later
- Attempt 4: ~5 min later
- Attempt 5: ~15 min later
FAILED and you can retry
manually via POST /api/v1/posts/:id/retry.
See also
- Authentication — how API keys work + workspace boundaries
- Concepts → Scheduling — what
scheduledForreally means + timezone behavior - Concepts → Rate limits — global rate limits across all platforms
- Concepts → Errors — error envelope + categories
- MCP — let Claude / Cursor schedule posts directly