Spotify
GET /v1/spotify/podcast-episodes

Spotify Podcast Episodes API

Podcast episode archive — previewUrl, releaseDate, explicit, cursor pagination (flat 2 credits).

2 credits per request
TL;DR
Podcast episode archive — previewUrl, releaseDate, explicit, cursor pagination (flat 2 credits). The Spotify Podcast Episodes API (Spotify) is a single authenticated GET request to /v1/spotify/podcast-episodes that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Spotify Podcast Episodes API?

Pass a Spotify show/podcast URL, URI, or ID (not an artist URL). Returns the show card plus episodes[{id, name, description, releaseDate, durationMs, previewUrl, audioUrls[], mediaTypes, hasVideo, contentRating/explicit, hasTranscripts, paywallContent, showTypes}]. totalEpisodes comes from the same episodes query as the page (no drift vs a separate show fetch). Cursor pagination via nextCursor/hasMore (offset into the archive; limit max 50). Flat 2 credits per call on native Pathfinder. Same anti-bloat rule as /spotify/podcast: no visualIdentity color dumps, no playedState, no per-episode podcastV2 show copies — raw is opt-in (?raw=true) and still slimmed.

What you get

  • Bulk list of podcast episodes with metadata
  • Dates, URLs, and engagement fields when available
  • Configurable result limit
  • Ideal for monitoring and content pipelines

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/spotify/podcast-episodes?url=https%3A%2F%2Fopen.spotify.com%2Fshow%2F4rOoJ6Egrf8K2IrywzwOMk" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "platform": "spotify",
    "podcast": {
      "platform": "spotify",
      "type": "podcast",
      "uri": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk",
      "url": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk",
      "name": "The Joe Rogan Experience",
      "description": "The official podcast of comedian Joe Rogan.",
      "image": "https://i.scdn.co/image/ab6765630000ba8a913317cdfae64a2585aa0f36",
      "totalEpisodes": 2731,
      "id": "4rOoJ6Egrf8K2IrywzwOMk",
      "publisher": {
        "name": "Joe Rogan"
      },
      "rating": {
        "average": 4.6556989281194445,
        "totalRatings": 952065
      },
      "topics": [
        {
          "title": "Comedy",
          "uri": "spotify:genre:0JQ5DAqbMKFNr6gDrHHVKL"
        }
      ],
      "contentRating": "EXPLICIT",
      "contentRatingLabels": [
        "EXPLICIT"
      ],
      "explicit": true,
      "mediaType": "MIXED",
      "htmlDescription": "<p>The official podcast of comedian Joe Rogan.</p>",
      "playable": true,
      "consumptionOrder": "EPISODIC",
      "showTypes": [
        "SHOW_TYPE_EXCLUSIVE"
      ]
    },
    "totalEpisodes": 2731,
    "totalReturned": 5,
    "episodes": [
      {
        "platform": "spotify",
        "type": "episode",
        "uri": "spotify:episode:6sriD1voEkINLnr08M9nmw",
        "url": "https://open.spotify.com/episode/6sriD1voEkINLnr08M9nmw",
        "name": "#2535 - Andrew Wilson",
        "description": "Andrew Wilson has participated in thousands of debates on political, cultural, and religious topics. He hosts \"The Crucible\" and owns its associated online training program, Debate University.www.youtube.com/@The_Crucible  www.rumble.com/c/TheCrucible  www.thecrucible.video  www.debateuniversity.com  Perplexity: Download the app or ask Perplexity anything at https://pplx.ai/rogan.  Use code ROGAN at https://BlueChew.com to get 10% OFF + Free Overnight Shipping on your first order. Learn more about your ad choices. Visit podcastchoices.com/adchoices",
        "durationMs": 10072297,
        "durationFormatted": "2:47:52",
        "releaseYear": 2026,
        "image": "https://i.scdn.co/image/ab6765630000ba8adfec1dc1162dd326137b168e",
        "id": "6sriD1voEkINLnr08M9nmw",
        "previewUrl": "https://p.scdn.co/mp3-preview/df88d8d9a774747ca6dd4eb64f71a0984cf8760a.mp3",
        "audioUrls": [
          "https://p.scdn.co/mp3-preview/04e810abec582425b173ac15187820cb5f534e0b",
          "https://p.scdn.co/mp3-preview/582677c5c09f2020c744a5278f3748a069abbe1a"
        ],
        "releaseDate": "2026-08-05T17:00:00Z",
        "mediaTypes": [
          "AUDIO",
          "VIDEO"
        ],
        "hasVideo": true,
        "contentRating": "EXPLICIT",
        "explicit": true,
        "hasTranscripts": false,
        "paywallContent": false,
        "showTypes": [
          "SHOW_TYPE_EXCLUSIVE"
        ],
        "playable": true,
        "htmlDescription": "<p>Andrew Wilson has participated in thousands of debates on political, cultural, and religious topics. He hosts \"The Crucible\" and owns its associated online training program, Debate University.<br />www.youtube.com/@The_Crucible  <br />www.rumble.com/c/TheCrucible  <br /><a href=\"www.thecrucible.video\" rel=\"nofollow\">www.thecrucible.video</a>  <br />www.debateuniversity.com</p><br/><p><br /></p><br/><p>Perplexity: Download the app or ask Perplexity anything at <a href=\"https://pplx.ai/rogan\" rel=\"nofollow\">https://pplx.ai/rogan</a>.</p><br/><p><br /></p><br/><p>Use code ROGAN at <a href=\"https://BlueChew.com\" rel=\"nofollow\">https://BlueChew.com</a> to get 10% OFF + Free Overnight Shipping on your first order.</p><p> </p><p>Learn more about your ad choices. Visit <a href=\"https://podcastchoices.com/adchoices\" rel=\"nofollow\">podcastchoices.com/adchoices</a></p>"
      },
      {
        "platform": "spotify",
        "type": "episode",
        "uri": "spotify:episode:12sZKqXfCxdOci06HGV7vf",
        "url": "https://open.spotify.com/episode/12sZKqXfCxdOci06HGV7vf",
        "name": "JRE MMA Show #183 with Rico Verhoeven",
        "description": "Joe sits down with professional boxer, kickboxer, and mixed martial artist Rico Verhoeven.www.youtube.com/@RicoVerhoeven  https://ricoverhoeven.com      Learn more about your ad choices. Visit podcastchoices.com/adchoices",
        "durationMs": 8232297,
        "durationFormatted": "2:17:12",
        "releaseYear": 2026,
        "image": "https://i.scdn.co/image/ab6765630000ba8a7cec0dc10cb879778e8a6246",
        "id": "12sZKqXfCxdOci06HGV7vf",
        "previewUrl": "https://p.scdn.co/mp3-preview/862ca22fba9863c7b3b9476ae3fa75efb7e54247.mp3",
        "audioUrls": [
          "https://p.scdn.co/mp3-preview/8ccd9b3ce42a7c28545b2566d145b0810f853ab5",
          "https://p.scdn.co/mp3-preview/bd8fd704118106c2987f86498bf19a90f06afb94"
        ],
        "releaseDate": "2026-08-04T17:00:00Z",
        "mediaTypes": [
          "AUDIO",
          "VIDEO"
        ],
        "hasVideo": true,
        "contentRating": "EXPLICIT",
        "explicit": true,
        "hasTranscripts": false,
        "paywallContent": false,
        "showTypes": [
          "SHOW_TYPE_EXCLUSIVE"
        ],
        "playable": true,
        "htmlDescription": "<p>Joe sits down with professional boxer, kickboxer, and mixed martial artist Rico Verhoeven.<br />www.youtube.com/@RicoVerhoeven  <br /><a href=\"https://ricoverhoeven.com/\" rel=\"nofollow\">https://ricoverhoeven.com</a><br /></p><br/><p><br /><a href=\"https://pplx.ai/rogan\" rel=\"nofollow\"><br /></a><br /></p><br/><p><br /></p><br/><p><br /><a href=\"https://squarespace.com/ROGAN\" rel=\"nofollow\"><br /></a><br /></p><br/><p><br /></p><br/><p><br /><a href=\"https://BetterHelp.com/JRE\" rel=\"nofollow\"><br /></a></p><p> </p><p>Learn more about your ad choices. Visit <a href=\"https://podcastchoices.com/adchoices\" rel=\"nofollow\">podcastchoices.com/adchoices</a></p>"
      }
    ],
    "nextCursor": "5",
    "hasMore": true
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success, cached, creditsUsed, and a data object with the following fields:

Top-level fields

  • platformAlways "spotify" on this endpoint.
  • totalEpisodesArchive size from this episodes query (same source as pagination — no intra-response drift).
  • totalReturnedNumber of items returned in this response.
  • nextCursorOffset string for the next page; null when hasMore is false.
  • hasMoreTrue when more episodes remain beyond this page.

Podcast

The podcast object contains:

  • platformAlways "spotify" on this endpoint.
  • typeContent type of the item.
  • uriPlatform URI for the item.
  • urlCanonical URL of the item.
  • nameEpisode title. Not a profile displayName alias.
  • descriptionDescription text.
  • imageImage URL.
  • totalEpisodesArchive size from this episodes query (same source as pagination — no intra-response drift).
  • idEpisode id (same id as in spotify:episode:{id}).
  • publisherObject with name.
  • ratingOn the embedded podcast card: {average, totalRatings}.
  • topicsDetected topics and themes.
  • contentRatingPathfinder contentRating.label (NONE | EXPLICIT | NINETEEN_PLUS | UNKNOWN, plus podcast age-gate labels when present).
  • contentRatingLabelsContent rating labels (array).
  • explicitTrue only when contentRating is EXPLICIT.
  • mediaTypeMedia type label for this item (platform-specific enum).
  • htmlDescriptionHtml description.
  • playableWhether this episode is playable in the current market.
  • consumptionOrderConsumption order. Example: "EPISODIC".
  • showTypesShow-level type flags copied from the parent show (e.g. "SHOW_TYPE_EXCLUSIVE").

Episodes

Each item in episodes contains:

  • platformAlways "spotify" on this endpoint.
  • typeContent type of the item.
  • uriPlatform URI for the item.
  • urlCanonical URL of the item.
  • nameEpisode title. Not a profile displayName alias.
  • descriptionDescription text.
  • durationMsLength in milliseconds.
  • durationFormattedHuman-readable duration.
  • releaseYearConvenience year derived from releaseDate.
  • imageImage URL.
  • idEpisode id (same id as in spotify:episode:{id}).
  • previewUrlMP3 preview URL from previewPlayback.audioPreview.cdnUrl when Spotify exposes one.
  • audioUrlsAdditional mp3 preview source URLs from audio.items[].
  • releaseDateFull episode release timestamp (ISO, often minute precision) — prefer over releaseYear alone.
  • mediaTypesMedia kinds on the episode (e.g. ["AUDIO","VIDEO"]).
  • hasVideoTrue when mediaTypes includes VIDEO.
  • contentRatingPathfinder contentRating.label (NONE | EXPLICIT | NINETEEN_PLUS | UNKNOWN, plus podcast age-gate labels when present).
  • explicitTrue only when contentRating is EXPLICIT.
  • hasTranscriptsTrue when Spotify exposes transcript items for the episode.
  • paywallContentTrue when restrictions.paywallContent is set (exclusive/paywalled).
  • showTypesShow-level type flags copied from the parent show (e.g. "SHOW_TYPE_EXCLUSIVE").
  • playableWhether this episode is playable in the current market.
  • htmlDescriptionHtml description.

Parameters

NameTypeRequiredDescription
urlurlYesSpotify show/podcast URL, URI, or ID (e.g. https://open.spotify.com/show/…). Not an artist URL.
limitintegerNoMax items to return (default 20, max 50). Flat 2 credits per call.
cursorstringNoPagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.
rawbooleanNoInclude slimmed per-episode upstream payload as episodes[].raw. Default false. visualIdentity / playedState / podcastV2 are never included.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. Envelope includes cached + cachedAt on hits.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.

Using an AI agent? This endpoint is the MCP tool spotify_podcast_episodes via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/spotify/podcast-episodes and parse the JSON response.

Use cases

Full archive crawl

Walk nextCursor/hasMore to ingest beyond the newest 50 episodes (flat 2 credits per page).

Preview ingest

Collect previewUrl / audioUrls mp3 previews plus releaseDate and explicit without scraping the show page.

Exclusive / video flags

Filter hasVideo, paywallContent, and showTypes for format and exclusivity research.

Frequently asked questions

What does the Spotify Podcast Episodes API do?+

The Spotify Podcast Episodes API lets you list items in bulk with metadata from a public Spotify podcast episodes using one GET request to /v1/spotify/podcast-episodes. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Spotify Podcast Episodes API cost?+

Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Spotify API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.

Do you ship visualIdentity / raw color dumps?+

No — same rule as /spotify/podcast. visualIdentity, playedState, and per-episode podcastV2 show copies are stripped. Pass raw=true only for a slimmed upstream payload; default responses omit raw entirely.

How do I page past the newest 50 episodes?+

Pass cursor=nextCursor from the previous response (integer offset). hasMore is false at the end of the archive. Flat 2 credits per page on native Pathfinder.

Why can totalEpisodes differ from an older /spotify/podcast call?+

This endpoint sets totalEpisodes from the same episodesV2 query as the page so the embedded podcast card cannot drift within one response. A separate /spotify/podcast call moments later can still see a new episode published.

Is the Spotify Podcast Episodes API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

More Spotify APIs

Ready to use the Spotify Podcast Episodes API?

Sign up, grab your key, and make your first call in 60 seconds.