Captivate Analytics API

Podcast and episode listening analytics (insights).

Business capability
Content Performance Analytics BC-3770.30

Operations 11

GET /insights/{showId}/overview Get Overview Analytics for Podcast #
GET /insights/{showId}/overview/{episodeId} Get Overview Analytics for a specific Episode #
GET /insights/{showId}/averages Get Average Analytics for Podcast #
GET /insights/{showId}/total Get All-Time Total for Podcast #
GET /insights/{showId}/total/{episodeId} Get All-Time Total for Episode #
GET /insights/{showId}/monthly Get Month-by-Month Analytics for Podcast #
GET /insights/{showId}/monthly/{episodeId} Get Month-by-Month Analytics for Episode #
POST /insights/{showId}/range Get Analytics in Range for Podcast #
POST /insights/{showId}/range/{episodeId} Get Analytics in Range for Episode #
POST /insights/{showId}/compare Get Analytics Comparison between Episodes #
POST /insights/{showId}/web-player/{episodeId} Get Web Player Analytics for Podcast #

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/captivate-fm-analytics-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

captivate-fm-analytics-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Captivate Analytics API
  version: '1.0'
  description: Public REST API for the Captivate podcast hosting, distribution, and analytics platform.
  contact:
    name: Captivate API Support
    email: api@captivate.fm
    url: https://docs.captivate.fm/
  x-endpoints-source: Paths and request fields confirmed from the public Captivate API Postman collection (docs.captivate.fm). Response bodies are modeled.
servers:
- url: https://api.captivate.fm
  description: Captivate production API
security:
- bearerAuth: []
tags:
- name: Analytics
  description: Podcast and episode listening analytics (insights).
paths:
  /insights/{showId}/overview:
    get:
      operationId: getPodcastOverviewAnalytics
      tags:
      - Analytics
      summary: Get Overview Analytics for Podcast
      description: Overview analytics for a podcast over a date range.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/StartQuery'
      - $ref: '#/components/parameters/EndQuery'
      - name: includeTopEpisodes
        in: query
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Podcast overview analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/overview/{episodeId}:
    get:
      operationId: getEpisodeOverviewAnalytics
      tags:
      - Analytics
      summary: Get Overview Analytics for a specific Episode
      description: Overview analytics for a specific episode over a date range.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/InsightsEpisodeId'
      - $ref: '#/components/parameters/StartQuery'
      - $ref: '#/components/parameters/EndQuery'
      responses:
        '200':
          description: Episode overview analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/averages:
    get:
      operationId: getPodcastAverageAnalytics
      tags:
      - Analytics
      summary: Get Average Analytics for Podcast
      description: Average analytics for a podcast over an interval window.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - name: intervalDays
        in: query
        schema:
          type: integer
          default: 28
      responses:
        '200':
          description: Podcast average analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/total:
    get:
      operationId: getPodcastAllTimeTotal
      tags:
      - Analytics
      summary: Get All-Time Total for Podcast
      description: All-time total analytics for a podcast.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      responses:
        '200':
          description: Podcast all-time total (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/total/{episodeId}:
    get:
      operationId: getEpisodeAllTimeTotal
      tags:
      - Analytics
      summary: Get All-Time Total for Episode
      description: All-time total analytics for a specific episode.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/InsightsEpisodeId'
      responses:
        '200':
          description: Episode all-time total (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/monthly:
    get:
      operationId: getPodcastMonthlyAnalytics
      tags:
      - Analytics
      summary: Get Month-by-Month Analytics for Podcast
      description: Month-by-month analytics series for a podcast.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      responses:
        '200':
          description: Podcast monthly analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/monthly/{episodeId}:
    get:
      operationId: getEpisodeMonthlyAnalytics
      tags:
      - Analytics
      summary: Get Month-by-Month Analytics for Episode
      description: Month-by-month analytics series for a specific episode.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/InsightsEpisodeId'
      responses:
        '200':
          description: Episode monthly analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/range:
    post:
      operationId: getPodcastRangeAnalytics
      tags:
      - Analytics
      summary: Get Analytics in Range for Podcast
      description: Analytics for a podcast over an arbitrary date range, broken down by the requested dimension types.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RangeRequest'
      responses:
        '200':
          description: Podcast range analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/range/{episodeId}:
    post:
      operationId: getEpisodeRangeAnalytics
      tags:
      - Analytics
      summary: Get Analytics in Range for Episode
      description: Analytics for a specific episode over an arbitrary date range, broken down by the requested dimension types.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/InsightsEpisodeId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RangeRequest'
      responses:
        '200':
          description: Episode range analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/compare:
    post:
      operationId: compareEpisodeAnalytics
      tags:
      - Analytics
      summary: Get Analytics Comparison between Episodes
      description: Compare analytics across a set of episodes.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                  title:
                    type: string
                  published_date:
                    type: string
                    format: date-time
      responses:
        '200':
          description: Episode comparison analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /insights/{showId}/web-player/{episodeId}:
    post:
      operationId: getWebPlayerAnalytics
      tags:
      - Analytics
      summary: Get Web Player Analytics for Podcast
      description: Web-player analytics for a podcast, scoped to an episode context.
      parameters:
      - $ref: '#/components/parameters/InsightsShowId'
      - $ref: '#/components/parameters/InsightsEpisodeId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                dateRange:
                  type: object
                  properties:
                    gte:
                      type: string
                      format: date-time
                    lte:
                      type: string
                      format: date-time
                duration:
                  type: string
                timezone:
                  type: string
                  example: America/New_York
      responses:
        '200':
          description: Web-player analytics (modeled).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    InsightsEpisodeId:
      name: episodeId
      in: path
      required: true
      description: The episode ID (UUID) for insights.
      schema:
        type: string
    EndQuery:
      name: end
      in: query
      schema:
        type: string
        format: date-time
        example: '2022-09-01T00:00:00.000Z'
    StartQuery:
      name: start
      in: query
      schema:
        type: string
        format: date-time
        example: '2022-09-01T00:00:00.000Z'
    InsightsShowId:
      name: showId
      in: path
      required: true
      description: The show ID (UUID) for insights.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid Bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GenericObject'
  schemas:
    GenericObject:
      type: object
      description: Modeled response object. Captivate's public documentation describes requests and fields but does not publish full JSON response schemas, so response bodies are represented generically.
      additionalProperties: true
    RangeRequest:
      type: object
      description: Request body for range analytics.
      properties:
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        interval:
          type: string
          example: 1d
        timezone:
          type: string
          example: America/New_York
        countryCode:
          type:
          - string
          - 'null'
        types:
          type: array
          items:
            type: string
            enum:
            - byLocation
            - byUserAgentBrowser
            - byUserAgentOs
            - byUserAgentDevice
            - byEpisode
            - byPrivateSubscriber
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Bearer token obtained from POST /authenticate/token. Sent as Authorization: Bearer {token}.'