Update post
Updates a post. Only the fields you send change. The social account is fixed (social_account_id is refused), and so is platforms.
content_type and meta are top-level fields. 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. Validation errors name the field directly (meta.privacy_level, content_type). media replaces the post’s media; label_ids replaces its labels.
status: publishing publishes the post now; scheduled schedules it at scheduled_at, in the queue (queue), or keeps its future scheduled_at; draft unschedules it (it is no longer published; the last scheduled_at stays on the draft). When scheduling or publishing, the content type must fit the media and the required settings must be present.
Posts that are publishing, published or failed cannot be edited: the request returns 422 with This post has already been processed and cannot be re-published. Duplicate it to try again.
On this endpoint an invalid body may answer 422 before the 404 check of a post of another workspace.
Authorizations
Workspace API key from Settings → API Keys.
Path Parameters
Post id. A post of another workspace returns 404.
Body
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.
25000Replaces the post's media. Omit it to keep the current media. Media 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. Omit it to keep the current status.
draft, scheduled, publishing New format for the post's channel. Omitted, the stored format is kept, except on Pinterest and TikTok where new media decides it as on create.
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 Settings of the post's channel, merged with the stored ones.
- X
- Bluesky
- Mastodon
- TikTok
- Pinterest
- Discord
- YouTube
- Instagram
- Threads
- Facebook
- LinkedIn
- Google Business Profile
- Telegram
With status: scheduled: required unless queue is sent or the post already has a future time; must be in the future and before 2038-01-19. Cannot be combined with queue.
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. Refused on posts with several destinations.
next, top, null Replaces the post's labels.
Response
The updated 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.