Platform Settings
Platform-specific configuration options for your posts
When creating posts, you can provide platform-specific settings in the platformSpecificData field of each PlatformTarget. This allows you to customize how your content appears and behaves on each social network.
Twitter/X
Create multi-tweet threads with Twitter's threadItems array.
| Property | Type | Description |
|---|---|---|
threadItems | array | Sequence of tweets in a thread. First item is the root tweet. |
threadItems[].content | string | Tweet text content |
threadItems[].mediaItems | array | Media attachments for this tweet |
{
"threadItems": [
{ "content": "π§΅ Here's everything you need to know about our API..." },
{ "content": "1/ First, authentication is simple..." },
{ "content": "2/ Next, create your first post..." }
]
}Threads (by Meta)
Similar to Twitter, create multi-post threads on Threads.
| Property | Type | Description |
|---|---|---|
threadItems | array | Sequence of posts (root then replies in order) |
threadItems[].content | string | Post text content |
threadItems[].mediaItems | array | Media attachments for this post |
| Property | Type | Description |
|---|---|---|
contentType | "story" | Publish as a Facebook Page Story (24-hour ephemeral) |
firstComment | string | Auto-post a first comment (feed posts only, not stories) |
pageId | string | Target Page ID for multi-page posting. Use GET /v1/accounts/{id}/facebook-page to list available pages. Uses default page if omitted. |
Constraints:
- β Cannot mix videos and images in the same post
- β Up to 10 images for feed posts
- β Stories require media (single image or video)
- β οΈ Story text captions are not displayed
- β±οΈ Stories disappear after 24 hours
- π Use
pageIdto post to multiple Facebook Pages from the same account connection
{
"contentType": "story",
"pageId": "123456789"
}| Property | Type | Description |
|---|---|---|
contentType | "story" | Publish as an Instagram Story |
shareToFeed | boolean | For Reels only. When true (default), the Reel appears on both the Reels tab and profile feed. Set to false for Reels tab only. |
collaborators | string[] | Up to 3 usernames to invite as collaborators (feed/Reels only) |
firstComment | string | Auto-post a first comment (not applied to Stories) |
trialParams | object | Trial Reels configuration (Reels only). Trial Reels are initially shared only with non-followers. |
trialParams.graduationStrategy | "MANUAL" | "SS_PERFORMANCE" | MANUAL: graduate via Instagram app. SS_PERFORMANCE: auto-graduate based on performance. |
userTags | array | Tag users in photos by username and position coordinates |
userTags[].username | string | Instagram username (@ symbol optional, auto-removed) |
userTags[].x | number | X coordinate from left edge (0.0β1.0) |
userTags[].y | number | Y coordinate from top edge (0.0β1.0) |
audioName | string | Custom name for the original audio in Reels. Replaces the default "Original Audio" label. Only applies to Reels (video posts). Can only be set once - either during creation or later from the Instagram audio page in the app. |
thumbOffset | integer | Millisecond offset from the start of the video to use as the Reel thumbnail. Only applies to Reels. If a custom thumbnail URL (instagramThumbnail in mediaItems) is provided, it takes priority. Defaults to 0 (first frame). |
Constraints:
- π Feed posts require aspect ratio between 0.8 (4:5) and 1.91 (1.91:1)
- π± 9:16 images must use
contentType: "story" - π Carousels support up to 10 media items
- ποΈ Images > 8MB auto-compressed
- πΉ Story videos > 100MB auto-compressed
- π¬ Reel videos > 300MB auto-compressed
- π·οΈ User tags: only for single images or first image of carousels (not stories/videos)
{
"firstComment": "Link in bio! π",
"collaborators": ["brandpartner", "creator123"],
"userTags": [
{ "username": "friend_username", "x": 0.5, "y": 0.5 }
]
}| Property | Type | Description |
|---|---|---|
organizationUrn | string | Target LinkedIn Organization URN for multi-organization posting. Format: urn:li:organization:123456789. Use GET /v1/accounts/{id}/linkedin-organizations to list available organizations. Uses default organization if omitted. |
firstComment | string | Auto-post a first comment |
disableLinkPreview | boolean | Set true to disable URL previews (default: false) |
Constraints:
- β Up to 20 images per post
- β Multi-video posts not supported
- π Single PDF document posts supported
- π Link previews auto-generated when no media attached
- π’ Use
organizationUrnto post to multiple organizations from the same account connection
{
"firstComment": "What do you think? Drop a comment below! π",
"disableLinkPreview": false
}| Property | Type | Description |
|---|---|---|
title | string | Pin title (max 100 chars, defaults to first line of content) |
boardId | string | Target board ID (uses first available if omitted) |
link | string (URI) | Destination link for the pin |
coverImageUrl | string (URI) | Cover image for video pins |
coverImageKeyFrameTime | integer | Key frame time in seconds for video cover |
{
"title": "10 Tips for Better Photography",
"boardId": "board-123",
"link": "https://example.com/photography-tips"
}YouTube
| Property | Type | Description |
|---|---|---|
title | string | Video title (max 100 chars, defaults to first line of content) |
visibility | "public" | "private" | "unlisted" | Video visibility (default: public) |
madeForKids | boolean | COPPA compliance: Set to true if video is made for kids (child-directed content). Defaults to false. Videos marked as made for kids have restricted features (no comments, no notifications, limited ad targeting). |
firstComment | string | Auto-post a first comment (max 10,000 chars) |
tags | string[] | Tags/keywords for the video (see constraints below) |
containsSyntheticMedia | boolean | AI-generated content disclosure flag. Set to true if your video contains AI-generated or synthetic content that could be mistaken for real people, places, or events. This helps viewers understand when realistic content has been created or altered using AI. YouTube may add a label to videos when this is set. Added to YouTube Data API in October 2024. |
Tag Constraints:
- β No count limit; duplicates are automatically removed
- π Each tag must be β€ 100 characters
- π Combined total across all tags β€ 500 characters (YouTube's limit)
Automatic Detection:
- β±οΈ Videos β€ 3 minutes β YouTube Shorts
- π¬ Videos > 3 minutes β Regular videos
- πΌοΈ Custom thumbnails supported for regular videos only
- β Custom thumbnails NOT supported for Shorts via API
- πΆ
madeForKidsdefaults tofalse(not child-directed)
{
"title": "How to Use Our API in 5 Minutes",
"visibility": "public",
"madeForKids": false,
"firstComment": "Thanks for watching! π Subscribe for more tutorials!"
}TikTok
β οΈ Required Consent: TikTok posts will fail without
content_preview_confirmed: trueandexpress_consent_given: true.
TikTok settings are nested inside platformSpecificData.tiktokSettings:
| Property | Type | Description |
|---|---|---|
privacy_level | string | Required. Must be one from your account's available options |
allow_comment | boolean | Required. Allow comments on the post |
allow_duet | boolean | Required for video posts |
allow_stitch | boolean | Required for video posts |
content_preview_confirmed | boolean | Required. Must be true |
express_consent_given | boolean | Required. Must be true |
draft | boolean | Send to Creator Inbox as draft instead of publishing |
description | string | Long-form description for photo posts (max 4000 chars) |
video_cover_timestamp_ms | integer | Thumbnail frame timestamp in ms (default: 1000) |
photo_cover_index | integer | Cover image index for carousels (0-based, default: 0) |
auto_add_music | boolean | Let TikTok add recommended music (photos only) |
video_made_with_ai | boolean | Disclose AI-generated content |
commercial_content_type | "none" | "brand_organic" | "brand_content" | Commercial disclosure |
brand_partner_promote | boolean | Brand partner promotion flag |
is_brand_organic_post | boolean | Brand organic post flag |
media_type | "video" | "photo" | Optional override (defaults based on media items) |
Constraints:
- πΈ Photo carousels support up to 35 images
- π Video titles: up to 2200 characters
- π Photo titles: auto-truncated to 90 chars (use
descriptionfor longer text) - π
privacy_levelmust match your account's available options (no defaults)
{
"accountId": "tiktok-012",
"platformSpecificData": {
"tiktokSettings": {
"privacy_level": "PUBLIC_TO_EVERYONE",
"allow_comment": true,
"allow_duet": true,
"allow_stitch": true,
"content_preview_confirmed": true,
"express_consent_given": true,
"description": "Full description here since photo titles are limited to 90 chars..."
}
}
}Google Business Profile
| Property | Type | Description |
|---|---|---|
locationId | string | Target Google Business location ID for multi-location posting. Format: locations/123456789. Use GET /v1/accounts/{id}/gmb-locations to list available locations. Uses default location if omitted. |
callToAction.type | enum | LEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL |
callToAction.url | string (URI) | Destination URL for the CTA button |
Constraints:
- β Text content + single image only
- β Videos not supported
- π CTA button drives user engagement
- π Posts appear on Google Search/Maps
- πΊοΈ Use
locationIdto post to multiple locations from the same account connection
{
"callToAction": {
"type": "SHOP",
"url": "https://example.com/store"
}
}Telegram
| Property | Type | Description |
|---|---|---|
parseMode | "HTML" | "Markdown" | "MarkdownV2" | Text formatting mode (default: HTML) |
disableWebPagePreview | boolean | Set true to disable link previews |
disableNotification | boolean | Send message silently (no notification sound) |
protectContent | boolean | Prevent forwarding and saving of the message |
Constraints:
- πΈ Up to 10 images per post (media album)
- π¬ Up to 10 videos per post (media album)
- π Text-only posts: up to 4096 characters
- πΌοΈ Media captions: up to 1024 characters
- π€ Channel posts show channel name/logo as author
- π€ Group posts show "Late" as the bot author
- π Analytics not available via API (Telegram limitation)
{
"parseMode": "HTML",
"disableWebPagePreview": false,
"disableNotification": false,
"protectContent": true
}Snapchat
| Property | Type | Description |
|---|---|---|
contentType | "story" | "saved_story" | "spotlight" | Type of Snapchat content (default: story) |
Content Types:
- Story (default): Ephemeral snap visible for 24 hours. No caption/text supported.
- Saved Story: Permanent story saved to your Public Profile. Uses post content as title (max 45 chars).
- Spotlight: Video for Snapchat's entertainment feed. Supports description (max 160 chars) with hashtags.
Constraints:
- π€ Requires a Snapchat Public Profile
- πΌοΈ Media required for all content types (no text-only posts)
- 1οΈβ£ Only one media item per post
- πΈ Images: max 20 MB, JPEG/PNG format
- π¬ Videos: max 500 MB, MP4 format, 5-60 seconds, min 540x960px
- π Aspect ratio: 9:16 recommended
- π Media is automatically encrypted (AES-256-CBC) before upload
{
"contentType": "saved_story"
}Bluesky
Bluesky doesn't require platformSpecificData but has important constraints:
Constraints:
- πΌοΈ Up to 4 images per post
- ποΈ Images > ~1MB are automatically recompressed to meet Bluesky's blob size limit
- π Link previews auto-generated when no media is attached
{
"content": "Just posted this via the Late API! π¦",
"platforms": [
{
"platform": "bluesky",
"accountId": "bluesky-123"
}
]
}Complete Example
Here's a real-world example posting to multiple platforms with platform-specific settings:
{
"content": "Excited to announce our new product! π",
"mediaItems": [
{ "url": "https://example.com/product.jpg", "type": "image" }
],
"platforms": [
{
"accountId": "twitter-123",
"platformSpecificData": {
"threadItems": [
{ "content": "Excited to announce our new product! π" },
{ "content": "Here's what makes it special... π§΅" }
]
}
},
{
"accountId": "instagram-456",
"platformSpecificData": {
"firstComment": "Link in bio! π",
"collaborators": ["brandpartner"]
}
},
{
"accountId": "linkedin-789",
"platformSpecificData": {
"firstComment": "What features would you like to see next? π"
}
},
{
"accountId": "tiktok-012",
"platformSpecificData": {
"tiktokSettings": {
"privacy_level": "PUBLIC_TO_EVERYONE",
"allow_comment": true,
"allow_duet": false,
"allow_stitch": false,
"content_preview_confirmed": true,
"express_consent_given": true
}
}
},
{
"accountId": "youtube-345",
"platformSpecificData": {
"title": "New Product Announcement",
"visibility": "public",
"firstComment": "Thanks for watching! Subscribe for updates! π"
}
},
{
"accountId": "gbp-678",
"platformSpecificData": {
"callToAction": {
"type": "SHOP",
"url": "https://example.com/product"
}
}
},
{
"accountId": "telegram-901",
"platformSpecificData": {
"parseMode": "HTML",
"disableNotification": false,
"protectContent": false
}
},
{
"accountId": "snapchat-234",
"platformSpecificData": {
"contentType": "saved_story"
}
}
]
}