Preparation and review
Preflight checks readiness without creating a schedule. A schedule with pending_review stays held. Use the returned blockers and next actions to explain what still needs attention.
Social media scheduling API
Prepare posts from code, check what is ready and create schedules with an explicit approval state. Start with a held workflow before adding publishing authority.
{
"approval_status": "pending_review",
"status": "action_required",
"blocking_reason": {
"code": "APPROVAL_PENDING"
},
"latest_execution": null
}Illustrative fields from the returned schedule. A held schedule creates no execution, job, or provider request.
The sequence below is a preparation workflow. Each step uses the IDs and links returned by the previous request.
Step 1
Read the authorised context, platform capabilities and connected publishing targets. Choose returned IDs and supported formats.
GET /v1/contextGET /v1/platforms/capabilitiesGET /v1/brands/:brand_id/targetsStep 2
Import a public image or video, then read its readiness. If it needs attention, return the guidance to your user before continuing.
POST /v1/brands/:brand_id/media/importsGET /v1/brands/:brand_id/media/:media_idStep 3
Attach the media and intended accounts to the draft. Check the requested time and approval state without creating a schedule.
POST /v1/brands/:brand_id/content-itemsPOST /v1/brands/:brand_id/content-items/:content_item_id/preflightStep 4
Use pending_review and a stable idempotency key for the schedule. Read its returned status to confirm that approval is still required.
POST /v1/brands/:brand_id/schedulesGET /v1/brands/:brand_id/schedules/:schedule_idPreflight checks readiness without creating a schedule. A schedule with pending_review stays held. Use the returned blockers and next actions to explain what still needs attention.
An approved schedule additionally requires publish:execute and can lead to publication. Confirm the accounts, content and time before requesting it. Read the receipt to check what happened on each platform.
Platform settings, media repair and cleanup have their own requirements. Use the full reference for request bodies, scopes and error responses.
Read choices for the exact TikTok target. Refresh them explicitly when needed, then update only the privacy choice on the same draft and rerun preflight.
GET /v1/brands/:brand_id/targets/:integration_id/dynamic-optionsPOST /v1/brands/:brand_id/targets/:integration_id/dynamic-optionsPUT /v1/brands/:brand_id/content-items/:content_item_id/tiktok-privacyCreate a reviewed crop or padded derivative without overwriting the original media.
POST /v1/brands/:brand_id/media/:media_id/repair-derivativesRead per-platform results for one schedule. Cleanup requires the exact authority returned in its receipt and the appropriate publishing permission.
GET /v1/brands/:brand_id/schedules/:schedule_id/receiptPOST /v1/brands/:brand_id/schedules/:schedule_id/provider-cleanupGrant only the operations and brands your workflow needs.
See how brands, media, drafts and schedules fit together.
Connect the API to n8n, Make or Zapier.
Use supported operations through a hosted MCP connection.
Create a scoped key and follow the held schedule recipe using your own connected account.