Create a post
Creates a new post — either a draft you’ll schedule later or one that’s already scheduled to go out at a specific time — and queues it up for every account you list.
Send content (the caption shared across every platform) and a platforms array of one entry per account you want to post to. Each entry can override the caption or attach platform-specific settings via platformOptions.
If you include scheduledFor, the post is created as scheduled and Postbreeze queues it up to publish at that time. Leave it out and the post is saved as a draft instead.
Postbreeze figures out which workspace the post belongs to from the first account you list, so you don’t need to pass a workspaceId.
Only workspace owners, admins, and editors can create posts.
Authorizations
Your Postbreeze API key
Body
One entry per platform to publish to. Order is preserved in the UI.
[
{
"accountId": "soc_01HZW2K9R5T8V3N7M4P0J1Q6BD",
"platformOptions": { "platform": "INSTAGRAM", "kind": "FEED" }
}
]Default caption applied to every platform unless overridden via platforms[].captionOverride.
10000"Just shipped a new feature 🚀"
ISO-8601 publish time. Post is created as SCHEDULED and a Temporal workflow is started. Omit for a draft.
"2026-06-15T09:00:00.000Z"
ISO-8601 time to pin the post on the calendar without actually scheduling it (status stays DRAFT). Ignored when scheduledFor is set.
IANA timezone the user composed in (e.g. Europe/Stockholm). Used to render scheduledFor correctly in the UI; not used by the publisher.
Media to ingest by URL. The server fetches each URL (SSRF-guarded) and stores it in your media library. Resulting MediaAsset ids are prepended to mediaIds.
IDs of media already in your library (returned from POST /media/presign or POST /media/from-url).
Per-asset alt-text overrides keyed by MediaAsset.id. Falls back to MediaAsset.altText when an entry is absent.
Response
The newly created post.
Prefixed cuid identifier.
Workspace this post belongs to.
User id of the author.
Aggregate publish state. Derived from per-target statuses (PARTIALLY_PUBLISHED when some succeed and some fail).
DRAFT, NEEDS_APPROVAL, SCHEDULED, PUBLISHING, PARTIALLY_PUBLISHED, PUBLISHED, FAILED, CANCELED Default caption applied to every target unless overridden via targets[].captionOverride.
ISO-8601 publish time. Doubles as the calendar pin for drafts (set via draftScheduledAt).
IANA timezone the post was composed in. Cosmetic — used by the UI.
Temporal workflow id driving this post's publish, when scheduled. Null on drafts and after cancellation.
Workflow id staged during the schedule transaction. Visible while a Temporal start is in flight; cleared on commit.
User id of the approver. Set when an NEEDS_APPROVAL post is approved.
When the post was approved, if applicable.
True when the post was authored by an API-key or OAuth request. Cookie-session dashboard posts are false.
True when the request used the flat platforms[] body shape. False for the nested targets[] shape and dashboard posts.
Soft-delete timestamp. Listings and GET /posts/:id exclude rows where this is non-null.
When the post was created.
When the post was last modified.
One fan-out target per connected account this post publishes to.
Library media attached to the post, ordered by order. Per-target overrides on targets[].mediaIds win over this list.