Scheduling to YouTube through SkedCast's API#
SkedCast's /v1 REST API schedules Shorts and long-form videos to YouTube the same way it does every other platform: one POST https://api.skedcast.com/v1/posts call with a content caption and a targets block naming the connected accounts.
You need a YouTube channel connected through its Google account, connected once through the console or through a connect link that POST /v1/clients/{id}/connect-invites creates.
The request is one contract for every connected platform. The fields that are specific to YouTube are listed below.
YouTube-specific fields#
| Field | Notes |
|---|---|
title | Optional. YouTube needs a title, so when you omit it SkedCast uses the caption's first line (up to 100 characters). Send one to choose it yourself. |
madeForKids | Optional boolean; false ("not made for kids") unless you set it. It is a COPPA declaration, so it is never read from the channel. |
privacyStatus | Optional: public (the default), unlisted or private. A natively scheduled video is uploaded private until its time. |
captions | Optional subtitle tracks (up to 10, SRT or WebVTT with timing), uploaded once the video is live. Needs the youtube.force-ssl permission. The outcome is captionIssue on the post target. |
chapters | Optional [{ start, title }] in whole seconds: the first at 0, at least 3, each at least 10 seconds long. Added to the description for YouTube to build chapters from. |
playlistId | Optional: adds the video to one of the channel's playlists once it is live (playlistIssue reports a failure). |
Example: schedule a post to YouTube#
{
"clientId": "00000000-0000-4000-8000-000000000001",
"content": "Building a scheduler in public: Day 12 — the API layer.\n\nToday: idempotency keys and why they matter.",
"mediaIds": ["00000000-0000-4000-8000-000000000003"],
"targets": { "mode": "accounts", "accountIds": ["00000000-0000-4000-8000-000000000002"] },
"schedule": { "type": "at", "scheduledAt": "2030-01-15T15:00:00Z" },
"variants": [
{ "platform": "youtube", "overrides": { "madeForKids": false } }
]
}YouTube facts#
| Fact | Value |
|---|---|
| Max caption length | 5,000 characters |
| Media per post | one video per upload. |
| Native platform scheduling | Available. Send scheduleMode: "native" to hand the timer to YouTube's own scheduler; by default SkedCast holds the timer. |
| SkedCast's default pacing | 5 / day, with at least 30 min between posts, per account. This is SkedCast's per-account pacing, not YouTube's own published limit. See the rate limits reference. |
Published-post URL (permalink) | https://youtu.be/{id}, always returned once the video is published. |
Reading status and results#
GET https://api.skedcast.com/v1/post-targets/{id} returns the YouTube target's status (for example scheduled, on_hold, published, failed or missed). Once the post is published, externalId and permalink point at the live post (see the table above).
on_hold:holdReasonsays why (pacing, a platform limit, media still processing, your plan, or a channel that needs reconnecting) andretryAtsays when the next try is.missed: the scheduled time passed while the post waited.outcomeReasonsays why; reschedule it.failed:failureReasonsays why. When the post may already be live,outcomeReasonisdelivery_unconfirmed: check the account, because a retry is refused.requiredActionsays what you must do (reconnect_channel,change_plan,contact_support,reschedule,retryorcheck_platform), or isnullwhen nothing is needed.- Instead of polling, subscribe to the
target.publishedandtarget.failedwebhooks (one per destination;post.publishedandpost.failedreport the whole post). See the webhooks reference below. - Or connect an MCP client and ask an agent to check. See the MCP hub below.
FAQ
- Is YouTube's own scheduler used, or SkedCast's?
- SkedCast's, by default: SkedCast publishes the video at the scheduled time. Send `scheduleMode: "native"` with a future time to use YouTube's own scheduler instead: the video is uploaded as private and YouTube makes it public at the time, so an unlisted video cannot be scheduled natively.
- Can I edit a YouTube video after it is published?
- Yes. POST /v1/posts/{id}/targets/{targetId}/edit-published (MCP tool edit_published_post) changes the title, description, tags, category, privacy, thumbnail, translations and subtitle tracks of a video that is live or natively scheduled, without republishing it. When YouTube publishing is temporarily at capacity, the call returns 429 youtube_units_exhausted with a Retry-After header. Wait that many seconds, then retry.