YouTube API
YouTube data access via TranscriptAPI.com — no Google API quota needed.
Setup
If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md [blocked] and follow the instructions there to get and store the key.
Required Headers
Every request needs two headers:
- Authorization:
Bearer $TRANSCRIPT_API_KEY - User-Agent: your agent's name and version if known (e.g.
HermesAgent/0.11.0,ClaudeCode/1.0). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.
API Reference
Full OpenAPI spec: transcriptapi.com/openapi.json — consult this for the latest parameters and schemas.
Endpoint Reference
All endpoints: https://transcriptapi.com/api/v2/youtube/...
Channel endpoints accept channel — an @handle, channel URL, or UC... ID. Playlist endpoints accept playlist — a playlist URL or ID.
search also takes type=playlist or type=movie, plus first-page-only filters sort (relevance/views), upload_date, duration, and features. channel/videos takes tab=videos (default), shorts, or streams, plus an optional sort (latest/popular/oldest).
Naming:
/video/metadatawas previously/video/info. The old path still works but is deprecated — use/video/metadata.
Quick Examples
Search videos:
Get transcript:
Check video info & transcript languages (free, before spending a credit):
Get rich video metadata (views, likes, description, tags):
Get a channel's profile (subscriber count, tags, tabs):
Also available with the same channel parameter: /channel/playlists (a channel's playlists), /channel/posts (community tab), and /channel/sections (its curated Home-page shelves).
Resolve channel handle (free):
Latest videos (free):
Browse channel uploads (paginated):
Sorting. Add sort=latest, popular, or oldest to channel/videos to get a channel's videos in the order you want, for example its most-popular uploads first. A sorted page returns about 30 videos (an unsorted page returns about 100), and every page costs the same 1 credit.
When paging, send the same sort on each request.
Item fields. Every item carries members_only, true only when YouTube badges it "Members only", and those items have no viewCountText. tab=streams items carry lengthText and publishedTimeText (for example Streamed 2 years ago); tab=shorts returns null for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds (tab=videos with sort, tab=shorts, tab=streams) channelId, channelTitle, channelHandle and index are null.
Browse playlist (paginated):
Parameter Validation
Why Not Google's API?
Errors
Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits.
Copy-paste examples
Every request in this file as a ready-to-run one-liner: references/curl-examples.md [blocked]

