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

# Podcasts

> What's inside every episode — transcripts, speakers, segments, clips, sponsors, and bias.

Most podcast APIs give you metadata — titles, descriptions, RSS feeds. Particle API gives you what's *in* the audio. Every episode is transcribed and diarized, broken into structural segments (intros, ads, topic discussions, interviews), distilled into engagement-scored clips, and linked to a knowledge graph of speakers, entities, and topics. The shows themselves are scored for political bias with structured evidence.

## What you can build

* **Entity tracking** — Find every episode, segment, and dialogue line where a person or company is discussed.
* **Highlight reels** — Pull engagement-scored clips with ready-to-share `intro_statement` copy and direct MP3 URLs.
* **Sponsor analytics** — See which podcasts a competitor advertises on, who co-sponsors with whom, and host-read vs pre-recorded breakdowns.
* **Research tools** — Search transcripts with timestamps, exports as JSON or SRT, scoped by speaker or time range.
* **Bias analysis** — Audit a show's leaning with structured `transcript_evidence` and `web_research_evidence`.

## Resource hierarchy

```mermaid theme={"dark"}
graph TD
  Pub[Publisher] --> P[Podcast]
  P --> E[Episodes]
  P --> B[Bias]
  P --> Adv[Advertising summary]
  P --> M[Mentions]
  E --> T[Transcript]
  E --> Seg[Segments]
  E --> Cl[Clips]
  E --> Sp[Speakers]
  E --> En[Entities]
  E --> To[Topics]
  E --> TM[Transcript mentions]
  Seg --> SegT[Transcript]
  Cl --> ClT[Transcript]
```

Every resource is reachable both scoped to its parent (e.g., segments for a specific episode) and across the catalog (e.g., all segments matching a filter). Heavier endpoints — full transcripts, transcript mentions, cross-catalog segments and clip search, and advertising analytics — are priced higher per call than light metadata lookups; see [Concepts → Pricing weight](/concepts#pricing-weight).

<CardGroup cols={2}>
  <Card title="Episodes" icon="play" href="/podcasts/episodes">
    Cross-podcast discovery, filtering, and per-episode sub-resources.
  </Card>

  <Card title="Guests" icon="user-group" href="/podcasts/guests">
    The people who appear on shows — lifetime profiles, appearances, trending press tours, and brand-suitability exposure.
  </Card>

  <Card title="Format profile" icon="sliders" href="/podcasts/format">
    What kind of show it is — guest frequency, interview/panel/call-in/solo formats, ads, video, episode length, and cadence — all filterable.
  </Card>

  <Card title="Transcripts" icon="closed-captioning" href="/podcasts/transcripts">
    Diarized dialogue, word-level timestamps, SRT export, and entity mentions in context.
  </Card>

  <Card title="Segments & clips" icon="scissors" href="/podcasts/segments-and-clips">
    AI-identified structural sections and engagement-scored highlight moments.
  </Card>

  <Card title="Advertising" icon="bullhorn" href="/podcasts/advertising">
    Sponsors, leaderboards, co-occurrence, and per-company ad presence.
  </Card>

  <Card title="External links" icon="link" href="/podcasts/external-links">
    Every directory, social profile, video channel, and website the podcast lives on — with resolved URLs and audience metrics.
  </Card>

  <Card title="Lookup by external ID" icon="magnifying-glass-arrows-rotate" href="/podcasts/lookup">
    Reverse the external-links index: resolve Apple, Spotify, YouTube, and other platform identifiers to Particle podcasts in bulk.
  </Card>

  <Card title="Publishers" icon="building" href="/podcasts/publishers">
    Browse the organizations behind the catalog and pivot from a publisher to its full lineup of podcasts.
  </Card>

  <Card title="Ratings & reviews" icon="star" href="/podcasts/ratings">
    User-generated 1–5 star ratings and review text, per-platform star histograms, and a periodic LLM-generated narrative summary of listener sentiment.
  </Card>
</CardGroup>

## Get a podcast

Resolve by slug, canonical ID, or numeric Apple/iTunes collection ID:

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://api.particle.pro/v1/podcasts/pivot" \
    -H "X-API-Key: $PARTICLE_API_KEY"
  ```

  ```js JavaScript theme={"dark"}
  const res = await fetch("https://api.particle.pro/v1/podcasts/pivot", {
    headers: { "X-API-Key": process.env.PARTICLE_API_KEY },
  });
  const podcast = await res.json();
  ```
</CodeGroup>

```json Response from GET /v1/podcasts/pivot (truncated) theme={"dark"}
{
  "id": "QpMz7GYKfSNuUa6zKXA4Q",
  "title": "Pivot",
  "slug": "pivot",
  "language": "en",
  "episode_count": 167,
  "bias": "LEANS_LEFT",
  "political_context": "US",
  "speakers": [
    { "name": "Kara Swisher", "role": "HOST", "occurrences": 164, "entity_slug": "kara-swisher" },
    { "name": "Scott Galloway", "role": "HOST", "occurrences": 136, "entity_slug": "scott-galloway" }
  ]
}
```

The `speakers` array is the recurring cast aggregated across episodes. Each `entity_slug` is a knowledge-graph handle you can pass to [entities endpoints](/knowledge-graph/entities) or to [`GET /v1/podcasts/episodes?entity_id=…`](/podcasts/episodes#list-episodes) to follow that speaker across the whole catalog.

<Tip>
  Already have a platform-native ID? A numeric **Apple/iTunes collection
  ID** can be passed straight into the `{id}` slot — e.g.
  `GET /v1/podcasts/1535809341` — no lookup needed. For a **Spotify show
  ID**, **YouTube channel ID**, **RSS feed URL**, or other platform
  identifier, use [`GET /v1/podcasts/lookup`](/podcasts/lookup) to
  deterministically resolve any of them (or up to 100 in a single call)
  to Particle podcasts.
</Tip>

### Search by name

If you only know the show by name, use [`GET /v1/podcasts/search`](/podcasts/search)
with a fuzzy `q=` query — it's case-insensitive and matches title and
description:

```bash theme={"dark"}
curl --get "https://api.particle.pro/v1/podcasts/search" \
  --data-urlencode "q=hard fork" \
  --data-urlencode "limit=3" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

The response is a paginated list of compact podcast objects — same
`PageResponse<Podcast>` envelope used by every list endpoint, ranked
by match quality. (`GET /v1/podcasts?q=…` returns the same results and
remains supported for backwards compatibility.) `q=` is a *ranked text
search*, not a deterministic mapping: the top hit is usually right but
isn't guaranteed to be. If you need a deterministic answer keyed on a
platform-native identifier (Apple, Spotify, YouTube, …), use
[`GET /v1/podcasts/lookup`](/podcasts/lookup) instead.

### Curate by popularity and topic

The list endpoint is also a discovery tool. Filter by `topic_id`,
`language`, or `suitability_tier`, and narrow to the most popular shows
with `popularity_threshold`. Currently-charting podcasts carry a
`popularity` field — a **global** popularity percentile in `(0,1]` (a
`cume_dist` ranking over every charting podcast, where `1.0` is the single
most popular show). It is omitted for podcasts not currently on any chart.
`popularity_threshold` filters on that same value (and, because non-charting
podcasts have no percentile, excludes them whenever it is set):

```bash theme={"dark"}
curl --get "https://api.particle.pro/v1/podcasts" \
  --data-urlencode "topic_id=sports/football/fantasy-football" \
  --data-urlencode "popularity_threshold=0.75" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

This returns the top-quartile-popularity podcasts where fantasy football
is a substantive share of the show — the `topic_id` filter requires the
topic to carry at least 20% of a podcast's episodes and ranks by topic
concentration.

`popularity_threshold` is **always global**: it ranks across all charting
podcasts, never within `topic_id` or any other filter. Podcasts that aren't
currently charting have no percentile and are excluded whenever the filter
is set, so a high threshold on a narrow topic can return nothing — lower or
drop `popularity_threshold` to widen the set. This pairs naturally with the
[episode feed](/podcasts/feed): curate a list here, then hand its podcast
IDs to the feed as an explicit, stable `podcast_ids` set instead of the
feed's dynamic popularity stream.

## Bias analysis

Every podcast carries a quick `bias` enum (`LEANS_LEFT`, `LEANS_RIGHT`, `CENTER`, `MIXED`, `UNCLEAR`) on the podcast resource. The bias endpoint returns the underlying analysis: structured reasoning, transcript-level evidence, web-research evidence, and the sample episodes that drove the conclusion.

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://api.particle.pro/v1/podcasts/pivot/bias" \
    -H "X-API-Key: $PARTICLE_API_KEY"
  ```
</CodeGroup>

```json Response (truncated) theme={"dark"}
{
  "result": "LEANS_LEFT",
  "political_context": "US",
  "confidence": "MEDIUM",
  "reasoning": "…",
  "transcript_evidence": "…",
  "web_research_evidence": "…",
  "sample_episode_ids": ["…", "…"],
  "episodes_analyzed": 15,
  "evaluated_at": "2026-04-09T17:31:06Z"
}
```

Use the result for filtering or tagging; surface the `reasoning` and `transcript_evidence` fields when users want to know *why*.

## Mentions across a podcast's episodes

To find every episode of a single podcast where an entity comes up — without iterating episodes yourself — use the podcast-scoped mentions endpoint:

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://api.particle.pro/v1/podcasts/pivot/mentions?entity_id=sam-altman&limit=3" \
    -H "X-API-Key: $PARTICLE_API_KEY"
  ```
</CodeGroup>

```json Response (truncated) theme={"dark"}
{
  "data": [
    {
      "episode": {
        "id": "78cgekLUjCJBUZbj3s5K8Y",
        "title": "WHCD Shooting Aftermath, Musk and Altman Face-Off, Spirit Airlines Bailout",
        "published_at": "2026-04-28T10:00:00Z",
        "has_transcript": true,
        "segment_count": 21,
        "clip_count": 8
      },
      "salience": 0.003,
      "occurrences": 8
    }
  ],
  "has_more": true,
  "cursor": "…"
}
```

For the dialogue lines around each mention, drill into one episode with [transcript mentions](/podcasts/transcripts#transcript-mentions).

## Choosing the right endpoint

| I want to…                                                                                | Use this                                                                                                                                                           |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Resolve a podcast from a third-party identifier (Apple, Spotify, YouTube, …)              | [`GET /v1/podcasts/lookup?platform=…&identifier=…`](/podcasts/lookup)                                                                                              |
| Fuzzy-find a podcast by **name** when I only know what it's called                        | [`GET /v1/podcasts/search?q=…`](/podcasts/search)                                                                                                                  |
| Get the full podcast detail object when I already have a Particle slug or ID              | [`GET /v1/podcasts/{id}`](/podcasts/overview#get-a-podcast)                                                                                                        |
| Find dialogue that *means* something — paraphrase-tolerant                                | [`GET /v1/podcasts/episodes/search?semantic_search=…`](/podcasts/episode-search)                                                                                   |
| Find dialogue containing exact tokens or phrases (BM25)                                   | [`GET /v1/podcasts/episodes/search?keyword_search=…`](/podcasts/episode-search)                                                                                    |
| Find **every line about a person or company**                                             | [`GET /v1/podcasts/mentions?entity_id=…`](/podcasts/mentions)                                                                                                      |
| Combine: ranked dialogue scoped to a person or company                                    | [`GET /v1/podcasts/episodes/search?semantic_search=…&entity_id=…`](/podcasts/episode-search)                                                                       |
| List every entity mentioned inside one episode                                            | [`GET /v1/podcasts/episodes/{id}/transcript/mentions`](/podcasts/transcripts#transcript-mentions)                                                                  |
| Salience rollup of an entity across one podcast's episodes                                | [`GET /v1/podcasts/{id}/mentions?entity_id=…`](#mentions-across-a-podcasts-episodes)                                                                               |
| Episode-level recall by entity (metadata only, no dialogue)                               | [`GET /v1/podcasts/episodes?entity_id=…`](/podcasts/episodes)                                                                                                      |
| Find the people who **appeared** on shows, with appearance history and stats              | [`GET /v1/podcasts/guests`](/podcasts/guests)                                                                                                                      |
| Filter shows by **format** — interview vs solo, guest frequency, length, cadence, ad-free | [`GET /v1/podcasts?guest_frequency=…&format_signal=…`](/podcasts/format)                                                                                           |
| Browse highlight clips ranked by engagement                                               | [`GET /v1/podcasts/clips`](/podcasts/segments-and-clips) — for clips that match dialogue content, use `/v1/podcasts/episodes/search` and read them off the result. |
| Browse publishers, or list every podcast a publisher produces                             | [`GET /v1/podcasts/publishers`](/podcasts/publishers)                                                                                                              |

The split between **Episode search** and **Mentions** is deliberate: Episode search ranks dialogue by relevance to a query (similarity, BM25, or hybrid). Mentions returns episodes containing a named entity, ordered by recency, with every dialogue line where that name appears. Different shapes for genuinely different questions — see the [Episode search](/podcasts/episode-search) and [Mentions](/podcasts/mentions) pages for full guidance.

## Related

* [Search](/podcasts/search) — find a podcast by name, with `match_quality` on every result
* [Episode search](/podcasts/episode-search) — find dialogue by topic or exact phrase (semantic, keyword, hybrid)
* [Mentions](/podcasts/mentions) — every line where a person or company is named
* [Guests](/podcasts/guests) — the people who appear on shows, their appearances, trends, and suitability exposure
* [Format profile](/podcasts/format) — guest frequency, detected formats, ads, video, episode length, and cadence as filterable attributes
* [Episodes](/podcasts/episodes) — discovery, filtering, sub-resources
* [Transcripts](/podcasts/transcripts) — dialogue, words, mentions, SRT
* [Segments & clips](/podcasts/segments-and-clips) — structural breakdown and highlight moments
* [Advertising](/podcasts/advertising) — sponsor analytics
* [External links](/podcasts/external-links) — directories, social profiles, websites with resolved URLs and audience metrics
* [Lookup by external ID](/podcasts/lookup) — reverse the external-links index for Apple, Spotify, YouTube, and other platform identifiers
* [Publishers](/podcasts/publishers) — browse organizations and pivot from a publisher to its catalog
* [Ratings & reviews](/podcasts/ratings) — user-generated star ratings, review text, per-platform aggregates, and narrative sentiment summaries
