Appearance
Create post
Create and optionally publish a post. Immediate posts (publishNow: true) include platformPostUrl in the response. Content is optional when media is attached or all platforms have customContent. See each platform's schema for media constraints.
POST /v1/posts
Create and optionally publish a post. Immediate posts (publishNow: true) include platformPostUrl in the response. Content is optional when media is attached or all platforms have customContent. See each platform's schema for media constraints.
Request body
Content-Type: application/json
title(string)content(string) — Post caption/text. Optional when media is attached or all platforms have customContent. Required for text-only posts.mediaItems(array)platforms(array) — Target platforms and accounts for this post. Required for non-draft posts (returns 400 if empty). Drafts can omit platforms.scheduledFor(string)publishNow(boolean)isDraft(boolean) — When true, saves the post as a draft. When none of scheduledFor, publishNow, or queuedFromProfile are provided, the post defaults to draft automatically.timezone(string)tags(array) — Tags/keywords. YouTube constraints: each tag max 100 chars, combined max 500 chars, duplicates auto-removed.hashtags(array)mentions(array) — Stored for reference only. This field does NOT automatically create @mentions when publishing. For LinkedIn @mentions, use the /v1/accounts/{accountId}/linkedin-mentions endpoint to resolve profile UR...crosspostingEnabled(boolean)metadata(object)tiktokSettings($ref) — Root-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.facebookSettings($ref) — Root-level Facebook settings applied to all Facebook platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.recycling($ref)queuedFromProfile(string) — Profile ID to schedule via queue. When provided without scheduledFor, the post is auto-assigned to the next available slot. Do not call /v1/queue/next-slot and use that time in scheduledFor, as that b...queueId(string) — Specific queue ID to use when scheduling via queue. Only used when queuedFromProfile is also provided. If omitted, uses the profile's default queue.
Responses
201 — Post created
message(string)post($ref)
400 — Validation error
error(string)
401
403 — Forbidden
error(string)
409 — Duplicate content detected
error(string)details(object)
429 — Rate limit exceeded. Possible causes: API rate limit, velocity limit (15 posts/hour per account), account cooldown, or daily platform limits.
error(string)details(object) — Additional context about the rate limit