Reference

YouTube Playlist API

One POST resolves a public YouTube playlist into a paginated list of its videos, each with a url the transcript and batch endpoints accept as-is. The playlist can be given as its URL or its PL… id. A playlist that is private or does not exist answers 404 not_found. No YouTube Data API key, OAuth or quota is involved, and a playlist that a channel listing returned (tab playlists or podcasts) can be passed here unchanged.

1 credit per page of resultsView pricing

Each page of results is one credit, however many videos it lists; pass next_cursor back as cursor for the next page. Failed requests are free.

On this platform

  • Accepts playlist URLs (youtube.com/playlist?list=PL…) and bare PL… ids; a video URL carrying a list parameter is treated as a video, not a playlist.
  • One page costs 1 credit; pass next_cursor back as cursor for the next page.
  • The playlist and podcast rows the channel endpoint returns carry a url this endpoint accepts as-is.
POST/api/v2/transcripts/playlistidempotent

List a playlist's videos

Resolve a playlist into a paginated list of videos (metadata only). A playlist that does not exist or is not public answers 404 not_found. The platform is read from the input: a YouTube playlist or a TikTok playlist URL. Instagram has no public playlists; list the profile through the channel endpoint instead.

Body parameters

playliststringrequired
YouTube: playlist URL or PL… ID. TikTok: playlist URL (tiktok.com/@user/playlist/name-id).
Example
limitinteger (1–50)optional
Max items to return per page: videos, or the playlists or channels some listing options return. Defaults to 5.
Example
cursorstringoptional
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.

Request example

curl https://transcriptfetch.com/api/v2/transcripts/playlist \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"playlist":"PLrAXtmRdnEQy6nuLMt9H1aZIuhcGOcZQ4","limit":10}'

Responses

SuccessExample response envelope
{
  "ok": true,
  "request_id": "req_…",
  "data": {
    "kind": "video_list",
    "source": "playlist",
    "platform": "youtube",
    "videos": [
      {
        "videoId": "dQw4w9WgXcQ",
        "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "title": "Example video",
        "duration": 212,
        "channel": "Example Channel",
        "publishedAt": "2009-10-25T00:00:00Z",
        "stats": {
          "plays": 1600000000
        }
      }
    ],
    "next_cursor": "eyJvIjoxMH0"
  },
  "usage": {
    "credits_spent": 1,
    "balance": 98,
    "bytes": 0
  }
}

Every YouTube endpoint

Frequently asked questions

Is this the YouTube Data API's playlistItems call?
No. It is TranscriptFetch's own endpoint: no Google project, API key, OAuth or quota. One page of a playlist costs 1 credit and the rows are ready for the transcript endpoint.
How do I transcribe a whole playlist?
List it page by page with cursor, collect the rows' urls and send them to the batch endpoint. Caption transcripts cost 1 credit each; videos without captions are transcribed from audio and billed on delivery.
What about a channel's podcasts or playlists?
The channel endpoint with tab playlists or tab podcasts answers a playlist_list; each row's url is accepted here unchanged, so a channel's whole catalogue is a listing call followed by one playlist call per playlist.
Why did my playlist answer 404?
The playlist is private, unlisted in a way YouTube will not serve, or does not exist. Only public playlists are reachable, and a 404 costs nothing.