Skip to main content
Glama

Update post

update_post
Destructive

Edits caption, title, description, first comment, custom thumbnail (image URL or timeline frame), and platform-specific settings on any not-yet-published post — drafts, ready-to-publish, scheduled, and failed posts are all editable. Writes to the shared video_settings row so every unpublished post attached to the same upload sees the change. Use platform_caption / platform_first_comment for per-platform overrides on this post's platform. Refuses posts that are already queued for publish, currently processing, or already published. Captions over a platform's limit are rejected (a shared caption is checked against every unpublished post on the upload). Fixing the caption of a post that failed for an over-limit caption re-queues it automatically — the result's status shows where it went. Custom covers (custom_thumbnail_url / custom_thumbnail_upload_id) apply to video posts on YouTube, Instagram Reels, Facebook Reels and Pinterest; image posts don't take a cover.

Input Schema

NameRequiredDescriptionDefault
titleNoNew title. Used by YouTube, Facebook, Pinterest, Tumblr (an optional heading above the post text) and Reddit (the post title, max 300 chars, only when platform_settings.title is empty); ignored by platforms without a title concept. This is the upload's shared title, so changing it also changes the YouTube, Facebook, Pinterest and Tumblr titles of the same upload. To set a Reddit-only title, use platform_settings.title on the Reddit post instead.
captionNoNew shared caption. Applies to every platform that doesn't have a per-platform override.
descriptionNoNew long-form description. Used by YouTube, Facebook, Pinterest, Tumblr and Reddit. On Pinterest this is the pin description; on Tumblr it is the post text; on Reddit it is the post body.
first_commentNoShared first comment. Auto-posted after the post by platforms that support it (YouTube, Instagram, Facebook, Threads, Bluesky, X, LinkedIn, Mastodon, and Discord: in Discord text channels it's a separate message right after the post, in forum channels the first reply in the post's thread). Empty string clears it.
video_post_idYesThe video_posts.id whose text/settings you want to edit.
idempotency_keyNoOptional client-generated key (e.g., a UUID) to make retries safe. Identical calls with the same key within 10 minutes return the original result instead of running the write twice.
platform_captionNoPer-platform caption override for this post's platform. Overrides `caption` on that one platform only; leave empty string to clear. Do NOT use for Pinterest or YouTube: those platforms use `title` and `description` instead of captions. On Tumblr it overrides the description as the post text.
platform_settingsNoAI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds, single images and carousels, which go to Stories as one frame per slide with video slides over 60 seconds left out)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy ("SS_PERFORMANCE" (default): Instagram shares it with followers automatically if it performs well; "MANUAL": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/poll ({ options: 2 to 4 strings of max 25 chars, extended: boolean, keeps it open past 3 days }; feed posts, carousels and Reels, the caption is the question; beta, needs Facebook Login for Instagram or the post fails)/commentPrompt (boolean; the caption becomes a prompt answered in the comments; not with poll; beta, needs Facebook Login for Instagram or the post fails)/storyCaption (boolean; shows the caption on the Story, first frame only on carousels; beta)/isAiGenerated (boolean — adds Instagram's "AI info" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's "AI info" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility ("PUBLIC" | "CONNECTIONS" | "LOGGED_IN"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility ("public" | "unlisted" | "private"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention ("none" | "here" | "everyone", default "none"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain "discord"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no "#", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like "AskReddit", "r/AskReddit" also works, or "u_username" for the user's own profile; a bare name is always a subreddit, so "jane" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility ("public" | "unlisted" | "private", default "public"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: "BOOK" | "ORDER" | "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of "spotlight" and/or "story", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand.
follow_up_commentsNoUp to 4 more comments after the first comment (5 per post in total), posted on the same platforms as the first comment. Shared by every post of the upload; passing it replaces the current list, [] clears it. Not posted on X, which only gets the first comment. On Threads, Bluesky, Mastodon and Pixelfed each one replies to the previous comment, so they read as a thread.
custom_thumbnail_urlNoPublic https:// URL to a cover/thumbnail image (jpeg, png, webp, or gif, max 20 MB). ShortSync downloads the image, stores it in the workspace's bucket, and attaches it to the video_settings row so every unpublished post on this upload uses it at publish time. Used as the cover on YouTube, Instagram Reels, Facebook Reels and Pinterest; other platforms pick their own cover (TikTok uses a frame, set with thumbnail_timestamp_ms). Pass an empty string to remove the current custom thumbnail. Same SSRF guards as create_video_upload_from_url apply: https only, public IPs, Content-Length required. Mutually exclusive with thumbnail_timestamp_ms.
first_comment_enabledNoSet false to skip the first comment on this post's platform entirely (neither the per-platform nor the shared first comment is posted). Set true to turn it back on. Same toggle as the dashboard's per-platform first-comment switch.
platform_first_commentNoPer-platform first comment override for this post's platform. Empty string clears the override and falls back to the shared first_comment.
thumbnail_timestamp_msNoExtract a frame from the upload's own video at this timestamp (milliseconds from the start) and store it as the video's 'Thumbnail from Timeline' (video_settings.generated_thumbnail_url), matching what the dashboard scrubber writes. Video-only: refuses text posts, image uploads, and carousel parents. Must be within the video's duration. Publish-time behavior: this DOES NOT overwrite a custom_thumbnail_url the user already set. Platforms that read `custom_thumbnail_url || generated_thumbnail_url` (YouTube, Facebook Reels, Pinterest, and others) will use this timeline frame only when no custom cover is present. Platforms that read custom only (Instagram in particular) will NOT use this frame as a cover — pass custom_thumbnail_url or custom_thumbnail_upload_id for those. If the user wants the timeline frame to override an existing custom cover, first clear the custom with `custom_thumbnail_url: ""`, then set the timestamp. Mutually exclusive with custom_thumbnail_url and custom_thumbnail_upload_id.
custom_thumbnail_upload_idNoAlternative to custom_thumbnail_url: reference an existing image upload (a video_uploads row whose content_type is 'image') and use it as the cover for this post. Use this when the user already uploaded the cover image via create_video_upload_from_url or create_video_upload and wants to attach it to a video's post rather than re-hosting it publicly. The image must be in the same workspace as this post. Mutually exclusive with custom_thumbnail_url and thumbnail_timestamp_ms.
first_comment_delay_minutesNoMinutes after the post goes live to post the first comment. 0 = right away (default). Up to 10080 (7 days). Shared by every post of the upload.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds, single images and carousels, which go to Stories as one frame per slide with video slides over 60 seconds left out)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy (\"SS_PERFORMANCE\" (default): Instagram shares it with followers automatically if it performs well; \"MANUAL\": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds, single images and carousels, which go to Stories as one frame per slide with video slides over 60 seconds left out)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy (\"SS_PERFORMANCE\" (default): Instagram shares it with followers automatically if it performs well; \"MANUAL\": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/poll ({ options: 2 to 4 strings of max 25 chars, extended: boolean, keeps it open past 3 days }; feed posts, carousels and Reels, the caption is the question; beta, needs Facebook Login for Instagram or the post fails)/commentPrompt (boolean; the caption becomes a prompt answered in the comments; not with poll; beta, needs Facebook Login for Instagram or the post fails)/storyCaption (boolean; shows the caption on the Story, first frame only on carousels; beta)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  2. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds and single images, not carousels)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy (\"SS_PERFORMANCE\" (default): Instagram shares it with followers automatically if it performs well; \"MANUAL\": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds, single images and carousels, which go to Stories as one frame per slide with video slides over 60 seconds left out)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy (\"SS_PERFORMANCE\" (default): Instagram shares it with followers automatically if it performs well; \"MANUAL\": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  3. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds and single images, not carousels)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds and single images, not carousels)/trialReel (boolean; Reels only: posts a Trial Reel shown to non-followers first)/trialGraduationStrategy (\"SS_PERFORMANCE\" (default): Instagram shares it with followers automatically if it performs well; \"MANUAL\": the user shares it from the Instagram app; Instagram has no time-based option)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  4. Changed2 schema fields changed
    • changedInput schema / properties / follow_up_comments / description
      Previous value: -"Up to 4 more comments after the first comment (5 per post in total), posted on the same platforms as the first comment. Shared by every post of the upload; passing it replaces the current list, [] clears it. On X, Threads, Bluesky, Mastodon and Pixelfed each one replies to the previous comment, so they read as a thread."New value: +"Up to 4 more comments after the first comment (5 per post in total), posted on the same platforms as the first comment. Shared by every post of the upload; passing it replaces the current list, [] clears it. Not posted on X, which only gets the first comment. On Threads, Bluesky, Mastodon and Pixelfed each one replies to the previous comment, so they read as a thread."
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly (Story only, no Reel or feed post; single videos up to 60 seconds and single images, not carousels)/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly (single videos up to 60 seconds and single photos)/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  5. Changed2 schema fields changed
    • addedInput schema / properties / first_comment_delay_minutes
      Added value: +{
      +  "description": "Minutes after the post goes live to post the first comment. 0 = right away (default). Up to 10080 (7 days). Shared by every post of the upload.",
      +  "maximum": 10080,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / follow_up_comments
      Added value: +{
      +  "description": "Up to 4 more comments after the first comment (5 per post in total), posted on the same platforms as the first comment. Shared by every post of the upload; passing it replaces the current list, [] clears it. On X, Threads, Bluesky, Mastodon and Pixelfed each one replies to the previous comment, so they read as a thread.",
      +  "items": {
      +    "properties": {
      +      "delay_minutes": {
      +        "description": "Minutes after the post goes live. 0 = right after the post (about a minute later, after the first comment).",
      +        "maximum": 10080,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "skip_platforms": {
      +        "description": "Platforms that skip this comment, e.g. [\"twitter\", \"linkedin\"].",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "text": {
      +        "description": "The comment text.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 4,
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; beta, needs Facebook Login for Instagram)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; needs Facebook Login for Instagram; for a sponsored post also set TikTok commercialContentDisclosure + isBrandedContent and YouTube hasPaidProductPlacement)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  7. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/brandPartners (string[], up to 2 brand usernames on a paid partnership; beta, needs Facebook Login for Instagram)/productTags (array of {product_id, x?, y?} from the account's Instagram Shop, single images and Reels; beta, needs Facebook Login for Instagram)/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  8. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"AI-generated label, by platform: TikTok isAigc, Instagram isAiGenerated, Facebook isAiGenerated (Reels, photos and carousels), YouTube containsSyntheticMedia; when the user wants content labelled as AI-generated, set it on each of these platforms the upload has a post on. Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  9. Changed3 schema fields changed
    • changedInput schema / properties / custom_thumbnail_url / description
      Previous value: -"Public https:// URL to a cover/thumbnail image (jpeg, png, webp, or gif, max 20 MB). ShortSync downloads the image, stores it in the workspace's bucket, and attaches it to the video_settings row so every unpublished post on this upload uses it at publish time. Pass an empty string to remove the current custom thumbnail. Same SSRF guards as create_video_upload_from_url apply: https only, public IPs, Content-Length required. Mutually exclusive with thumbnail_timestamp_ms."New value: +"Public https:// URL to a cover/thumbnail image (jpeg, png, webp, or gif, max 20 MB). ShortSync downloads the image, stores it in the workspace's bucket, and attaches it to the video_settings row so every unpublished post on this upload uses it at publish time. Used as the cover on YouTube, Instagram Reels, Facebook Reels and Pinterest; other platforms pick their own cover (TikTok uses a frame, set with thumbnail_timestamp_ms). Pass an empty string to remove the current custom thumbnail. Same SSRF guards as create_video_upload_from_url apply: https only, public IPs, Content-Length required. Mutually exclusive with thumbnail_timestamp_ms."
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label)/altText (string, single image posts, alt text for screen readers, max 1000 chars)/altTexts (object, carousels: alt text per image keyed by the image's upload id); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), textOnly, and on text posts only poll ({ options: 2 to 4 strings of max 50 chars, durationMinutes: 5 to 10080, default 1440, multiple: boolean });X (twitter) and Threads also take poll on text posts only (the caption is the question): X { options: 2 to 4 strings of max 25 chars, durationMinutes: 5 to 10080, default 1440 }, Threads { options: 2 to 4 strings of max 25 chars }, open 24 hours; Telegram and Discord take poll on text posts with its own question: Telegram { question: max 300 chars, options: 2 to 10 strings of max 100 chars, multiple: boolean }, sent alone when the caption equals the question, otherwise right after the caption, and open until closed in Telegram; Discord { question: max 300 chars, options: 2 to 10 strings of max 55 chars, durationMinutes: whole hours 60 to 46080, default 1440, multiple: boolean }; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
    • changedInput schema / properties / thumbnail_timestamp_ms / description
      Previous value: -"Extract a frame from the upload's own video at this timestamp (milliseconds from the start) and store it as the video's 'Thumbnail from Timeline' (video_settings.generated_thumbnail_url), matching what the dashboard scrubber writes. Video-only: refuses text posts, image uploads, and carousel parents. Must be within the video's duration.\n\nPublish-time behavior: this DOES NOT overwrite a custom_thumbnail_url the user already set. Platforms that read `custom_thumbnail_url || generated_thumbnail_url` (YouTube, Pinterest, and others) will use this timeline frame only when no custom cover is present. Platforms that read custom only (Instagram in particular) will NOT use this frame as a cover — pass custom_thumbnail_url or custom_thumbnail_upload_id for those. If the user wants the timeline frame to override an existing custom cover, first clear the custom with `custom_thumbnail_url: \"\"`, then set the timestamp.\n\nMutually exclusive with custom_thumbnail_url and custom_thumbnail_upload_id."New value: +"Extract a frame from the upload's own video at this timestamp (milliseconds from the start) and store it as the video's 'Thumbnail from Timeline' (video_settings.generated_thumbnail_url), matching what the dashboard scrubber writes. Video-only: refuses text posts, image uploads, and carousel parents. Must be within the video's duration.\n\nPublish-time behavior: this DOES NOT overwrite a custom_thumbnail_url the user already set. Platforms that read `custom_thumbnail_url || generated_thumbnail_url` (YouTube, Facebook Reels, Pinterest, and others) will use this timeline frame only when no custom cover is present. Platforms that read custom only (Instagram in particular) will NOT use this frame as a cover — pass custom_thumbnail_url or custom_thumbnail_upload_id for those. If the user wants the timeline frame to override an existing custom cover, first clear the custom with `custom_thumbnail_url: \"\"`, then set the timestamp.\n\nMutually exclusive with custom_thumbnail_url and custom_thumbnail_upload_id."
  10. Changed2 schema fields changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile), title (required, max 300 chars; falls back to the shared title), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile; a bare name is always a subreddit, so \"jane\" posts to r/jane, never to u/jane), title (the Reddit post title, max 300 chars; the publisher reads platform_settings.title first and only falls back to the upload's shared title when it's empty, so set it here to give Reddit its own title without touching other platforms' titles), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
    • changedInput schema / properties / title / description
      Previous value: -"New title. Used by YouTube, Facebook, Pinterest, Tumblr (an optional heading above the post text) and Reddit (the post title, max 300 chars, unless platform_settings.title overrides it); ignored by platforms without a title concept."New value: +"New title. Used by YouTube, Facebook, Pinterest, Tumblr (an optional heading above the post text) and Reddit (the post title, max 300 chars, only when platform_settings.title is empty); ignored by platforms without a title concept. This is the upload's shared title, so changing it also changes the YouTube, Facebook, Pinterest and Tumblr titles of the same upload. To set a Reddit-only title, use platform_settings.title on the Reddit post instead."
  11. Changed3 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"New long-form description. Used by YouTube, Facebook, Pinterest, and Tumblr. On Pinterest this is the pin description; on Tumblr it is the post text."New value: +"New long-form description. Used by YouTube, Facebook, Pinterest, Tumblr and Reddit. On Pinterest this is the pin description; on Tumblr it is the post text; on Reddit it is the post body."
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Reddit has subreddit (required; bare name like \"AskReddit\", \"r/AskReddit\" also works, or \"u_username\" for the user's own profile), title (required, max 300 chars; falls back to the shared title), nsfw (boolean, default false), and flairId (id from the subreddit's flair list; some subreddits require a flair); Reddit's post body is the description; Reddit has no carousels, no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
    • changedInput schema / properties / title / description
      Previous value: -"New title. Used by YouTube, Facebook, Pinterest, and Tumblr (an optional heading above the post text); ignored by platforms without a title concept."New value: +"New title. Used by YouTube, Facebook, Pinterest, Tumblr (an optional heading above the post text) and Reddit (the post title, max 300 chars, unless platform_settings.title overrides it); ignored by platforms without a title concept."
  12. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC); Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."New value: +"Partial per-platform settings blob for this post's platform. Shallow-merged into video_settings.platform_settings[platform] — keys you pass overwrite, keys you omit are preserved. Keys are stored in camelCase; snake_case keys are converted automatically. Shape is platform-specific: TikTok has privacyLevel, disableComment, disableDuet, disableStitch, isAigc (boolean — labels the post as AI-generated content), commercialContentDisclosure (boolean — must be true for isYourBrand/isBrandedContent to take effect), isYourBrand, isBrandedContent, and autoAddMusic (photo/carousel only — TikTok auto-picks background music); YouTube has tags/categoryId/playlistIds/privacyStatus/madeForKids/containsSyntheticMedia (boolean — AI/altered-content disclosure); Instagram has collaborators/userTags/locationId/shareToFeed/shareToStory/storyOnly/isPaidPartnership/isAiGenerated (boolean — adds Instagram's \"AI info\" label); Facebook has shareToStory/storyOnly/isAiGenerated (boolean; adds Facebook's \"AI info\" label to Reels, photos and carousels, not to Stories or text posts); LinkedIn has visibility (\"PUBLIC\" | \"CONNECTIONS\" | \"LOGGED_IN\"; Company Pages always post PUBLIC), plus on text posts only either poll ({ question: max 140 chars, options: 2 to 4 strings of max 30 chars, duration: \"ONE_DAY\" | \"THREE_DAYS\" | \"SEVEN_DAYS\" | \"FOURTEEN_DAYS\", default SEVEN_DAYS }; single choice, can't be edited once posted) or document ({ url: public https URL to a .pdf, .ppt, .pptx, .doc or .docx up to 100 MB and 300 pages, title: name shown on the document }), not both; set either to null to remove it; Mastodon has visibility (\"public\" | \"unlisted\" | \"private\"), language (BCP-47), and textOnly; Telegram has textOnly; Discord has channelIds (array of channel ids from list_discord_channels; omit to post to every default channel), silent (boolean — no push/desktop notifications), mention (\"none\" | \"here\" | \"everyone\", default \"none\"), threadName (forum post title, max 100 chars — needed for forum channels, falls back to the caption's first line), username (overrides the webhook's display name, max 80 chars, must not contain \"discord\"), and textOnly (boolean, video uploads only — sends just the caption as a plain channel message); Discord has no custom thumbnail, and its first comment (max 2000 chars) is posted only in forum channels, as the first reply in the post's thread; Tumblr has blogName (short name of one of the connection's blogs; omit to post to the primary blog), tags (array of strings, no \"#\", no commas, max 30), title (optional heading above the post text, max 4096 chars; overrides the shared title), and textOnly (boolean, video uploads only — posts just the title and post text as a text post); Tumblr's post text is the description (up to 5,000 chars), falling back to the caption; Tumblr has no custom thumbnail and no first comment; Pixelfed has visibility (\"public\" | \"unlisted\" | \"private\", default \"public\"), sensitive (boolean, default false — blurs the media behind a warning), and spoilerText (content-warning text, max 140 chars, only used when sensitive is true); Pixelfed has no custom thumbnail, and its first comment (max 500 chars) is posted as a reply under the post; Google Business Profile (google_business) has locationIds (array of location ids from the google_business connection's `locations` in list_platform_connections; omit to post to the default locations; the post fans out to each), ctaType (optional button: \"BOOK\" | \"ORDER\" | \"SHOP\" | \"LEARN_MORE\" | \"SIGN_UP\" | \"CALL\"; null clears it), ctaUrl (http(s) link, required with every ctaType except CALL, which dials the profile's phone number), and textOnly (boolean, video uploads only; posts just the caption, since Google Business Profile can't post video); Google Business Profile has a 1500-character caption, no custom thumbnail and no first comment; Snapchat has formats (array of \"spotlight\" and/or \"story\", at least one) and skipSaveToProfile (boolean, Spotlight-only — hides the video from the Public Profile grid but keeps it in the discovery feed). Hashtags aren't a separate field on Snapchat — write them inline in the caption (Spotlight caption cap 160 chars; Story doesn't use the caption at all). Pinterest has link (destination URL where users land after tapping the pin, must be a full URL like https://example.com), boardId (target board ID — required for publishing), boardName (display name, optional), and altText (screen-reader text, max 500 chars). Call get_post_details first to see the current values, and only touch keys you understand."
  13. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false, destructive=true, openWorld=true; the description goes much further by disclosing the shared video_settings side effect that reaches every unpublished post on the upload, the caption-limit validation and its cross-post check, the auto re-queue of failed posts, and the per-platform cover applicability. That is exactly the mutation blast-radius and error behavior an agent needs beyond the hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what can be edited and on which post states, then the shared-row side effect, then refusals, then validation and re-queue behavior, then the cover caveat. Sentences are long but each carries a distinct rule, and there is no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation with a nested platform_settings blob and no output schema, it covers eligible post states, side effects, rejection causes, re-queue behavior, and points at result.status for outcome. The platform-specific detail lives in the schema, so nothing operationally essential is missing here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds navigational meaning by contrasting shared fields with per-platform overrides and by stating which platforms actually consume custom covers (video posts on YouTube, IG Reels, FB Reels, Pinterest). It leaves idempotency_key, follow_up_comments and thumbnail_timestamp_ms entirely to the schema, which keeps it at 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (edits) plus the exact resources touched (caption, title, description, first comment, custom thumbnail, platform-specific settings) and bounds them to not-yet-published posts. That scope statement implicitly separates it from publish_now/retry_post/delete_published_post, but no sibling tool is named explicitly, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not conditions — it refuses posts already queued for publish, currently processing, or already published — and directs per-platform overrides to platform_caption/platform_first_comment. It never names an alternative tool (e.g. batch_update_posts) for bulk edits, so the routing guidance is clear but not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.