update_post
Change a scheduled or draft post. DESTRUCTIVE WRITE: show the user a side-by-side of CURRENT vs PROPOSED and pass confirm=true only after explicit confirmation. Edit (default): caption, media, schedule, post_type, settings, account_id, or thread_posts; cannot edit published or currently publishing posts. account_id moves it to another account in the same workspace and brand (the platform follows). thread_posts replaces an X or Threads reply chain (2+ non-empty parts; the first is the caption). If a client already approved the post, a caption edit reopens caption approval, a media or thumbnail edit reopens asset approval, and a reschedule, account change, thread edit, or settings change reopens both. status (scheduled, paused, or draft, with scheduled_at when scheduling a draft): pause, resume, or move back to draft; send it on its own. release_id (with optional group_id): set or repair external release/group IDs; send it on its own. approval_action (request, approve, request_changes, or reject): change client approval. Owner or admin only; the actor is the API key user, never a brand guest. request emails the brand reviewers; the others are team-side decisions. request_changes needs approval_note. Optional approval_axis is asset or caption; omit it for both. Send approval_action on its own. Pass the Version from get_post as expected_version and send only changed fields; a stale edit is refused.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Change the post status instead of editing it. Send with post_id (and scheduled_at when scheduling a draft) only. | |
| caption | No | ||
| confirm | Yes | Must be true after the user explicitly confirms the proposed change. | |
| post_id | Yes | ||
| group_id | No | With release_id only: an external group/campaign ID. | |
| metadata | No | ||
| settings | No | Post settings. Instagram and X Article fields work here or in platform_settings: first_comment, user_tags, collaborators, is_trial_reel, caption_addon (poll or comment prompt; Facebook Login only, not Stories), article ({ title, cover }). Call list_platforms with view=schema and account_id for fields. | |
| media_url | No | Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. | |
| post_type | No | Optional post type. Omit for auto-detection from media. | |
| account_id | No | Move this unpublished post to another account you can use in the same workspace. The account must belong to the post brand. The platform follows the new account. | |
| media_urls | No | Media URLs, handled like media_url. | |
| release_id | No | Set an external release ID instead of editing the post. Send with post_id and optional group_id only. | |
| scheduled_at | No | ISO 8601 UTC. With status, required when scheduling a draft. | |
| thread_posts | No | Replace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption. | |
| approval_axis | No | With approval_action approve, request_changes, or reject: which axis to decide. Omit for both. Not allowed with request. | |
| approval_note | No | Note stored with the approval change. Required for request_changes. | |
| reel_cover_url | No | ||
| approval_action | No | Change client approval instead of editing the post. Send on its own. | |
| expected_version | No | ||
| platform_settings | No | Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples. | |
| reel_cover_method | No | ||
| reel_thumb_offset | No |