Publishing

Platform Options

Set platform-specific fields such as titles, privacy levels and post types with targets[].options.

Most of a post is shared across platforms: the text, the media, the publish time. Some settings only make sense on one platform, such as a YouTube video title, a TikTok privacy level or the Pinterest board to pin to. These go in options on each target.

How it works

Each entry in targets takes an optional options object. The keys depend on the platform of that target's account:

{
  "content": "How we built our new onboarding flow",
  "media": [{ "url": "https://cdn.example.com/onboarding.mp4", "type": "video" }],
  "targets": [
    {
      "accountId": "4a7e2c10-1b3d-4f5e-9a6b-7c8d9e0f1a2b",
      "options": { "title": "Building our onboarding flow", "visibility": "unlisted", "tags": ["product", "design"] }
    },
    {
      "accountId": "5b8f3d21-2c4e-4a6f-8b7c-8d9e0f1a2b3c",
      "options": { "privacyLevel": "PUBLIC_TO_EVERYONE", "disableDuet": true }
    },
    {
      "accountId": "6c9a4e32-3d5f-4b7a-9c8d-9e0f1a2b3c4d"
    }
  ],
  "publishNow": true
}

Here the YouTube target gets a title, visibility and tags, the TikTok target gets a privacy level, and the LinkedIn target uses its defaults.

  • Options are a flat object of keys and values (lists use arrays).
  • Options apply to one target only. Two YouTube channels in the same post can have different titles.
  • Leave options out, or send {}, to use the platform's defaults.
  • Unknown keys are ignored. Check spelling against the platform guide, because a mistyped key silently falls back to the default.

Validation

Options are validated for each target when you create the post, together with content and media. Invalid or missing required options return 400 validation_error with the field path under the account ID:

{
  "error": {
    "code": "validation_error",
    "message": "Content is not valid for some platforms",
    "details": {
      "5b8f3d21-2c4e-4a6f-8b7c-8d9e0f1a2b3c": [
        { "field": "options.privacyLevel", "message": "Choose who can view this TikTok post" }
      ]
    }
  }
}

Some options are required. For example TikTok's privacyLevel has no default, because TikTok requires the creator to choose it for every post.

Value types

TypeJSONExample
Textstring"title": "Launch day"
Numbernumber"thumbOffset": 1500
Booleantrue / false"madeForKids": false
Choiceone of the listed strings"visibility": "unlisted"
Tags / multi-choicearray of strings"tags": ["product", "design"]
Listarray of objects"thread": [{ "text": "Second post" }]
URLhttp(s) URL string"articleUrl": "https://example.com/post"
Imagehttp(s) URL or media://<id>"thumbnailUrl": "media://3f2e1d0c-..."

Image options accept a media library reference as well as a public URL. References are checked when the post is created and resolved to a signed URL at publish time.

Some choices depend on the connected account, such as the Pinterest board or the TikTok privacy levels a creator is allowed to use. The Playground loads those values for the selected account. The platform guide explains where the values come from.

Options by platform

Each platform guide has a full table of its options, generated from the same definitions the API validates against:

PlatformExamples of optionsGuide
X (Twitter)threads, polls, quote posts, reply settings, communitiesX (Twitter)
Instagramfeed, reel or story; collaborators; reel cover; trial reelsInstagram
Facebookpost type (feed, story or reel), link, video title and thumbnailFacebook
LinkedInvisibility, article link, document title, mentionsLinkedIn
TikTokprivacy level (required), comments, duets, stitchesTikTok
YouTubetitle, visibility, category, tags, thumbnail, first commentYouTube
Threadsreply control, topic tag, link attachment, quote postThreads
Pinterestboard, title, destination link, alt text, video coverPinterest
Blueskylink card, tags, languages, content warning, quote post, reply controlBluesky
Google Business Profilepost type, call to action, event and offer detailsGoogle Business Profile

The quickest way to get options right is the Playground. Pick an account, open Account options, fill in the form, and copy the generated request from the Live request panel.

Per-account content

options is for platform settings. To change the text itself for one account, use targets[].content, which replaces the shared content for that target only. See Posts.

This page is also available as Markdown.