---
title: "List ads in an episode"
method: GET
path: "/v1/podcasts/episodes/{id}/ads"
tags: ["Podcast Episodes", "tier:premium"]
---

# List ads in an episode

`GET /v1/podcasts/episodes/{id}/ads`

## Request

- Base URL: `https://api.particle.pro`
- URL: `https://api.particle.pro/v1/podcasts/episodes/{id}/ads`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Returns the advertising spots detected in a specific episode, including the sponsor, the linked company in the knowledge graph, the advertised product or offer, the read type (HOST_READ vs PRE_RECORDED), and the placement (PRE_ROLL/MID_ROLL/POST_ROLL). Network promos are excluded.

## Path parameters

- `id` string, required: Episode slug or ID

## Response `200`

OK

- PageAdDetail
  - `cursor` string: Pass to next request for more results
  - `data` AdDetail[], nullable, required: List of results
    - `company` CompanyCompact
      - `description` string: Short company description, when known.
      - `domain` string: Primary website domain (e.g. 'nvidia.com'), when known.
      - `id` string, required: Company identifier (domain, slug, or encoded ID)
      - `image_url` string: Company logo or image URL
      - `name` string, required: Company name
      - `slug` string: Stable human-readable handle (the linked knowledge-graph slug, e.g. 'nvidia'), when known. Companies have no slug of their own; prefer this for display and pass it (or id) to /v1/companies.
      - `ticker` string: Primary stock ticker symbol, when listed.
    - `created_at` string, date-time, required: When the ad was first detected
    - `duration_seconds` number, double, required: Ad duration in seconds
    - `end_seconds` number, double, required: Ad end offset within the episode, in seconds
    - `id` string, required: Unique identifier
    - `offer_description` string: Promotional offer details
    - `placement_type` string: Where the ad appeared in the episode (PRE_ROLL, MID_ROLL, POST_ROLL)
    - `podcast` PodcastCompact
      - `best_rank` PodcastRankingHandle
        - `captured_at` string, date-time, required
        - `category_slug` string
        - `chart_type` 'top_podcasts', required
        - `country` string
        - `rank` integer, required
        - `source` 'apple' | 'spotify', required
      - `id` string, required: Podcast ID
      - `image_url` string: Cover image URL
      - `popularity` number, double: Global popularity percentile in (0,1], a cume_dist ranking over all currently-charting podcasts (Apple Podcasts charts). Higher is more popular. Omitted when the podcast is not currently charting, on endpoints that build this resource from a projection rather than the full podcast row, and in episode stream, feed and archive payloads, which are stored and replayed: read it live from the podcast endpoints.
      - `publisher` PodcastPublisherCompact
        - `id` string, required: Publisher ID
        - `name` string, required: Publisher name
        - `slug` string: Human-readable slug identifier (e.g., 'goalhanger', 'iheartpodcasts'). When present, accepted in place of the ID anywhere a publisher reference is taken in the API. Occasionally absent on publishers whose name doesn't slugify (e.g., scripts not representable in ASCII URL slugs).
      - `slug` string: Human-readable slug identifier
      - `title` string, required: Podcast title
    - `product` string: Advertised product or service
    - `read_type` string, required: How the ad was delivered (HOST_READ, PRE_RECORDED)
    - `sponsor_id` string: Linked sponsor ID, when known. Works as the {id} of /v1/podcasts/advertising/sponsors/{id} and its sub-resources, including when the ad has no linked company.
    - `sponsor_name` string, required: Name of the advertising sponsor
    - `sponsor_url` string: Sponsor website URL
    - `start_seconds` number, double, required: Ad start offset within the episode, in seconds
    - `url` string: Moment link that plays the ad in its episode on Radar, at start_seconds. Omitted when the episode is not known.
  - `has_more` boolean, required: Whether more results exist

## Other responses

- `402`: Payment Required. Read error_code. payment_required is the x402 path: either a keyless request being challenged — pay $0.03 in USDC per request (requirements in the PAYMENT-REQUIRED header) or send a pp_ API key — or a supplied payment that failed settlement (details in the PAYMENT-RESPONSE header; retry the same signature before signing a new one). See https://docs.particle.pro/x402. Any other code means the credential was accepted but does not cover this request (a plan or session gate such as premium_required or paid_plan_confirmation_required); its resolve says how to obtain access, and no payment header is sent.
- `default`: Error

---

[API](https://skmtc.dev/particle/apis/particle-api.md) · [All operations](https://skmtc.dev/particle/apis/particle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/particle/apis/particle-api/revisions/416ba82ab9d7?raw)
