Schedules and slots
Read, edit, and cancel existing schedules, distinguish UTC slots from queued posts, and preserve user-approved content.
Compact reference for agents making REST requests. All endpoint paths below are relative to https://backend.blotato.com/v2. For task instructions, read the workflow guide. For tool calls, use the MCP reference.
Managing scheduled posts
Resolve the user's requested date and timezone before changing a schedule. Replace example timestamps with the requested future time within the account's scheduling horizon. Use the existing schedule ID, not a post submission ID. Reading schedules does not authorize updates or cancellations.
List scheduled posts:
GET /schedules?limit=20&cursor=OPTIONAL_CURSOR
Response:
{
"items": [
{
"id": "sch_abc123",
"scheduledAt": "2026-04-01T14:00:00.000Z",
"account": {
"id": "98432",
"name": "Jane Smith",
"username": "janesmith",
"profileImageUrl": "https://...",
"subaccountId": null,
"subId": null,
"subaccountName": null
},
"draft": {
"accountId": "98432",
"content": { "text": "...", "mediaUrls": [], "platform": "twitter" },
"target": { "targetType": "twitter" }
}
}
],
"count": "12",
"cursor": "eyJzY2hlZHVsZWRBd..."
}
NOTE: "draft" has the same structure as the "post" object in POST /posts.
NOTE: "scheduledAt" is the response field name. "scheduledTime" is the input field name for updates.
Get single schedule:
GET /schedules/:id
Response: { "schedule": { ...same fields as list item... } }
Update schedule (content, time, or both):
PATCH /schedules/:id
{
"patch": {
"scheduledTime": "2026-04-05T10:00:00Z",
"draft": {
"accountId": "98432",
"content": { "text": "Updated text", "mediaUrls": [], "platform": "twitter" },
"target": { "targetType": "twitter" }
}
}
}
Response: 204 No Content
RULES:
- At least one of scheduledTime or draft must be provided.
- scheduledTime must be valid ISO 8601 and in the future.
- draft must be a COMPLETE post object (accountId, content, target). The endpoint
does NOT merge partial drafts. Read GET /schedules/:id first, preserve the
returned schedule.draft fields, edit only the requested fields, and send the
complete draft in patch.draft. Do not send the schedule wrapper as draft.
- DO NOT also call POST /posts (or blotato_create_post) when editing a schedule.
PATCH /schedules/:id updates the existing schedule in place. Calling create
publishes a separate post and you end up with duplicates at publish time.
- The update endpoint does NOT accept useNextFreeSlot. To reschedule to the next
available slot, first call POST /schedule/slots/next-available to get the time,
then pass it as scheduledTime.
- After PATCH, GET /schedules/:id and compare scheduledAt and draft with the
requested changes. A 204 response has no updated schedule body.
- Changing scheduledTime clears the previous slot association. Editing content
without changing the time preserves that association.
Delete schedule:
DELETE /schedules/:id
Response: 204 No Content (publishing job is also cancelled)
Cancel only the schedule the user authorized. This is not deletion of a live social post.Schedule slots (content calendar time windows)
Return to the agent reference index.
Last updated