validate_post
Validate a post BEFORE creating or publishing it. Checks caption length, link count, media type/count/size, image aspect ratio, video duration, and connection/token health for every target platform -- without creating anything. ALWAYS call this with the exact arguments you intend to pass to create_post_draft / schedule_post_draft / publish_now / publish_scheduled, BEFORE calling them, and again after any edit. Errors are guaranteed publish failures: fix them or drop that platform. Warnings publish but degraded (truncated caption, blur-fitted image, heuristic link count) -- surface them to the user before publishing. Pass scheduledFor to validate under the scheduled rules (all 8 platforms, video allowed); omit it for immediate-post rules. Does not check the daily quota (call check_quota). base64Images cannot be pre-validated -- they are checked at draft time once Socialync hosts them.
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>"
},
"name": "validate_post"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Post title (required when youtube is in platforms). | |
| caption | Yes | The exact caption you intend to post. | |
| mediaId | No | Existing Socialync media from list_media (e.g. "upload:abc123"). Mutually exclusive with imageUrls/videoUrl. | |
| videoUrl | No | One publicly fetchable https video URL. Requires scheduledFor (video posts are scheduled-only). | |
| imageUrls | No | Up to 10 publicly fetchable https image URLs -- the same ones you will pass to the posting tool. | |
| platforms | No | Platforms the post will target. Pass platforms OR audienceId, not both. Without scheduledFor, TikTok/YouTube fail validation (they post through the scheduled tools only). | |
| profileId | No | The Socialync profile to post from. Call list_profiles to see authorized profiles. Required only when more than one profile is authorized. | |
| 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. | |
| 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 | No | ISO 8601 UTC datetime if this will be a scheduled post. Presence switches validation to the scheduled rules. | |
| 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 | The instagramTrialReel value you will pass to schedule_post_draft / publish_scheduled, if any. | |
| tiktokPrivacyLevel | No | The tiktokPrivacyLevel you will pass to schedule_post_draft / publish_scheduled. 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). Pass exactly what you will pass to the posting tool. |