Youtube channels
Use when a YouTube channel is the focus: pasted @handles or channel URLs, requests to browse a creator's uploads, see what a channel has posted recently, search within a channel, or resolve a handle to a channel ID.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/youtube-channels. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit ZeroPointRepo/youtube-skills/skills/youtube-channels#main ~/.claude/skills/youtube-channelsFor one project only, change the path to .claude/skills/youtube-channels.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- 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.
Paste into Claude, ChatGPT or Cursor.
Source of Youtube channels
Show the full text311 lines
| name | description | version | user-invocable | compatibility | required_environment_variables | metadata |
|---|---|---|---|---|---|---|
| youtube-channels | Use when a YouTube channel is the focus: pasted @handles or channel URLs, requests to browse a creator's uploads, see what a channel has posted recently, search within a channel, or resolve a handle to a channel ID. Also use when the user names a creator and wants to explore their content or monitor their uploads. Not for creating channels or account management. | 1.6.3 | true | Requires 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","channels","video","uploads","creator","browsing"],"category":"media"}} |
YouTube Channels
YouTube channel tools via TranscriptAPI.com.
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.
All channel endpoints accept flexible input — @handle, channel URL, or UC... channel ID. No need to resolve first.
GET /api/v2/youtube/channel/resolve — FREE
Convert @handle, URL, or UC... ID to canonical channel ID.
GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
input |
yes | 1-200 chars — @handle, URL, or UC... ID |
Response:
{ "channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED" }
If input is already UC[a-zA-Z0-9_-]{22}, returns immediately.
GET /api/v2/youtube/channel/latest — FREE
Latest 15 videos via RSS with exact stats.
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
channel |
yes | @handle, channel URL, or UC... ID |
Response:
{
"channel": {
"channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
"title": "TED",
"author": "TED",
"url": "https://www.youtube.com/channel/UCsT0YIqwnpJCM-mx7-gSA4Q",
"published": "2006-04-17T00:00:00Z"
},
"results": [
{
"videoId": "abc123xyz00",
"title": "Latest Video Title",
"channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
"author": "TED",
"published": "2026-01-30T16:00:00Z",
"updated": "2026-01-31T02:00:00Z",
"link": "https://www.youtube.com/watch?v=abc123xyz00",
"description": "Full video description...",
"thumbnail": { "url": "https://i1.ytimg.com/vi/.../hqdefault.jpg" },
"viewCount": "2287630",
"starRating": {
"average": "4.92",
"count": "15000",
"min": "1",
"max": "5"
}
}
],
"result_count": 15
}
Great for monitoring channels — free and gives exact view counts + ISO timestamps.
GET /api/v2/youtube/channel/videos — 1 credit/page
Paginated list of a channel's feed (~100 per page). Use tab to pick uploads (default), Shorts, or live streams, and the optional sort to order the Videos tab by latest, popular, or oldest.
# First page
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos
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
# Next pages (repeat the same tab AND sort)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
channel |
conditional | @handle, channel URL, or UC... ID |
tab |
no | videos (default), shorts, or streams |
sort |
no | latest, popular, or oldest (omit for the uploads feed) |
continuation |
conditional | non-empty (next pages) |
Provide exactly one of channel or continuation, not both. When paginating, pass the same tab and sort on every page.
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.
Per-item fields by feed:
| Field | uploads (no sort) |
tab=videos + sort |
tab=streams |
tab=shorts |
|---|---|---|---|---|
lengthText |
populated | populated | populated (LIVE while live) |
null |
publishedTimeText |
populated | populated | populated (Streamed 2 years ago) |
null |
viewCountText |
populated | populated | populated (null while live) |
populated |
channelId / channelTitle / channelHandle / index |
populated | null |
null |
null |
members_only |
always false |
true on membership videos |
true on membership streams |
always false |
members_only is true only when YouTube badges the item "Members only". Such items carry no viewCountText, because YouTube does not publish view counts for membership content.
Response:
{
"results": [{
"videoId": "abc123xyz00",
"title": "Video Title",
"channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
"channelTitle": "TED",
"channelHandle": "@TED",
"lengthText": "15:22",
"viewCountText": "3.2M views",
"publishedTimeText": "2 years ago",
"thumbnails": [...],
"index": "0",
"members_only": false
}],
"playlist_info": {"title": "Uploads from TED", "numVideos": "5000", "ownerName": "TED"},
"continuation_token": "4qmFsgKlARIYVVV1...",
"has_more": true
}
Keep calling with continuation until has_more: false.
GET /api/v2/youtube/channel/search — 1 credit
Search within a specific channel.
GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 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/channel/info — 1 credit
A channel's profile: title, handle, verified flag, subscriber/video counts, description, tags, thumbnails, banners, and the tabs it exposes.
GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
channel |
yes | @handle, channel URL, or UC... ID |
Response:
{
"channelId": "UCAuUUnT6oDeKwE6v1NGQxug",
"title": "TED",
"handle": "@TED",
"verified": true,
"subscriberCountText": "23.8M subscribers",
"videoCountText": "4,300 videos",
"description": "The TED Talks channel features ...",
"tags": ["TED", "TED Talks"],
"thumbnails": [...],
"banners": [...],
"availableTabs": ["videos", "shorts", "playlists", "community"]
}
Counts are display strings and null when YouTube hides them — never 0. Check availableTabs before calling channel/sections or channel/videos with a tab.
GET /api/v2/youtube/channel/playlists — 1 credit/page
List the playlists shown on a channel — useful for finding a playlist ID to feed into playlist/videos.
GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
channel |
conditional | @handle, channel URL, or UC... ID |
continuation |
conditional | non-empty (next pages) |
Provide exactly one of channel or continuation, not both. Returns results (playlistId, title, url, videoCountText, thumbnails), continuation_token, has_more.
GET /api/v2/youtube/channel/posts — 1 credit/page
List a channel's community (Posts tab) content — text, publish time, like counts, and any attachment (image, video, playlist, or poll).
GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Validation |
|---|---|---|
channel |
conditional | @handle, channel URL, or UC... ID |
continuation |
conditional | non-empty (next pages) |
Provide exactly one of channel or continuation, not both. Channels with no community tab return an empty results list (not an error).
GET /api/v2/youtube/channel/sections — 1 credit
The curated shelves on a channel's Home page (or its podcasts/releases pages) — each shelf holds videos, playlists, shorts, or featured channels, in the channel's own order. Not paginated.
GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Required | Default | Validation |
|---|---|---|---|
channel |
yes | — | @handle, channel URL, or UC... ID |
tab |
no | featured |
featured (Home), podcasts, releases |
podcasts and releases only exist on channels that have them (empty results otherwise — check availableTabs from channel/info first).
Typical workflow
# 1. Check latest uploads (free — pass @handle directly)
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
# 2. Get transcript of recent video
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Errors
| Code | Meaning | Action |
|---|---|---|
| 400 | Invalid param combination | Both or neither channel/continuation |
| 402 | No credits | transcriptapi.com/billing |
| 403/1010 | Cloudflare block | Add or fix User-Agent header |
| 404 | Channel not found | Check handle or URL |
| 408 | Timeout | Retry once |
| 422 | Invalid channel identifier | Check param format |
Free tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits.
Copy-paste examples
Every request in this file as a ready-to-run one-liner: references/curl-examples.md
| 1 | |
| 2 | name youtube-channels |
| 3 | description "Use when a YouTube channel is the focus: pasted @handles or channel URLs, requests to browse a creator's uploads, see what a channel has posted recently, search within a channel, or resolve a handle to a channel ID. Also use when the user names a creator and wants to explore their content or monitor their uploads. Not for creating channels or account management." |
| 4 | version "1.6.3" |
| 5 | user-invocable true |
| 6 | compatibility Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed. |
| 7 | required_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 |
| 12 | metadata {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","channels","video","uploads","creator","browsing"],"category":"media"}} |
| 13 | |
| 14 | |
| 15 | # YouTube Channels |
| 16 | |
| 17 | YouTube channel tools via [TranscriptAPI.com]. |
| 18 | |
| 19 | ## Setup |
| 20 | |
| 21 | If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md] and follow the instructions there to get and store the key. |
| 22 | |
| 23 | ## Required Headers |
| 24 | |
| 25 | Every 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 | |
| 32 | Full OpenAPI spec: [transcriptapi.com/openapi.json] — consult this for the latest parameters and schemas. |
| 33 | |
| 34 | All channel endpoints accept flexible input — `@handle`, channel URL, or `UC...` channel ID. No need to resolve first. |
| 35 | |
| 36 | ## GET /api/v2/youtube/channel/resolve — FREE |
| 37 | |
| 38 | Convert @handle, URL, or UC... ID to canonical channel ID. |
| 39 | |
| 40 | |
| 41 | GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED |
| 42 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 43 | User-Agent: YourAgent/1.0 |
| 44 | |
| 45 | |
| 46 | | Param | Required | Validation | |
| 47 | | ------- | -------- | --------------------------------------- | |
| 48 | | `input` | yes | 1-200 chars — @handle, URL, or UC... ID | |
| 49 | |
| 50 | **Response:** |
| 51 | |
| 52 | |
| 53 | { "channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED" } |
| 54 | |
| 55 | |
| 56 | If input is already `UC[a-zA-Z0-9_-]{22}`, returns immediately. |
| 57 | |
| 58 | ## GET /api/v2/youtube/channel/latest — FREE |
| 59 | |
| 60 | Latest 15 videos via RSS with exact stats. |
| 61 | |
| 62 | |
| 63 | GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED |
| 64 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 65 | User-Agent: YourAgent/1.0 |
| 66 | |
| 67 | |
| 68 | | Param | Required | Validation | |
| 69 | | --------- | -------- | ----------------------------------------- | |
| 70 | | `channel` | yes | `@handle`, channel URL, or `UC...` ID | |
| 71 | |
| 72 | **Response:** |
| 73 | |
| 74 | |
| 75 | { |
| 76 | "channel": { |
| 77 | "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q", |
| 78 | "title": "TED", |
| 79 | "author": "TED", |
| 80 | "url": "https://www.youtube.com/channel/UCsT0YIqwnpJCM-mx7-gSA4Q", |
| 81 | "published": "2006-04-17T00:00:00Z" |
| 82 | }, |
| 83 | "results": [ |
| 84 | { |
| 85 | "videoId": "abc123xyz00", |
| 86 | "title": "Latest Video Title", |
| 87 | "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q", |
| 88 | "author": "TED", |
| 89 | "published": "2026-01-30T16:00:00Z", |
| 90 | "updated": "2026-01-31T02:00:00Z", |
| 91 | "link": "https://www.youtube.com/watch?v=abc123xyz00", |
| 92 | "description": "Full video description...", |
| 93 | "thumbnail": { "url": "https://i1.ytimg.com/vi/.../hqdefault.jpg" }, |
| 94 | "viewCount": "2287630", |
| 95 | "starRating": { |
| 96 | "average": "4.92", |
| 97 | "count": "15000", |
| 98 | "min": "1", |
| 99 | "max": "5" |
| 100 | } |
| 101 | } |
| 102 | ], |
| 103 | "result_count": 15 |
| 104 | } |
| 105 | |
| 106 | |
| 107 | Great for monitoring channels — free and gives exact view counts + ISO timestamps. |
| 108 | |
| 109 | ## GET /api/v2/youtube/channel/videos — 1 credit/page |
| 110 | |
| 111 | Paginated list of a channel's feed (~100 per page). Use `tab` to pick uploads (default), Shorts, or live streams, and the optional `sort` to order the Videos tab by latest, popular, or oldest. |
| 112 | |
| 113 | |
| 114 | # First page |
| 115 | GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos |
| 116 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 117 | User-Agent: YourAgent/1.0 |
| 118 | |
| 119 | # Most-viewed first (channel Videos tab, ~30 per page) |
| 120 | GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular |
| 121 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 122 | User-Agent: YourAgent/1.0 |
| 123 | |
| 124 | # Next pages (repeat the same tab AND sort) |
| 125 | GET https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN&sort=popular |
| 126 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 127 | User-Agent: YourAgent/1.0 |
| 128 | |
| 129 | |
| 130 | | Param | Required | Validation | |
| 131 | | -------------- | ----------- | --------------------------------------------- | |
| 132 | | `channel` | conditional | `@handle`, channel URL, or `UC...` ID | |
| 133 | | `tab` | no | `videos` (default), `shorts`, or `streams` | |
| 134 | | `sort` | no | `latest`, `popular`, or `oldest` (omit for the uploads feed) | |
| 135 | | `continuation` | conditional | non-empty (next pages) | |
| 136 | |
| 137 | Provide exactly one of `channel` or `continuation`, not both. When paginating, pass the same `tab` **and** `sort` on every page. |
| 138 | |
| 139 | **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. |
| 140 | |
| 141 | When paging, send the same sort on each request. |
| 142 | |
| 143 | **Per-item fields by feed:** |
| 144 | |
| 145 | | Field | uploads (no `sort`) | `tab=videos` + `sort` | `tab=streams` | `tab=shorts` | |
| 146 | | --- | --- | --- | --- | --- | |
| 147 | | `lengthText` | populated | populated | populated (`LIVE` while live) | `null` | |
| 148 | | `publishedTimeText` | populated | populated | populated (`Streamed 2 years ago`) | `null` | |
| 149 | | `viewCountText` | populated | populated | populated (`null` while live) | populated | |
| 150 | | `channelId` / `channelTitle` / `channelHandle` / `index` | populated | `null` | `null` | `null` | |
| 151 | | `members_only` | always `false` | `true` on membership videos | `true` on membership streams | always `false` | |
| 152 | |
| 153 | `members_only` is `true` only when YouTube badges the item "Members only". Such items carry **no `viewCountText`**, because YouTube does not publish view counts for membership content. |
| 154 | |
| 155 | **Response:** |
| 156 | |
| 157 | |
| 158 | { |
| 159 | "results": [{ |
| 160 | "videoId": "abc123xyz00", |
| 161 | "title": "Video Title", |
| 162 | "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q", |
| 163 | "channelTitle": "TED", |
| 164 | "channelHandle": "@TED", |
| 165 | "lengthText": "15:22", |
| 166 | "viewCountText": "3.2M views", |
| 167 | "publishedTimeText": "2 years ago", |
| 168 | "thumbnails": [...], |
| 169 | "index": "0", |
| 170 | "members_only": false |
| 171 | }], |
| 172 | "playlist_info": {"title": "Uploads from TED", "numVideos": "5000", "ownerName": "TED"}, |
| 173 | "continuation_token": "4qmFsgKlARIYVVV1...", |
| 174 | "has_more": true |
| 175 | } |
| 176 | |
| 177 | |
| 178 | Keep calling with `continuation` until `has_more: false`. |
| 179 | |
| 180 | ## GET /api/v2/youtube/channel/search — 1 credit |
| 181 | |
| 182 | Search within a specific channel. |
| 183 | |
| 184 | |
| 185 | GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30 |
| 186 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 187 | User-Agent: YourAgent/1.0 |
| 188 | |
| 189 | |
| 190 | | Param | Required | Validation | |
| 191 | | --------- | -------- | ----------------------------------------- | |
| 192 | | `channel` | yes | `@handle`, channel URL, or `UC...` ID | |
| 193 | | `q` | yes | 1-200 chars | |
| 194 | | `limit` | no | 1-50 (default 30) | |
| 195 | |
| 196 | ## GET /api/v2/youtube/channel/info — 1 credit |
| 197 | |
| 198 | A channel's profile: title, handle, verified flag, subscriber/video counts, description, tags, thumbnails, banners, and the tabs it exposes. |
| 199 | |
| 200 | |
| 201 | GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED |
| 202 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 203 | User-Agent: YourAgent/1.0 |
| 204 | |
| 205 | |
| 206 | | Param | Required | Validation | |
| 207 | | --------- | -------- | -------------------------------------- | |
| 208 | | `channel` | yes | `@handle`, channel URL, or `UC...` ID | |
| 209 | |
| 210 | **Response:** |
| 211 | |
| 212 | |
| 213 | { |
| 214 | "channelId": "UCAuUUnT6oDeKwE6v1NGQxug", |
| 215 | "title": "TED", |
| 216 | "handle": "@TED", |
| 217 | "verified": true, |
| 218 | "subscriberCountText": "23.8M subscribers", |
| 219 | "videoCountText": "4,300 videos", |
| 220 | "description": "The TED Talks channel features ...", |
| 221 | "tags": ["TED", "TED Talks"], |
| 222 | "thumbnails": [...], |
| 223 | "banners": [...], |
| 224 | "availableTabs": ["videos", "shorts", "playlists", "community"] |
| 225 | } |
| 226 | |
| 227 | |
| 228 | Counts are display strings and `null` when YouTube hides them — never `0`. Check `availableTabs` before calling `channel/sections` or `channel/videos` with a `tab`. |
| 229 | |
| 230 | ## GET /api/v2/youtube/channel/playlists — 1 credit/page |
| 231 | |
| 232 | List the playlists shown on a channel — useful for finding a playlist ID to feed into `playlist/videos`. |
| 233 | |
| 234 | |
| 235 | GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED |
| 236 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 237 | User-Agent: YourAgent/1.0 |
| 238 | |
| 239 | |
| 240 | | Param | Required | Validation | |
| 241 | | -------------- | ----------- | --------------------------------------- | |
| 242 | | `channel` | conditional | `@handle`, channel URL, or `UC...` ID | |
| 243 | | `continuation` | conditional | non-empty (next pages) | |
| 244 | |
| 245 | Provide exactly one of `channel` or `continuation`, not both. Returns `results` (`playlistId`, `title`, `url`, `videoCountText`, `thumbnails`), `continuation_token`, `has_more`. |
| 246 | |
| 247 | ## GET /api/v2/youtube/channel/posts — 1 credit/page |
| 248 | |
| 249 | List a channel's community (Posts tab) content — text, publish time, like counts, and any attachment (image, video, playlist, or poll). |
| 250 | |
| 251 | |
| 252 | GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED |
| 253 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 254 | User-Agent: YourAgent/1.0 |
| 255 | |
| 256 | |
| 257 | | Param | Required | Validation | |
| 258 | | -------------- | ----------- | --------------------------------------- | |
| 259 | | `channel` | conditional | `@handle`, channel URL, or `UC...` ID | |
| 260 | | `continuation` | conditional | non-empty (next pages) | |
| 261 | |
| 262 | Provide exactly one of `channel` or `continuation`, not both. Channels with no community tab return an empty `results` list (not an error). |
| 263 | |
| 264 | ## GET /api/v2/youtube/channel/sections — 1 credit |
| 265 | |
| 266 | The curated shelves on a channel's Home page (or its `podcasts`/`releases` pages) — each shelf holds videos, playlists, shorts, or featured channels, in the channel's own order. Not paginated. |
| 267 | |
| 268 | |
| 269 | GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED |
| 270 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 271 | User-Agent: YourAgent/1.0 |
| 272 | |
| 273 | |
| 274 | | Param | Required | Default | Validation | |
| 275 | | --------- | -------- | ------------ | ---------------------------------------- | |
| 276 | | `channel` | yes | — | `@handle`, channel URL, or `UC...` ID | |
| 277 | | `tab` | no | `featured` | `featured` (Home), `podcasts`, `releases` | |
| 278 | |
| 279 | `podcasts` and `releases` only exist on channels that have them (empty `results` otherwise — check `availableTabs` from `channel/info` first). |
| 280 | |
| 281 | ## Typical workflow |
| 282 | |
| 283 | |
| 284 | # 1. Check latest uploads (free — pass @handle directly) |
| 285 | GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED |
| 286 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 287 | User-Agent: YourAgent/1.0 |
| 288 | |
| 289 | # 2. Get transcript of recent video |
| 290 | GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true |
| 291 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 292 | User-Agent: YourAgent/1.0 |
| 293 | |
| 294 | |
| 295 | ## Errors |
| 296 | |
| 297 | | Code | Meaning | Action | |
| 298 | | -------- | ------------------------------------------------------ | ------------------------------------ | |
| 299 | | 400 | Invalid param combination | Both or neither channel/continuation | |
| 300 | | 402 | No credits | transcriptapi.com/billing | |
| 301 | | 403/1010 | Cloudflare block | Add or fix User-Agent header | |
| 302 | | 404 | Channel not found | Check handle or URL | |
| 303 | | 408 | Timeout | Retry once | |
| 304 | | 422 | Invalid channel identifier | Check param format | |
| 305 | |
| 306 | Free tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits. |
| 307 | |
| 308 | ## Copy-paste examples |
| 309 | |
| 310 | Every request in this file as a ready-to-run one-liner: [references/curl-examples.md] |
| 311 |
Discussion
Browse more free Claude skills or everything in Content creator.