Edit a scheduled post (caption, first comments, platforms)
update_scheduled_post[PUBLISHES to social accounts · publish scope] CHANGES WHAT A SCHEDULED POST WILL PUBLISH on real accounts, keeping its slot, accounts, options, labels and draft. firstComment sets per-platform first comments (linkedin, facebook, instagram, threads, youtube; null removes; X/Bluesky have none); text / platformText change the caption; applyAutoFirstComment: true adds the brand's auto first comment where none is set; removePlatforms drops platforms from this booking (e.g. a duplicate TikTok); labels replaces the post's own labels (e.g. ["repost:evergreen"]; alone it never touches the booking, status "labeled"). Updated in place when the platform scheduler allows it, otherwise re-booked at the same slot (status "rebooked", new postId). Refused within 5 minutes of the slot. Repeating the same edit returns "unchanged". Needs the publish scope (or admin) and the Pro plan or higher; each publish counts against the plan's direct posts for the month. Confirm the new text with the user first.
(Wraps PATCH /api/v2/posts/{id}.)
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"id": "<id>"
},
"name": "update_scheduled_post"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The post: `convexPostId` from POST /api/v2/publish, or `posts[].id` from GET /api/v2/content/{id}. | |
| text | No | The caption (every platform without its own). | |
| labels | No | Sets this post's own labels ([] or null clears; labelMode add appends), e.g. ["repost:evergreen"]. flayr metadata: sent alone it never touches the booking (status "labeled") and works on posted posts too. With booking edits, metadata is saved after a successful edit. Normalized "key:value" labels (keys and values are lower-cased, spaces become "-"). Linked keys: campaign:<media campaign id>, experiment:<experiment id> (+ variant:<name> or the experiment's compareKey), type:<post type> (short, long-form, carousel, image, text, reel, story, poem, timelapse…). Free keys work too: cut:opus, lane:tech, parent:pantheon-part-1, ab:<pair id> (an A/B pair). Labels are copied onto every post made from the draft, and compared in GET /api/v2/analytics/experiments. | |
| labelMode | No | Default set. add atomically appends labels to the post and matching instances; other instances stay unchanged. | |
| scheduledAt | No | Move the post to this time (ISO 8601 with Z or an offset, e.g. "2026-11-19T15:00:00Z"); more than 5 minutes in the future. Send it on its own: no other field with it. | |
| firstComment | No | The first comment the post publishes, per platform: a string sets it, null or "" removes it; platforms not named keep theirs. X and Bluesky have no first comment at the platform scheduler and are refused (422). A Facebook / Instagram Story never gets one. flayr's own "Posted with flayr.social" line on a comment is kept. Also saved on the post's draft, so a later edit never puts the old one back. | |
| platformText | No | Per-platform captions, merged into the draft's: { "linkedin": "…" } sets one, null / "" clears it; null clears them all. | |
| instanceLabels | No | Internal labels per platform/account instance. An array of {platform, accountId?, labels}; accountId is the Zernio connected account id. Omit accountId when unknown. instanceKey is derived as canonical platform + ":account:" + URL-encoded account id, or ":pending" when unknown (twitter canonicalizes to x). Replaces the instance set when editing; [] clears it. Never published. | |
| removePlatforms | No | Platform ids to drop from this booking (e.g. a duplicate ["tiktok"]). Each must be on the post; dropping every platform is refused (use DELETE). The booking is rebuilt from the draft. | |
| applyAutoFirstComment | No | Add the brand's auto first comment where the post has none. |