> ## Documentation Index
> Fetch the complete documentation index at: https://docs.madiad.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Platform options

> Per-platform publishing options — privacy, drafts, video type, polls, CTAs, and more.

MADIAD Hub forwards any option a platform supports verbatim, so you are never limited to what is listed here. The fields below are the common and important ones. Prefix the field with the platform name where the option is platform-specific (`<platform>_<field>`). Array fields use the `field[]` convention — repeat the key once per value.

<Tip>
  Every field on this page is **optional** unless explicitly marked **required**. Omitting a field uses the platform's default.
</Tip>

## TikTok

| Field                  | Type    | Effect                                                                                                                                                        |
| ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `privacy_level`        | String  | Who can see the post: `PUBLIC_TO_EVERYONE` (default), `MUTUAL_FOLLOW_FRIENDS`, `FOLLOWER_OF_CREATOR`, `SELF_ONLY`                                             |
| `post_mode`            | String  | `DIRECT_POST` (default) publishes immediately; `MEDIA_UPLOAD` sends the media to the TikTok creator inbox as a draft so the creator can finish editing in-app |
| `auto_add_music`       | Boolean | Add background music to a photo post (default `false`)                                                                                                        |
| `disable_comment`      | Boolean | Disable comments on the post (default `false`)                                                                                                                |
| `disable_duet`         | Boolean | Disable Duet on the post (default `false`)                                                                                                                    |
| `disable_stitch`       | Boolean | Disable Stitch on the post (default `false`)                                                                                                                  |
| `brand_content_toggle` | Boolean | Set `true` for a paid partnership promoting a third-party brand (default `false`)                                                                             |
| `brand_organic_toggle` | Boolean | Set `true` when promoting the creator's own business (default `false`)                                                                                        |
| `photo_cover_index`    | Integer | Index of the photo to use as the cover/thumbnail on photo posts (default `0`)                                                                                 |
| `tiktok_title`         | String  | Post title for photo posts (≤ 90 chars) — see [Character limits](/concepts/posts#character-limits)                                                            |
| `tiktok_description`   | String  | Long caption for photo posts (≤ 4,000 chars) — see [Character limits](/concepts/posts#character-limits)                                                       |

<Note>
  `brand_content_toggle` and `brand_organic_toggle` can both be `true` at the same time — e.g. a creator promoting their own brand in a paid partnership.
</Note>

```bash theme={null}
curl -X POST https://api.madiad.com/v1/posts/video \
  -H "Authorization: Bearer $MADIAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "profile_id": "'"$PROFILE_ID"'",
    "platforms": ["tiktok"],
    "caption": "Behind the scenes",
    "video_url": "https://cdn.example.com/clip.mp4",
    "privacy_level": "FOLLOWER_OF_CREATOR",
    "disable_duet": true
  }'
```

## Instagram

| Field                     | Type          | Effect                                                                                                                                            |
| ------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `media_type`              | String        | `IMAGE` (default) or `STORIES`; mixed media is handled automatically as a carousel or reel                                                        |
| `collaborators`           | String        | Comma-separated collaborator usernames to invite as co-authors                                                                                    |
| `user_tags`               | String (JSON) | Tag users on a photo; requires a JSON-encoded array of `{username, x, y}` where `x` and `y` are floats 0.0–1.0 representing position on the image |
| `location_id`             | String        | Instagram location id to attach to the post                                                                                                       |
| `instagram_first_comment` | String        | Auto-post a comment immediately after publishing — see [First comment](/concepts/posts#first-comment)                                             |

```bash theme={null}
  -F "media_type=STORIES" \
  -F 'user_tags=[{"username":"jane_doe","x":0.5,"y":0.3}]' \
  -F "location_id=213385402"
```

## Facebook

| Field                    | Type   | Effect                                                                                                                                                                                          |
| ------------------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `facebook_page_id`       | String | **Required** when the profile has more than one Facebook Page — selects which Page to post to (auto-selected when there is only one)                                                            |
| `facebook_media_type`    | String | `REELS` (default — 9:16, ≤ 90 s; longer video is trimmed to 90 s), `STORIES` (24-hour ephemeral), or `VIDEO` (normal Page video — any aspect ratio, up to 4 hours, supports a custom thumbnail) |
| `thumbnail_url`          | String | Custom thumbnail URL — only applies when `facebook_media_type=VIDEO`                                                                                                                            |
| `video_state`            | String | `PUBLISHED` (default) or `DRAFT` — staging a Page video for manual publishing                                                                                                                   |
| `facebook_description`   | String | Long-form description displayed beneath the video                                                                                                                                               |
| `facebook_first_comment` | String | Auto-post a first comment immediately after publishing (Page posts only) — see [First comment](/concepts/posts#first-comment)                                                                   |

<Note>
  To publish a long-form Page video (portrait or landscape, any length up to 4 hours), set `facebook_media_type=VIDEO`. Without it the default is `REELS`, which caps the video at 90 seconds.
</Note>

```bash theme={null}
  -F "facebook_media_type=VIDEO" \
  -F "thumbnail_url=https://cdn.example.com/thumb.jpg" \
  -F "facebook_description=Full walkthrough — watch all the way through."
```

## YouTube

| Field                       | Type    | Effect                                                                                         |
| --------------------------- | ------- | ---------------------------------------------------------------------------------------------- |
| `privacyStatus`             | String  | `public` (default), `unlisted`, or `private`                                                   |
| `tags[]`                    | Array   | Video tags (repeat the key once per tag)                                                       |
| `categoryId`                | String  | YouTube category id (default `"22"` — People & Blogs)                                          |
| `selfDeclaredMadeForKids`   | Boolean | Declare the video is made for kids (default `false`)                                           |
| `embeddable`                | Boolean | Allow the video to be embedded on other sites (default `true`)                                 |
| `license`                   | String  | `youtube` (default) or `creativeCommon`                                                        |
| `defaultLanguage`           | String  | BCP-47 language code for the video metadata (e.g. `"en"`, `"vi"`)                              |
| `defaultAudioLanguage`      | String  | BCP-47 language code for the video audio track                                                 |
| `thumbnail`                 | File    | Custom thumbnail uploaded as a binary file (JPG/PNG/GIF/BMP, ≤ 2 MB; not supported on Shorts)  |
| `thumbnail_url`             | String  | Custom thumbnail by public URL (same format restrictions as `thumbnail`)                       |
| `youtube_subtitle_file`     | File    | SRT or VTT subtitle file to upload                                                             |
| `youtube_subtitle_language` | String  | BCP-47 language code for the subtitle track — **required** when `youtube_subtitle_file` is set |
| `youtube_subtitle_name`     | String  | Display name for the subtitle track                                                            |
| `youtube_title`             | String  | Video title (≤ 100 chars) — see [Character limits](/concepts/posts#character-limits)           |
| `youtube_description`       | String  | Video description (≤ 5,000 chars) — see [Character limits](/concepts/posts#character-limits)   |

```bash theme={null}
  -F "privacyStatus=unlisted" \
  -F "tags[]=tutorial" \
  -F "tags[]=coffee" \
  -F "categoryId=26" \
  -F "thumbnail=@./thumb.jpg" \
  -F "youtube_subtitle_file=@./captions.srt" \
  -F "youtube_subtitle_language=en" \
  -F "youtube_subtitle_name=English (auto)"
```

## Pinterest

| Field                       | Type   | Effect                                                                                   |
| --------------------------- | ------ | ---------------------------------------------------------------------------------------- |
| `pinterest_board_id`        | String | **Required** — every pin must go to a board                                              |
| `pinterest_link`            | String | Destination URL the pin links to                                                         |
| `pinterest_alt_text`        | String | Accessibility alt text for the image                                                     |
| `pinterest_cover_image_url` | String | Cover image URL for video pins                                                           |
| `pinterest_title`           | String | Pin title (≤ 100 chars) — see [Character limits](/concepts/posts#character-limits)       |
| `pinterest_description`     | String | Pin description (≤ 500 chars) — see [Character limits](/concepts/posts#character-limits) |

```bash theme={null}
  -F "pinterest_board_id=123456789" \
  -F "pinterest_link=https://example.com/product" \
  -F "pinterest_alt_text=Flat-lay of our new blend"
```

## Reddit

| Field                   | Type    | Effect                                                                                                                            |
| ----------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `subreddit`             | String  | **Required** — target subreddit without the `r/` prefix                                                                           |
| `reddit_title`          | String  | Post title, separate from the body; falls back to `caption` if omitted — see [Character limits](/concepts/posts#character-limits) |
| `flair_id`              | String  | Flair id to apply to the post                                                                                                     |
| `first_comment_media[]` | File(s) | Images to attach to the first comment (Reddit-only) — see [First comment](/concepts/posts#first-comment)                          |

```bash theme={null}
  -F "subreddit=coffee" \
  -F "reddit_title=My home roast — first attempt" \
  -F "flair_id=abc123" \
  -F "first_comment_media[]=@./roast-detail.jpg"
```

## X (Twitter)

| Field                   | Type    | Effect                                                                                                                                             |
| ----------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `poll_options[]`        | Array   | 2–4 poll choices, ≤ 25 chars each — mutually exclusive with `quote_tweet_id`                                                                       |
| `poll_duration`         | Integer | Poll duration in minutes (5–10,080; default `1440` = 24 h)                                                                                         |
| `reply_settings`        | String  | Who can reply: `following`, `mentionedUsers`, `subscribers`, or `verified`                                                                         |
| `quote_tweet_id`        | String  | Quote an existing tweet by id (cannot be combined with media)                                                                                      |
| `reply_to_id`           | String  | Post the tweet as a reply to this tweet id                                                                                                         |
| `community_id`          | String  | Post to a specific X Community                                                                                                                     |
| `x_long_text_as_post`   | Boolean | Publish long text as a single post (X Premium) instead of auto-threading (default `false`)                                                         |
| `x_thread_image_layout` | String  | Comma-separated list of how many images appear per tweet in a threaded post (each value 0–4, total must equal the number of images) — e.g. `"0,4"` |
| `tagged_user_ids[]`     | Array   | Tag up to 10 users in the media by their user id                                                                                                   |
| `geo_place_id`          | String  | Attach a geographic place id to the post                                                                                                           |

<Note>
  X strips any URL that would become a clickable link from the post text before publishing — see [Character limits](/concepts/posts#character-limits). Put links in your profile bio or inside the image/video instead.
</Note>

```bash theme={null}
  -F "poll_options[]=Light roast" \
  -F "poll_options[]=Dark roast" \
  -F "poll_options[]=No preference" \
  -F "poll_duration=4320" \
  -F "reply_settings=following"
```

## Threads

| Field                         | Type    | Effect                                                                                                                                          |
| ----------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `threads_long_text_as_post`   | Boolean | Publish long text as a single post instead of auto-threading (default `false`)                                                                  |
| `threads_thread_media_layout` | String  | Comma-separated list of how many media items appear per post in a thread (each value 0–10, total must equal the number of files) — e.g. `"0,5"` |
| `threads_topic_tag`           | String  | One topic tag, 1–50 chars, no `"."` or `"&"` — helps with reach                                                                                 |

```bash theme={null}
  -F "threads_topic_tag=coffeetime" \
  -F "threads_long_text_as_post=true"
```

## LinkedIn

| Field                     | Type   | Effect                                                                         |
| ------------------------- | ------ | ------------------------------------------------------------------------------ |
| `visibility`              | String | Post visibility (`PUBLIC`)                                                     |
| `target_linkedin_page_id` | String | Publish to an organization Page instead of the personal profile                |
| `linkedin_link_url`       | String | A link to attach to the post                                                   |
| `linkedin_first_comment`  | String | Auto-post a first comment — see [First comment](/concepts/posts#first-comment) |

```bash theme={null}
  -F "target_linkedin_page_id=urn:li:organization:12345678" \
  -F "linkedin_link_url=https://example.com/launch" \
  -F "visibility=PUBLIC"
```

## Bluesky

| Field              | Type   | Effect                       |
| ------------------ | ------ | ---------------------------- |
| `bluesky_link_url` | String | A link to attach to the post |

```bash theme={null}
  -F "bluesky_link_url=https://example.com/post"
```

## Google Business

<Note>
  Google Business Profile posts appear on your Google Maps listing and in Search. The `gbp_` prefix scopes all options to this platform.
</Note>

| Field             | Type   | Effect                                                                              |
| ----------------- | ------ | ----------------------------------------------------------------------------------- |
| `gbp_topic_type`  | String | `STANDARD` (default), `EVENT`, or `OFFER`                                           |
| `gbp_cta_type`    | String | CTA button: `BOOK`, `ORDER`, `SHOP`, `LEARN_MORE`, `SIGN_UP`, or `CALL`             |
| `gbp_cta_url`     | String | URL for the CTA button — required when `gbp_cta_type` is set                        |
| `gbp_location_id` | String | Which location to post to — auto-selected when the account has exactly one location |

**Event fields** (when `gbp_topic_type=EVENT`):

| Field                  | Type   | Effect                                           |
| ---------------------- | ------ | ------------------------------------------------ |
| `gbp_event_title`      | String | **Required** — event name                        |
| `gbp_event_start_date` | String | **Required** — start date in `YYYY-MM-DD` format |
| `gbp_event_end_date`   | String | **Required** — end date in `YYYY-MM-DD` format   |
| `gbp_event_start_time` | String | Start time in 24-hour `HH:MM` format             |
| `gbp_event_end_time`   | String | End time in 24-hour `HH:MM` format               |

**Offer fields** (when `gbp_topic_type=OFFER`):

| Field             | Type   | Effect                              |
| ----------------- | ------ | ----------------------------------- |
| `gbp_coupon_code` | String | Coupon or promo code                |
| `gbp_redeem_url`  | String | URL where the offer can be redeemed |
| `gbp_terms`       | String | Terms and conditions text           |

```bash theme={null}
# Standard post with a CTA
  -F "gbp_topic_type=STANDARD" \
  -F "gbp_cta_type=LEARN_MORE" \
  -F "gbp_cta_url=https://example.com/menu"

# Event post
  -F "gbp_topic_type=EVENT" \
  -F "gbp_event_title=Grand Opening" \
  -F "gbp_event_start_date=2025-09-01" \
  -F "gbp_event_end_date=2025-09-01" \
  -F "gbp_event_start_time=09:00" \
  -F "gbp_event_end_time=17:00"
```

## Telegram & Discord

Telegram and Discord connect via manual credentials rather than OAuth and accept only the shared `caption` / `title`. There are no additional creative options and no analytics data is returned.

Text that exceeds the platform limit is **truncated** — not rejected — so keep captions within the limits shown in [Character limits](/concepts/posts#character-limits):

* **Telegram** — 4,096 chars for text-only messages; 1,024 chars for media captions.
* **Discord** — 2,000 chars.
