Video Subtitles API
Turn any YouTube, TikTok, Instagram Reels, Reddit, or Pinterest video URL into a ready-to-publish .srt or .vtt subtitle file — in one API call. Optionally translate the subtitles into 25 languages first. No separate transcription step, no separate translation step, no separate subtitle-formatting step.
Why this matters now
The European Accessibility Act (EAA) has been enforced since June 2025, and captions/subtitles are a recurring requirement for video content offered to consumers in the EU. Whether you're retrofitting an existing video library or shipping new content, FrameFetch turns a bare video URL into a standards-compliant subtitle file — SubRip or WebVTT — without you having to run your own transcription, translation, or timing pipeline.
One call, subtitle file out
Add ?format=srt or ?format=vtt to /v1/extract (or /v1/transcript) with "transcript" in fields, and the response body is the subtitle file itself — Content-Type: application/x-subrip or text/vtt — built from the transcript's timed segments (Whisper verbose_json or the platform's own caption cues). It's a pure egress view: same cached result, same cost, same cache key as the plain JSON call, so subtitles are included at no extra charge beyond the transcript itself.
curl -X POST "https://framefetch.net/v1/extract?format=srt" \
-H "Authorization: Bearer <your-key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"fields": ["transcript"]
}'1 00:00:00,000 --> 00:00:03,200 All right, so here we are in front of the elephants... 2 00:00:03,200 --> 00:00:07,800 The cool thing about these guys is their trunks...
Translated subtitles
Add a top-level "translate": "<iso-639-1>" to the same call and the subtitle file is built from the translated transcript instead — 25 languages supported. Translation is billed per audio-minute like transcription — the same rate, $0.0015/audio-minute — even when the source transcript came from free platform captions, since translation is a separate LLM pass; the subtitle rendering itself stays free.
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en | English | uk | Ukrainian | zh | Chinese |
es | Spanish | ar | Arabic | sv | Swedish |
de | German | hi | Hindi | da | Danish |
fr | French | id | Indonesian | no | Norwegian |
pt | Portuguese | vi | Vietnamese | fi | Finnish |
it | Italian | th | Thai | cs | Czech |
nl | Dutch | ja | Japanese | ro | Romanian |
pl | Polish | ko | Korean | ||
tr | Turkish | ru | Russian |
curl -X POST "https://framefetch.net/v1/extract?format=vtt" \
-H "Authorization: Bearer <your-key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"fields": ["transcript"],
"translate": "es"
}'WEBVTT 00:00:00.000 --> 00:00:03.200 Muy bien, aquí estamos frente a los elefantes... 00:00:03.200 --> 00:00:07.800 Lo interesante de estos animales es su trompa...
Prefer the translated transcript as JSON instead of a subtitle file? Drop the ?format= query param — the same translate request returns transcript_translated: { lang, text, segments } alongside the untouched original transcript.
Use it from an AI agent (MCP)
FrameFetch ships an MCP server at POST https://framefetch.net/mcp. The framefetch_extract tool takes the same translate arg, plus subtitle_format: "srt"|"vtt", which adds a top-level subtitles string to the JSON tool result (MCP results are always JSON, so it adds a field rather than switching content type the way the HTTP ?format= query param does).
FAQ
Which subtitle formats are supported?
SubRip (.srt) and WebVTT (.vtt), selected with ?format=srt or ?format=vtt on any extract-family call, or subtitle_format on the MCP tool.
Can I get translated subtitles?
Yes. Add a top-level translate param with an ISO-639-1 language code (25 languages supported) and the subtitle file is built from the translated transcript instead of the source language.
Do subtitles cost extra?
No. Rendering ?format=srt or ?format=vtt is a free egress view over the same cached result — you pay only for the transcript (and translation, if requested), never a separate subtitle fee.
Which platforms does it work on?
Any platform FrameFetch supports a transcript for: YouTube (incl. Shorts), TikTok, Instagram Reels, Reddit, and Pinterest.
What happens if there is no timed transcript available?
The API returns a 409 SUBTITLES_UNAVAILABLE error instead of an empty or malformed subtitle file — most commonly for an older cached result from before segment timings existed.