transcriptapi
Use when YouTube is or could be relevant — even if not mentioned: pasted video/channel/playlist links, video IDs, @handles, creator lookups, video summaries, quotes, translations, topic research, tutorials, talks, lectures, expert discussions, product reviews, how-to guides, new product announcement
By zeropointrepo · 684 installs
npx skills add zeropointrepo/youtube-skills --skill transcriptapi
Source repository · Upstream listing
TranscriptAPI
Full YouTube data toolkit via [TranscriptAPI.com](https://transcriptapi.com). Transcripts, search, channels, playlists — one API key.
Setup
If $TRANSCRIPT API KEY is not set, read [references/auth setup.md](references/auth setup.md) 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](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
Auth
All requests: H "Authorization: Bearer $TRANSCRIPT API KEY"
Endpoints
Channel endpoints accept channel — an @handle , channel URL, or UC... ID. No need to resolve first. Playlist endpoints accept playlist — a playlist URL or ID.
GET /api/v2/youtube/transcript — 1 credit
Param Required Default Validation
video url yes — YouTube URL or 11 char video ID
format no json json or text
include timestamp no true true or false
send metadata no false true or false
Accepts: https://youtube.com/watch?v=ID , https://youtu.be/ID , youtube.com/shorts/ID , or bare ID .
Response ( format=json ):
GET /api/v2/youtube/search — 1 credit
Param Required Default Validation
q yes — 1 200 chars (trimmed)
type no video video or channel
limit no 20 1 50
Response ( type=video ):
Response ( type=channel ):
GET /api/v2/youtube/channel/resolve — FREE (0 credits)
Param Required Validation
input yes 1 200 chars — @handle, URL, or UC... ID
Response:
If input is already a valid UC[a zA Z0 9 ]{22} ID, returns immediately without lookup.
GET /api/v2/youtube/channel/videos — 1 credit/page
Param Required Validation
channel conditional @handle , channel URL, or UC... ID
continuation conditional non empty string (next pages)
Provide exactly one of channel or continuation .
Response:
GET /api/v2/youtube/channel/latest — FREE (0 credits)
Param Required Validation
channel yes @handle , channel URL, or UC... ID
Returns last 15 videos via RSS with exact view counts and ISO timestamps.
Response:
GET /api/v2/youtube/channel/search — 1 credit
Param Required Validation
channel yes @handle , channel URL, or UC... ID
q yes 1 200 chars
limit no 1 50 (default 30)
GET /api/v2/youtube/playlist/videos — 1 credit/page
Param Required Validation
playlist conditional Playlist URL or ID ( PL / UU / LL / FL / OL prefix)
continuation conditional non empty string
Credit Costs
Endpoint Cost
transcript 1
search 1
channel/resolve free
channel/search 1
channel/videos 1/page
channel/latest free
playlist/videos 1/page
Errors
Code Meaning Action
401 Bad API key Check key, re run setup
402 No credits Top up at transcriptapi.com/billing
403/1010 Cloudflare block Add or fix User Agent header
404 Not found Video/channel/playlist doesn't exist or no captions
408 Timeout/retryable Retry once after 2s
422 Validation error Check param format
429 Rate limited Wait, respect Retry After
Tips
When user shares YouTube URL with no instruction, fetch transcript and summarize key points.
Use channel/latest (free) to check for new uploads before fetching transcripts — pass @handle directly.
For research: search → pick videos → fetch transcripts.
Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits, 300 req/min.
Copy paste examples
Every request in this file as a ready to run one liner: [references/curl examples.md](references/curl examples.md)