Video Data API
Turn a TikTok video URL into structured data: metadata (author, duration), engagement insights, a Whisper transcript of the spoken audio, parametrically-sampled frames, and the on-screen text burned into them — through one API call or an MCP tool.
What you get
For TikTok, FrameFetch returns metadata, insights, Whisper transcript, parametric frames, and on-screen text (OCR) per frame. One JSON response, billed per call — every response includes a cost block.
Quickstart
curl -X POST https://framefetch.net/v1/extract \
-H "Authorization: Bearer <your-key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/1234567890",
"fields": ["metadata", "transcript"]
}'Get a key with POST /v1/keys (free credit). Full reference in the docs. Agents can pay per call with x402 (USDC) — no account.
Same call from Node.js, using the framefetch npm client:
import { FrameFetch } from 'framefetch';
const ff = new FrameFetch({ apiKey: process.env.FRAMEFETCH_API_KEY });
const r = await ff.transcript('https://www.tiktok.com/@user/video/1234567890');
console.log(r.transcript.source); // 'whisper' — TikTok has no caption track to prefer
console.log(r.transcript.text);
for (const seg of r.transcript.segments ?? []) {
console.log(`[${seg.start.toFixed(1)}s] ${seg.text}`);
}npm install framefetch — a zero-dependency client; ff.transcript() is a scoped shortcut for fields: ["transcript"] on /v1/extract. Source on GitHub.
How TikTok actually serves video
Every downloadable format TikTok's CDN exposes is muxed — video and audio interleaved into one h264/aac file. There is no audio-only rendition to ask for, the way YouTube offers a small opus or m4a track for exactly this purpose. That single difference is why TikTok transcription can never be as bandwidth-cheap as YouTube's: getting the audio out requires downloading a video-shaped file first, every time — there's no way to fetch "just the sound."
FrameFetch's format selector accounts for this with a five-step fallback chain, tried in order: the smallest audio-only stream that's still speech-sufficient (≤64kbps), then any audio-only stream, then the best audio-only stream available — those three cover YouTube and Instagram, which do serve real audio-only formats — and only then, for a muxed-only platform like TikTok, the smallest stream that still carries an audio track, falling back to whatever's available as a last resort. On a real TikTok video that chain resolves to its 540p rendition (1.95 MiB) rather than its 1080p (3.79 MiB) — the audio track is the identical aac stream either way, so there's no reason to pull almost twice the data for pixels that get thrown away immediately after. On a video that does offer genuine audio-only formats, the same logic measured a 49kbps m4a track at 2.78 MiB for an 8-minute video, against 7.78 MiB for yt-dlp's own default (137kbps opus) pick — a 2.8x saving TikTok's muxed-only catalog can never reach.
This chain exists because a simpler, audio-only-first version of it once broke TikTok completely: for a stretch on July 19, 2026, every TikTok transcript request matched no format at all and came back with no transcript and no visible error — a paid field silently returning nothing. It was caught the same day by re-running the exact code path against a platform it hadn't been verified against, and fixed with the muxed fallback described above.
| Step | Format selector tries | Resolves on |
|---|---|---|
| 1 | Smallest audio-only stream that's still speech-sufficient (≤64kbps) | YouTube, Instagram — platforms with real audio-only formats |
| 2 | Any audio-only stream | YouTube, Instagram |
| 3 | Best audio-only stream available | YouTube, Instagram |
| 4 | Smallest stream that still carries an audio track | TikTok — muxed-only; e.g. its 540p rendition (1.95 MiB) over 1080p (3.79 MiB) for the identical aac track |
| 5 | Whatever's available | Last resort, any platform |
No captions, so it's Whisper end to end
Before spending anything on transcription, FrameFetch always checks first whether a video has a usable caption track — captions are free to fetch and exact, against a per-minute charge for Whisper. TikTok essentially never gives it one to find: unlike YouTube, where creator or auto-generated captions are common and get read directly with no audio download at all, TikTok's metadata reports no usable subtitle or automatic-caption track, so captionsAvailable comes back false and every TikTok transcript takes the Whisper path — which, per the above, means a muxed video download first, every time. transcript.source reads "whisper" on TikTok; it isn't an occasional fallback, it's the only path that exists.
Accuracy & limitations
TikTok transcripts are produced by whisper-large-v3-turbo running on Groq — the same model and provider behind every non-caption transcript FrameFetch produces. It's a faster, distilled variant of OpenAI's full Whisper large-v3, trading a small amount of accuracy for significantly quicker inference; it's multilingual, and reliably strong on one clear speaker talking straight into a phone mic, which covers a large share of TikTok content. The trade-offs are the ones any Whisper model has: a loud trending-audio track underneath the speech, several people talking over each other, or a stretch with no real speech at all (music only, or silence) can produce a misheard word or a short hallucinated phrase rather than a clean gap — a real consideration on a platform where an audio overlay is closer to the norm than the exception. Because there's no caption track to cross-check against (see above), transcript quality on TikTok depends entirely on how cleanly the speech separates from whatever's playing underneath it, with none of the ground-truth captions sometimes available on YouTube.
Sample response
For fields: ["metadata", "insights", "transcript"] — field names and shape match the real schema exactly; the values below are illustrative, not a captured call:
{
"platform": "tiktok",
"url": "https://www.tiktok.com/@user/video/7123456789012345678",
"captionsAvailable": false,
"metadata": {
"title": "wait for it",
"uploader": "user",
"durationSec": 34,
"uploadDate": "2026-06-11",
"sourceFps": 30,
"thumbnail": "https://p16-sign-va.tiktokcdn.com/....jpeg"
},
"insights": { "views": 482100, "likes": 61200, "commentCount": 843 },
"transcript": {
"text": "okay so watch what happens when ...",
"source": "whisper",
"lang": "en",
"segments": [ { "start": 0, "end": 2.1, "text": "okay so watch what happens when" } ]
},
"cost": { "totalMicros": 2000 },
"warnings": []
}A 34-second clip like this one lands on the $0.002 per-call floor rather than the per-minute transcript rate — most TikTok videos are short enough that a metadata+transcript call hits the floor, not a duration-scaled price. Full breakdown on pricing.
Use it from an AI agent (MCP)
FrameFetch ships an MCP server at POST https://framefetch.net/mcp with the tools framefetch_extract, framefetch_search, framefetch_account and framefetch_platform_capabilities — point your agent at a TikTok URL directly. See the MCP setup guide for a working Claude Desktop / Cursor config.
FAQ
Do I need TikTok login or cookies?
No. You send the public video URL; FrameFetch handles retrieval.
How are TikTok transcripts produced?
TikTok videos are transcribed from audio with Whisper, since captions are not reliably exposed.
Can I extract every frame of a TikTok?
Yes, up to 1000 frames per call; use mode "all" or "every_n" and downscale with width to control cost.
Can I read text overlays on a TikTok?
Yes — TikTok creators often burn captions or on-screen labels into the video itself. Add text_overlay alongside frames to run OCR on each frame.
What does TikTok video extraction cost?
TikTok bills on the same rate card as every platform: metadata + insights $0.00015 per call, transcript $0.0015 per audio-minute (Whisper, since TikTok has no caption track), frames $0.00012 each, on-screen text (OCR) $0.000225 each — with a $0.002 minimum per call. Most TikTok videos are short enough that a metadata+transcript call lands right at that floor rather than scaling with duration — a 34-second clip, like the sample response above, costs the $0.002 floor, not the per-minute rate. Full breakdown on pricing.
Why can't I get an audio-only download for a TikTok video?
Every downloadable format TikTok's CDN exposes is muxed — video and audio interleaved into one h264/aac file; there's no audio-only rendition to request, the way YouTube offers a small opus or m4a track for exactly that. That means getting the audio out always requires downloading a video-shaped file first. FrameFetch's format selector minimizes the cost of that: instead of grabbing TikTok's largest rendition, it picks the smallest stream that still carries the target audio track — on a real TikTok video that resolves to the 540p rendition (1.95 MiB) rather than 1080p (3.79 MiB), since the aac audio track is identical either way and the extra pixels get thrown away immediately after.
How accurate is the Whisper transcript on a TikTok video?
TikTok transcripts come from whisper-large-v3-turbo on Groq — a faster, distilled variant of OpenAI's full Whisper large-v3, multilingual, and reliably strong on one clear speaker talking straight into a phone mic, which covers a large share of TikTok content. It can misfire on a loud trending-audio track under the speech, several people talking over each other, or a stretch with no real speech at all — producing a misheard word or a short hallucinated phrase rather than a clean gap. Because TikTok has no caption track to cross-check against, transcript quality depends entirely on how cleanly the speech separates from whatever's playing underneath it.