# Video API: YouTube Transcript and Frames

> Read a YouTube video for a model in one call: transcript in the spoken language, chapters and frames where it matters. Pay per success, $2 free every month.

[Home](https://quanticdata.io/)/*Video API*

# Video API: YouTube transcript, chapters and frames in one call

The Video API reads a YouTube video for a model. One POST returns the transcript in the language that is spoken, stamped [m:ss], the chapters the author wrote, and small frames taken where the speaker points at the screen or says a price, interleaved in one Markdown timeline. Three videos of 8 to 19 minutes came back in 1.7 to 7.3 seconds on 20 October 2026, billed only because the reads succeeded.

By [Aldo Morese](https://quanticdata.io/about/), founder of QuanticData · Published Oct 20, 2026 · Updated Oct 22, 2026

[Get my free API key](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-hero) [Train an agent with it](https://quanticdata.io/video-api/tutorials/train-an-agent-with-the-video-api/)

$2 of free API usage per month · No card required · Failed reads are never billed

POST /v1/scraper/video · read on 20 Oct 2026

```
$ curl https://api.quanticdata.io/v1/scraper/video \
    -d '{ "url": "https://www.youtube.com/watch?v=aircAruvnKk" }'
{ "video": { "title": "But what is a neural network? | Deep learning chapter 1",
             "duration_seconds": 1120 },
  "transcript": { "source": "captions", "language": "en" },
  "chapters": [ { "start": 0, "title": "Introduction example" }, … ],
  "frames": [ { "n": 3, "at": "2:10", "reason": "cue", "mime": "image/jpeg",
                "quote": "…you and I are just going to look at the simplest…" }, … ],
  "content": "## [0:00] Introduction example\n[0:04] This is a 3. It's sloppily written…" }
# 12 chapters · 12 frames · 5,780 tokens · 2.6 s · billed once, on success
```

One URL in, one timeline out: the transcript in the spoken language, the author's chapters, and a frame wherever the words point at the screen or a price is said.

**As spoken**transcript with [m:ss] stamps, never a translated track

**Up to 30 frames**160×90, where the speaker points, says a price, starts a chapter

**1.7 to 7.3 s**per read, three videos measured on 20 Oct 2026

**Pay per success**a video that cannot be read is never billed

Pricing

## Per read. No subscription.

One price per video read, whatever its length: a window read with start and end costs the same as the whole video, and a transcript-only read (max_frames 0) too. A read costs $0.02 ($20 per 1,000 reads), the price shown in the dashboard and the [API reference](https://quanticdata.io/docs/#tag/Video/operation/readVideo); the free allowance and the accounts below are the same as for every Data API.

**$0.02**per read, any length*window or whole video*

**$0**for a failed read*removed, gated or blocked: not billed*

**$2 free**every month, forever*no card required*

**$0**monthly minimum*pure pay-as-you-go*

[Pay as you go $0 /mo $2 free credit / month 60 requests / min List unit prices](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-tier-1) [Starter $19 /mo $15 free credit / month 300 requests / min 10% off unit prices](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-tier-2) [Most popular Growth $79 /mo $50 free credit / month 600 requests / min 20% off unit prices](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-tier-3) [Scale $299 /mo $250 free credit / month 1,200 requests / min 30% off unit prices](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-tier-4)

Transcript · chapters · framesSpoken language keptstart / end windowsmax_tokens budgetResidential retry built inFailed reads never billed

## What is the Video API?

**A video API turns a video URL into text and pictures a language model can reason over.** QuanticData answers with the transcript in the original language, because a translated track adds the translator's errors on top of the captioner's, the chapters the author wrote in the description, and up to 30 storyboard frames placed at the moments that matter. The model sees what the words point at without anyone downloading or watching the video.

The frames are the seek-bar tiles the platform already renders, 160×90 on most videos, so no media byte is pulled and a read stays in seconds. They are enough to see the scene and the objects, not to read small text, and the response says so. Everything comes back in **one JSON envelope with a Markdown `content` timeline**: the model reads it in order, picture, then the words said over it.

One response, every part video · transcript · chapters · frames[] · content
tokens · notes · meta.via_proxy · usage.cost_usd

## What one call returns

### content

The timeline for the model: the description, each chapter as a heading, the transcript merged into 20-second blocks stamped **[m:ss]**, and a **[frame N · m:ss · why]** marker where every picture belongs.

### transcript

**source** says captions, automatic captions or none; **language** is the one spoken; **available** lists every track the video offers; **segments** adds the raw timed cues on request.

### chapters

The author's own structure from the description, start second and title, kept as headings in the timeline so a long lesson reads as a lesson.

### frames

Up to 30 small JPEGs, base64, each with its second, its **reason** (cue, price, chapter, scene, interval) and the **quote** that earned it. `frames: false` keeps the list without the image data.

### tokens

An estimate of the timeline (chars/4), the full size before any trim, and whether **max_tokens** cut it, so the next call knows where to resume with start and end.

### notes and meta

What to know about this read: automatic captions, no storyboard, text trimmed. **meta.via_proxy** says the read went through a residential exit; **usage** carries what it cost.

## Frames: what a transcript alone cannot tell you

A transcript says "as you can see"; it does not say what was seen. The Video API fills that gap with the storyboard tiles the platform renders for its seek bar: 160×90 pictures, one every 2 to 10 seconds, picked by five rules and returned as base64 JPEG next to their `[frame N]` marker.

| Reason | When a frame is taken | In the three measured videos |
| --- | --- | --- |
| `cue` | the speaker points at the screen: "as you can see", "come vedete", "regardez", "wie ihr sehen k&ouml;nnt" and the like, in six languages | 21 of 36 frames |
| `price` | a price is said: "&euro;499", "799 dollars" | 2 |
| `chapter` | three seconds into each chapter the author wrote | 6 |
| `scene` | the picture changes, to cover a stretch nobody points at | 6 |
| `interval` | periodic coverage when nothing else claims the stretch | 1 |

Two thirds of the frame budget go to what the words and the author point at; the rest covers the gaps, so no part of the video goes unseen. Frames are small by design. They show a product, a slide or a chart, not small text, and the response says so in its header.

## Why does a transcript library get IP blocked, and what changes here?

**The open-source youtube-transcript-api package reads captions from your own machine, and the platform refuses many datacenter addresses.** On a laptop the call works. On a cloud server the same call answers a block or a rate limit, and the usual advice is to buy proxies and configure them yourself.

The Video API runs that whole path for you. Each read is attempted directly first. When the platform refuses the address or answers empty captions, the read is repeated through a residential exit inside the same call, with no parameter to set. All three reads measured on 20 October 2026 took that second path and still came back in 1.7 to 7.3 seconds. A read that still fails answers a stable `payload.code` and is not billed.

Same call, no proxies to configure direct attempt &rarr; residential retry &rarr; one timeline
meta.via_proxy tells you which path answered

## What you can build with it

### Summaries with quotes

The transcript keeps the original words and their stamps, so a summary can cite **[12:30]** instead of paraphrasing, and a reader can jump there.

### Product reviews to data

A price said out loud gets a frame: the model reads the number and sees the product at the same moment. Prices, verdicts and specs become rows.

### Fact checks

Find where a claim is made, read the words around it and look at what was on screen, with a timestamp the reader can verify.

### Lessons and tutorials

Chapters, slides and demos become a step-by-step guide an agent can follow or test, as in [the tutorial](https://quanticdata.io/video-api/tutorials/train-an-agent-with-the-video-api/).

### Agents that watch

The MCP tool **read_video** gives Claude, Cursor or any MCP client the same timeline, pictures inline, mid-conversation.

### Long videos in windows

**start** and **end** read one part at a time; **max_tokens** keeps each call inside the model's budget. One price per read either way.

## Three videos, measured

On 20 October 2026 we sent three public YouTube videos to the production endpoint with the default settings, one call each, and timed the whole round trip from a client outside our network. The transcript came back in the spoken language every time, with twelve frames of 160×90 pixels, and every read was billed once.

| Video | Length | Transcript | Chapters | Frames | Tokens | Time |
| --- | --- | --- | --- | --- | --- | --- |
| A product review in Italian | 8:23 | it, automatic captions | 0 | 12 (2 at a price, 6 where the speaker points, 4 scene changes) | 2,342 | 1.7 s |
| A 12-chapter maths lesson | 18:40 | en, captions (31 tracks available) | 12 | 12 (5 chapter starts, 6 where the speaker points, 1 periodic) | 5,780 | 2.6 s |
| A developer tutorial with 25 chapters | 12:22 | en, automatic captions | 25 | 12 (9 where the speaker points, 2 scene changes, 1 chapter start) | 4,270 | 7.3 s |

Each read fetched between 442 KB and 565 KB from the platform: the player payload, the captions and the storyboard sheets, never the media. The review has no chapters, so its frames follow the words: the price said in the first ten seconds and again at 7:40 got a frame each, and "come vedete" earned six more. The lesson has chapters, so five frames land on chapter starts and the rest where the speaker says "let me show you".

Integration

## One POST, one timeline

```
curl https://api.quanticdata.io/v1/scraper/video \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.youtube.com/watch?v=aircAruvnKk",
        "max_frames": 8, "max_tokens": 6000 }'
```

```
import requests

r = requests.post("https://api.quanticdata.io/v1/scraper/video",
    headers={"Authorization": f"Bearer {KEY}"},
    json={"url": "https://www.youtube.com/watch?v=aircAruvnKk",
          "max_frames": 8, "max_tokens": 6000},
    timeout=120)
video = r.json()["payload"]

print(video["transcript"]["language"], video["tokens"]["estimated"], "tokens")
print(video["content"][:800])            # the timeline, Markdown with [m:ss]
for f in video["frames"]:
    print(f["n"], f["at"], f["reason"], f.get("quote", ""))
```

```
const r = await fetch("https://api.quanticdata.io/v1/scraper/video", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.QD_API_KEY}`,
             "Content-Type": "application/json" },
  body: JSON.stringify({ url: "https://www.youtube.com/watch?v=aircAruvnKk",
    max_frames: 8, max_tokens: 6000 })
});
const { payload: video } = await r.json();
console.log(video.chapters.length, "chapters,", video.frames.length, "frames");
console.log(video.content.slice(0, 800));
```

```
import os, requests
from langchain_core.tools import tool

@tool
def read_video(url: str) -> str:
    """Read a YouTube video: transcript in the spoken language with [m:ss] stamps,
    chapters and frame markers, as one Markdown timeline."""
    r = requests.post("https://api.quanticdata.io/v1/scraper/video",
        headers={"Authorization": f"Bearer {os.environ['QD_API_KEY']}"},
        json={"url": url, "max_frames": 0, "max_tokens": 6000}, timeout=120)
    data = r.json()
    if data["type"] != "response":
        return f"Could not read the video: {data['message']}"
    return data["payload"]["content"]

# bind it like any other tool: llm.bind_tools([read_video])
```

Add `start` and `end` (seconds or `m:ss`) to read a window of a long video, `languages` to prefer another caption track, `segments: true` for the raw cues. Every field is in the [API reference](https://quanticdata.io/docs/#tag/Video/operation/readVideo).

## Give it to your agent as a tool

The [QuanticData MCP server](https://quanticdata.io/mcp-server/) exposes this API as the `read_video` tool: the agent passes a URL and receives the timeline with the frames inline as images, so Claude, Cursor or any MCP client can watch a video mid-conversation. From your own loop, the REST call above plus one function that turns `[frame N]` markers into image blocks is all it takes. The step by step is in [Train an agent with the Video API](https://quanticdata.io/video-api/tutorials/train-an-agent-with-the-video-api/); the rest of the data layer is in the [web data API for AI](https://quanticdata.io/web-data-api-for-ai/). Agents that read the open Agent Skills format learn the tool from the [skills QuanticData publishes](https://quanticdata.io/.well-known/agent-skills/index.json): `npx skills add https://quanticdata.io`.

Works where your agent lives *Claude* *Claude Code* *Cursor* *Windsurf* *VS Code* *n8n* *LangChain* *CrewAI* *OpenAI Agents SDK*

## QuanticData vs a typical transcript API

|  | QuanticData Video API | Typical transcript API |
| --- | --- | --- |
| What comes back | transcript, chapters, description and frames, in one timeline | the transcript, sometimes with timestamps |
| Language | as spoken, every available track listed | a default or translated track |
| When the platform blocks the request | retried through a residential exit inside the same call | an "IP blocked" or rate-limit error to handle yourself |
| Billing | per successful read, failures free | per request, errors often counted |
| Free tier | $2 every month, renews forever | a one-time quota |
| AI agent access | native MCP tool read_video, frames as images | a wrapper to write |

### The setting to start with

`POST /v1/scraper/video` with `url`, `max_frames: 8` and `max_tokens: 6000`: enough frames to see the scene, a timeline that fits a prompt. One price per successful read, failed reads never billed, and $2 of free API usage per month to try it before you pay.

[Get my free API key](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-strip)

The three reads of the table above: one call each with the defaults, timed from outside our network.

## Sources and standards

What this product reads or implements, so you can verify a claim yourself:

- [YouTube Help: video chapters, how creators add them in the description](https://support.google.com/youtube/answer/9884579)

- [YouTube Help: automatic captions and their limits](https://support.google.com/youtube/answer/6373554)

- [Model Context Protocol: the specification the read_video tool follows](https://modelcontextprotocol.io/specification/2025-06-18)

## FAQ

The short answers on transcripts, frames, limits and cost.

[Something else? Ask us](/video-api/#ask)

### What is the Video API?

The Video API is a REST endpoint that reads a YouTube video for a language model. One POST with the URL returns the metadata, the transcript in the language that is spoken with [m:ss] timestamps, the chapters the author wrote and up to 30 small frames taken at the moments that matter, all interleaved in one Markdown timeline. No model runs on our side: you hand the timeline to yours.

### Is this a YouTube transcript API?

It includes one. The transcript comes with timestamps from the captions the video carries, manual or automatic, in the spoken language. On top of it you get what a transcript alone cannot give: the chapters, the description, and frames placed where the speaker says "as you can see", where a price is said and at each chapter start, so the model also sees what the words point at.

### What happens when a transcript library gets its IP blocked or rate limited?

Nothing on your side. Every read is attempted directly first and, when the platform refuses a datacenter address or answers empty captions, repeated through a residential exit automatically, inside the same call. In our three measured reads of 20 October 2026 all three went through that second path and came back in 1.7 to 7.3 seconds. A read that still fails is reported with a stable code and never billed.

### Is there a free YouTube transcript API?

Every account with a permanent email address gets $2 of API usage free each month, with no card required, shared across all QuanticData Data APIs. The allowance renews monthly, so a small pipeline can run on it indefinitely; beyond it you pay per successful read with no subscription.

### Does it translate the transcript?

No, by design. A translated caption track adds the translator's errors on top of the captioner's, and the model reading the transcript translates better from the original. The transcript therefore arrives in the spoken language; pass languages to prefer another track the video offers, and transcript.available lists every track.

### How are the frames chosen?

From the words first: where the speaker points at the screen ("as you can see", "come vedete", "regardez" and the like in six languages), where a price is said, and at the start of each chapter. Stretches nobody points at get a frame where the picture changes or every so often, so no part of the video goes unseen. The default is 12 frames, the maximum 30, and max_frames: 0 returns the transcript alone.

### Can I read only part of a long video?

Yes. start and end accept seconds or m:ss and limit both the transcript and the frames to that window. max_tokens trims the text to a budget and says so in tokens.truncated and in a note, so a second call with start/end reads the rest. Price per read is the same for a window as for the whole video.

### What about videos without captions?

The read still succeeds: you get the metadata, the description, the chapters and the frames, and transcript.source says none. Videos that need a signed-in viewer, private or removed videos answer a 403 or 404 with a stable payload.code and are not billed.

### Can I call it from Python or JavaScript?

Yes. It is plain HTTPS with a Bearer key and a JSON body, so requests in Python, fetch in Node, curl or any HTTP client works; the code samples on this page and the API reference cover all three. Frames come back as base64 JPEG strings you can pass straight into a model's image input.

### Can AI agents use it directly?

Yes. The QuanticData MCP server exposes the same call as the read_video tool: Claude, Cursor, Windsurf, VS Code and any MCP client receive the timeline with the frames inline as images, no glue code. The tutorial on this site shows the MCP setup and the REST loop side by side.

### Does it work with LangChain, n8n or CrewAI?

Yes. It is one HTTPS call, so any framework that wraps a function as a tool can use it: the LangChain tab on this page is a ten-line @tool, an n8n HTTP Request node posts the same JSON, and CrewAI or the OpenAI Agents SDK wrap the Python function. MCP clients need no wrapper at all.

### How much does the Video API cost?

You pay per successful read: one price for the video, whatever its length, and the same price for a window read with start and end. A read costs $0.02 ($20 per 1,000 reads); reads that fail for any reason are never billed, and $2 of usage is free every month.

## Read your first video in a minute

$2 free every month, no card. The transcript, the chapters and the frames from the first call.

[Get my free API key](https://app.quanticdata.io/register?utm_source=video-api&amp;utm_medium=website&amp;utm_campaign=site&amp;utm_content=video-api-closing)

Also on the platform: [Train an agent with the Video API](https://quanticdata.io/video-api/tutorials/train-an-agent-with-the-video-api/) [MCP Server](https://quanticdata.io/mcp-server/) [Web Data API for AI](https://quanticdata.io/web-data-api-for-ai/) [SERP API](https://quanticdata.io/serp-api/) [Web Scraping API](https://quanticdata.io/web-scraping-api/) [Crawl & Map](https://quanticdata.io/crawl-map/) [Collectors](https://quanticdata.io/collectors/) [Web Scraping Platform](https://quanticdata.io/web-scraping-platform/) [Residential Proxies](https://quanticdata.io/residential-proxies/) [Mobile Proxies](https://quanticdata.io/mobile-proxies/)

Ready-made collectors: [Video search API](https://quanticdata.io/collectors/search-videos-api/) [YouTube video data API](https://quanticdata.io/collectors/youtube-video-data-api/) [YouTube channel scraper API](https://quanticdata.io/collectors/youtube-channel-scraper-api/) [All 100+ collectors](https://quanticdata.io/collectors/)

---

Source: https://quanticdata.io/video-api/ · Site index for AI: https://quanticdata.io/llms.txt
