validate_post
Dry run of create_post: takes the same arguments and runs the same checks (account status, plan, daily caps, monthly quota, queue room, caption and title limits, required platformSettings, scheduling window) without publishing anything. Call it before create_post on any batch, or whenever unsure — a post rejected here would otherwise fail later, sometimes hours later for scheduled posts. mediaUrls are not downloaded: file format, size and duration are only checked when the post is actually published.
Returns: { valid, errors: [{ accountId, platform, error }], targets: [{ accountId, platform, scheduledFor }] }. An error with accountId null applies to the whole batch.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Post text / caption | |
| status | No | Create the post without publishing it: 'draft' (you or the user keeps editing) or 'pending_approval' (a human approves it in the app or through create_review_link). In a team that requires approval, a member's posts are always 'pending_approval'. | |
| mediaUrls | No | Public http(s) URLs of images or videos to attach | |
| overrides | No | Per-network or per-account variants: keys are a platform name ("bluesky") or an accountId, values { text?, title? }. An accountId key wins over its platform, which wins over the shared text. Use it when one caption cannot fit every network (Bluesky 300 chars vs YouTube 5000). | |
| accountIds | Yes | Connected account ids from list_accounts | |
| scheduledAt | No | ISO 8601 — omit for immediate publish | |
| idempotencyKey | No | Unique key for this post (e.g. a UUID). Reusing it within 24h returns the first result instead of publishing again. | |
| platformSettings | No | Per-platform required settings. See tool description and get_platform_capabilities. |