Validate a Post (Dry Run)
Checks a post the way publishing would, but publishes nothing: no post is created, nothing is queued, no file is stored. Use it before a bulk post, or in an automation, to catch an error now rather than hours later when a scheduled post fails.
Endpoint
POST /api/v1/upload/validate
Same multipart/form-data body as Bulk Upload: send exactly what you would send to /upload/bulk. Requires x-api-key.
What is checked
- Each account exists, belongs to you (or your team) and is active.
- Your plan includes the platform.
- Monthly quota, daily cap per account, and room in your publishing queue.
- Caption and title length for each platform, banned hashtags.
- Required media: text-only posts only go to Facebook, LinkedIn, Bluesky and Threads.
- Platform-specific settings (for example YouTube title, tags and privacy).
Not checked: the media content itself (format, duration, resolution). That happens when the post is published.
Response
{
"success": true,
"valid": false,
"errors": [
{
"accountId": "cmf3kb7re0004l408zt2m5wxc",
"platform": "bluesky",
"error": "Bluesky post exceeds the 300-grapheme / 3000-byte limit."
}
],
"targets": [
{ "accountId": "cmf3k9x2a0001l408q7vbn2hd", "platform": "tiktok", "scheduledFor": null }
]
}validistrueonly when every account would accept the post.errorslists each account that would reject it. An error withaccountId: nullapplies to the whole request (for example, the monthly quota is used up).targetslists the accounts that would accept it, with the scheduled time if you sentschedule_date.
Example Request
curl -X POST https://api.multi-upload-tool.com/api/v1/upload/validate \
-H "x-api-key: YOUR_API_TOKEN" \
-F 'accounts=["cmf3k9x2a0001l408q7vbn2hd", "cmf3kb7re0004l408zt2m5wxc"]' \
-F "photo=https://example.com/image.jpg" \
-F "description=Launch day! #newproduct"Over MCP, the same check is the validate_post tool, which takes the same arguments as create_post.