REST APIPOST
Check a Bulk Schedule
Dry-run a bulk schedule: send the same body as Bulk Schedule and get one report per post, in request order, without creating any post.
POST
https://post.adaptlypost.com/post/api/v1/social-posts/bulk/validateCheck a whole bulk schedule without creating any post. Send the same body as Bulk Schedule and get one report per post, in request order.
API Key (Bearer token)
posts.draft is enough to run the check. Each report's requiredPermissions names what scheduling that post would need.
Request body
The same body as Bulk Schedule, with up to 100 posts. Batch-level configs apply to every post and per-post configs override them, just as when scheduling. Nothing is created or stored.
Response fields
| Field | Description |
|---|---|
valid | true only when every post is valid |
totalValid | How many posts have no ERROR issue |
totalInvalid | How many posts have at least one ERROR issue |
results | One entry per post as { index, report }. index is the post's position in posts, starting at 0. report has the same fields as the Check Post response |
Check before you schedule
Bulk Schedule schedules every valid post even when others fail. Fix the posts whose report is not valid first, and the whole batch goes out as planned.Check a Bulk Schedule
curl --request POST \
--url https://post.adaptlypost.com/post/api/v1/social-posts/bulk/validate \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"platforms": ["TWITTER"],
"timezone": "America/New_York",
"twitterConnectionIds": ["conn_abc123"],
"posts": [
{
"contentType": "TEXT",
"text": "Tip of the week: batch your posts on Mondays.",
"scheduledAt": "2026-11-02T14:00:00Z"
},
{
"contentType": "TEXT",
"text": "<a 320-character announcement>",
"scheduledAt": "2026-11-04T14:00:00Z"
}
]
}'200
{
"valid": false,
"totalValid": 1,
"totalInvalid": 1,
"results": [
{
"index": 0,
"report": {
"valid": true,
"outcome": "SCHEDULED",
"scheduledAt": "2026-11-02T14:00:00.000Z",
"requiredPermissions": ["posts.schedule"],
"issues": [],
"accounts": [
{
"platform": "TWITTER",
"connectionId": "conn_abc123",
"accountName": "@yourhandle",
"status": "READY",
"issues": []
}
],
"notChecked": []
}
},
{
"index": 1,
"report": {
"valid": false,
"outcome": "SCHEDULED",
"scheduledAt": "2026-11-04T14:00:00.000Z",
"requiredPermissions": ["posts.schedule"],
"issues": [],
"accounts": [
{
"platform": "TWITTER",
"connectionId": "conn_abc123",
"accountName": "@yourhandle",
"status": "BLOCKED",
"issues": [
{
"code": "TEXT_TOO_LONG",
"severity": "ERROR",
"message": "Text exceeds maximum length for Twitter/X. Maximum is 280 characters",
"platform": "TWITTER",
"connectionId": "conn_abc123"
}
]
}
],
"notChecked": []
}
}
]
}