Content types
The content_type field selects the rendering pipeline. Set it once on create — PATCH does not accept content_type, so it cannot be changed afterwards. Create a new object instead.
If you omit it on create, it defaults to single_image.
Reference
Section titled “Reference”content_type | Description | Key fields |
|---|---|---|
text_only | Plain text post with no media. | caption |
single_image | One image with a caption. Default. | caption, media_urls[0] |
slideshow | Multi-slide image post (TikTok/Instagram slides). | caption, media_urls[] |
carousel | Instagram sidecar carousel, up to 10 images. | caption, media_urls[] |
reel | Instagram Reels or TikTok short-form vertical video. | caption, media_urls[0], aspect_ratio |
talking_head | Rendered talking-head video with a subtitle overlay. | caption, media_urls[0] |
video_hook | Short vertical video leading with a large hook overlay. | caption, media_urls[0] |
video_hook_demo | Hook overlay followed by a product demo segment. | caption, media_urls[] |
Those eight values are the entire enum. Anything else fails validation with 400 invalid_body.
There is no photo type — use single_image. There is no generic video type — pick the specific format (reel, talking_head, video_hook, video_hook_demo). There is no story type; stories are not publishable through the API.
Copy is always caption
Section titled “Copy is always caption”Every type reads its copy from caption. There is no per-type text field — no body_text, no hook_text, no slide_copy. The hook line for video_hook and video_hook_demo is derived by the render pipeline from the caption and the template, not passed as a separate argument.
Choosing between similar types
Section titled “Choosing between similar types”reelvstalking_headvsvideo_hook: all three are vertical short-form.reelis a straight video post.talking_headis oriented around a speaker with subtitles burned in.video_hookforegrounds a hook line for the first two to three seconds before revealing the rest.video_hookvsvideo_hook_demo:video_hook_demofollows the hook with a screen-recorded product segment, so it expects more than one entry inmedia_urls.slideshowvscarousel:slideshowis the TikTok/Instagram-slides style with per-slide text baked into each image.carouselis an Instagram sidecar where the same caption applies to all slides.
Platform compatibility is not validated
Section titled “Platform compatibility is not validated”The API does not reject mismatched type/platform combinations at create time. target_platforms is accepted as a free-form array of up to 10 strings, and creating a text_only post targeting instagram returns 201 exactly like any other create.
Incompatibilities surface later, when the publish cron calls the platform’s API and that leg fails. Watch for content.publish_failed, whose per-platform error field carries the platform’s own message.
See Platforms for which combinations actually work in practice.