Skip to main content
POST
Create a post

Authorizations

Authorization
string
header
required

Your organization's API key, from Settings → MCP. Authorization: Bearer crl_sk_live_…

Body

application/json
account_id
string<uuid>
required
asset_ids
string<uuid>[]
required

Media, in post order.

Required array length: 1 - 10 elements
caption
string
hashtags
string[]
title
string
channels
enum<string>[]

Defaults to the creator's connected channels.

Available options:
IG,
TikTok,
YouTube,
Telegram
scheduled_for
string

Target time as "HH:mm".

format
enum<string>

Declare the format instead of deriving it from the assets.

Available options:
photo,
video,
carousel
timezone
string

IANA zone the schedule is read in, e.g. "Europe/Istanbul".

draft
boolean

Hand the post over as a draft the creator finishes in the platform's own app (TikTok's Creator Inbox) instead of publishing it live. EVERY targeted channel must support drafts, so a mixed selection is a 400. Orthogonal to timing, and cannot be combined with physical_device.

made_with_ai
boolean

AI-disclosure flag, sent to every targeted channel that has one: TikTok's videoMadeWithAi and YouTube's containsSyntheticMedia.

physical_device
boolean

Post from the creator's bound physical phone, alongside the channels or instead of them. Needs the workspace's physical-device feature flag AND a creator with a device bound to them; missing either is a 400 on physical_device. Pass it with an EXPLICIT channels: [] for a device-only post (omitting channels still means every connected channel).

auto_add_music
boolean

TikTok photo carousels: let TikTok add a soundtrack. On by default.

photo_cover_index
integer

TikTok photo carousels: which image is the cover, 0-based into asset_ids.

Required range: x >= 0
platform_settings
object

Per-platform overrides, keyed by a channel the post actually targets. Every channel takes caption and scheduled_for; YouTube also takes title and visibility. A key naming an untargeted channel, or a setting the platform does not take, is a 400 rather than a value quietly dropped on the way to the platform.

Response

The post, awaiting review.

object
enum<string>
required
Available options:
clip
id
string<uuid>
required
status
enum<string>
required

draft_sent is a post handed to the creator's app inbox as a draft. It is terminal for us: we never learn whether the creator posted it, so it never becomes published.

Available options:
generating,
pending_review,
approved,
scheduled,
published,
draft_sent,
failed,
rejected
asset_ids
string<uuid>[]
required
title
string
format
enum<string>
Available options:
photo,
video,
carousel
ratio
string
caption
string
hashtags
string[]
channels
string[]
scheduled_for
string
timezone
string
draft
boolean

Present only when the post is handed over as a draft.

made_with_ai
boolean

The AI-disclosure flag the post carries.

physical_device
boolean

Present only when the post goes out from the creator's bound physical phone. A post with no channels goes there alone.

device_post_id
string

The phone hand-off's id, set once the device destination accepted the post.

auto_add_music
boolean
photo_cover_index
integer
platform_settings
object

Per-platform overrides, keyed by a channel the post actually targets. Every channel takes caption and scheduled_for; YouTube also takes title and visibility. A key naming an untargeted channel, or a setting the platform does not take, is a 400 rather than a value quietly dropped on the way to the platform.

published_at
string
created_at
number
duration_sec
number
account_id
string<uuid>
error
string
channel_posts
object[]

Per-platform publish state, filled in as each platform confirms.