Delete a post (`takedown=true` also removes it from the platforms)
With `?takedown=true` the provider-side copies are best-effort deleted first — a provider with no delete API (see `capabilities.takedown`) keeps its copy live. The local record, its history, and its metrics are removed either way.
/posts/{id}With ?takedown=true the provider-side copies are best-effort deleted first — a provider with no delete API (see capabilities.takedown) keeps its copy live. The local record, its history, and its metrics are removed either way.
Authorization
bearerAuth In: header
Path Parameters
Query Parameters
Organization slug (OAuth actors with several orgs); API keys imply theirs.
Response Body
application/json
application/json
curl -X DELETE "https://example.com/posts/string"{ "error": { "code": "string", "message": "string", "reason": "string", "index": 0, "request_id": "string" }}{ "error": { "code": "string", "message": "string", "reason": "string", "index": 0, "request_id": "string" }}Change anything — content, channels, media, labels, campaign, or the schedule PATCH
Re-validates and returns the same shape as create. A `scheduled_at` time (re)books the post, `"now"` publishes it, `null` returns it to draft. `per_channel` overrides one channel's copy, format, or options without touching the others — its `content` takes markdown, so `per_channel: { "x": { "content": "shorter text" } }` tailors one channel in a line. `per_channel: { "x": null }` resets that channel to the adapted content. Optimistic concurrency via `expected_updated_at`.
Publish an existing draft now POST
Its own verb because it is irreversible and carries its own idempotency key (`Idempotency-Key` header). Fans out to every channel immediately; the response's channel entries carry the per-destination results as the worker fills them in — poll `GET /posts/{id}` for the outcome. A post that is not `ready` is refused with the post itself under `error.post`. Guard against publishing someone else's concurrent edit with `expected_updated_at` (or the `If-Match` header holding the `ETag` your read returned) — a post that moved since is refused 409.