Skip to content

Platforms

The target_platforms array on a content object is the list of destinations the post will be delivered to. It holds platform ids — the short lowercase strings below.

ValueNetworkAccount typeNotes
instagramInstagrampersonal
facebookFacebookpage
linkedinLinkedInpersonalPersonal profile.
linkedin_pageLinkedIn PageorganizationCompany page. Distinct id from linkedin.
twitterX / TwitterpersonalThe id is twitter, not x.
threadsThreadspersonal
tiktokTikTokpersonal
youtubeYouTubepersonalVideo only.
pinterestPinterestpersonal
snapchatSnapchatpersonalStory publishing.
whatsappWhatsAppbusinessChannel publishing.

target_platforms is accepted as a free-form array of up to 10 strings. The API does not check the values against the table above, does not check that the platform is connected, and does not check that the content type makes sense for the destination. A create with a typo like ["instgram"] returns 201.

Mistakes surface at publish time instead: the publish cron finds no matching connected account, or the platform’s own API rejects the post, and the leg fails. Subscribe to content.publish_failed to catch it, and check spelling against GET /api/v1/social-accounts before creating content.

The one write-time check is on publish: POST /api/v1/content/{id}/publish returns 422 no_target_platforms if the array is empty.

Nothing here is enforced by the API — it is what the platforms themselves accept.

  • Text without media (text_only) works on twitter, linkedin, linkedin_page, threads, and facebook. Instagram, TikTok, YouTube, Pinterest, and Snapchat all require media.
  • Single images (single_image) work everywhere except youtube, which is video only.
  • Multi-image (carousel, slideshow) works on instagram, tiktok, linkedin, and linkedin_page.
  • Vertical video (reel, talking_head, video_hook, video_hook_demo) works on instagram, tiktok, youtube, facebook, and snapchat. Set aspect_ratio to 9:16.

When in doubt, target one platform, publish, and read the per-platform result off the webhook before fanning out.

When a caption needs to differ per network, use platform_specific — an object keyed by platform id. It is not called platform_overrides.

{
"caption": "Default caption.",
"target_platforms": ["twitter", "linkedin"],
"platform_specific": {
"twitter": { "caption": "Short and punchy X copy." },
"linkedin": { "caption": "Long-form LinkedIn version with two extra paragraphs." }
}
}

The API stores platform_specific as an opaque object — it does not validate the keys against target_platforms, nor the shape of each entry. Keys that do not match a targeted platform are simply ignored downstream; anything omitted from an override falls back to the top-level value.

Connections are managed in the dashboard under Settings → Social accounts. The API cannot initiate OAuth. You can list what is connected with GET /api/v1/social-accounts (hyphenated), and receive social_account.disconnected webhook events when a connection breaks. See Events.