Skip to content

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