Supported URLs
All URL formats- Handle
@veritasium - Handle URL
https://www.youtube.com/@veritasium - Channel ID
UCHnyfMqiRRG1u-2MsSQLbXA - Channel ID URL
https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA - Custom channel URL
https://www.youtube.com/c/veritasium - Legacy user URL
https://www.youtube.com/user/veritasium
Body parameters
- type
string- required
true- description
- YouTube: @handle, /channel/UC… URL, or UC… ID.
- TikTok: profile URL (tiktok.com/@user).
- Instagram: profile URL (instagram.com/user/).
- type
string- required
false- default
"videos"- values
videosshortsliveplaylistspodcasts- scope
- YouTube channels only
- description
- Which tab to list:
videos(the default),shorts, orlive(streams: past broadcasts and upcoming ones). playlistsandpodcastslist the channel'splaylistsinstead of itsvideos:data.kindisplaylist_list, and each row's url is accepted by the playlist endpoint.- A tab the channel does not have (
liveon a channel that has never streamed, say) answers 200 with an empty list, which is free, and a notice such as"This channel has no Live tab."
- Which tab to list:
- type
string- required
false- default
"newest"- values
newestpopularoldest- scope
- YouTube channels only
- description
popularis YouTube's own Popular order, most viewed first, and it leaves out videos with no views.- Not accepted with the playlists and podcasts tabs.
- type
string (1-200 characters)- required
false- scope
- YouTube channels only
- description
- Search inside this channel: the page holds its videos that match, rather than its latest uploads.
- Leave
tabandsortunset.
- type
integer (1–50)- required
false- default
5- description
Max items to return per page: videos, or the playlists or channels some listing options return.
- type
string- required
false- description
- Opaque pagination cursor from a previous response's
next_cursor(max 256 characters). - Omit for the first page.
- Cursors are scoped to the listing that issued them, so send the same platform and listing options with each page.
- Offset-based sources cannot page past the first 2000 items.
- Opaque pagination cursor from a previous response's
- type
string- required
false- description
- Newest video ID you have already seen.
- The response is trimmed to videos newer than it.
- A poll with
since_video_idis a check for new uploads and costs 1 credit whether or not it finds any (a plain listing that comes back empty stays free). - It needs newest-first videos: on a YouTube channel, the videos, shorts or live
tabwith the defaultsortand noquery.
{
"ok": true,
"request_id": "req_…",
"data": {
"kind": "video_list",
"source": "channel_videos",
"platform": "youtube",
"videos": [
{
"videoId": "SHlrUAkkWI0",
"url": "https://www.youtube.com/watch?v=SHlrUAkkWI0",
"title": "Lex trains w/ Khabib Nurmagomedov | Exclusive Footage at UFC PI",
"duration": null,
"channel": "Lex Fridman",
"publishedAt": null,
"stats": {
"plays": 64000
}
},
{
"videoId": "1WrrOJJ8-5g",
"url": "https://www.youtube.com/watch?v=1WrrOJJ8-5g",
"title": "High salaries for AI engineers: The talent war in AI",
"duration": null,
"channel": "Lex Fridman",
"publishedAt": null,
"stats": {
"plays": 89000
}
}
],
"next_cursor": "eyJvIjoxMH0"
},
"usage": {
"credits_spent": 1,
"balance": 656,
"bytes": 0
}
}Every YouTube endpoint
- POSTTranscriptText or segments for a YouTube video.
- POSTSearchSearch YouTube with date and length filters.
- POSTChannel VideosList a YouTube channel's videos.
- POSTPlaylistList a playlist's videos, page by page.
- POSTShortsList a channel's Shorts to transcribe.
- POSTChannel MonitorNew uploads from a channel, by webhook.
Frequently asked questions
How do I get the transcript of one YouTube Short?
Send its URL (youtube.com/shorts/<id>) or the bare id to the transcript endpoint, exactly as for a normal video. Captions are read first and AI Fallback Transcription takes over when there are none; a Short is short, so it comes back inline.
How do I list every Short on a channel?
POST the channel to the channel endpoint with tab shorts and page with cursor until next_cursor is null. Each page costs 1 credit. The Videos tab does not include Shorts, which is why a Shorts-only creator looks empty without it.
Why are duration and publishedAt null on Shorts rows?
The Shorts listing YouTube serves carries neither, so the API returns null rather than a guess. Fetching a Short's transcript returns its real duration.
Can I be told when a channel posts a new Short?
Yes. Create a monitor on the channel with tab shorts. Each check reports the new Shorts by webhook or in the events list, optionally with their transcripts.