Create post
create_postCreates a single-image or video post as a draft (the default) or scheduled. A scheduled post is published to the real social accounts automatically at its time — ask the user before scheduling, then pass confirm: true. Pass the time as localTime with timeZone (Simplo resolves the offset), or as scheduledAt with its offset. The time must be in the future and on the hour (Simplo publishes once an hour, on the hour). A draft with a time is placed on that day in the plan (draft_scheduled) and does not send by itself. For a video post pass videoUrl (a public MP4 or MOV link, up to 100 MB) instead of imageUrl: Simplo copies it to its own hosting. The first frame is the cover (the picture Instagram shows on the profile grid); if the video starts on an empty or animating frame, pass coverAt with the second that shows what the post is about. For a video or picture that is a file rather than a public URL (one you rendered, or one the user has on their device), call create_upload_link, have the file sent to it, and pass its uploadId here instead of imageUrl or videoUrl. A video goes to Instagram (as a Reel), Facebook and TikTok, not to X. possibleDuplicateOf in the answer names another planned post within 14 days that opens the same way: ask the user whether both should stay.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | draft | |
| caption | Yes | Full caption, including hashtags | |
| confirm | No | Must be true to schedule — confirms the user approved auto-publishing | |
| coverAt | No | Video posts only: the second the cover is taken from (0 to under the video's length, hundredths). Without it the cover is the first frame | |
| 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: the post's video or picture; not together with imageUrl or videoUrl | |
| videoUrl | No | A public video URL (MP4 or MOV) for a video post; not together with imageUrl | |
| 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 | Yes | ||
| 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 | |
| scheduledAt | No | ISO 8601 time with offset, on the hour (e.g. 12:00, never 11:45), in the future; scheduling needs it or localTime. 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 | |
| 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 |