Vimeo Captions API
Caption and subtitle tracks with timing and text, plus public player facts such as owner, storyboard and quality labels.
GET /v1/vimeo/videos/{videoId}/captions1 credit Failed requests are free
About this endpoint
GET /v1/vimeo/videos/{videoId}/captions returns data.captions, an array of tracks. Each track has id, language, displayLanguage, kind (captions or subtitles), label, source (ai_generated or user_uploaded), default, cuesAvailable and cues. Each cue has startSeconds, endSeconds and text.
captionsComplete is true only when every track and every cue file is included. When captions are withheld for a video, the route answers 503 temporarily_unavailable and is not billed; it never reports an empty caption list as if the video had none. A private or unlisted video without its privacy link reads lookupStatus: not_found. An optional language query keeps only tracks in that language, for example en or en-x-autogen; matching is case-insensitive, and en also matches en-x-autogen. When the caption data is available, data.player adds public player metadata such as title, durationSeconds, owner, storyboard and qualities with labels and frame rates. Signed stream and caption URLs are never returned.
Vimeo Captions API FAQ
What does a track include?
id, language, displayLanguage, kind, label, source, default, cuesAvailable and cues. Each cue has startSeconds, endSeconds and text. Use language to filter, for example language=en; en matches en-x-autogen too.
What does captionsComplete mean?
true means every track and every cue file is included. false means at least one cue file is unavailable; the tracks are still listed with cuesAvailable and cues set to describe what is known.
Are signed stream or caption URLs returned?
No. The response includes public player metadata only, such as owner, storyboard and quality labels and frame rates. Signed URLs are not exposed.
How many credits does a captions lookup cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.
Other Vimeo endpoints
- VideoGET /v1/vimeo/videos/{videoId}
- EmbedGET /v1/vimeo/videos/{videoId}/embed
- BrowseGET /v1/vimeo/videos/browse
- CommentsGET /v1/vimeo/videos/{videoId}/comments
- CreditsGET /v1/vimeo/videos/{videoId}/credits
- LikesGET /v1/vimeo/videos/{videoId}/likes
- UserGET /v1/vimeo/users/{user}
- User videosGET /v1/vimeo/users/{user}/videos