Resolve a URL
Turn a YouTube URL (or bare ID) into a video list. Useful for previewing a channel or playlist before submitting it as a bulk job, or for paginating through a large channel one page at a time. Does not fetch transcripts.
/api/v1/resolveQuery parameters
| Name | Type | Description |
|---|---|---|
urlrequired | string | A YouTube URL or bare ID. Accepts video URLs (watch?v=, shorts/, embed/, youtu.be/, live/), channel URLs (@handle, /channel/UC…, /c/name, /user/name), playlist URLs (?list=PL…), or any of these as bare IDs (11-char video ID, UC… channel ID, PL… playlist ID, @handle). |
continuation | string | Opaque token from a previous response. Pass back verbatim to fetch the next page. |
Request
curl -H "Authorization: Bearer yvt_live_..." \
"https://api.youtubevideotranscript.io/api/v1/resolve?url=https://www.youtube.com/@channelname"Response 200 (channel)
{
"type": "channel",
"name": "Channel Display Name",
"video_count": 87,
"approx_video_count": "1.8K videos",
"subscribers": "21.2M subscribers",
"videos": [
{
"video_id": "abc12345678",
"title": "Video Title",
"duration_seconds": 142,
"thumbnail": "https://i.ytimg.com/vi/abc12345678/hqdefault.jpg",
"published": "2 weeks ago",
"views": "120K views"
}
],
"continuation": "Eg0SC1VDeHl6...etc..."
}Response 200 (playlist)
Uses "type": "playlist" with the same video rows, name, video_count, and continuation. Channel-only approx_video_count and subscribers fields are absent.
Counts and display fields
For channels, video_count is the cumulative number loaded during this listing walk, not the full channel size. For playlists it is the reported total when available, otherwise the number loaded. Do not use either value as the size of the current videos array.
The channel's approximate total and subscriber text arrive on the first page; both are null on continuation pages or when the header is unavailable. The approximate total can include Shorts, while the channel listing covers long-form videos. Use GET /channel/count only when an exact long-form total is needed.
Video published and views are nullable display strings, not dates or numbers. Use video info for numeric views and optional publish timestamps. Page sizes are controlled by YouTube and should not be hard-coded.
Response 200 (single video)
If the input is a single video URL or ID, the response is a hint to call the transcript endpoint directly:
{
"type": "video",
"video_id": "abc12345678",
"message": "Single video: call GET /api/v1/transcript/:videoId directly"
}Pagination
The continuation field is opaque and changes shape over time. Treat it as a black box and pass it back verbatim in the next request to fetch the next page. continuation: null means the last page. Keep sending the same url on every page. Encode URL and continuation query values with your HTTP client.
# First page
curl -H "Authorization: Bearer yvt_live_..." \
"https://api.youtubevideotranscript.io/api/v1/resolve?url=https://www.youtube.com/@channel"
# Next page: pass the continuation back
curl -H "Authorization: Bearer yvt_live_..." \
"https://api.youtubevideotranscript.io/api/v1/resolve?url=https://www.youtube.com/@channel&continuation=Eg0SC1VDeHl6..."Errors
| Status | Type | When |
|---|---|---|
| 400 | bad_request | url missing, or input couldn't be recognized as a YouTube identifier |
Global 401, 429, and 5xx also apply. See Errors.