Podcast.co Episodes API
The episodes API from Podcast.co — 3 operation(s) for episodes.
The episodes API from Podcast.co — 3 operation(s) for episodes.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/podcast-co:podcast-co-episodes-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 1.0.0
title: Podcast.co Public Episodes API
contact:
name: API Support
url: help.podcast.co
email: help@podcast.co
servers:
- url: https://public-api.pod.co
security: []
tags:
- name: episodes
paths:
/podcasts/{podcast_slug}/episodes:
parameters:
- $ref: '#/components/parameters/podcast_slug'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/per_page'
get:
summary: List episodes
description: Get a list of episodes for a podcast
operationId: listPodcastsEpisodes
tags:
- episodes
responses:
'200':
description: A list of episodes
content:
application/json:
schema:
title: Episode List
description: A list of episodes response
type: object
properties:
data:
type: array
items:
type: object
title: Public episode
properties:
id:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/200/content/application~1json/schema/properties/data/properties/id'
title:
type: string
example: German tears, Brazil cheers and England fears - World Cup Football Daily
minLength: 1
maxLength: 255
slug:
type: string
example: german-tears-brazil-cheers-and-england-fears-world-cup-football-daily
minLength: 1
maxLength: 255
description:
type: string
example: Max Rushden and the panel react to Germany’s shock exit at the hands of South Korea, assess Brazil’s latest win and look ahead to England’s shootout with Belgium for top spot.
minLength: 1
status:
type: string
enum:
- public
description: The status of episode.
artwork:
oneOf:
- type: object
title: Episode artwork
properties:
type:
type: string
enum:
- episode
default: episode
urls:
type: array
items:
type: object
properties:
size:
type: string
format: ^[0-9]*x[0-9]*$
description: Size of the artwork
example: 200x200
url:
type: string
format: uri
description: Url for the artwork
example: https://artwork.pod.co/episode/123.jpg
required:
- size
- url
required:
- type
- urls
- type: object
title: Podcast artwork
properties:
type:
type: string
enum:
- podcast
default: podcast
urls:
type: array
items:
type: object
properties:
size:
type: string
format: ^[0-9]*x[0-9]*$
description: Size of the artwork
example: 200x200
url:
type: string
format: uri
description: Url for the artwork
example: https://artwork.pod.co/podcast/123.jpg
required:
- size
- url
required:
- type
- urls
- title: Nullable
season_number:
type:
- integer
- 'null'
example: 1
description: Used with serial podcasts only.
number:
type:
- integer
- 'null'
example: 1
description: Only applicable for 'full' type episodes.
content_rating:
type: string
enum:
- clean
- explicit
description: Content rating
example: clean
type:
type: string
enum:
- full
- trailer
- bonus
description: Optional episode type
default: full
author:
type:
- string
- 'null'
example: Guardian Boys
minLength: 1
maxLength: 255
published_at:
type: string
example: 1970-01-01T00:00
format: date-time
content_type:
type: string
enum:
- audio/mp3
- audio/mpeg
- audio/m4a
- audio/x-m4a
- audio/mp4
- audio/wav
duration:
type: integer
example: 12345
description: The episode duration in milliseconds.
size:
type: number
example: 12345.67
description: The episode size in Mb.
url:
type: string
format: uri
example: https://media.pod.co/upload/ddc94207-fbfc-4508-b615-4c6a2eddc2b1.mp3
website_url:
type:
- string
- 'null'
description: Episode website url
format: uri
example: https://www.theguardian.com/football/series/footballweekly/ep-1
required:
- id
- title
- slug
- description
- status
- artwork
- season_number
- number
- content_rating
- type
- author
- published_at
- url
- content_type
- duration
- size
- website_url
additionalProperties: false
meta:
type: object
properties:
pagination:
type: object
properties:
total:
type: integer
example: 50
description: The number of results available for the request.
count:
type: integer
example: 10
description: The number of results in the response.
per_page:
type: integer
example: 10
description: The number of results displayed per page.
total_pages:
type: integer
example: 5
description: The number of pages available.
current_page:
type: integer
example: 2
description: The current page.
previous_page:
type: integer
example: 1
description: The previous page.
next_page:
type: integer
example: 3
description: The next page.
links:
type: object
properties:
first:
type: string
example: https://api.pod.co/podcasts/123e4567-e89b-12d3-a456-426655440000/episodes?page=1&per_page=10
format: uri
last:
type: string
example: https://api.pod.co/podcasts/123e4567-e89b-12d3-a456-426655440000/episodes?page=5&per_page=10
format: uri
self:
type: string
example: https://api.pod.co/podcasts/123e4567-e89b-12d3-a456-426655440000/episodes?page=2&per_page=10
format: uri
next:
type: string
example: https://api.pod.co/podcasts/123e4567-e89b-12d3-a456-426655440000/episodes?page=3&per_page=10
format: uri
prev:
type: string
example: https://api.pod.co/podcasts/123e4567-e89b-12d3-a456-426655440000/episodes?page=1&per_page=0
format: uri
required:
- total
- count
- per_page
- total_pages
- current_page
- links
'403':
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/403'
/podcasts/{podcast_slug}/episodes/{episode_slug}:
parameters:
- $ref: '#/components/parameters/podcast_slug'
- $ref: '#/components/parameters/episode_slug'
get:
summary: Get an episode
operationId: getEpisode
tags:
- episodes
responses:
'200':
description: An episode
content:
application/json:
schema:
title: Single Episode
description: A single episode response
type: object
properties:
data:
oneOf:
- type: object
title: Public episode
properties:
id:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/200/content/application~1json/schema/properties/data/properties/id'
title:
type: string
example: German tears, Brazil cheers and England fears - World Cup Football Daily
minLength: 1
maxLength: 255
slug:
type: string
example: german-tears-brazil-cheers-and-england-fears-world-cup-football-daily
minLength: 1
maxLength: 255
description:
type: string
example: Max Rushden and the panel react to Germany’s shock exit at the hands of South Korea, assess Brazil’s latest win and look ahead to England’s shootout with Belgium for top spot.
minLength: 1
status:
type: string
enum:
- public
description: The status of episode.
artwork:
oneOf:
- type: object
title: Episode artwork
properties:
type:
type: string
enum:
- episode
default: episode
urls:
type: array
items:
type: object
properties:
size:
type: string
format: ^[0-9]*x[0-9]*$
description: Size of the artwork
example: 200x200
url:
type: string
format: uri
description: Url for the artwork
example: https://artwork.pod.co/episode/123.jpg
required:
- size
- url
required:
- type
- urls
- $ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes/get/responses/200/content/application~1json/schema/properties/data/items/properties/artwork/oneOf/1'
- title: Nullable
season_number:
type:
- integer
- 'null'
example: 1
description: Used with serial podcasts only.
number:
type:
- integer
- 'null'
example: 1
description: Only applicable for 'full' type episodes.
content_rating:
type: string
enum:
- clean
- explicit
description: Content rating
example: clean
type:
type: string
enum:
- full
- trailer
- bonus
description: Optional episode type
default: full
author:
type:
- string
- 'null'
example: Guardian Boys
minLength: 1
maxLength: 255
published_at:
type: string
example: 1970-01-01T00:00
format: date-time
content_type:
type: string
enum:
- audio/mp3
- audio/mpeg
- audio/m4a
- audio/x-m4a
- audio/mp4
- audio/wav
duration:
type: integer
example: 12345
description: The episode duration in milliseconds.
size:
type: number
example: 12345.67
description: The episode size in Mb.
url:
type: string
format: uri
example: https://media.pod.co/upload/ddc94207-fbfc-4508-b615-4c6a2eddc2b1.mp3
website_url:
type:
- string
- 'null'
description: Episode website url
format: uri
example: https://www.theguardian.com/football/series/footballweekly/ep-1
required:
- id
- title
- slug
- description
- status
- artwork
- season_number
- number
- content_rating
- type
- author
- published_at
- url
- content_type
- duration
- size
- website_url
additionalProperties: false
- type: object
title: Unlisted episode
properties:
id:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/200/content/application~1json/schema/properties/data/properties/id'
title:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/title'
slug:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/slug'
description:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/description'
status:
type: string
enum:
- unlisted
description: The status of episode.
artwork:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/artwork'
season_number:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/season_number'
number:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/number'
content_rating:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/content_rating'
type:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/type'
author:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/author'
content_type:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/content_type'
duration:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/duration'
size:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/size'
url:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/url'
website_url:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/website_url'
required:
- id
- title
- slug
- description
- status
- artwork
- season_number
- number
- content_rating
- type
- author
- url
- content_type
- duration
- size
- website_url
additionalProperties: false
- type: object
title: Scheduled episode
properties:
id:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/200/content/application~1json/schema/properties/data/properties/id'
title:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/title'
slug:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/slug'
description:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/description'
status:
type: string
enum:
- scheduled
description: The status of episode.
artwork:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/artwork'
season_number:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/season_number'
number:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/number'
content_rating:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/content_rating'
type:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/type'
author:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/author'
content_type:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/content_type'
duration:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/duration'
size:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/size'
url:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/url'
website_url:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1episodes~1%7Bepisode_slug%7D/get/responses/200/content/application~1json/schema/properties/data/oneOf/0/properties/website_url'
required:
- id
- title
- slug
- description
- status
- artwork
- season_number
- number
- content_rating
- type
- author
- url
- content_type
- duration
- size
- website_url
additionalProperties: false
'403':
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/403'
/podcasts/{podcast_slug}/episodes/{episode_slug}/player:
parameters:
- $ref: '#/components/parameters/podcast_slug'
- $ref: '#/components/parameters/episode_slug'
get:
summary: Get player
operationId: getEpisodePlayer
description: 'Get episode specific player settings.
Podcast player settings will be returned as defaults if this episode doesnt have custom settings.'
tags:
- episodes
responses:
'200':
description: A player
content:
application/json:
schema:
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D~1player/get/responses/200/content/application~1json/schema'
'403':
$ref: '#/paths/~1podcasts~1%7Bpodcast_slug%7D/get/responses/403'
components:
parameters:
page:
in: query
name: page
description: The result page, defaults to 1 if invalid
schema:
type: integer
default: 1
minimum: 1
podcast_slug:
in: path
name: podcast_slug
required: true
description: a podcast slug
schema:
type: string
pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
example: guardian-football-weekly
episode_slug:
in: path
name: episode_slug
required: true
description: an episode slug
schema:
type: string
pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
example: german-tears-brazil-cheers-and-england-fears-world-cup-football-daily
per_page:
in: query
name: per_page
description: The number of results per page, defaults to 10 if invalid
schema:
type: integer
default: 10
minimum: 1
maximum: 100