Podcast.co Episodes API

The episodes API from Podcast.co — 3 operation(s) for episodes.

Operations 3

GET /podcasts/{podcast_slug}/episodes List episodes #
GET /podcasts/{podcast_slug}/episodes/{episode_slug} Get an episode #
GET /podcasts/{podcast_slug}/episodes/{episode_slug}/player Get player #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/podcast-co:podcast-co-episodes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

podcast-co-episodes-api-openapi.yml Raw ↑
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