Skip to main content
POST
Schedule or publish immediately to one or more connected accounts.

Before you post

  1. Use an API key for a workspace with an active Creator, Professional, or Business subscription.
  2. Call GET /accounts and pick account UUIDs.
  3. Check each account’s capabilities.supported_content_kinds and caption_limit.
  4. Build the payload below. Only include provider settings for platforms you are actually targeting.
Omit media or set it to null only when every selected account supports text_only.

Request body

caption
string
required
Shared caption text. Final length is checked per targeted account after lookup (hosted accounts: 500 chars max).
accounts
array
required
One to ten account objects: [{ "id": "<uuid-from-/accounts>" }].
media
object | null
Optional. video, slideshow, or null/omit for text-only posts.
scheduled_at
string
ISO 8601 datetime with timezone offset (for example 2026-05-21T15:00:00Z). Omit or send a time within 30 seconds of now for immediate publish (status: pending). For true scheduled posts, the time must be at least 2 minutes in the future.
external_id
string
Recommended idempotency key (max 128 chars). Same key + same payload replays the original post (200, duplicate: true). Same key + different payload returns 409 create_failed. If omitted, the API dedupes from a SHA-256 fingerprint of the request body instead; a conflicting replay also returns 409 create_failed.
music_url
string
TikTok-only. A TikTok post URL used to resolve the track. Rejected when any non-TikTok account is selected, including Instagram.

Provider settings

Use settings.<provider> for X, Instagram, Facebook, LinkedIn, Bluesky, and YouTube. For TikTok and Pinterest on create, use the top-level tiktok and pinterest objects — not settings.tiktok or settings.pinterest. Top-level fields run the full create-time validation (BYO-only TikTok, hosted TikTok rejection, MEDIA_UPLOAD rules, and field limits). Only send settings for providers present in your accounts list. Unknown settings keys return 422 invalid_payload.
capabilities.settings_schema from GET /accounts reflects the dashboard composer, not always the Partner API field names. Use the tables below when building create payloads.

YouTube — settings.youtube

Requires a video post to a YouTube account.

TikTok — top-level tiktok

Requires BYO TikTok accounts and media (video or slideshow). Hosted TikTok accounts cannot use TikTok-specific settings. For video posts, the merged publish text built from caption, tiktok.title, and tiktok.description must stay ≤ 2,200 characters combined.

Pinterest — top-level pinterest

Requires at least one Pinterest account and image media.

X — settings.x or settings.twitter

Instagram — settings.instagram or settings.instagram-standalone

Both keys map to the same stored settings. If both are sent, instagram-standalone wins.

Facebook — settings.facebook

LinkedIn — settings.linkedin or settings.linkedin-page

Both keys map to the same stored settings. If both are sent, linkedin-page wins.

Bluesky — settings.bluesky

No provider-specific fields. Send {} or omit.

Settings key reference

Limits (quick reference)

  • Video: MP4/MOV/M4V/AVI, under 100MB. Hosted accounts: 15–60s when duration is provided.
  • Non-premium X video: duration metadata required; max 140 seconds.
  • Slideshow: 1–35 images, each under 5MB.
  • Caption caps (BYO): X 280 (4,000 for premium accounts); Instagram 2,200; TikTok video 2,200 / photo description 4,000; LinkedIn 3,000; Pinterest 800; YouTube 5,000 bytes; Facebook 63,206.

Response

Fresh creates return 201. Idempotent replays return 200.
duplicate: true appears on idempotent replays. warnings are non-blocking (for example missing video duration metadata).

Examples

Errors