Edit post
update_postEdits an existing post's caption, picture or platforms; pass only what changes. scheduledAt places a draft on a day in the plan (draft_scheduled) without scheduling it; a scheduled post's time is changed with schedule_post, and unschedule_post takes it back to a draft. A post that already went out, or is going out right now, cannot be edited. Editing a scheduled post changes what will be published at its time, so ask the user first and pass confirm: true. A carousel's pictures are its slides and cannot be replaced here, and a carousel posts to Instagram only. A video post's picture is its cover; replace its video with videoUrl, or pass only coverAt to take the cover from another second: the cover is the picture Instagram shows on the profile grid, so a video that opens on an empty or animating frame needs the second that shows what the post is about. A local file goes through create_upload_link and is passed as uploadId. A video post cannot go to X. Adding TikTok to a video post without passing a caption rewrites its caption for TikTok (short, its own hashtags; COSTS one credit); pass caption to keep your own.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | ||
| caption | No | Full new caption, including hashtags | |
| confirm | No | Must be true to edit a scheduled post — confirms the user approved the new content going out | |
| coverAt | No | Video posts only: the second the cover is taken from (0 to under the video's length, hundredths); changes only the cover | |
| imageUrl | No | A hosted image URL, e.g. from generate_image | |
| timeZone | No | The user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for | |
| uploadId | No | From create_upload_link, once the file was sent: a new picture, or a video post's new video | |
| videoUrl | No | A public video URL (MP4 or MOV) to replace a video post's video | |
| localTime | No | The time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt | |
| platforms | No | ||
| projectId | Yes | Simplo project id (from list_projects) | |
| aiGenerated | No | Whether the post is AI-made (use it for AI-made video or voices): true shows it on TikTok with its "AI-generated content" label and marks a YouTube video as altered or synthetic content, false does neither. Omit to follow the defaults: on TikTok the brand's "Label TikTok posts as AI-generated" setting when on, else pictures are labelled and videos are not; on YouTube the brand's own synthetic content setting. get_post shows the TikTok result as tiktokAiLabel. null puts the post back on the default | |
| scheduledAt | No | Drafts only: ISO 8601 time with offset, the day the draft sits on in the plan. localTime with timeZone is safer | |
| youtubeTitle | No | Video posts going to YouTube only: the video's title on YouTube, at most 100 characters, no < or >. Without it the title is the caption's first line with its hashtags dropped, and the whole caption is the description either way. null goes back to the caption's first line | |
| tiktokSettings | No | TikTok accounts connected directly (not through Simplo's posting partner) need these on every post that goes to TikTok, or TikTok fails with "Choose who can see this TikTok post". Ask the user who can see it and whether comments are allowed; never choose for them. null clears them |