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.
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.
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...
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 (en, es, de, fr, pt, it, nl, pl, tr, ru, uk, ar, hi, id, vi, th, ja, ko, zh, sv, da, no, fi, cs, ro). 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.
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.
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).
SubRip (.srt) and WebVTT (.vtt), selected with ?format=srt or ?format=vtt on any extract-family call, or subtitle_format on the MCP tool.
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.
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.
Any platform FrameFetch supports a transcript for: YouTube (incl. Shorts), TikTok, Instagram Reels, Reddit, and Pinterest.
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.