Browse docs
Before you publish#
You need one already-connected account for the platform. Connect it yourself in the Agency Console, or — if a client owns the account — mint a self-serve connect link with POST /clients/:id/connect-invites and send it to them; they authorize from that page without ever getting a SkedCast login.
GET /v1/accounts lists what's connected, with each account's id — that id is what you pass in targets.accountIds below.
Compose and schedule#
curl -X POST https://api.skedcast.com/v1/posts \
-H "Authorization: Bearer sked_live_YOUR_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"clientId": "<clientId>",
"content": "Launch day is here 🚀",
"mediaIds": ["<mediaAssetId>"],
"targets": { "mode": "selection", "accountIds": ["<youtubeAccountId>"] },
"schedule": { "type": "at", "scheduledAt": "2026-07-01T15:00:00Z" }
}'The YouTube API fields to upload a video#
Everything platform-specific goes in one variants entry with "platform": "youtube" and an overrides object. The adapter reads only the keys it declares (below) and ignores the rest — send youtube keys on a youtube variant, nothing more.
With the platform-specific overrides#
{
"clientId": "<clientId>",
"content": "How bulk scheduling actually works, in 60 seconds.",
"mediaIds": ["<videoAssetId>"],
"coverMediaId": "<coverImageAssetId>",
"targets": { "mode": "selection", "accountIds": ["<youtubeAccountId>"] },
"variants": [
{
"platform": "youtube",
"overrides": { "title": "Bulk scheduling in 60 seconds", "categoryId": "28", "madeForKids": false }
}
],
"schedule": { "type": "at", "scheduledAt": "2026-07-01T15:00:00Z" }
}Checking the result#
Publishing fans out into one post target per account. GET /post-targets/:id (or GET /posts/:id) reports status, plus externalId (youtube's own post id) and permalink (its public URL) once published. Subscribe to the target.published / target.failed webhooks instead of polling if you can accept inbound HTTP — see the webhooks guide.
FAQ
- What happens if I don't send a title?
- SkedCast falls back to the first line of your `content` caption. That's a plain-text fallback, not a generated title — send `overrides.title` explicitly for anything you actually want as the video's title.
- How do I post a custom thumbnail?
- Upload the image as its own media asset (the same presign → PUT → register sequence as any upload) and pass its id as the post-level `coverMediaId`. Omit it to use the auto-extracted poster frame.