Spotify
GET /v1/spotify/podcast

Spotify Podcast API

Spotify podcast show — publisher, rating, topics, explicit flag, and totalEpisodes as clean JSON.

1 credit per request
TL;DR
Spotify podcast show — publisher, rating, topics, explicit flag, and totalEpisodes as clean JSON. The Spotify Podcast API (Spotify) is a single authenticated GET request to /v1/spotify/podcast that responds with clean JSON and costs 1 credit. 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 API?

Pass a Spotify show/podcast URL, URI, or ID (not an artist URL) and get clean JSON: id, name, description, publisher{name}, rating{average, totalRatings}, topics[{title, uri}], contentRating / contentRatingLabels / explicit, mediaType, showTypes, totalEpisodes, and cover image. Publisher is the show's publisher (not host names stuffed into artists[]). Flat 1 credit per call. Does not ship Spotify's UI color palette (visualIdentity) or a bulky raw dump. For the episode archive, use /spotify/podcast-episodes (cursor pagination).

What you get

  • Podcast fields as clean structured JSON
  • IDs, URLs, and titles where the platform exposes them
  • Engagement or popularity signals when available
  • Stable IDs for joining with other endpoints

Platform limits

Honest ceilings from the upstream platform surface — not Captapi bugs. Unexpected truncation here is usually the platform, not us.

  • contentRatingLabels can include EXPLICIT | NINETEEN_PLUS | NOT_FOR_CHILDREN | SPOTIFY_EIGHTEEN_PLUS | UNKNOWN (and NONE on some surfaces). explicit is true only when EXPLICIT is among the labels — keep contentRating for age-gate values.

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?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",
    "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"
    ]
  }
}

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.
  • typeContent type of the item.
  • uriPlatform URI for the item.
  • urlCanonical URL of the item.
  • namePodcast show title. Not a profile displayName alias.
  • descriptionDescription text.
  • imageImage URL.
  • totalEpisodesEpisode count for the show when Spotify exposes it.
  • idStable platform ID for the item.
  • contentRatingPrimary Pathfinder label (first of contentRatingLabels). Podcast enum includes EXPLICIT | NINETEEN_PLUS | NOT_FOR_CHILDREN | SPOTIFY_EIGHTEEN_PLUS | UNKNOWN (and NONE on some surfaces).
  • contentRatingLabelsFull label list from contentRatingV2 when present.
  • explicitTrue only when EXPLICIT is among contentRatingLabels — age-gate labels are not collapsed into this bit.
  • mediaTypeMedia type label for this item (platform-specific enum).
  • htmlDescriptionHtml description.
  • playableWhether the show is playable in the current market when Spotify exposes it.
  • consumptionOrderConsumption order. Example: "EPISODIC".
  • showTypesShow type flags when Spotify exposes them (e.g. "SHOW_TYPE_EXCLUSIVE").

Publisher

The publisher object contains:

  • namePodcast show title. Not a profile displayName alias.

Rating

The rating object contains:

  • averageAverage. Example: 4.6556989281194445.
  • totalRatingsTotal ratings. Example: 952065.

Topics

Each item in topics contains:

  • titleTitle of the item.
  • uriPlatform URI for the item.

Parameters

NameTypeRequiredDescription
urlurlYesSpotify show/podcast URL, URI, or ID (e.g. https://open.spotify.com/show/…). Not an artist URL.
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 1 credit. 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 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 and parse the JSON response.

Use cases

Podcast research

Rank shows with rating{average, totalRatings} — a signal Spotify's free Web API does not expose.

Publisher vs hosts

Use publisher{name} without mistaking it for episode hosts or artists[].

Archive fan-out

Chain the show URI into /spotify/podcast-episodes for cursor-paginated episode history.

Frequently asked questions

What does the Spotify Podcast API do?+

The Spotify Podcast API lets you fetch full metadata and key stats from a public Spotify podcast using one GET request to /v1/spotify/podcast. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Spotify Podcast API cost?+

Each successful call costs 1 credit. 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.

Is publisher the same as the podcast hosts?+

No. publisher.name is the show's publisher (e.g. Hubspot). Hosts are a different concept — Captapi does not stuff publisher into artists[] the way a music schema would.

What does rating mean on a podcast?+

rating is an object: rating.average is Spotify's show score (about 0–5) and rating.totalRatings is how many people voted. It's the main numeric quality signal for podcast research on this endpoint — not on Spotify's free Web API.

Why is there no limit parameter?+

This endpoint returns a single show. For the episode list, use /spotify/podcast-episodes (limit + cursor).

Is the Spotify Podcast 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 API?

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