Authenticate with a Vimeo access token that has the 'edit' scope — read-only tokens cannot create or update text tracks
To add a new text track, POST to '/videos/{video_id}/texttracks' with a JSON body containing 'type' ('captions' or 'subtitles'), 'language' (BCP-47 code), and 'name' (display label)
The response to the POST includes an 'upload' object with a 'link' URL — PUT your caption file (VTT, SRT, or SCC) directly to that upload link with 'Content-Type: text/plain' to complete the upload
To list all text tracks for a video, GET '/videos/{video_id}/texttracks' — the response array contains each track's 'uri', 'type', 'language', 'active' status, and a 'link' to the hosted file
To set a track as the default active track, PATCH the track's URI with 'active: true' — only one track per language/type combination can be active at a time
To delete a track, send DELETE to the track's URI ('/videos/{video_id}/texttracks/{texttrack_id}') — deletion is permanent and cannot be undone
Known gotchas
The text track upload is a two-step process: create the track metadata first to get an upload link, then PUT the file to that link — sending the file in the initial POST will not work
Vimeo stores text tracks on its CDN and the 'link' in the list response is a time-limited signed URL — do not cache this URL; re-fetch it each time you need to serve the file
The 'active' field controls which track a player shows by default — if multiple tracks have the same language and type, only one can be active, and setting a new one active will implicitly deactivate the previous one
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