YouTube Channel Playlists API
List the playlists on a channel's Playlists tab with their video counts.
- 1 credit per call
- Failed calls are free
- Updated
- youtube.channel-playlists.list
{ "summary": { "channel_id": "UCLA_DiR1FfKNvjuUpBHmylQ", "has_more": true, "tab": "playlists", "total_items": 40 }, "items": [ { "title": "Nancy Grace Roman Space Telescope", "author": "Playlist", "playlist_id": "PLF98rxtslw6s", "type": "playlist", "video_count": "3 videos" }, { "title": "NASA Moon Base", "author": "Playlist", "playlist_id": "PLB29CbKaE2OY", "type": "playlist", "video_count": "9 videos" } ]}
| # | Playlist | Videos | Playlist ID | Author | Type |
|---|---|---|---|---|---|
| 1 | Nancy Grace Roman Space Telescope | 3 videos | PLF98rxtslw6s | Playlist | playlist |
| 2 | NASA Moon Base | 9 videos | PLB29CbKaE2OY | Playlist | playlist |
| 3 | 2026 Total Solar Eclipse | 4 videos | PLb911ot23pTQ | Playlist | playlist |
| 4 | Artemis III | 9 videos | PL2aBZuCeDwlRaF6AIey7ulmW1X0SHI1mQ | Playlist | playlist |
| 5 | Artemis II Astronauts | 6 videos | PL2aBZuCeDwlSZtPohs7riBBDIgl9D5ltA | Playlist | playlist |
| 6 | Artemis II Mission Coverage | 23 videos | PL2aBZuCeDwlQvNtHhNJtarm9OewQwVntv | Playlist | playlist |
| 7 | Europa Clipper | 9 videos | PL2aBZuCeDwlTXR6kIe16j0h4lx--ZneRO | Playlist | playlist |
| 8 | NASA+ Series Trailers | 8 videos | PL2aBZuCeDwlSlkI3MBOmbt-FZaAWSNbB2 | Playlist | playlist |
| 9 | Artemis I: Path to the Pad | 5 videos | PL2aBZuCeDwlQoPqPmj1NR4S5JDcqMOspT | Playlist | playlist |
| 10 | Camera Views from NASA's Artemis I Mission to the Moon | 10 videos | PL2aBZuCeDwlTW27zw5zOH0hKRoXVtK7Z7 | Playlist | playlist |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| url | string | yes | Public URL of the page to fetch. | @NASA |
| limit | integer | no | Maximum number of results to return. From 1 to 500. Default: 100. |
40 |
| max_pages | integer | no | Maximum number of result pages to fetch. From 1 to 100. Default: 5. |
2 |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| items[].title | string | The playlist's title. | Nancy Grace Roman Space Telescope |
| items[].video_count | string | How many videos the playlist has, as YouTube writes it. | 3 videos |
| items[].playlist_id | string | YouTube's ID for the playlist. | PLF98rxtslw6s |
| items[].author | string | The channel that posted it. | Playlist |
| items[].type | string | What kind of item it is, such as video. | playlist |
| items | array | The channel's playlists. | 40 records |
| summary | object | Totals and paging details for this answer. | 4 fields |
| summary.channel_id | string | YouTube's ID for the channel. | UCLA_DiR1FfKNvjuUpBHmylQ |
| summary.has_more | boolean | Whether more items are available. | true |
| summary.tab | string | Which channel tab the items come from. | playlists |
| summary.total_items | integer | How many items this answer holds. | 40 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "youtube.channel-playlists.list", "input": { "limit": 40, "max_pages": 2, "url": "@NASA" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "youtube.channel-playlists.list", "input": { "limit": 40, "max_pages": 2, "url": "@NASA" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "youtube.channel-playlists.list", "input": { "limit": 40, "max_pages": 2, "url": "@NASA" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, list NASA's YouTube playlists with how many videos each has.
More from the YouTube API
- YouTube Video API1 credit
- YouTube Channel API1 credit
- YouTube Channel Videos API1 credit
- YouTube Search API1 credit
- YouTube Comments API1 credit
- YouTube Channel Shorts API1 credit
- YouTube Channel Live Streams API1 credit
- YouTube Playlist API1 credit
- YouTube Channel Community API1 credit
- YouTube Community Post API1 credit
- YouTube Hashtag Videos API1 credit
- YouTube Typeahead Search API1 credit
- YouTube Trending Shorts API1 credit
YouTube Channel Playlists API FAQ
The short answers. The docs have the long ones.
How much does the YouTube Channel Playlists API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send url. The input fields below list every option with its type and limits.
Do I need a YouTube login?
No. It reads public YouTube data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds youtube.channel-playlists.list, checks its price and runs it with the same credits as the REST API.
Your first YouTube call is free.
Up to 100 free credits to start, no card needed.