POST /api/v1/posts/validate
Validate a post without creating it: runs every check creation and publishing would (content, targets, account ownership and health, per-platform data and offline media rules, approval, 24-hour duplicate, x-request-id replay) and collects all errors. Same body as POST /api/v1/posts plus checkMedia. A failing post still answers 200 with valid:false
BearerAuthAuthorizationBearer <token>API key sk_...
x-request-id?stringChecked for replay, never used up
application/json- body
content*stringlength <= 40000platforms*array<>1 <= items <= 20scheduledFor?stringISO 8601 with time zone
date-timepublishNow?booleanPublish live now (subject to approval). Without publishNow or scheduledFor the post is a draft
dryRun?booleanValidate only: answers 200 with the PostValidation result (see POST /api/v1/posts/validate) and creates nothing; x-request-id is not used up
checkMedia?booleanWith dryRun: also HEAD-check each media URL
PostValidation
application/json- response
valid?booleanerrors?array<>warnings?array<>targets?array<>wouldRequireApproval?booleanapprovalReasons?array<>duplicateOfPostId?stringPost with the same content in the last 24 hours
replayOfPostId?stringPost that x-request-id already created
scheduledFor?stringstatus?stringThe status creating it now would give
"draft""scheduled""queued""pending_approval"curl -X POST 'https://example.com/api/v1/posts/validate' \ -H 'Content-Type: application/json' \ -d '{ "content": "string", "platforms": [ { "accountId": "string" } ]}'{ "valid": true, "errors": [ { "code": "string", "message": "string", "accountId": "string", "field": "string" } ], "warnings": [ { "code": "string", "message": "string", "accountId": "string", "field": "string" } ], "targets": [ { "accountId": "string", "platform": "string", "accountName": "string", "ok": true, "errors": [ { "code": "string", "message": "string", "accountId": "string", "field": "string" } ], "warnings": [ { "code": "string", "message": "string", "accountId": "string", "field": "string" } ] } ], "wouldRequireApproval": true, "approvalReasons": [ "string" ], "duplicateOfPostId": "string", "replayOfPostId": "string", "scheduledFor": "string", "status": "draft"}