Authenticate with OAuth 2.0 using a scope that includes 'https://www.googleapis.com/auth/youtube.force-ssl' — caption upload requires this scope, not the read-only scope
Prepare your caption file in one of YouTube's accepted formats: SRT, VTT, SBV, TTML, or SCC — the file must be encoded in UTF-8
Call POST 'https://www.googleapis.com/upload/youtube/v3/captions' with 'uploadType=multipart', include a JSON metadata part with 'snippet.videoId', 'snippet.language' (BCP-47 code), and 'snippet.name', and attach the caption file as a second part
Set the 'isDraft' field in the snippet to true if you want to review the captions before making them public — drafts are visible only to you and channel managers
Handle the quota cost of 400 units per captions.insert call — plan batch uploads accordingly within your project's daily quota, and use captions.update for subsequent edits rather than deleting and re-uploading
Verify the upload by calling GET 'https://www.googleapis.com/youtube/v3/captions' with the 'videoId' query parameter and checking that the new track appears with the correct language and name
Known gotchas
YouTube deprecated the 'sync' parameter for captions.insert and captions.update in March 2024 — auto-sync is no longer available via the API and must be done through YouTube Studio if needed
Each captions.insert call costs 400 quota units — for a channel with many videos, caption uploads can consume a significant portion of the 10,000-unit daily default quota
Caption files must be under 100 MB; extremely long videos with dense captions can approach this limit with verbose formats like TTML
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp