{
"object": "clip",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "generating",
"asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"title": "<string>",
"format": "photo",
"ratio": "<string>",
"caption": "<string>",
"hashtags": [
"<string>"
],
"channels": [
"<string>"
],
"scheduled_for": "<string>",
"timezone": "<string>",
"draft": true,
"made_with_ai": true,
"physical_device": true,
"device_post_id": "<string>",
"auto_add_music": true,
"photo_cover_index": 123,
"platform_settings": {},
"published_at": "<string>",
"created_at": 123,
"duration_sec": 123,
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"channel_posts": [
{
"platform": "<string>",
"status": "<string>",
"url": "<string>",
"error": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "A clip can only be published from pending_review (this one is \"published\").",
"param": "id"
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Missing or invalid API key."
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the `write` scope to run generations."
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "not_found_error",
"code": "resource_missing",
"message": "No such generation."
},
"request_id": "req_8fQ2mRxK1pLd"
}Publish a post
This is the one endpoint that reaches a real audience. It moves the post
pending_review → scheduled — the only legal transition — and hands it to every
destination the post carries: the connected channels, plus the creator’s bound phone
when it was created with physical_device. published is written only after the
platform confirms, and a failed hand-off leaves the post scheduled and retryable
rather than falsely marked live.
Every call writes an audit entry naming the API key that triggered it.
{
"object": "clip",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "generating",
"asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"title": "<string>",
"format": "photo",
"ratio": "<string>",
"caption": "<string>",
"hashtags": [
"<string>"
],
"channels": [
"<string>"
],
"scheduled_for": "<string>",
"timezone": "<string>",
"draft": true,
"made_with_ai": true,
"physical_device": true,
"device_post_id": "<string>",
"auto_add_music": true,
"photo_cover_index": 123,
"platform_settings": {},
"published_at": "<string>",
"created_at": 123,
"duration_sec": 123,
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"channel_posts": [
{
"platform": "<string>",
"status": "<string>",
"url": "<string>",
"error": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "A clip can only be published from pending_review (this one is \"published\").",
"param": "id"
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Missing or invalid API key."
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the `write` scope to run generations."
},
"request_id": "req_8fQ2mRxK1pLd"
}{
"error": {
"type": "not_found_error",
"code": "resource_missing",
"message": "No such generation."
},
"request_id": "req_8fQ2mRxK1pLd"
}Authorizations
Your organization's API key, from Settings → MCP. Authorization: Bearer crl_sk_live_…
Path Parameters
Body
Response
The post, now scheduled and handed off.
clip 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.
generating, pending_review, approved, scheduled, published, draft_sent, failed, rejected photo, video, carousel Present only when the post is handed over as a draft.
The AI-disclosure flag the post carries.
Present only when the post goes out from the creator's bound physical phone. A post with no channels goes there alone.
The phone hand-off's id, set once the device destination accepted the post.
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.
Show child attributes
Show child attributes
Per-platform publish state, filled in as each platform confirms.
Show child attributes
Show child attributes