How-to: video data via API
Short, copy-paste tutorials for transcripts, frames, on-screen text, metadata, and agent (MCP) usage. Works on YouTube, Shorts, TikTok, Instagram, Pinterest, and Reddit.
Get a key · Transcript · Frames · On-screen text · Metadata · From an AI agent
At a glance
| Task | Endpoint | One-liner |
|---|---|---|
| Get a free API key | POST /v1/keys | { "email": "you@example.com" } → { "key": "ff_xxx_yyy" } |
| Get a video transcript | POST /v1/transcript | { "url": "..." } → transcript.text (captions, or Whisper when there are none) |
| Extract video frames | POST /v1/frames | { "url": "...", "frames": { "mode": "fps", "fps": 1, "width": 480 } } |
| Read on-screen text (OCR) | POST /v1/extract | fields: ["frames", "text_overlay"] plus a frames spec |
| Get video metadata | POST /v1/metadata | { "url": "..." } → title, uploader, durationSec, uploadDate, views, likes, commentCount |
| Use it from an AI agent | POST /mcp | Streamable HTTP MCP — tools framefetch_extract, framefetch_search, framefetch_account, framefetch_platform_capabilities |
Get a free API key
In a browser: framefetch.net/signup — instant key, 100 free calls/month, re-viewable anytime in your account. Or by API:
curl -X POST https://framefetch.net/v1/keys -H "Content-Type: application/json" \
-d '{ "email": "you@example.com" }'
# -> { "key": "ff_xxx_yyy" } (includes a small free credit)Send it as Authorization: Bearer ff_xxx_yyy on every call. Or skip keys entirely and pay per call with x402 (see below).
Get a video transcript
Works for YouTube, TikTok, Instagram, Reddit. Uses captions when available, else Whisper.
curl
curl -X POST https://framefetch.net/v1/transcript \
-H "Authorization: Bearer ff_xxx_yyy" -H "Content-Type: application/json" \
-d '{ "url": "https://www.tiktok.com/@user/video/123" }'Python
import requests
r = requests.post("https://framefetch.net/v1/transcript",
headers={"Authorization": "Bearer ff_xxx_yyy"},
json={"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"})
print(r.json()["transcript"]["text"])Platform guides: YouTube · TikTok · Reddit · Instagram. For the full cross-platform picture — captions-vs-Whisper by platform, batch transcription, accuracy — see the video transcription API guide.
Extract video frames
Sample frames: every frame, every Nth, 1 per second, or a time range — at any width.
curl -X POST https://framefetch.net/v1/frames \
-H "Authorization: Bearer ff_xxx_yyy" -H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"frames": { "mode": "fps", "fps": 1, "width": 480, "format": "webp" }
}'Returns frames[] as time-limited signed image URLs. Lower width = cheaper. Up to 1000 frames/call. Modes: all, every_n (+n), fps (+fps), range (+from,to,fps). See Pinterest too.
Read on-screen text (OCR) new
Runs OCR on each extracted frame — burned-in captions, price tags, signage. Add text_overlay alongside frames on /v1/extract (no scoped shortcut yet, so use the full endpoint):
curl -X POST https://framefetch.net/v1/extract \
-H "Authorization: Bearer ff_xxx_yyy" -H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"fields": ["frames", "text_overlay"],
"frames": { "mode": "range", "from": 0, "to": 5, "fps": 2, "width": 640 }
}'Returns textOverlay[] — one entry per frame, same index as frames[], with the detected text, per-line confidence, and a bounding box. Keep the frames spec narrow (a short range or low fps): estimated requests over 200 frames skip OCR with a warning instead of running a very long job.
Get video metadata (cheap & fast)
Metadata + insights without downloading the video — sub-cent and quick.
curl -X POST https://framefetch.net/v1/metadata \
-H "Authorization: Bearer ff_xxx_yyy" -H "Content-Type: application/json" \
-d '{ "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw" }'
# -> title, uploader, durationSec, uploadDate, views, likes, commentCountNo signup needed to try metadata: paste a URL on the free demo.
Use it from an AI agent (MCP) — and pay with x402
Add the MCP server; the agent gets framefetch_extract, framefetch_search, framefetch_account and framefetch_platform_capabilities.
{
"mcpServers": {
"framefetch": {
"url": "https://framefetch.net/mcp",
"headers": { "Authorization": "Bearer ff_xxx_yyy" }
}
}
}No account? An agent can pay per call with x402: call POST /v1/topup, get a 402 with USDC payment requirements, pay, retry. Listed in the official MCP registry as io.github.MarvinRey7879/framefetch.
No-code: build this in n8n
Prefer a visual workflow builder over curl or Python? The n8n YouTube transcript workflow guide has a copy-paste, importable workflow JSON — one HTTP Request node for the transcript, a second for ask — plus why n8n's native YouTube node can't do this on its own.
Working in Python? The Python video transcript API guide is the same thing in one requests.post — copy-paste snippets for a transcript, the search→ask two-call pattern, and handling the 402 when credit runs out, with no yt-dlp, ffmpeg, or Whisper to install locally.
On Zapier? The Zapier video transcript guide shows how to call FrameFetch from any Zap with the built-in Webhooks by Zapier action — no app to install, the full API in one POST step. On Make.com it's the same via the HTTP module.
FAQ
How do I get a TikTok or Reddit transcript via API?
POST the URL to /v1/transcript with your Bearer key. TikTok/Instagram/Reddit are transcribed with Whisper (no reliable captions).
How do I summarize a video with an API?
POST to /v1/extract with fields: ["digest"] for a gist, topics, and sentiment — or add a top-level ask for a direct grounded answer. The AI video summary API guide has real request/response examples for both, plus audio_digest for a spoken briefing.
How do I extract frames from a video?
POST to /v1/frames with a frames spec, e.g. { "mode":"fps", "fps":1, "width":480 }. Frames come back as signed image URLs.
How do I read on-screen text from a video?
POST to /v1/extract with fields: ["frames","text_overlay"] and a frames spec. Each frame gets a matching OCR result.
Can an AI agent pay without an account?
Yes — via x402 (USDC on Base): 402 → pay → retry, no signup.