Create post
Creates one post on one social account.
status: draft(default) saves a draft.status: scheduledwithscheduled_atschedules it at that time; withqueue(nextortop) it takes a slot of the channel’s posting schedule; withqueue_slotit takes that exact free slot (fromGET /channels/{account}/queue/slots).status: publishingpublishes it now.
Omitted content_type is chosen like the app does: on Pinterest a video makes pinterest_video_pin and several images pinterest_carousel, on TikTok images only make tiktok_photo, every other network takes its default format.
To schedule or publish, the post needs its network’s required settings in meta (see PlatformMeta). Sending platforms is refused with 422; validation errors name the field directly (meta.board_id, content_type). API keys belong to workspace admins, who publish directly, so a post created through the API is never stored as pending_approval.
To post the same text on several channels at once, use POST /posts/batch.
Authorizations
Workspace API key from Settings → API Keys.
Body
Social account of this workspace. A post has exactly one; use POST /posts/batch for several.
Post text, at most 25000 characters. When status is scheduled or publishing it must also fit each account's limit (max_content_length of the social account, for example 280 on X or 25000 for X accounts with long posts, 300 on Bluesky, 500 on Mastodon including the content warning), measured on the text the network receives. A scheduled or published post needs text or media.
25000Media in order. Each item is one of upload_token, url or id. Types the channel does not accept are refused.
draft keeps the post editable. scheduled schedules it at scheduled_at or in the channel queue (queue). publishing publishes it now.
draft, scheduled, publishing Format; must belong to the account's network. Omitted, it is chosen from the media.
instagram_feed, instagram_reel, instagram_story, linkedin_post, linkedin_page_post, facebook_post, facebook_reel, facebook_story, tiktok_video, tiktok_photo, youtube_short, x_post, x_poll, threads_post, threads_ghost_post, pinterest_pin, pinterest_video_pin, pinterest_carousel, bluesky_post, mastodon_post, telegram_post, discord_message, google_business_post Per-network settings of one destination. Pick the shape of the destination's network. Keys without a rule are dropped. Every known key is validated whatever the network, but only the keys of the destination's network are used when publishing. On update, meta is merged with the stored settings: send null for a key to clear it (string, list and object settings; boolean settings cannot be cleared, so send true or false); thread_replies replaces the whole list; poll is merged key by key, its options replaced as a list. Required to schedule or publish: TikTok privacy_level, Pinterest board_id, Discord channel_id, Google Business event on EVENT/OFFER, YouTube a title (title or the first line of the text), X poll.options (2 or more), poll.duration_minutes and a question (the post content) on x_poll. GET /content-types lists the unconditional ones (TikTok, Pinterest, Discord) per network as required_meta.
- X
- Bluesky
- Mastodon
- TikTok
- Pinterest
- Discord
- YouTube
- Instagram
- Threads
- Facebook
- LinkedIn
- Google Business Profile
- Telegram
When to publish, for status: scheduled. Any date string; must be in the future and before 2038-01-19. Cannot be combined with queue. Required with status: scheduled unless queue or queue_slot is sent.
Queue position, only with status: scheduled. next takes the channel's first free slot; top takes its first slot and moves the queued posts behind it to the next gap. The channel must have posting times (has_posting_schedule). Cannot be combined with scheduled_at.
next, top, null Instant of one free slot from GET /channels/{account}/queue/slots, only with status: scheduled. Stores the post as a queue post in that slot; refused when the slot is taken or held by a pending approval request. Before 2038-01-19. Cannot be combined with queue. Takes the place of scheduled_at when both are sent.
Labels of this workspace.
Response
The created post.
A post on one channel. Posts created together from several channels are independent posts that share a post_group_id.
Shared by the posts created in one batch.
A workspace member. Only the id and name are exposed.
Post text, stored as sent (posts written in the app hold the editor's HTML).
Lifecycle of the post in PostClean. pending_approval is a post a member who needs approval asked to schedule or publish. The outcome on the network is publish_status.
draft, pending_approval, scheduled, publishing, published, failed queue: the post holds a slot of the channel's posting schedule. custom: it is scheduled at its own time.
queue, custom, null UTC, format Y-m-d H:i:s.
UTC, format Y-m-d H:i:s.
Who asked for approval (not always the author).
UTC, format Y-m-d H:i:s.
A workspace member. Only the id and name are exposed.
UTC, format Y-m-d H:i:s.
Repeat rule, or null.
network for posts imported from the network (published outside PostClean).
trypost, network Publishing state on the network. pending until the post is sent; retrying waits for a retry after a network limit or a temporary network problem (such as a LinkedIn post not yet ready for its comment); pending_review and rejected come from networks that review posts (Google Business).
pending, publishing, retrying, pending_review, published, failed, rejected Network of the post's channel.
linkedin, linkedin-page, x, tiktok, youtube, facebook, instagram, instagram-facebook, threads, pinterest, bluesky, mastodon, telegram, discord, google_business Post format on one network. It must belong to the destination's network. GET /content-types lists the formats of each network with their media rules. Instagram and Facebook stories publish no text. An X poll (x_poll) takes no media; its choices and length are in meta.poll.
instagram_feed, instagram_reel, instagram_story, linkedin_post, linkedin_page_post, facebook_post, facebook_reel, facebook_story, tiktok_video, tiktok_photo, youtube_short, x_post, x_poll, threads_post, threads_ghost_post, pinterest_pin, pinterest_video_pin, pinterest_carousel, bluesky_post, mastodon_post, telegram_post, discord_message, google_business_post Stored per-network settings (see PlatformMeta). Empty settings may serialize as an empty array.
Link to the published post on the network.
Why publishing failed, when it did.
Account name, kept even after the account is disconnected.
The account, or null once it was removed (the display_* fields keep its name).
UTC, format Y-m-d H:i:s.
UTC, format Y-m-d H:i:s.