schedule_post_draft
Hold a post to be SCHEDULED for future publishing as a pending draft WITHOUT scheduling it. Nothing enters the schedule until you show the user the exact post and time, they say yes in chat, and you call approve_draft(draftId); a draft nobody approves expires after 24 hours. Never tell the user to open the Socialync app to approve it: the whole flow stays in this chat. When the user has already confirmed the post, call publish_scheduled instead (one step). Once approved, it enters the scheduled queue and publishes automatically at scheduledFor. Returns a draft_id, expiry, and dailyDraftsRemaining for the target publish day. Media: up to 10 images via imageUrls/base64Images, OR one video via videoUrl, OR existing Socialync media via mediaId (from list_media). YouTube is allowed ONLY for video posts (and needs title). TikTok takes one video or a photo post of images (a swipeable photo carousel). Instagram requires media. Hard cap: 10 drafts per UTC day per profile (the day determined by scheduledFor). Each future day has its own independent 10-cap. ALWAYS run validate_post with these same arguments FIRST and resolve every error it reports before calling this.
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": {
"caption": "<caption>",
"scheduledFor": "<scheduledFor>"
},
"name": "schedule_post_draft"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Post title. REQUIRED when youtube is in platforms (it becomes the YouTube video title). | |
| caption | Yes | Post caption/text content. | |
| mediaId | No | Reference to media already in Socialync, from list_media (e.g. "upload:abc123"). Use this when the user uploaded their video/images in the Socialync app. Mutually exclusive with imageUrls/base64Images/videoUrl. Video mediaIds work on ALL platforms including TikTok and YouTube; image mediaIds work everywhere except YouTube. | |
| videoUrl | No | One publicly fetchable https video URL (max 512MB). Socialync copies it into its own storage when you call this tool, so the link only has to work right now (an expiring export link is fine); a link that is already dead fails the call. Large videos take a while to copy; for files you generated yourself prefer create_media_upload + mediaId. No base64 video (if the user attached a video file in chat, have them upload it at socialync.io and use mediaId instead). Mutually exclusive with imageUrls/base64Images/mediaId. Each platform enforces its own format/duration/size limits at publish time (e.g. Bluesky ~60s, X free tier ~2:20). | |
| imageUrls | No | Up to 10 publicly fetchable image URLs (https). Socialync copies them into its own storage when you call this tool, so the links only have to work right now (an expiring export link is fine). Combined with base64Images cannot exceed 10 total. Mutually exclusive with videoUrl/mediaId. | |
| platforms | No | Platforms to draft for. Any of: facebook, instagram, tiktok, youtube, linkedin, twitter, threads, bluesky. YouTube requires a video (mediaId or videoUrl) and a title. TikTok requires a video or images. Pass platforms OR audienceId, not both. | |
| profileId | No | The Socialync profile to post from. Call list_profiles to see the profiles you can post to. Required only when this connection is authorized for more than one profile; if exactly one is authorized it is used automatically. | |
| audienceId | No | A saved audience id from list_audiences. Expands to the platforms that audience reaches on the target profile; any member it cannot reach (other brand, needs reconnect, secondary account without its primary) is reported back in skippedMembers instead of failing the call. Use INSTEAD of platforms, never together. | |
| base64Images | No | Up to 10 images as base64 strings (data URIs accepted). Use when the user uploaded image(s) to you directly -- Socialync hosts them so they stay reachable until the scheduled publish time. Per-image cap: 8MB. Combined with imageUrls cannot exceed 10 total. Mutually exclusive with videoUrl/mediaId. | |
| firstComment | No | Optional "first comment": text Socialync posts as a comment under the post right after it publishes -- the classic home for hashtags and links, keeps the caption clean. One string for all platforms. Supported: instagram, threads, twitter, youtube, linkedin, bluesky. Facebook and TikTok do not support it (they record it as skipped; the post itself is unaffected). Per-platform comment length limits are enforced at draft time: instagram 2200, threads 500, twitter 280, youtube 10000, linkedin 1250, bluesky 300. A failed comment never fails the post. | |
| scheduledFor | Yes | ISO 8601 UTC datetime for when to publish (e.g. 2026-04-15T14:00:00Z). Must be in the future. | |
| exceptPlatforms | No | Only valid together with audienceId: platforms to leave out of the expanded audience for this one post (e.g. exclude tiktok when the post has no video). | |
| instagramTrialReel | No | Optional. Post the Instagram leg of this VIDEO post as an Instagram Trial Reel, shown only to non-followers. MANUAL: stays a trial until the user shares it with followers in the Instagram app. AUTO: Instagram shares it with followers automatically if it performs well. Omit for a regular Reel. One video only: images, carousels and Stories cannot be trial reels. Sharing a trial with followers cannot be done through the API, so never tell the user it will happen for them on MANUAL. An Instagram-only trial reel uses its own daily allowance (10 per UTC day per profile), separate from regular posts, so a trial reel plus a regular post of the same video later does not halve the regular allowance. Same as platformSpecificSettings.instagram = { trialReel: true, graduationStrategy: "MANUAL" | "AUTO" }. | |
| tiktokPrivacyLevel | No | Required when tiktok is in platforms. Who can view the TikTok post (video or photos): PUBLIC_TO_EVERYONE (Everyone), MUTUAL_FOLLOW_FRIENDS (Friends), FOLLOWER_OF_CREATOR (Followers, private TikTok accounts only) or SELF_ONLY (Only me). TikTok requires this to be the user's own choice with no preset value: ask the user and pass their answer. One answer covers every TikTok post the user asks for together (for example "schedule all five, everyone can view"), so ask once per batch, not once per post. Never pick a level yourself or carry one over from posts the user did not say it applies to. When you ask, also tell them: "By posting, you agree to TikTok's Music Usage Confirmation" (https://www.tiktok.com/legal/page/global/music-usage-confirmation/en). Same as platformSpecificSettings.tiktok.privacyLevel. | |
| platformSpecificSettings | No | Per-platform settings keyed by platform. Caption overrides: { "<platform>": { "customCaption": "..." } }. Instagram Trial Reel: { "instagram": { "trialReel": true, "graduationStrategy": "MANUAL" | "AUTO" } } (or use instagramTrialReel). TikTok: { "tiktok": { "privacyLevel": "PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "FOLLOWER_OF_CREATOR" | "SELF_ONLY" } } is required for every TikTok post and must be the user's own choice (or use tiktokPrivacyLevel). TikTok interaction settings default to allowed; pass { "tiktok": { "allowComments": false, "allowDuets": false, "allowStitching": false } } to turn any of them off. TikTok commercial content: { "tiktok": { "brandContent": true } } labels it "Promotional content" (the creator's own business); { "tiktok": { "brandedContent": true } } labels it "Paid partnership" (a third party). A paid partnership cannot be SELF_ONLY. AI label: { "<platform>": { "aiGenerated": true } } on tiktok, youtube or instagram shows that platform's AI-generated label (TikTok video only). Set it when the user says the media was made or substantially changed with AI. YouTube: { "youtube": { "isPrivate": true } } uploads as private; { "youtube": { "isKidsContent": true } } marks it made for kids. Threads topic: { "threads": { "topicTag": "Book Club" } } files the post under that topic (one per post, up to 50 characters, no periods or ampersands). |