Update a template
update_templateUpdate a template's name, description, shared content or media, targeted networks, per-network overrides (platformContent), network options (metadata), or Instagram contentType. Only the fields you pass change. Pass platformContent as null to clear every per-network override, or metadata as null to clear the network options.
Platform rules (enforced by the API — validate_post checks all of them):
Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment
Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–900s, supports first comment
Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment
X (Twitter): ≤280 chars (25000 with a long-post subscription), ≤4 images, ≤1 videos, supports first comment
LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s
TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s, supports first comment (TikTok Business connections only)
YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos
Telegram: ≤4096 chars (≤1024 with media), ≤10 images, ≤1 videos
WhatsApp: ≤4096 chars (≤1024 with media), ≤1 images, ≤1 videos
Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s
Google Business: ≤1500 chars, ≤10 images, ≤1 videos
Discord: ≤2000 chars, ≤10 images, ≤1 videos
Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s
Mastodon: ≤500 chars, ≤4 images, ≤1 videos
Images and a video in the same post are refused on Facebook, LinkedIn, Pinterest, X (Twitter), Bluesky, Mastodon, TikTok — attach one kind per post (or per platform override)
X counts weighted length, not characters: every URL counts 23, CJK characters count 2, each emoji counts 2; the ≤280 limit applies to that count
X long posts: an X connection whose metadata.subscriptionType (list_platform_connections) is Basic, Premium, PremiumPlus may post up to 25000; every X connection the post targets must have one, or the whole post is held to 280. The first comment stays ≤280. A subscription bought after connecting counts once an owner or admin presses Refresh on the X connection in PostRite
Bluesky counts graphemes (what a reader sees as one character, so an emoji is 1), not UTF-16 units; the ≤300 limit applies to that count
Pinterest: requires metadata.pinterest.boardId (from list_pinterest_boards) unless the account has a default board
Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId, from list_discord_channels)
WhatsApp: requires metadata.whatsappRecipient (phone number)
TikTok: requires metadata.tiktokOptions.privacyLevel, one of the account's privacy_level_options from get_tiktok_creator_info
TikTok connection method (metadata.authMethod on list_platform_connections: "business_api" is TikTok Business, absent or "login_kit" is Login Kit): a TikTok Business VIDEO publishes public only — metadata.tiktokOptions.privacyLevel must be PUBLIC_TO_EVERYONE — and is capped at 1 GB (Login Kit: 4 GB); photo posts keep the privacy_level_options from get_tiktok_creator_info on both
TikTok Business only (Login Kit refuses both): metadata.tiktokOptions.uploadAsDraft: true sends the video to the creator's TikTok drafts instead of publishing it — TikTok then ignores everything but the caption, though privacyLevel must still be set — and metadata.tiktokOptions.coverMediaId (a library image) sets a separate video cover, which makes TikTok ignore videoCoverTimestampMs
TikTok first comment: metadata.tiktokOptions.firstComment (≤1200 chars) is posted only on a TikTok Business connection and never on an uploadAsDraft post; on Login Kit the post still publishes but the comment is not posted (validate_post warns with validation.tiktokFirstCommentBusinessOnly)
TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000)
Instagram contentType REEL: exactly 1 video, 3–900s
Instagram contentType STORY: exactly 1 media, video 3–60s and ≤100 MB, no caption
Facebook metadata.facebookOptions.postType REEL: exactly 1 vertical (9:16) video, 3–90s, at least 540×960; Meta allows 30 API-published Reels per Page per 24h
Facebook metadata.facebookOptions.postType STORY: exactly 1 image or video (3–60s), no caption, no first comment
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"templateId": "<templateId>"
},
"name": "update_template"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New template name | |
| tags | No | Tags for organizing templates; applied, they become the post's hashtags, appended to the text on most networks (not Threads or YouTube) and counted against each network's character limit | |
| content | No | Shared template body; may contain {{variables}}. Max 2000 characters — this is the template cap, well below what the networks themselves allow. | |
| mediaIds | No | Media library IDs (from list_media or import_media_from_url) attached to every network — the preferred way to attach media. Images and videos only: a template, like a post, refuses an audio file or PDF document. On update_template, an empty array leaves the media untouched (passing [] does not remove media — removing all media is done in the app) | |
| metadata | No | Portable network options; pass null to clear them. Account-bound keys are stripped server-side. | |
| mediaUrls | No | Escape hatch for media proxy URLs — prefer mediaIds | |
| platforms | No | Networks this template targets. A suggestion for the editor, not a restriction — the template still applies to any account. | |
| templateId | Yes | The template ID (from list_templates) | |
| contentType | No | Instagram post type (POST | REEL | STORY); pass null to clear it | |
| description | No | Internal note about when to use this template; never published | |
| organizationId | No | Organization to act in — an id from list_organizations. Required when this connection was authorized for more than one organization; omit it when there is only one. | |
| platformContent | No | Per-network overrides keyed by Platform; pass null to clear every override |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| template | No |