Platform-Specific Options
One post object goes to every channel in the collection. The platforms object adds non-content behavior per platform.
Story mode
Section titled “Story mode”{ "postAsStory": true }Story behavior applies to supported Instagram and Facebook destinations. Other channels in the collection can fall back to a normal feed post, so confirm the collection’s channels before using it.
Threads
Section titled “Threads”Split a caption into segments with triple newlines, and Nuelink publishes it as a thread of up to 10 segments:
{ "caption": "We rebuilt our checkout.\n\n\nIt's faster on mobile and takes two taps.\n\n\nHere's what changed: https://example.com/blog/checkout"}In JSON each \n is a newline, so \n\n\n is the separator.
To let Nuelink split the text for you instead, turn on automatic text splitting:
{ "autoThreadText": true }Thread support varies by platform, so check how each channel in the collection renders the post, on a DRAFT first.
Polls and quizzes
Section titled “Polls and quizzes”{ "poll": { "question": "Which scent should return?", "options": ["Rosewater", "Wild Fig", "Jasmine"], "period": "3d" }}Add a zero-based correct answer and an explanation to turn it into a quiz:
{ "poll": { "question": "Which ingredient was in our first formula?", "options": ["Bergamot", "Rosewater", "Lavender"], "correctOptionIndex": 1, "explanation": "Rosewater has been included since day one.", "period": "1d" }}| Field | Type | Rules |
|---|---|---|
question | string | Required, max 280 characters |
options | string[] | Required, 2–4 items, each max 30 characters |
period | string | Required, one of 1d, 3d, 7d |
correctOptionIndex | integer | Optional, zero-based, so option 2 is 1. The API doesn’t check it against options, so validate it yourself |
explanation | string | Optional, max 512 characters |
A poll can stand in for caption, it’s the one case where a post doesn’t need caption text. Send a caption as well and it becomes the poll’s caption: when you read the post back, body is null and the text is in poll.caption.
Supported on LinkedIn, X, Telegram, Threads, Mastodon, and Bluesky. Other channels in the collection ignore the poll or fall back to caption-only.
Global auto-comment
Section titled “Global auto-comment”{ "comment": { "delay": 30, "comment": "Tap the link in bio to learn more." }}| Field | Type | Rules |
|---|---|---|
delay | integer | Seconds after publishing, >= 0 |
comment | string | 1–1000 characters |
Fires on every channel in the collection that supports comments, with the same text everywhere.
link is a top-level field, not part of platforms:
{ "link": "https://example.com/products/spring" }Google Business Profile uses it for the post’s LEARN_MORE button, and Pinterest uses it as the Pin’s destination link. Max 1000 characters. Elsewhere, put the URL in the caption if you want it in the post’s text.
{ "platforms": { "instagram": { "collab": "partner_username", "location": { "id": "location_id", "name": "Brooklyn, NY" }, "trialReel": "MANUAL", "shareToFeed": true } }}| Field | Type | Description |
|---|---|---|
collab | string | Username of the Instagram account to invite as co-author (Instagram Collab). Max 1000 characters. |
location | object | Geotag. Needs id (Instagram’s location ID) and name (display name); both required when present. |
trialReel | string | Shows the Reel to non-followers first to test it. MANUAL leaves sharing to followers up to you after the 72-hour trial; SS_PERFORMANCE auto-shares it if it performs well during the trial. |
shareToFeed | boolean | If true, Reels are also shared to the main feed. |
{ "platforms": { "facebook": { "location": { "id": "location_id", "name": "Brooklyn, NY" } } }}location takes both id and name, both required when the object is present.
TikTok
Section titled “TikTok”{ "platforms": { "tiktok": { "sendToInbox": true, "autoAddMusic": false } }}| Field | Type | Description |
|---|---|---|
sendToInbox | boolean | Send the scheduled video to the TikTok app inbox for native editing and manual completion instead of automatic publication |
autoAddMusic | boolean | Ask the TikTok publishing flow to add music automatically when supported |
Both settings live under platforms.tiktok. REST validation, the live MCP schema, and CLI 1.4.5 all use this nested shape.
Google Business Profile
Section titled “Google Business Profile”{ "platforms": { "googlemybusiness": { "uploadToPhotosSection": true } }}| Field | Type | Description |
|---|---|---|
uploadToPhotosSection | boolean | If true, the image is added to the location’s Photos section as well as being posted. Applies to image posts on Google Business Profile channels; no effect on other platforms in the collection. |
YouTube
Section titled “YouTube”{ "platforms": { "youtube": { "tags": ["skincare", "botanicals"], "playlists": [ { "channelId": 5001, "playlistIds": ["PL123", "PL456"] } ] } }}Each tags entry is max 255 characters. Each playlists entry pairs a Nuelink channelId with one or more YouTube playlistIds; the MCP schema requires at least one playlist ID per entry.
Which surface exposes what
Section titled “Which surface exposes what”All three surfaces expose the same platform options:
| Option | REST API | CLI | MCP |
|---|---|---|---|
instagram.collab, location, trialReel, shareToFeed | Yes | Yes | Yes |
facebook.location | Yes | Yes | Yes |
youtube.tags, youtube.playlists | Yes | Yes | Yes |
tiktok.sendToInbox, tiktok.autoAddMusic | Yes | Yes | Yes |
googlemybusiness.uploadToPhotosSection | Yes | Yes | Yes |
The same goes for autoThreadText: it’s autoThreadText in the REST API and the MCP tool, and --auto-thread-text in the CLI.
A complete example
Section titled “A complete example”{ "title": "Product launch", "caption": "New season, new scents. Available Friday.", "publishMode": "DRAFT", "media": [{ "id": "encoded_media_id" }], "alt": "Three candles arranged on a wooden table", "platforms": { "instagram": { "collab": "partner_username", "shareToFeed": true }, "youtube": { "tags": ["candles", "product-launch"] } }, "comment": { "delay": 30, "comment": "Learn more through the link in our profile." }}Keep it on DRAFT while you’re checking how each destination renders it. Move to QUEUE or SCHEDULE once the dashboard shows what you expect.