Podchaser API
Access comprehensive podcast data including shows, episodes, creators, networks, charts, and sponsorship information via GraphQL.
Official docs: https://api-docs.podchaser.com/docs/overview
When to Use
Use this skill when you need to:
Search and discover podcasts by topic, category, or keywords Get detailed podcast and episode metadata Access Apple Podcasts and Spotify chart rankings Find sponsorship and advertising data Retrieve episode transcripts Look up podcast creators and networks Prerequisites Create an account at https://www.podchaser.com/ Go to Account Settings > API Settings to get your Client ID and Secret Use Development credentials during integration (Production works identically)
Set environment variables:
export PODCHASER_CLIENT_ID="your-client-id" export PODCHASER_CLIENT_SECRET="your-client-secret"
Important: Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly. Wrap the command containing $VAR in bash -c '...', keep jq outside.
How to Use 1. Get Access Token
Request an access token (valid for 1 year) and save to a temp file:
Write to /tmp/podchaser_request.json:
{
"query": "mutation { requestAccessToken(input: { grant_type: CLIENT_CREDENTIALS, client_id: \"
Replace
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" -d @/tmp/podchaser_request.json' | jq -r '.data.requestAccessToken.access_token' > /tmp/podchaser_token.txt
Store the token for use in subsequent requests.
Verify the token was saved:
cat /tmp/podchaser_token.txt | head -c 50
- Search Podcasts
Search for podcasts by keyword:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcasts(searchTerm: \"technology\", first: 5) { paginatorInfo { count } data { id title description author { name } } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Podcast Details
Get detailed information about a specific podcast by ID:
Note: The type field is required in the identifier. Use PODCHASER for Podchaser IDs, APPLE_PODCASTS for Apple IDs, or SPOTIFY for Spotify IDs.
Write to /tmp/podchaser_request.json:
{ "query": "{ podcast(identifier: { id: \"717178\", type: PODCHASER }) { id title description url imageUrl language ratingAverage ratingCount author { name } categories { title } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Search Episodes
Search for episodes across all podcasts:
Write to /tmp/podchaser_request.json:
{ "query": "{ episodes(searchTerm: \"AI\", first: 5) { paginatorInfo { count } data { id title description airDate length podcast { title } } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Podcast Episodes
Get episodes for a specific podcast:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcast(identifier: { id: \"717178\", type: PODCHASER }) { id title episodes(first: 10) { data { id title description airDate length } } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Episode Details
Get detailed information about a specific episode:
Write to /tmp/podchaser_request.json:
{ "query": "{ episode(identifier: { id: \"789012\", type: PODCHASER }) { id title description airDate length url imageUrl podcast { id title } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Podcast Categories
Categories are available as a field on podcast objects. Get categories for a specific podcast:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcast(identifier: { id: \"717178\", type: PODCHASER }) { title categories { title slug } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Filter Podcasts by Category
Get podcasts in a specific category:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcasts(filters: { categories: [\"technology\"] }, first: 10) { data { id title description ratingAverage } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Chart Rankings
Get Apple Podcasts chart data:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcasts(filters: { hasAppleChartRank: true }, sort: { sortBy: APPLE_CHART_RANK, direction: ASC }, first: 10) { data { id title appleChartRank } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Get Creator/Host Information
Search for podcast creators:
Write to /tmp/podchaser_request.json:
{ "query": "{ creators(searchTerm: \"Joe Rogan\", first: 5) { data { pcid name bio credits { data { podcast { title } } } } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
- Preview Query Cost
Check how many points a query will cost before executing:
Write to /tmp/podchaser_request.json:
{ "query": "{ podcasts(searchTerm: \"tech\", first: 10) { data { id title description episodes(first: 5) { data { id title } } } } }" }
Then run:
bash -c 'curl -s -X POST "https://api.podchaser.com/graphql/cost" --header "Content-Type: application/json" --header "Authorization: Bearer $(cat /tmp/podchaser_token.txt)" -d @/tmp/podchaser_request.json'
GraphQL Schema Reference Main Queries Query Description podcast(identifier: {id: "...", type: PODCHASER}) Get single podcast by ID podcasts(searchTerm: "...", first: N) Search podcasts episode(identifier: {id: "...", type: PODCHASER}) Get single episode by ID episodes(searchTerm: "...", first: N) Search episodes creators(searchTerm: "...", first: N) Search creators/hosts networks(searchTerm: "...", first: N) Search podcast networks chartCategories(platform: APPLE_PODCASTS) List chart categories (requires paid plan) Identifier Types
The type field is required when using identifier to fetch a podcast or episode:
Type Description PODCHASER Podchaser internal ID APPLE_PODCASTS Apple Podcasts ID SPOTIFY Spotify ID Podcast Fields Field Type Description id ID Unique identifier title String Podcast title description String Podcast description url String Podcast website URL imageUrl String Cover art URL language String Primary language ratingAverage Float Average user rating ratingCount Int Number of ratings author Creator Podcast author/creator categories [Category] Associated categories episodes(first: N) EpisodeList Podcast episodes (paginated) Episode Fields Field Type Description id ID Unique identifier title String Episode title description String Episode description airDate Date Publication date length Int Duration in seconds url String Episode URL imageUrl String Episode artwork URL podcast Podcast Parent podcast Creator Fields Field Type Description pcid String Unique identifier name String Creator name bio String Biography imageUrl String Profile image URL credits CreditList Podcast appearances Filter Options Filter Values categories Category slugs language ISO language codes hasAppleChartRank Boolean hasSpotifyChartRank Boolean Sort Options sortBy Description RELEVANCE Search relevance POPULARITY Overall popularity RATING User rating APPLE_CHART_RANK Apple ranking SPOTIFY_CHART_RANK Spotify ranking LATEST_EPISODE Most recent episode Rate Limits Request Limit: 50 requests per 10 seconds Points System: Query cost based on fields returned Response Headers: X-Podchaser-Points-Remaining: Available points X-Podchaser-Query-Cost: Points consumed
Example costs:
Basic podcast metadata: ~9 points Search 10 podcasts with details: ~100 points Guidelines Store Access Token: Tokens last 1 year, avoid requesting new tokens for each query Preview Costs: Use /graphql/cost endpoint to estimate query cost before execution Use Limited Scope: For client-side apps, request tokens with limited_scope: true (1 hour expiry) Optimize Queries: Request only needed fields to minimize points consumption Handle Rate Limits: Check Retry-After header on 429 responses Security: Never expose regular access tokens in client-side code