> ## Documentation Index
> Fetch the complete documentation index at: https://docs.particle.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# List sponsors a podcast could pitch

> 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.



## OpenAPI

````yaml /openapi.json get /v1/podcasts/{id}/recommendations/sponsors
openapi: 3.1.0
info:
  description: Public API for Particle — news intelligence, financial data, and analysis.
  title: Particle API
  version: 0.1.0
  x-guidance: >-
    Podcast, people, company and topic intelligence. Authenticate with a pp_ API
    key (X-API-Key header) or pay per request with x402: a keyless call to a
    billable endpoint returns 402 with the payment requirements in the
    PAYMENT-REQUIRED header; sign the USDC transfer and repeat the request with
    PAYMENT-SIGNATURE. Start with GET /v1/podcasts/search?q=<show name>; the
    slugs in responses are the inputs to the other endpoints. Docs:
    https://docs.particle.pro; setup playbook:
    https://api.particle.pro/agents.md; endpoint and tool map with prices:
    https://api.particle.pro/llms.txt; credential recipe:
    https://api.particle.pro/auth.md.
servers:
  - url: https://api.particle.pro
security:
  - ApiKeyHeader: []
  - BearerAuth: []
paths:
  /v1/podcasts/{id}/recommendations/sponsors:
    get:
      tags:
        - Podcasts
        - tier:premium
      summary: List sponsors a podcast could pitch
      description: >-
        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.
      operationId: list-podcast-recommended-sponsors
      parameters:
        - description: Results per page
          explode: false
          in: query
          name: limit
          schema:
            default: 25
            description: Results per page
            format: int64
            maximum: 100
            minimum: 1
            type: integer
        - description: Opaque pagination cursor from previous response
          explode: false
          in: query
          name: cursor
          schema:
            description: Opaque pagination cursor from previous response
            type: string
        - description: Podcast slug (e.g., 'all-in'), internal ID, or numeric iTunes ID
          in: path
          name: id
          required: true
          schema:
            description: Podcast slug (e.g., 'all-in'), internal ID, or numeric iTunes ID
            type: string
        - description: >-
            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.
          explode: false
          in: query
          name: include
          schema:
            description: >-
              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.
            items:
              enum:
                - via
                - contacts
              type: string
            type:
              - array
              - 'null'
        - description: >-
            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.
          explode: false
          in: query
          name: min_score
          schema:
            description: >-
              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.
            format: double
            maximum: 1
            minimum: 0
            type: number
        - description: >-
            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.
          explode: false
          in: query
          name: active_since
          schema:
            description: >-
              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.
            examples:
              - '2026-01-01T00:00:00Z'
            type: string
        - description: >-
            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.
          explode: false
          in: query
          name: exclude_top_advertisers
          schema:
            description: >-
              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.
            format: int64
            maximum: 500
            minimum: 0
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageRecommendedSponsor'
          description: OK
        '402':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PlatformError'
          description: >-
            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:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PlatformError'
          description: Error
      x-codeSamples:
        - label: cURL
          lang: curl
          source: |-
            curl -H "X-API-Key: $PARTICLE_API_KEY" \
              "https://api.particle.pro/v1/podcasts/{id}/recommendations/sponsors?limit=25"
components:
  schemas:
    PageRecommendedSponsor:
      additionalProperties: false
      properties:
        cursor:
          description: Pass to next request for more results
          type: string
        data:
          description: List of results
          items:
            $ref: '#/components/schemas/RecommendedSponsor'
          type:
            - array
            - 'null'
        has_more:
          description: Whether more results exist
          type: boolean
      required:
        - data
        - has_more
      type: object
    PlatformError:
      additionalProperties: false
      properties:
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        error_code:
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        resolve:
          $ref: '#/components/schemas/ErrorResolve'
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
      type: object
    RecommendedSponsor:
      additionalProperties: false
      properties:
        band:
          description: >-
            Coarse class of the score; branch on this rather than on exact
            thresholds.
          enum:
            - strong
            - moderate
            - weak
          type: string
        company_contested:
          description: >-
            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.
          type: boolean
        contacts:
          description: >-
            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.
          items:
            $ref: '#/components/schemas/RecommendedContact'
          type:
            - array
            - 'null'
        last_ad_at:
          description: Publish date of the sponsor's most recent ad across those shows.
          format: date-time
          type: string
        score:
          description: >-
            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.
          format: double
          type: number
        shared_show_count:
          description: How many of the show's related shows run this sponsor.
          format: int64
          type: integer
        sponsor:
          $ref: '#/components/schemas/SponsorCompact'
          description: >-
            The recommended sponsor, with its linked company when known — the
            company record is the path to people to contact. Sponsor records
            that resolve to the same company (or the same name) are one row,
            named by the strongest of them. The link is resolved from the
            sponsor's declared domain when it maps to one live company, else the
            company most of its ads that aired in the last 180 days were
            attributed to, else the all-time majority.
        total_ads:
          description: >-
            The sponsor's ad reads summed over those related shows (network
            promos excluded).
          format: int64
          type: integer
        via:
          description: >-
            The related shows that run this sponsor, most related first (at most
            three) — the peer set to cite in a pitch.
          items:
            $ref: '#/components/schemas/PodcastCompact'
          type:
            - array
            - 'null'
      required:
        - sponsor
        - score
        - band
        - shared_show_count
        - total_ads
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    ErrorResolve:
      additionalProperties: false
      properties:
        action:
          type: string
        endpoint:
          type: string
        message:
          type: string
        method:
          type: string
        url:
          type: string
      required:
        - message
      type: object
    RecommendedContact:
      additionalProperties: false
      properties:
        linkedin_url:
          description: >-
            The person's LinkedIn profile when known — an InMail path even
            without an email.
          type: string
        person:
          $ref: '#/components/schemas/PersonCompact'
          description: The person; the slug feeds GET /v1/people/{id}.
        role:
          description: >-
            Contact role class derived from the title; contacts are ordered by
            how likely the class is to own a sponsorship decision.
          enum:
            - marketing
            - brand
            - partnerships
            - media_advertising
            - communications
            - growth
            - executive
            - other
          type: string
        title:
          description: Current title at the company, as recorded.
          type: string
      required:
        - person
        - role
      type: object
    SponsorCompact:
      additionalProperties: false
      properties:
        company:
          $ref: '#/components/schemas/CompanyCompact'
          description: Linked company record
        id:
          description: Unique identifier
          type: string
        name:
          description: Sponsor name
          type: string
      required:
        - id
        - name
      type: object
    PodcastCompact:
      additionalProperties: false
      properties:
        best_rank:
          $ref: '#/components/schemas/PodcastRankingHandle'
          description: >-
            The single best (lowest-numbered) chart position this podcast
            currently holds across all charts. Omitted when the podcast holds no
            current chart appearances, and on endpoints that do not attach it.
            Reading a full chart (with country/category/source filters and
            history) remains premium; a single show's own placement is available
            on every plan.
        id:
          description: Podcast ID
          type: string
        image_url:
          description: Cover image URL
          type: string
        popularity:
          description: >-
            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, and on
            endpoints that build this resource from a projection rather than the
            full podcast row.
          format: double
          type: number
        publisher:
          $ref: '#/components/schemas/PodcastPublisherCompact'
          description: >-
            Publisher (network) attributed to this podcast. Present only when
            the embedding endpoint preloads publisher attribution and the
            podcast's publisher is known.
        slug:
          description: Human-readable slug identifier
          type: string
        title:
          description: Podcast title
          type: string
      required:
        - id
        - title
      type: object
    PersonCompact:
      additionalProperties: false
      properties:
        description:
          description: Short description (e.g. current role), when known.
          type: string
        id:
          description: Encoded Person identifier
          type: string
        image_url:
          description: Canonical headshot URL when one is known for the Person
          type: string
        name:
          description: Display name
          type: string
        slug:
          description: >-
            Stable human-readable handle (e.g. 'satya-nadella'). Recommended
            canonical identifier on every Particle Pro person surface.
          type: string
      required:
        - id
        - name
      type: object
    CompanyCompact:
      additionalProperties: false
      properties:
        description:
          description: Short company description, when known.
          type: string
        domain:
          description: Primary website domain (e.g. 'nvidia.com'), when known.
          type: string
        id:
          description: Company identifier (domain, slug, or encoded ID)
          type: string
        image_mode:
          description: >-
            Image presentation policy. AUTOMATIC permits client fallbacks,
            CUSTOM requires image_url, and NONE suppresses all image fallbacks.
          enum:
            - AUTOMATIC
            - CUSTOM
            - NONE
          type: string
        image_url:
          description: Company logo or image URL
          type: string
        name:
          description: Company name
          type: string
        slug:
          description: >-
            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.
          type: string
        ticker:
          description: Primary stock ticker symbol, when listed.
          type: string
      required:
        - id
        - name
      type: object
    PodcastRankingHandle:
      additionalProperties: false
      properties:
        captured_at:
          format: date-time
          type: string
        category_slug:
          type: string
        chart_type:
          enum:
            - top_podcasts
          type: string
        country:
          type: string
        rank:
          format: int64
          type: integer
        source:
          enum:
            - apple
            - spotify
          type: string
      required:
        - source
        - chart_type
        - rank
        - captured_at
      type: object
    PodcastPublisherCompact:
      additionalProperties: false
      properties:
        id:
          description: Publisher ID
          type: string
        name:
          description: Publisher name
          type: string
        slug:
          description: >-
            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).
          type: string
      required:
        - id
        - name
      type: object
  securitySchemes:
    ApiKeyHeader:
      description: Pass your API key in the X-API-Key header (recommended).
      in: header
      name: X-API-Key
      type: apiKey
    BearerAuth:
      description: Pass your API key as a Bearer token in the Authorization header.
      scheme: bearer
      type: http

````