# 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:

```json
{
  "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:

```json
{
  "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

| Type | JSON | Example |
| --- | --- | --- |
| Text | string | `"title": "Launch day"` |
| Number | number | `"thumbOffset": 1500` |
| Boolean | `true` / `false` | `"madeForKids": false` |
| Choice | one of the listed strings | `"visibility": "unlisted"` |
| Tags / multi-choice | array of strings | `"tags": ["product", "design"]` |
| List | array of objects | `"thread": [{ "text": "Second post" }]` |
| URL | `http(s)` URL string | `"articleUrl": "https://example.com/post"` |
| Image | `http(s)` URL or `media://<id>` | `"thumbnailUrl": "media://3f2e1d0c-..."` |

Image options accept a [media library](/docs/media#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](/docs/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:

| Platform | Examples of options | Guide |
| --- | --- | --- |
| X (Twitter) | threads, polls, quote posts, reply settings, communities | [X (Twitter)](/docs/platforms/twitter) |
| Instagram | feed, reel or story; collaborators; reel cover; trial reels | [Instagram](/docs/platforms/instagram) |
| Facebook | post type (feed, story or reel), link, video title and thumbnail | [Facebook](/docs/platforms/facebook) |
| LinkedIn | visibility, article link, document title, mentions | [LinkedIn](/docs/platforms/linkedin) |
| TikTok | privacy level (required), comments, duets, stitches | [TikTok](/docs/platforms/tiktok) |
| YouTube | title, visibility, category, tags, thumbnail, first comment | [YouTube](/docs/platforms/youtube) |
| Threads | reply control, topic tag, link attachment, quote post | [Threads](/docs/platforms/threads) |
| Pinterest | board, title, destination link, alt text, video cover | [Pinterest](/docs/platforms/pinterest) |
| Bluesky | link card, tags, languages, content warning, quote post, reply control | [Bluesky](/docs/platforms/bluesky) |
| Google Business Profile | post type, call to action, event and offer details | [Google Business Profile](/docs/platforms/google-business) |

> [!TIP]
> 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](/docs/posts#request-body).
