---
title: "List sponsors a podcast could pitch"
method: GET
path: "/v1/podcasts/{id}/recommendations/sponsors"
tags: ["Podcasts", "tier:premium"]
---

# List sponsors a podcast could pitch

`GET /v1/podcasts/{id}/recommendations/sponsors`

## Request

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

Returns advertisers that run on the podcast's related shows but not on this one, ranked by how related those venues are, how much the sponsor buys there, and how recently — a prospecting list for a show selling its own inventory ('who buys shows like mine'), not a prediction. Each row carries the sponsor (with its linked company, the path to people to contact via GET /v1/companies/{id}/people), a score, a band, how many related shows run it, its ad count across them, the date of its most recent ad, and with include=via which shows. active_since keeps only sponsors still buying after a date. Related sets are precomputed (GET /v1/podcasts/{id}/related); a show whose set has not been computed yet gets an empty page. For who sponsors THIS show use GET /v1/podcasts/{id}/advertising; for a sponsor's full footprint use GET /v1/podcasts/advertising/sponsors/{id}/podcasts.

## Path parameters

- `id` string, required: Podcast slug (e.g., 'all-in'), internal ID, or numeric iTunes ID

## Query parameters

- `limit` integer: Results per page
- `cursor` string: Opaque pagination cursor from previous response
- `include` string[], nullable: Optional response sections. Pass include=via to attach, for each recommended sponsor, the related shows that run it (the peer set to cite in a pitch). Pass include=contacts to attach up to three people at the sponsor's company most likely to own a sponsorship decision, with their role class and LinkedIn URL.
- `min_score` number, double: Only recommendations with a score at or above this value. Omit (or 0) for every recommendation; the band field is the recommended way to filter by strength.
- `active_since` string: Only sponsors whose most recent ad across the related shows was published on or after this ISO 8601 date or date-time — the 'still buying' filter.
- `exclude_top_advertisers` integer: Drop the N most active advertisers corpus-wide from the list. An advertiser is every sponsor record that resolves to the same company or name, ranked by summed lifetime ad count. The list is strongest beyond the largest programmatic advertisers, which every list already names; 50 removes the head, 200 keeps only the long tail.

## Response `200`

OK

- PageRecommendedSponsor
  - `cursor` string: Pass to next request for more results
  - `data` RecommendedSponsor[], nullable, required: List of results
    - `band` 'strong' | 'moderate' | 'weak', required: Coarse class of the score; branch on this rather than on exact thresholds.
    - `company_contested` boolean: Whether the company link is disputed: true when the recent majority is under 60%, when the declared domain does not map to a company, when a mapped domain is contradicted by an ad majority of 60% or more, and for every all-time fallback; a weak disagreement with a mapped domain is not contested. A contested company is the best available guess — it is still served, but contacts are withheld.
    - `contacts` RecommendedContact[], nullable: Up to three people at the sponsor's company most likely to own a podcast sponsorship decision (marketing, partnerships, brand, media, communications, growth, then other executives), each with the role class and a LinkedIn URL when known. Present only with include=contacts, only when the sponsor resolves to a company, and never when company_contested is true.
      - `linkedin_url` string: The person's LinkedIn profile when known — an InMail path even without an email.
      - `person` PersonCompact, required
        - `description` string: Short description (e.g. current role), when known.
        - `id` string, required: Encoded Person identifier
        - `image_url` string: Canonical headshot URL when one is known for the Person
        - `name` string, required: Display name
        - `slug` string: Stable human-readable handle (e.g. 'satya-nadella'). Recommended canonical identifier on every Particle Pro person surface.
      - `role` 'marketing' | 'brand' | 'partnerships' | 'media_advertising' | 'communications' | 'growth' | 'executive' | 'other', required: Contact role class derived from the title; contacts are ordered by how likely the class is to own a sponsorship decision.
      - `title` string: Current title at the company, as recorded.
    - `last_ad_at` string, date-time: Publish date of the sponsor's most recent ad across those shows.
    - `score` number, double, required: Strength of the recommendation in (0,1): how related the shows that run this sponsor are, counted once per publisher, weighted by whether it is still buying there and how much (saturating after about twenty reads). Compounds across publishers.
    - `shared_show_count` integer, required: How many of the show's related shows run this sponsor.
    - `sponsor` SponsorCompact, required
      - `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.
      - `id` string, required: Unique identifier
      - `name` string, required: Sponsor name
    - `total_ads` integer, required: The sponsor's ad reads summed over those related shows (network promos excluded).
    - `via` PodcastCompact[], nullable: The related shows that run this sponsor, most related first (at most three) — the peer set to cite in a pitch.
      - `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
  - `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)
