Every YouTube video, over one REST call.
Eight endpoints cover transcripts, video and channel search, channel uploads, RSS latest and playlists. Bearer auth, JSON out, credits charged only on a 200.
One bearer token, every request.
Send your key in the Authorization header. Keys are prefixed sk_, never expire unless revoked, and work for both the REST API and the MCP server.
YouTube transcript
Pull the caption track from any YouTube video. Returns structured segments or plain text, with timestamps on or off, in the language you ask for.
| Name | Type | Need | Description | Default |
|---|---|---|---|---|
| video_url | string | Required | Full YouTube URL, youtu.be short URL, or the bare 11-character video ID. Pattern ^([a-zA-Z0-9_-]{11}|https?://.*)$ | |
| format | string | Optional | json returns structured segments; text returns the transcript as one string. | json |
| include_timestamp | boolean | Optional | Include start and duration on each segment, or [123.45s] prefixes in text format. | true |
| send_metadata | boolean | Optional | Add title, author_name, author_url and thumbnail_url to the response. | false |
| language | string | Optional | Comma-separated priority list of up to 10 codes, tried left to right, for example de,en,asr. | en, else first available |
Video info
Metadata plus the transcript languages a video offers, so you can pick a language before spending a transcript credit.
| Name | Type | Need | Description |
|---|---|---|---|
| video_url | string | Required | Full YouTube URL, short URL, or the bare 11-character video ID. |
Search YouTube
Search YouTube for videos or channels. Each call returns one full YouTube page, roughly 20 items, plus a continuation token for the next.
| Name | Type | Need | Description | Default |
|---|---|---|---|---|
| q | string | Conditional | Search query, 1–200 characters. Required for the first page. | |
| type | string | Optional | Result type: video or channel. First page only. | video |
| continuation | string | Conditional | Continuation token from the previous response, for subsequent pages. |
Resolve channel
Resolve any channel reference, an @handle, channel URL, or UC… ID, to a canonical UC… channel ID.
| Name | Type | Need | Description |
|---|---|---|---|
| input | string | Required | @handle, channel URL, or UC… ID, 1–200 characters. |
Search within a channel
Search for videos inside a specific channel. Accepts an @handle, channel URL, or UC… ID, and returns roughly 30 items per page.
| Name | Type | Need | Description |
|---|---|---|---|
| channel | string | Conditional | @handle, channel URL, or UC… channel ID. First page only. |
| q | string | Conditional | Search query, 1–200 characters. First page only. |
| continuation | string | Conditional | Continuation token from the previous response. |
Channel videos
List every video uploaded to a channel, paginated at roughly 100 per page, with the uploads playlist metadata alongside.
| Name | Type | Need | Description |
|---|---|---|---|
| channel | string | Conditional | @handle, channel URL, or UC… channel ID. First page only. |
| continuation | string | Conditional | Continuation token from the previous response. |
Channel latest, via RSS
The 15 most recent videos from a channel, read from YouTube’s RSS feed. Returns exact publish timestamps and view counts.
| Name | Type | Need | Description |
|---|---|---|---|
| channel | string | Required | @handle, channel URL, or UC… channel ID. |
Playlist videos
List the videos in a playlist, paginated at roughly 100 per page. Accepts a playlist URL or a bare playlist ID.
| Name | Type | Need | Description |
|---|---|---|---|
| playlist | string | Conditional | Playlist URL or ID starting with PL, UU, LL, FL or OL. First page only. |
| continuation | string | Conditional | Continuation token from the previous response. |
You pay for answers, not attempts.
Credits are deducted in real time on a successful response. Cached hits still cost a credit; failures and rate limits cost nothing. When the balance runs out the API returns 402 Payment Required.
| Endpoint | Note | Cost |
|---|---|---|
| /youtube/transcript | Charged only on a 200 response | 1 credit |
| /youtube/info | Requires auth and at least 1 active credit | Free |
| /youtube/search | Paginated: each page costs 1 credit | 1 / page |
| /youtube/channel/resolve | Requires auth and at least 1 active credit | Free |
| /youtube/channel/search | Paginated: each page costs 1 credit | 1 / page |
| /youtube/channel/videos | Paginated: each page costs 1 credit | 1 / page |
| /youtube/channel/latest | Requires auth and at least 1 active credit | Free |
| /youtube/playlist/videos | Paginated: each page costs 1 credit | 1 / page |
300 requests per minute, per key.
Limits are shared across REST and MCP usage. Every response carries the current window in its headers, so a client can pace itself without guessing.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Total allowed requests in the window |
| X-RateLimit-Remaining | Requests left in the window |
| X-RateLimit-Reset | UTC epoch seconds when the window resets |
| Retry-After | Seconds until you can retry, sent on 429 only |
Standard codes, and what to do next.
| Status | Meaning | Action | Retry |
|---|---|---|---|
| 200 | Success | Response returned, 1 credit charged on paid endpoints | N/A |
| 400 | Bad request | Check your request parameters | No |
| 401 | Unauthorized | Invalid or missing API key; carries WWW-Authenticate: Bearer | No |
| 402 | Payment required | No credits remaining: top up or choose a plan | No |
| 404 | Not found | Video missing, or no transcript in the requested languages | No |
| 408 | Timeout | Temporary failure such as bot detection, retry in 1–5s | Yes |
| 422 | Validation error | Invalid YouTube URL or ID | No |
| 429 | Too many requests | Rate limit exceeded, wait for Retry-After | Yes |
| 500 | Server error | Contact support if it persists | Maybe |
| 503 | Service unavailable | Temporarily down, retry in 1–5s | Yes |
A working call, in three languages.
The same endpoints, as agent tools.
Point any MCP client at https://mcp.localhost. Claude and ChatGPT authorize over OAuth 2.1; OpenAI Agent Builder and custom clients send the same sk_ key as a bearer token.
Fetch a video transcript as markdown or JSON
Search YouTube for videos or channels
Latest ~15 videos from a channel, via RSS
Search within one channel
Paginated list of all channel uploads
Paginated list of playlist videos
Dynamic client registration, add the URL and authorize once.
Static registration with a client ID and secret from the dashboard.
API key authentication; OAuth is not supported there yet.
Running this in production.
Retry only 408, 429 and 503, two or three times with exponential backoff, honouring Retry-After.
Transcripts rarely change, and a cached response still costs a credit. Store them and invalidate metadata separately.
Queue requests as X-RateLimit-Remaining falls rather than discovering the limit at 429.
Read detail.action_label and detail.action_url and send the user straight to top-up.