YouTube
YouTube playlist.videos
List the videos of a YouTube playlist. Normalized JSON, one price per record, automatic failover across sources.
POST
/
v1
/
extract
/
youtube
/
playlist.videos
curl -X POST https://api.socialrouter.io/v1/extract/youtube/playlist.videos \
-H "Authorization: Bearer sr_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
}'
const response = await fetch(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
{
method: "POST",
headers: {
"Authorization": "Bearer sr_live_your_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
}),
},
);
import requests
response = requests.post(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
headers={"Authorization": "Bearer sr_live_your_key"},
json={
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
},
)
const run = await sr.run("youtube/playlist.videos", {
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
});
{
"id": "ext_a1b2c3d4",
"status": "completed",
"platform": "youtube",
"service": "playlist.videos",
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"served_by": "apify/streamers",
"data": [
{
"name": "Crazy Frog Blasts Off into Space | Short Film",
"title": "Crazy Frog Blasts Off into Space | Short Film",
"profile_url": "https://www.youtube.com/watch?v=97XHk1KD_wU&list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5&index=2",
"source": "youtube",
"extracted_at": "2026-08-04T14:21:33.055Z",
"video_id": "97XHk1KD_wU",
"video_type": "video",
"description": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog fl...",
"date_posted": "2025-12-31T14:25:09.000Z",
"duration": "00:08:48",
"thumbnail": "https://i.ytimg.com/vi/97XHk1KD_wU/maxresdefault.jpg",
"views": 26864755,
"likes": 60000,
"num_comments": 1584,
"comments_turned_off": false,
"is_members_only": false,
"is_paid_content": false,
"location": "Crazy Frog Official Podcast",
"hashtags": [],
"channel_id": "UC4XR0EZ0oHwSV2XhhShzX5A",
"channel_name": "Crazy Frog",
"channel_url": "https://www.youtube.com/@crazyfrog",
"channel_username": "crazyfrog",
"channel_subscribers": 18800000,
"translated_text": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog ...",
"description_links": [
{
"text": "http://bit.ly/2wUSKiZ",
"url": "http://bit.ly/2wUSKiZ"
},
"... 22 more"
],
"collaborators": [],
"source_url": "https://www.youtube.com/playlist?list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5",
"source_order": 1
}
],
"pagination": {
"total": 1,
"returned": 1
},
"created_at": "2026-07-30T12:00:00Z",
"completed_at": "2026-07-30T12:00:03Z"
}
List the videos of a YouTube playlist. The response is normalized, so it keeps the same shape whichever offer served it.
The call is synchronous and comes back
Prices are live in the catalogue:
completed or failed. Body fields and error codes shared by every service are documented on Run a service.
Body
string[]
required
The URLs to fetch, as
urls (array) or url (single string). Each one must match an accepted format below, and a mismatch returns 400 invalid_input_format before any routing or billing.string
Single-input form of
urls.number
default:"100"
Maximum number of records to return. Integer, 1-250.
string
Pin one offer, as
source/name. Serving this service: apify/streamers. Omit it (the default) to let the router walk the failover chain.object
This service declares no options. Any key sent here returns a corrective
400.Accepted URL formats
| Format | Example |
|---|---|
https://www.youtube.com/playlist?list=<playlist_id> | https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE |
Offers
One offer serves this endpoint today. When a second one implements it, failover turns on with no change on your side.| Offer | Inputs per call |
|---|---|
apify/streamers | 100 |
GET /v1/services/youtube/playlist.videos. See Credits for how a call is billed.
Response
data[] holds the normalized records, served_by names the offer that answered, and credits_used carries the actual charge.
The example response is a real run with values shortened for readability. A field is present when YouTube exposes it for that item, so the exact set varies record to record.
curl -X POST https://api.socialrouter.io/v1/extract/youtube/playlist.videos \
-H "Authorization: Bearer sr_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
}'
const response = await fetch(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
{
method: "POST",
headers: {
"Authorization": "Bearer sr_live_your_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
}),
},
);
import requests
response = requests.post(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
headers={"Authorization": "Bearer sr_live_your_key"},
json={
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
},
)
const run = await sr.run("youtube/playlist.videos", {
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
});
{
"id": "ext_a1b2c3d4",
"status": "completed",
"platform": "youtube",
"service": "playlist.videos",
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"served_by": "apify/streamers",
"data": [
{
"name": "Crazy Frog Blasts Off into Space | Short Film",
"title": "Crazy Frog Blasts Off into Space | Short Film",
"profile_url": "https://www.youtube.com/watch?v=97XHk1KD_wU&list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5&index=2",
"source": "youtube",
"extracted_at": "2026-08-04T14:21:33.055Z",
"video_id": "97XHk1KD_wU",
"video_type": "video",
"description": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog fl...",
"date_posted": "2025-12-31T14:25:09.000Z",
"duration": "00:08:48",
"thumbnail": "https://i.ytimg.com/vi/97XHk1KD_wU/maxresdefault.jpg",
"views": 26864755,
"likes": 60000,
"num_comments": 1584,
"comments_turned_off": false,
"is_members_only": false,
"is_paid_content": false,
"location": "Crazy Frog Official Podcast",
"hashtags": [],
"channel_id": "UC4XR0EZ0oHwSV2XhhShzX5A",
"channel_name": "Crazy Frog",
"channel_url": "https://www.youtube.com/@crazyfrog",
"channel_username": "crazyfrog",
"channel_subscribers": 18800000,
"translated_text": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog ...",
"description_links": [
{
"text": "http://bit.ly/2wUSKiZ",
"url": "http://bit.ly/2wUSKiZ"
},
"... 22 more"
],
"collaborators": [],
"source_url": "https://www.youtube.com/playlist?list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5",
"source_order": 1
}
],
"pagination": {
"total": 1,
"returned": 1
},
"created_at": "2026-07-30T12:00:00Z",
"completed_at": "2026-07-30T12:00:03Z"
}
⌘I
curl -X POST https://api.socialrouter.io/v1/extract/youtube/playlist.videos \
-H "Authorization: Bearer sr_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
}'
const response = await fetch(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
{
method: "POST",
headers: {
"Authorization": "Bearer sr_live_your_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
}),
},
);
import requests
response = requests.post(
"https://api.socialrouter.io/v1/extract/youtube/playlist.videos",
headers={"Authorization": "Bearer sr_live_your_key"},
json={
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"limit": 50
},
)
const run = await sr.run("youtube/playlist.videos", {
url: "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
limit: 50
});
{
"id": "ext_a1b2c3d4",
"status": "completed",
"platform": "youtube",
"service": "playlist.videos",
"url": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE",
"served_by": "apify/streamers",
"data": [
{
"name": "Crazy Frog Blasts Off into Space | Short Film",
"title": "Crazy Frog Blasts Off into Space | Short Film",
"profile_url": "https://www.youtube.com/watch?v=97XHk1KD_wU&list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5&index=2",
"source": "youtube",
"extracted_at": "2026-08-04T14:21:33.055Z",
"video_id": "97XHk1KD_wU",
"video_type": "video",
"description": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog fl...",
"date_posted": "2025-12-31T14:25:09.000Z",
"duration": "00:08:48",
"thumbnail": "https://i.ytimg.com/vi/97XHk1KD_wU/maxresdefault.jpg",
"views": 26864755,
"likes": 60000,
"num_comments": 1584,
"comments_turned_off": false,
"is_members_only": false,
"is_paid_content": false,
"location": "Crazy Frog Official Podcast",
"hashtags": [],
"channel_id": "UC4XR0EZ0oHwSV2XhhShzX5A",
"channel_name": "Crazy Frog",
"channel_url": "https://www.youtube.com/@crazyfrog",
"channel_username": "crazyfrog",
"channel_subscribers": 18800000,
"translated_text": "► More Crazy Frog Videos: http://bit.ly/2wUSKiZ ◀︎\n #crazyfrog #shortfilm #spaceodyssey @crazyfrog \nCrazy Frog ...",
"description_links": [
{
"text": "http://bit.ly/2wUSKiZ",
"url": "http://bit.ly/2wUSKiZ"
},
"... 22 more"
],
"collaborators": [],
"source_url": "https://www.youtube.com/playlist?list=PLUvfp5G8vYamFQ9uaams4xbGoOx1sDln5",
"source_order": 1
}
],
"pagination": {
"total": 1,
"returned": 1
},
"created_at": "2026-07-30T12:00:00Z",
"completed_at": "2026-07-30T12:00:03Z"
}