Youtube API

Use when YouTube data is needed without Google API quotas or OAuth setup: transcripts, video metadata, channel info, search results, playlists.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/youtube-api.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit ZeroPointRepo/youtube-skills/skills/youtube-api#main ~/.claude/skills/youtube-api

For one project only, change the path to .claude/skills/youtube-api.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Youtube API

Show the full text190 lines
namedescriptionversionuser-invocablecompatibilityrequired_environment_variablesmetadata
youtube-apiUse when YouTube data is needed without Google API quotas or OAuth setup: transcripts, video metadata, channel info, search results, playlists. Triggers on pasted YouTube links, creator names, @handles, topic research, video summaries, channel browsing, or any request where YouTube content would help — even if not mentioned explicitly. Not for uploads, account management, or written-source-only research.1.6.2trueRequires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed. - name: TRANSCRIPT_API_KEY prompt: Your TranscriptAPI key (starts with sk_) help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you. required_for: all API requests{"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","transcripts","video","search","channels","playlists","api","no-quota"],"category":"media"}}

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 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.

Endpoint Method Cost
/info?video_url=ID GET free
/video/metadata?video_url=ID GET 1
/transcript?video_url=ID GET 1
/search?q=QUERY&type=video GET 1
/channel/resolve?input=@handle GET free
/channel/info?channel=@handle GET 1
/channel/latest?channel=@handle GET free
/channel/videos?channel=@handle GET 1/page
/channel/search?channel=@handle&q=Q GET 1
/channel/playlists?channel=@handle GET 1/page
/channel/posts?channel=@handle GET 1/page
/channel/sections?channel=@handle GET 1
/playlist/videos?playlist=PL_ID GET 1/page

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/metadata was previously /video/info. The old path still works but is deprecated — use /video/metadata.

Quick Examples

Search videos:

GET https://transcriptapi.com/api/v2/youtube/search?q=python+tutorial&type=video&limit=10
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Get transcript:

GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=dQw4w9WgXcQ&format=text&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Check video info & transcript languages (free, before spending a credit):

GET https://transcriptapi.com/api/v2/youtube/info?video_url=dQw4w9WgXcQ
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Get rich video metadata (views, likes, description, tags):

GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=dQw4w9WgXcQ&include=details
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Get a channel's profile (subscriber count, tags, tabs):

GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

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):

GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Latest videos (free):

GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Browse channel uploads (paginated):

GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# Most-viewed first (channel Videos tab, ~30 per page)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# Use continuation token from response for next pages, repeating the same tab and sort

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):

GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_PLAYLIST_ID
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Parameter Validation

Field Rule
channel @handle, channel URL, or UC... ID
playlist Playlist URL or ID (PL/UU/LL/FL/OL prefix)
q (search) 1-200 chars
type (search) video (default), channel, playlist, movie
tab (channel/videos) videos (default), shorts, streams
sort (channel/videos) latest, popular, oldest (omit for the uploads feed)
tab (channel/sections) featured (default), podcasts, releases
include (video/metadata) details, related (comma-separated)
limit 1-50
continuation non-empty string

Why Not Google's API?

Google YouTube Data API TranscriptAPI
Quota 10,000 units/day (100 searches) Credit-based, no daily cap
Setup OAuth + API key + project Single API key
Transcripts Not available Core feature
Pricing $0.0015/unit overage $5/1000 credits

Errors

Code Meaning Action
401 Bad API key Check key
402 No credits transcriptapi.com/billing
403/1010 Cloudflare block Add or fix User-Agent header
404 Not found Resource doesn't exist
408 Timeout/retryable Retry once after 2s
422 Validation error Check param format
429 Rate limited Wait, respect Retry-After

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

1---
2name: youtube-api
3description: "Use when YouTube data is needed without Google API quotas or OAuth setup: transcripts, video metadata, channel info, search results, playlists. Triggers on pasted YouTube links, creator names, @handles, topic research, video summaries, channel browsing, or any request where YouTube content would help — even if not mentioned explicitly. Not for uploads, account management, or written-source-only research."
4version: "1.6.2"
5user-invocable: true
6compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
7required_environment_variables:
8 - name: TRANSCRIPT_API_KEY
9 prompt: Your TranscriptAPI key (starts with sk_)
10 help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
11 required_for: all API requests
12metadata: {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","transcripts","video","search","channels","playlists","api","no-quota"],"category":"media"}}
13---
14 
15# YouTube API
16 
17YouTube data access via [TranscriptAPI.com](https://transcriptapi.com) — no Google API quota needed.
18 
19## Setup
20 
21If `$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.
22 
23## Required Headers
24 
25Every request needs two headers:
26 
27- **Authorization:** `Bearer $TRANSCRIPT_API_KEY`
28- **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.
29 
30## API Reference
31 
32Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
33 
34## Endpoint Reference
35 
36All endpoints: `https://transcriptapi.com/api/v2/youtube/...`
37 
38Channel endpoints accept `channel` — an `@handle`, channel URL, or `UC...` ID. Playlist endpoints accept `playlist` — a playlist URL or ID.
39 
40| Endpoint | Method | Cost |
41| -------------------------------------- | ------ | -------- |
42| `/info?video_url=ID` | GET | **free** |
43| `/video/metadata?video_url=ID` | GET | 1 |
44| `/transcript?video_url=ID` | GET | 1 |
45| `/search?q=QUERY&type=video` | GET | 1 |
46| `/channel/resolve?input=@handle` | GET | **free** |
47| `/channel/info?channel=@handle` | GET | 1 |
48| `/channel/latest?channel=@handle` | GET | **free** |
49| `/channel/videos?channel=@handle` | GET | 1/page |
50| `/channel/search?channel=@handle&q=Q` | GET | 1 |
51| `/channel/playlists?channel=@handle` | GET | 1/page |
52| `/channel/posts?channel=@handle` | GET | 1/page |
53| `/channel/sections?channel=@handle` | GET | 1 |
54| `/playlist/videos?playlist=PL_ID` | GET | 1/page |
55 
56`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`).
57 
58> **Naming:** `/video/metadata` was previously `/video/info`. The old path still works but is deprecated — use `/video/metadata`.
59 
60## Quick Examples
61 
62**Search videos:**
63 
64```http
65GET https://transcriptapi.com/api/v2/youtube/search?q=python+tutorial&type=video&limit=10
66Authorization: Bearer $TRANSCRIPT_API_KEY
67User-Agent: YourAgent/1.0
68```
69 
70**Get transcript:**
71 
72```http
73GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=dQw4w9WgXcQ&format=text&include_timestamp=true&send_metadata=true
74Authorization: Bearer $TRANSCRIPT_API_KEY
75User-Agent: YourAgent/1.0
76```
77 
78**Check video info & transcript languages (free, before spending a credit):**
79 
80```http
81GET https://transcriptapi.com/api/v2/youtube/info?video_url=dQw4w9WgXcQ
82Authorization: Bearer $TRANSCRIPT_API_KEY
83User-Agent: YourAgent/1.0
84```
85 
86**Get rich video metadata (views, likes, description, tags):**
87 
88```http
89GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=dQw4w9WgXcQ&include=details
90Authorization: Bearer $TRANSCRIPT_API_KEY
91User-Agent: YourAgent/1.0
92```
93 
94**Get a channel's profile (subscriber count, tags, tabs):**
95 
96```http
97GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
98Authorization: Bearer $TRANSCRIPT_API_KEY
99User-Agent: YourAgent/1.0
100```
101 
102Also available with the same `channel` parameter: `/channel/playlists` (a channel's playlists), `/channel/posts` (community tab), and `/channel/sections` (its curated Home-page shelves).
103 
104**Resolve channel handle (free):**
105 
106```http
107GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
108Authorization: Bearer $TRANSCRIPT_API_KEY
109User-Agent: YourAgent/1.0
110```
111 
112**Latest videos (free):**
113 
114```http
115GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
116Authorization: Bearer $TRANSCRIPT_API_KEY
117User-Agent: YourAgent/1.0
118```
119 
120**Browse channel uploads (paginated):**
121 
122```http
123GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA
124Authorization: Bearer $TRANSCRIPT_API_KEY
125User-Agent: YourAgent/1.0
126 
127# Most-viewed first (channel Videos tab, ~30 per page)
128GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
129Authorization: Bearer $TRANSCRIPT_API_KEY
130User-Agent: YourAgent/1.0
131 
132# Use continuation token from response for next pages, repeating the same tab and sort
133```
134 
135**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.
136 
137When paging, send the same sort on each request.
138 
139**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`.
140 
141**Browse playlist (paginated):**
142 
143```http
144GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_PLAYLIST_ID
145Authorization: Bearer $TRANSCRIPT_API_KEY
146User-Agent: YourAgent/1.0
147```
148 
149## Parameter Validation
150 
151| Field | Rule |
152| -------------- | ------------------------------------------------------- |
153| `channel` | `@handle`, channel URL, or `UC...` ID |
154| `playlist` | Playlist URL or ID (`PL`/`UU`/`LL`/`FL`/`OL` prefix) |
155| `q` (search) | 1-200 chars |
156| `type` (search) | `video` (default), `channel`, `playlist`, `movie` |
157| `tab` (channel/videos) | `videos` (default), `shorts`, `streams` |
158| `sort` (channel/videos) | `latest`, `popular`, `oldest` (omit for the uploads feed) |
159| `tab` (channel/sections) | `featured` (default), `podcasts`, `releases` |
160| `include` (video/metadata) | `details`, `related` (comma-separated) |
161| `limit` | 1-50 |
162| `continuation` | non-empty string |
163 
164## Why Not Google's API?
165 
166| | Google YouTube Data API | TranscriptAPI |
167| ----------- | ------------------------------- | -------------------------- |
168| Quota | 10,000 units/day (100 searches) | Credit-based, no daily cap |
169| Setup | OAuth + API key + project | Single API key |
170| Transcripts | Not available | Core feature |
171| Pricing | $0.0015/unit overage | $5/1000 credits |
172 
173## Errors
174 
175| Code | Meaning | Action |
176| -------- | ----------------- | ---------------------------------------------- |
177| 401 | Bad API key | Check key |
178| 402 | No credits | transcriptapi.com/billing |
179| 403/1010 | Cloudflare block | Add or fix User-Agent header |
180| 404 | Not found | Resource doesn't exist |
181| 408 | Timeout/retryable | Retry once after 2s |
182| 422 | Validation error | Check param format |
183| 429 | Rate limited | Wait, respect Retry-After |
184 
185Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits.
186 
187## Copy-paste examples
188 
189Every request in this file as a ready-to-run one-liner: [references/curl-examples.md](references/curl-examples.md)
190 

Discussion

Alternatives

Also in Services & APIsSee all 533 in Development →