LateLate API
Core

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.

PropertyTypeDescription
threadItemsarraySequence of tweets in a thread. First item is the root tweet.
threadItems[].contentstringTweet text content
threadItems[].mediaItemsarrayMedia 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.

PropertyTypeDescription
threadItemsarraySequence of posts (root then replies in order)
threadItems[].contentstringPost text content
threadItems[].mediaItemsarrayMedia attachments for this post

Facebook

PropertyTypeDescription
contentType"story"Publish as a Facebook Page Story (24-hour ephemeral)
firstCommentstringAuto-post a first comment (feed posts only, not stories)
pageIdstringTarget 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 pageId to post to multiple Facebook Pages from the same account connection
{
  "contentType": "story",
  "pageId": "123456789"
}

Instagram

PropertyTypeDescription
contentType"story"Publish as an Instagram Story
shareToFeedbooleanFor Reels only. When true (default), the Reel appears on both the Reels tab and profile feed. Set to false for Reels tab only.
collaboratorsstring[]Up to 3 usernames to invite as collaborators (feed/Reels only)
firstCommentstringAuto-post a first comment (not applied to Stories)
trialParamsobjectTrial 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.
userTagsarrayTag users in photos by username and position coordinates
userTags[].usernamestringInstagram username (@ symbol optional, auto-removed)
userTags[].xnumberX coordinate from left edge (0.0–1.0)
userTags[].ynumberY coordinate from top edge (0.0–1.0)
audioNamestringCustom 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.
thumbOffsetintegerMillisecond 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 }
  ]
}

LinkedIn

PropertyTypeDescription
organizationUrnstringTarget 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.
firstCommentstringAuto-post a first comment
disableLinkPreviewbooleanSet 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 organizationUrn to post to multiple organizations from the same account connection
{
  "firstComment": "What do you think? Drop a comment below! πŸ‘‡",
  "disableLinkPreview": false
}

Pinterest

PropertyTypeDescription
titlestringPin title (max 100 chars, defaults to first line of content)
boardIdstringTarget board ID (uses first available if omitted)
linkstring (URI)Destination link for the pin
coverImageUrlstring (URI)Cover image for video pins
coverImageKeyFrameTimeintegerKey frame time in seconds for video cover
{
  "title": "10 Tips for Better Photography",
  "boardId": "board-123",
  "link": "https://example.com/photography-tips"
}

YouTube

PropertyTypeDescription
titlestringVideo title (max 100 chars, defaults to first line of content)
visibility"public" | "private" | "unlisted"Video visibility (default: public)
madeForKidsbooleanCOPPA 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).
firstCommentstringAuto-post a first comment (max 10,000 chars)
tagsstring[]Tags/keywords for the video (see constraints below)
containsSyntheticMediabooleanAI-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
  • πŸ‘Ά madeForKids defaults to false (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: true and express_consent_given: true.

TikTok settings are nested inside platformSpecificData.tiktokSettings:

PropertyTypeDescription
privacy_levelstringRequired. Must be one from your account's available options
allow_commentbooleanRequired. Allow comments on the post
allow_duetbooleanRequired for video posts
allow_stitchbooleanRequired for video posts
content_preview_confirmedbooleanRequired. Must be true
express_consent_givenbooleanRequired. Must be true
draftbooleanSend to Creator Inbox as draft instead of publishing
descriptionstringLong-form description for photo posts (max 4000 chars)
video_cover_timestamp_msintegerThumbnail frame timestamp in ms (default: 1000)
photo_cover_indexintegerCover image index for carousels (0-based, default: 0)
auto_add_musicbooleanLet TikTok add recommended music (photos only)
video_made_with_aibooleanDisclose AI-generated content
commercial_content_type"none" | "brand_organic" | "brand_content"Commercial disclosure
brand_partner_promotebooleanBrand partner promotion flag
is_brand_organic_postbooleanBrand 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 description for longer text)
  • πŸ”’ privacy_level must 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

PropertyTypeDescription
locationIdstringTarget 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.typeenumLEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL
callToAction.urlstring (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 locationId to post to multiple locations from the same account connection
{
  "callToAction": {
    "type": "SHOP",
    "url": "https://example.com/store"
  }
}

Telegram

PropertyTypeDescription
parseMode"HTML" | "Markdown" | "MarkdownV2"Text formatting mode (default: HTML)
disableWebPagePreviewbooleanSet true to disable link previews
disableNotificationbooleanSend message silently (no notification sound)
protectContentbooleanPrevent 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

PropertyTypeDescription
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"
      }
    }
  ]
}