Captivate

Captivate is a growth-oriented podcast hosting, distribution, and analytics platform. Its public REST API at https://api.captivate.fm lets developers authenticate a user, read and manage shows and their RSS feeds, create and update episodes, upload and search media (audio) files, and pull detailed listening analytics (insights) at the podcast and episode level. Access is self-serve - any account holder can generate a user ID and API token from the API section of their Captivate account and exchange them for a Bearer token. The API is documented as a public Postman collection at docs.captivate.fm.

5 APIs 0 Features
PodcastingPodcast HostingEpisodesMediaAnalyticsRSS

APIs

Captivate Users API

Authenticate a user with their user ID and API token to obtain a Bearer token, retrieve a user record, and list the shows a user can access or the shows a user manages or owns.

Captivate Shows API

Read and update a show's metadata (title, description, categories, author, language, links), upload show artwork, and retrieve the show's public RSS feed URL.

Captivate Episodes API

List a show's published and scheduled episodes, read a single episode, and create or update episodes - linking uploaded media, show notes, season and episode numbers, publish da...

Captivate Media API

Upload an audio media file to a show, retrieve a media record by ID, and list or search a show's media library with offset, order, and sort controls. Media is scoped to a single...

Captivate Analytics API

Pull listening analytics (insights) for a podcast or a specific episode - overview, averages, all-time totals, month-by-month series, arbitrary date ranges broken down by locati...

Collections

Pricing Plans

Rate Limits

Captivate Fm Rate Limits

3 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
💬
SupportDocumentation
SupportDocumentation
🟢
StatusPage
StatusPage
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Captivate API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: Authentication
    type: folder
  items:
  - info:
      name: Authenticate User
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/authenticate/token
      body:
        type: form
        data: username={userId}&token={apiToken}
    docs: Exchange the user's ID and API token for a Bearer token used in all other requests.
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Get User
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/users/:id
      params:
      - name: id
        value: ''
        type: path
        description: The user ID (UUID).
    docs: Get a user record by user ID.
  - info:
      name: Get Users Shows
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/users/:id/shows
      params:
      - name: id
        value: ''
        type: path
        description: The user ID (UUID).
    docs: The shows this user can access regardless of role.
  - info:
      name: Get Users Managed Shows
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/users/:id/shows/manager
      params:
      - name: id
        value: ''
        type: path
        description: The user ID (UUID).
    docs: The shows the user is manager or owner of.
- info:
    name: Shows
    type: folder
  items:
  - info:
      name: Get Show
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
    docs: Get the show information by the show ID.
  - info:
      name: Update Show
      type: http
    http:
      method: PUT
      url: https://api.captivate.fm/shows/:id
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
      body:
        type: form
        data: title=My Demo Show&language=en&type=episodic
    docs: Update the show's metadata (title, description, categories, author, links, etc.).
  - info:
      name: Create Show Artwork
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/shows/:id/artwork
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
      body:
        type: form
        data: file=@artwork.png
    docs: Upload square JPG/PNG artwork in RGB colorspace, minimum 1400px.
  - info:
      name: Get Show Feed URL
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/feed
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
    docs: Get the public RSS feed URL for this show.
- info:
    name: Episodes
    type: folder
  items:
  - info:
      name: Get Show Episodes
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/episodes
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
    docs: All episodes for this show plus a total count.
  - info:
      name: Get Show Scheduled Episodes
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/episodes/scheduled
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
    docs: All scheduled episodes for this show plus a count.
  - info:
      name: Get Episode
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/episodes/:id
      params:
      - name: id
        value: ''
        type: path
        description: The episode ID (UUID).
    docs: Get the full information for an episode.
  - info:
      name: Create Episode
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/episodes
      body:
        type: form
        data: shows_id={showId}&title=My Demo Episode&media_id={mediaId}&status=Draft
    docs: Create an episode, linking uploaded media, show notes, season/episode numbers, publish date and status.
  - info:
      name: Update Episode
      type: http
    http:
      method: PUT
      url: https://api.captivate.fm/episodes/:id
      params:
      - name: id
        value: ''
        type: path
        description: The episode ID (UUID).
      body:
        type: form
        data: shows_id={showId}&title=My Demo Episode&status=Draft
    docs: Update an existing episode.
- info:
    name: Media
    type: folder
  items:
  - info:
      name: Get Media
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/media/:id
      params:
      - name: id
        value: ''
        type: path
        description: The media ID (UUID).
    docs: Get the information for this media ID.
  - info:
      name: Upload Media
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/shows/:id/media
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
      body:
        type: form
        data: file=@episode.mp3
    docs: Upload an audio media file assigned to the given show; Captivate processes it server-side.
  - info:
      name: Get Show Media
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/media?offset=0&order=created_at&sort=DESC
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
      - name: offset
        value: '0'
        type: query
      - name: order
        value: created_at
        type: query
      - name: sort
        value: DESC
        type: query
    docs: Get all media for the given show ID. Media is scoped to a single show.
  - info:
      name: Search Show Media
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/shows/:id/media/search?search=Search Query&offset=0&order=created_at&sort=DESC
      params:
      - name: id
        value: ''
        type: path
        description: The show ID (UUID).
      - name: search
        value: Search Query
        type: query
      - name: offset
        value: '0'
        type: query
      - name: order
        value: created_at
        type: query
      - name: sort
        value: DESC
        type: query
    docs: Search a show's media by media name.
- info:
    name: Analytics
    type: folder
  items:
  - info:
      name: Get Overview Analytics for Podcast
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/overview?start=2022-09-01T00:00:00.000Z&end=2022-09-01T00:00:00.000Z&includeTopEpisodes=true
      params:
      - name: showId
        value: ''
        type: path
    docs: Overview analytics for a podcast over a date range.
  - info:
      name: Get Overview Analytics for a specific Episode
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/overview/:episodeId?start=2022-09-01T00:00:00.000Z&end=2022-09-01T00:00:00.000Z
      params:
      - name: showId
        value: ''
        type: path
      - name: episodeId
        value: ''
        type: path
    docs: Overview analytics for a specific episode over a date range.
  - info:
      name: Get Average Analytics for Podcast
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/averages?intervalDays=28
      params:
      - name: showId
        value: ''
        type: path
      - name: intervalDays
        value: '28'
        type: query
    docs: Average analytics for a podcast over an interval window.
  - info:
      name: Get All-Time Total for Podcast
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/total
      params:
      - name: showId
        value: ''
        type: path
    docs: All-time total analytics for a podcast.
  - info:
      name: Get All-Time Total for Episode
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/total/:episodeId
      params:
      - name: showId
        value: ''
        type: path
      - name: episodeId
        value: ''
        type: path
    docs: All-time total analytics for a specific episode.
  - info:
      name: Get Month-by-Month Analytics for Podcast
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/monthly
      params:
      - name: showId
        value: ''
        type: path
    docs: Month-by-month analytics series for a podcast.
  - info:
      name: Get Month-by-Month Analytics for Episode
      type: http
    http:
      method: GET
      url: https://api.captivate.fm/insights/:showId/monthly/:episodeId
      params:
      - name: showId
        value: ''
        type: path
      - name: episodeId
        value: ''
        type: path
    docs: Month-by-month analytics series for a specific episode.
  - info:
      name: Get Analytics in Range for Podcast
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/insights/:showId/range
      params:
      - name: showId
        value: ''
        type: path
      body:
        type: json
        data: "{\n  \"start\": \"2022-09-01T00:00:00.000Z\",\n  \"end\": \"2022-09-01T00:00:00.000Z\",\n  \"interval\": \"\
          1d\",\n  \"timezone\": \"America/New_York\",\n  \"countryCode\": null,\n  \"types\": [\"byLocation\", \"byUserAgentBrowser\"\
          , \"byUserAgentOs\", \"byUserAgentDevice\", \"byEpisode\", \"byPrivateSubscriber\"]\n}"
    docs: Analytics for a podcast over an arbitrary date range, broken down by dimension types.
  - info:
      name: Get Analytics in Range for Episode
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/insights/:showId/range/:episodeId
      params:
      - name: showId
        value: ''
        type: path
      - name: episodeId
        value: ''
        type: path
      body:
        type: json
        data: "{\n  \"start\": \"2022-09-01T00:00:00.000Z\",\n  \"end\": \"2022-09-01T00:00:00.000Z\",\n  \"interval\": \"\
          1d\",\n  \"timezone\": \"America/New_York\",\n  \"countryCode\": null,\n  \"types\": [\"byLocation\", \"byUserAgentBrowser\"\
          , \"byUserAgentOs\", \"byUserAgentDevice\", \"byPrivateSubscriber\"]\n}"
    docs: Analytics for a specific episode over an arbitrary date range.
  - info:
      name: Get Analytics Comparison between Episodes
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/insights/:showId/compare
      params:
      - name: showId
        value: ''
        type: path
      body:
        type: json
        data: "[\n  { \"id\": \"{episodeId}\", \"title\": \"My Episode Title\", \"published_date\": \"2022-09-01T00:00:00.000Z\"\
          \ }\n]"
    docs: Compare analytics across a set of episodes.
  - info:
      name: Get Web Player Analytics for Podcast
      type: http
    http:
      method: POST
      url: https://api.captivate.fm/insights/:showId/web-player/:episodeId
      params:
      - name: showId
        value: ''
        type: path
      - name: episodeId
        value: ''
        type: path
      body:
        type: json
        data: "{\n  \"dateRange\": { \"gte\": \"2022-09-01T00:00:00.000Z\", \"lte\": \"2022-09-01T00:00:00.000Z\" },\n  \"\
          duration\": \"1700\",\n  \"timezone\": \"America/New_York\"\n}"
    docs: Web-player analytics for a podcast, scoped to an episode context.
bundled: true