Spreaker Advertising Campaigns API

Manage the direct ad-sales stack available on the Publisher plan - advertisers, campaigns, and targeted line items - including country targeting for campaign delivery.

OpenAPI Specification

spreaker-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Spreaker API
  description: >-
    The Spreaker API (v2) is a REST API for the Spreaker podcast hosting,
    distribution, and monetization platform, owned by iHeartMedia. It lets
    developers manage users and their social graph, podcast shows, episodes
    (including uploads, playback, messages, chapters, and ad cuepoints),
    analytics and statistics, search and discovery, and the advertising
    campaign stack. All access is over HTTPS at api.spreaker.com. GET requests
    are public unless otherwise noted; all PUT, POST, and DELETE requests must
    be authenticated with an OAuth2 Bearer token. Responses are paginated with a
    default of 50 items per page (up to 100 via the limit parameter) and a
    next_url property for the following page.
  version: '2.0'
  contact:
    name: Spreaker for Developers
    url: https://developers.spreaker.com
  license:
    name: Proprietary
    url: https://www.spreaker.com/terms-of-service
servers:
  - url: https://api.spreaker.com/v2
    description: Spreaker API v2
security:
  - oauth2: []
tags:
  - name: Users
    description: User profiles and social graph (followers, followings, blocks).
  - name: Shows
    description: Podcast shows, favorites, and reference data.
  - name: Episodes
    description: Episodes, uploads, playback, likes, bookmarks, messages, chapters, cuepoints.
  - name: Statistics
    description: Playback and engagement analytics at user, show, and episode level.
  - name: Search and Discovery
    description: Search, explore categories, tags, and oEmbed.
  - name: Advertising
    description: Advertisers, campaigns, and line items for direct ad sales.
paths:
  /me:
    get:
      operationId: getAuthenticatedUser
      tags: [Users]
      summary: Retrieve the authenticated user
      description: Returns the user associated with the OAuth2 access token.
      responses:
        '200':
          description: The authenticated user.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: getUser
      tags: [Users]
      summary: Retrieve a user
      description: Returns a single user's public profile.
      responses:
        '200':
          description: A user.
    post:
      operationId: updateUser
      tags: [Users]
      summary: Update a user
      description: Updates the profile of the authenticated user.
      responses:
        '200':
          description: The updated user.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/followers:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listFollowers
      tags: [Users]
      summary: Retrieve a user's followers
      responses:
        '200':
          description: A paginated list of followers.
  /users/{user_id}/followings:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listFollowings
      tags: [Users]
      summary: Retrieve who a user follows
      responses:
        '200':
          description: A paginated list of followed users.
  /users/{user_id}/followings/{following_id}:
    parameters:
      - $ref: '#/components/parameters/UserId'
      - name: following_id
        in: path
        required: true
        schema:
          type: integer
        description: The ID of the user to follow or unfollow.
    put:
      operationId: followUser
      tags: [Users]
      summary: Follow a user
      responses:
        '200':
          description: The follow relationship was created.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: unfollowUser
      tags: [Users]
      summary: Unfollow a user
      responses:
        '200':
          description: The follow relationship was removed.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/blocks:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listBlockedUsers
      tags: [Users]
      summary: Retrieve blocked users
      responses:
        '200':
          description: A paginated list of blocked users.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shows:
    post:
      operationId: createShow
      tags: [Shows]
      summary: Create a show
      description: Creates a new podcast show for the authenticated user.
      responses:
        '200':
          description: The created show.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shows/{show_id}:
    parameters:
      - $ref: '#/components/parameters/ShowId'
    get:
      operationId: getShow
      tags: [Shows]
      summary: Retrieve a show
      responses:
        '200':
          description: A show.
    post:
      operationId: updateShow
      tags: [Shows]
      summary: Update a show
      responses:
        '200':
          description: The updated show.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteShow
      tags: [Shows]
      summary: Delete a show
      responses:
        '200':
          description: The show was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/shows:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listUserShows
      tags: [Shows]
      summary: Retrieve a user's shows
      responses:
        '200':
          description: A paginated list of the user's shows.
  /users/{user_id}/favorites:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listFavorites
      tags: [Shows]
      summary: Retrieve a user's favorite shows
      responses:
        '200':
          description: A paginated list of favorite shows.
  /users/{user_id}/favorites/{show_id}:
    parameters:
      - $ref: '#/components/parameters/UserId'
      - $ref: '#/components/parameters/ShowId'
    put:
      operationId: addFavorite
      tags: [Shows]
      summary: Add a show to favorites
      responses:
        '200':
          description: The show was favorited.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: removeFavorite
      tags: [Shows]
      summary: Remove a show from favorites
      responses:
        '200':
          description: The show was unfavorited.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /show-categories:
    get:
      operationId: listShowCategories
      tags: [Shows]
      summary: List show categories
      responses:
        '200':
          description: The list of show categories.
  /show-languages:
    get:
      operationId: listShowLanguages
      tags: [Shows]
      summary: List show languages
      responses:
        '200':
          description: The list of supported languages.
  /shows/{show_id}/episodes:
    parameters:
      - $ref: '#/components/parameters/ShowId'
    get:
      operationId: listShowEpisodes
      tags: [Episodes]
      summary: Retrieve a show's episodes
      responses:
        '200':
          description: A paginated list of episodes.
    post:
      operationId: uploadEpisode
      tags: [Episodes]
      summary: Upload an episode
      description: >-
        Uploads a new episode (multipart/form-data with the audio file) to a
        show.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                title:
                  type: string
                media_file:
                  type: string
                  format: binary
      responses:
        '200':
          description: The created episode.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/drafts:
    post:
      operationId: createDraftEpisode
      tags: [Episodes]
      summary: Create a draft episode
      responses:
        '200':
          description: The created draft episode.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: getEpisode
      tags: [Episodes]
      summary: Retrieve an episode
      responses:
        '200':
          description: An episode.
    post:
      operationId: updateEpisode
      tags: [Episodes]
      summary: Update an episode
      responses:
        '200':
          description: The updated episode.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteEpisode
      tags: [Episodes]
      summary: Delete an episode
      responses:
        '200':
          description: The episode was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}/play:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: playEpisode
      tags: [Episodes]
      summary: Stream an episode
      description: Returns the audio stream for an episode over HTTPS.
      responses:
        '200':
          description: The episode audio stream.
  /episodes/{episode_id}/download:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: downloadEpisode
      tags: [Episodes]
      summary: Download an episode
      responses:
        '200':
          description: The episode audio file.
  /users/{user_id}/episodes:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: listUserEpisodes
      tags: [Episodes]
      summary: Retrieve a user's episodes
      responses:
        '200':
          description: A paginated list of episodes.
  /users/{user_id}/likes/{episode_id}:
    parameters:
      - $ref: '#/components/parameters/UserId'
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: checkLike
      tags: [Episodes]
      summary: Check if an episode is liked
      responses:
        '200':
          description: Whether the user liked the episode.
    put:
      operationId: addLike
      tags: [Episodes]
      summary: Like an episode
      responses:
        '200':
          description: The like was added.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: removeLike
      tags: [Episodes]
      summary: Unlike an episode
      responses:
        '200':
          description: The like was removed.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/bookmarks/{episode_id}:
    parameters:
      - $ref: '#/components/parameters/UserId'
      - $ref: '#/components/parameters/EpisodeId'
    put:
      operationId: addBookmark
      tags: [Episodes]
      summary: Bookmark an episode
      responses:
        '200':
          description: The bookmark was added.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: removeBookmark
      tags: [Episodes]
      summary: Remove a bookmark
      responses:
        '200':
          description: The bookmark was removed.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}/messages:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: listEpisodeMessages
      tags: [Episodes]
      summary: Retrieve episode messages
      responses:
        '200':
          description: A paginated list of messages.
    post:
      operationId: createEpisodeMessage
      tags: [Episodes]
      summary: Leave a message on an episode
      responses:
        '200':
          description: The created message.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}/chapters:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: listEpisodeChapters
      tags: [Episodes]
      summary: Retrieve episode chapters
      responses:
        '200':
          description: The episode chapters.
    post:
      operationId: addEpisodeChapter
      tags: [Episodes]
      summary: Add an episode chapter
      responses:
        '200':
          description: The created chapter.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}/cuepoints:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: listEpisodeCuepoints
      tags: [Episodes]
      summary: Retrieve episode ad cuepoints
      responses:
        '200':
          description: The episode cuepoints.
    post:
      operationId: updateEpisodeCuepoints
      tags: [Episodes]
      summary: Update episode ad cuepoints
      responses:
        '200':
          description: The updated cuepoints.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/statistics:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: getUserStatistics
      tags: [Statistics]
      summary: Retrieve overall user statistics
      responses:
        '200':
          description: Aggregated statistics for the user.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/statistics/plays:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: getUserPlayStatistics
      tags: [Statistics]
      summary: Retrieve user play statistics
      responses:
        '200':
          description: Play statistics for the user.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{user_id}/statistics/geographics:
    parameters:
      - $ref: '#/components/parameters/UserId'
    get:
      operationId: getUserGeographicStatistics
      tags: [Statistics]
      summary: Retrieve user geographic statistics
      responses:
        '200':
          description: Geographic distribution of plays.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shows/{show_id}/statistics/plays:
    parameters:
      - $ref: '#/components/parameters/ShowId'
    get:
      operationId: getShowPlayStatistics
      tags: [Statistics]
      summary: Retrieve show play statistics
      responses:
        '200':
          description: Play statistics for the show.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /episodes/{episode_id}/statistics/plays:
    parameters:
      - $ref: '#/components/parameters/EpisodeId'
    get:
      operationId: getEpisodePlayStatistics
      tags: [Statistics]
      summary: Retrieve episode play statistics
      responses:
        '200':
          description: Play statistics for the episode.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /search:
    get:
      operationId: search
      tags: [Search and Discovery]
      summary: Search shows or episodes
      parameters:
        - name: q
          in: query
          required: true
          schema:
            type: string
          description: The search query.
        - name: type
          in: query
          required: true
          schema:
            type: string
            enum: [shows, episodes]
          description: Whether to search shows or episodes.
      responses:
        '200':
          description: A paginated list of matching results.
  /explore/categories/{category_id}/items:
    parameters:
      - name: category_id
        in: path
        required: true
        schema:
          type: integer
        description: The explore category ID.
    get:
      operationId: getExploreCategoryItems
      tags: [Search and Discovery]
      summary: Retrieve explore category items
      responses:
        '200':
          description: The items in the explore category.
  /tags/{tag_name}/episodes:
    parameters:
      - name: tag_name
        in: path
        required: true
        schema:
          type: string
        description: The tag name.
    get:
      operationId: getEpisodesByTag
      tags: [Search and Discovery]
      summary: Retrieve latest episodes by tag
      responses:
        '200':
          description: A paginated list of episodes tagged with the given tag.
  /advertisers:
    get:
      operationId: listAdvertisers
      tags: [Advertising]
      summary: Retrieve advertisers
      responses:
        '200':
          description: A list of advertisers.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createAdvertiser
      tags: [Advertising]
      summary: Create an advertiser
      responses:
        '200':
          description: The created advertiser.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /advertisers/{advertiser_id}:
    parameters:
      - name: advertiser_id
        in: path
        required: true
        schema:
          type: integer
        description: The advertiser ID.
    get:
      operationId: getAdvertiser
      tags: [Advertising]
      summary: Retrieve an advertiser
      responses:
        '200':
          description: An advertiser.
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateAdvertiser
      tags: [Advertising]
      summary: Update an advertiser
      responses:
        '200':
          description: The updated advertiser.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteAdvertiser
      tags: [Advertising]
      summary: Delete an advertiser
      responses:
        '200':
          description: The advertiser was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns:
    get:
      operationId: listCampaigns
      tags: [Advertising]
      summary: Retrieve campaigns
      responses:
        '200':
          description: A list of campaigns.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCampaign
      tags: [Advertising]
      summary: Create a campaign
      responses:
        '200':
          description: The created campaign.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{campaign_id}:
    parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: integer
        description: The campaign ID.
    get:
      operationId: getCampaign
      tags: [Advertising]
      summary: Retrieve a campaign
      responses:
        '200':
          description: A campaign.
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateCampaign
      tags: [Advertising]
      summary: Update a campaign
      responses:
        '200':
          description: The updated campaign.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteCampaign
      tags: [Advertising]
      summary: Delete a campaign
      responses:
        '200':
          description: The campaign was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /lineitems:
    get:
      operationId: listLineItems
      tags: [Advertising]
      summary: Retrieve line items
      responses:
        '200':
          description: A list of line items.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createLineItem
      tags: [Advertising]
      summary: Create a line item
      responses:
        '200':
          description: The created line item.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /lineitems/{lineitem_id}:
    parameters:
      - name: lineitem_id
        in: path
        required: true
        schema:
          type: integer
        description: The line item ID.
    get:
      operationId: getLineItem
      tags: [Advertising]
      summary: Retrieve a line item
      responses:
        '200':
          description: A line item.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: updateLineItem
      tags: [Advertising]
      summary: Update a line item
      responses:
        '200':
          description: The updated line item.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteLineItem
      tags: [Advertising]
      summary: Delete a line item
      responses:
        '200':
          description: The line item was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        OAuth2. Authorize at https://www.spreaker.com/oauth2/authorize and
        exchange or refresh tokens at https://api.spreaker.com/oauth2/token.
        Access tokens are sent as a Bearer token in the Authorization header.
      flows:
        authorizationCode:
          authorizationUrl: https://www.spreaker.com/oauth2/authorize
          tokenUrl: https://api.spreaker.com/oauth2/token
          refreshUrl: https://api.spreaker.com/oauth2/token
          scopes:
            basic: Basic access to the Spreaker API on behalf of the user.
  parameters:
    UserId:
      name: user_id
      in: path
      required: true
      schema:
        type: integer
      description: The user ID.
    ShowId:
      name: show_id
      in: path
      required: true
      schema:
        type: integer
      description: The show ID.
    EpisodeId:
      name: episode_id
      in: path
      required: true
      schema:
        type: integer
      description: The episode ID.
  responses:
    Unauthorized:
      description: The request was not authenticated with a valid OAuth2 token.