YouTube Data API · Captions

A caption track looks like a text field in the dashboard. In the YouTube Data API it is a fully OAuth-gated write resource with its own quota bill — and Google prices a single caption upload at 400 units, drawn from the same 10,000-unit daily pool the rest of the app depends on. Before building a captioning, subtitling, or localization feature on top of YouTube, it is worth knowing exactly what that costs and where teams get stuck.

What the Captions API Actually Requires

OAuth 2.0, not an API key

Every caption method — list, insert, update, and delete — requires an authorized OAuth 2.0 request. An API key alone, which works for public read-only endpoints elsewhere in the Data API, does not work here.

youtube.force-ssl or youtubepartner scope

Google's own reference pages require at least one of these two scopes on all four caption methods. The two are not interchangeable for every account type — youtubepartner is documented elsewhere as built for CMS-linked content owners.

Three required fields on insert

snippet.videoId, snippet.language, and snippet.name must all be set before a track can be created. The name field has a hard 150-character ceiling before the API rejects it.

A quota bill per call

captions.list and captions.delete cost 50 units each. captions.insert costs 400 units. captions.update costs 450 units. All four draw from the same shared daily allocation as every other call the app makes.

Where Teams Get Stuck

The shared 10,000-unit ceiling

Google's default allocation is 10,000 units per day combined for nearly every endpoint, aside from separate 100-call caps on search.list and videos.insert. Captions share that general pool with everything else the app does that day.

The math runs out fast

At 400 units per insert, the default daily quota supports roughly 25 caption uploads before quotaExceeded — fewer once list, update, delete, and any other API activity that day are counted against the same pool.

More quota means an audit, not a toggle

Google's guidance is that requesting quota beyond the default requires first completing an audit showing compliance with the YouTube API Services Terms of Service, submitted through the Audit and Quota Extension Form.

A partial update can quietly delete data

The update method's own documentation warns that any snippet property left out of a request will be deleted if it already had a value — a real risk when a call is only meant to flip isDraft.

Auto-sync no longer works through the API

YouTube deprecated the sync parameter for both captions.insert and captions.update on 13 March 2024. Auto-syncing is still available inside Creator Studio, just not for API callers who assumed the parameter still worked.

captionExists blocks silent re-uploads

A 409 conflict fires when a video already has a track with the same language and name pairing. The fix is deleting the existing track or renaming the new one — not retrying the identical call.

How the Access Path Actually Works

Confirm the scope path before writing code

Decide whether the integration authenticates as a regular OAuth 2.0 client requesting youtube.force-ssl, or, for CMS-linked content owners, the youtubepartner scope. Pick the wrong one and every caption call returns forbidden.

Map the required snippet fields

videoId, language, and name are non-negotiable on insert, and name has a hard 150-character ceiling before nameTooLong blocks the call outright.

Budget the daily quota against the feature

With insert at 400 units and update at 450, calculate how many caption operations the product actually needs per day against the shared 10,000-unit default before promising the feature to users.

Design for the audit, not around it

If projected volume will exceed the default allocation, plan the Audit and Quota Extension Form and its Terms-of-Service compliance review into the launch timeline instead of discovering quotaExceeded in production.

Handle the deterministic errors client-side

captionExists, videoNotFound, invalidMetadata, nameTooLong, and captionNotFound are all predictable. Validating for them before the call avoids burning quota on requests that were always going to fail.

Captions API Methods: Quota and Scope at a Glance

MethodHTTPQuota costScope requiredKey error to plan for
captions.listGET50 unitsforce-ssl or youtubepartnervideoNotFound, captionNotFound
captions.insertPOST (upload)400 unitsforce-ssl or youtubepartnercaptionExists (409), nameTooLong
captions.updatePUT (upload)450 unitsforce-ssl or youtubepartnercaptionNotFound, unset fields deleted
captions.deleteDELETE50 unitsforce-ssl or youtubepartnercaptionNotFound

Not officially confirmed / worth flagging

  • Google does not publish one canonical list of which scopes count as sensitive. Classification is shown only inside the Cloud Console's Data Access page for a specific project, consistent with what Google's own OAuth verification documentation states elsewhere.
  • Neither the Captions API reference nor the quota and compliance guide states a turnaround time for the Audit and Quota Extension Form review.
  • The reference pages do not say which of youtube.force-ssl or youtubepartner a non-partner app should prefer; both are listed only as “at least one of.”
  • captions.download's quota cost was not verified for this piece and is deliberately left out rather than estimated.

What Most Businesses Should Evaluate First

Most teams that hit quotaExceeded on a caption feature do not actually have a captions problem — they have an OAuth and quota-planning gap that shows up everywhere else in their YouTube integration too. See how switching from an API key to OAuth 2.0 triggers Google's verification requirement, how the Data API quota increase audit actually works once the default 10,000 units is not enough, and what the sensitive and restricted scope review looks like end to end. For teams that already have OAuth access configured, technical implementation support is available for caption/localization workflows, quota planning, and the audit submission itself.