---
title: "List related podcasts"
method: GET
path: "/v1/podcasts/{id}/related"
tags: ["Podcasts", "tier:standard"]
---

# List related podcasts

`GET /v1/podcasts/{id}/related`

## Request

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

Returns the shows most related to a podcast, best first, each with a calibrated `score`, a coarse `band` (strong, moderate, weak) to branch on, and — with `include=basis` — the signals behind the pairing: content similarity of recent episodes, shared topics, shared guests (named), same publisher, and shared sponsors. Related sets are precomputed per show from its embedded transcripts, topic profile, guest roster, network, and advertisers, restricted to the show's language, and refreshed as new episodes land; the endpoint is a fast page read. Only shows above a relatedness floor are listed, machine-generated and farmed feeds are never listed, and a publisher's duplicate feeds of one show appear once (sets computed before that rule are collapsed on read, best-effort). An empty first page is 200 with a `coverage` note saying whether the set is not computed yet, nothing cleared the floor, or the filters removed everything — never 404. Use this for "shows like this show" — media planning around a known show, PR pitch lists, and agent traversal from one resolved slug to its neighbours. It is not a topic browser (use `GET /v1/podcasts?topic_id=…` for shows that cover a topic), not a guest lookup (`GET /v1/podcasts/guests/{id}/podcasts` lists where a guest has appeared), and not advertiser co-occurrence (`GET /v1/podcasts/advertising/co-occurrence`). Every result carries the related show's `slug`, which every other podcast endpoint accepts as `{id}`; person slugs in the basis feed the guest endpoints and topic slugs feed `topic_id`. Identify the podcast by slug (e.g., 'all-in'), internal ID, or numeric iTunes ID.

## 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=basis to attach, for every result, the signals that make the two shows related: content similarity, shared topics, shared guests (with names), same publisher, shared sponsors.
- `min_score` number, double: Only results with a fused score at or above this value. Omit (or 0) to return every stored neighbour; the band field is the recommended way to filter by strength.
- `language` string: Only shows in this language (ISO 639-1 code, e.g. 'en', 'es'; a region suffix such as 'fr-CA' is reduced to the language). Related sets are built within the source show's language, so this mostly matters for shows with a mixed catalogue.
- `publishing_status` 'active' | 'dormant': Only shows that have released an episode in the last 90 days (active) or have not (dormant). Shows with no known episode date match neither.
- `suitability_tier` 'SAFE' | 'LIMITED' | 'SENSITIVE' | 'UNSAFE': Only shows whose latest brand-suitability assessment is this tier. Shows never assessed are excluded when this is set.
- `min_popularity` number, double: Only shows at or above this popularity percentile (0-1]. A floor above 0 excludes shows that do not chart; 0 (or omitting it) applies no floor.
- `exclude_same_publisher` boolean: Drop shows from the source show's own publisher — 'shows like mine that I do not already own'.

## Response `200`

OK

- RelatedPodcastsPage
  - `coverage` RelatedCoverage
    - `computed_at` string, date-time: When the related set was last computed; present on every status except not_computed.
    - `message` string, required: Human-readable explanation of the status.
    - `status` 'not_computed' | 'none_above_floor' | 'filtered_out', required: not_computed: the related set has not been computed yet (retry later); none_above_floor: it was computed and no show cleared the relatedness floor, typically because this show has too few embedded episodes; filtered_out: shows cleared the floor but every one was removed, by the request's filters or by the default policy (flagged feeds, a publisher's duplicate feeds, removed shows).
  - `cursor` string: Pass to next request for more results
  - `data` RelatedPodcast[], nullable, required: List of results
    - `band` 'strong' | 'moderate' | 'weak', required: Coarse class of the score: strong (same beat and audience), moderate (overlapping subject or audience), weak (a loose connection). Branch on this rather than on exact score thresholds.
    - `basis` RelatedPodcastBasis
      - `content_similarity` number, double: Cosine similarity of the two shows' content centroids in [0,1]; omitted when either show has too few embedded episodes.
      - `same_publisher` boolean, required: Both shows belong to the same multi-show publisher (network).
      - `shared_category_count` integer, required: Number of directory categories the shows share.
      - `shared_guest_count` integer, required: Number of guests who appeared on both shows.
      - `shared_guests` PersonCompact[], nullable: Up to three of the shared guests, most significant first.
        - `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.
      - `shared_sponsor_count` integer, required: Number of advertisers both shows have carried.
      - `shared_topics` Topic[], nullable: Up to three topics that contribute most to the overlap.
        - `ancestry` string: Human-readable breadcrumb path (e.g. Business > Technology > AI)
        - `ancestry_path` string: Hash-based ancestry path for programmatic filtering
        - `episode_count` integer: Number of episodes in this podcast that cover this topic (only populated for /v1/podcasts/{id} topic lists)
        - `id` string, required: Unique identifier
        - `name` string, required: Topic name
        - `slug` string, required: Ancestry-based slug (e.g., technology/artificial-intelligence). Can be used as topic_id.
      - `topic_overlap` number, double: Overlap of the shows' topic profiles in [0,1].
    - `podcast` PodcastCompact, required
      - `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
    - `score` number, double, required: Fused relatedness in (0,1], calibrated so that higher values are more likely to be judged related. Comparable across shows.
  - `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)
