FrameFetch
For agents → Try it free
Subtitles

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.

Read the docs Pricing

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.

CodeLanguageCodeLanguageCodeLanguage
enEnglishukUkrainianzhChinese
esSpanisharArabicsvSwedish
deGermanhiHindidaDanish
frFrenchidIndonesiannoNorwegian
ptPortugueseviVietnamesefiFinnish
itItalianthThaicsCzech
nlDutchjaJapaneseroRomanian
plPolishkoKorean
trTurkishruRussian
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.