Skip to main content
Two related but distinct breakdowns of every episode:
  • Segments are structural — sections classified by purpose (intro, ad, topic discussion, interview, transition). On episodes that report start_line/end_line they cover every line of the transcript (caveat for older episodes), and they answer “what’s happening, when?”
  • Clips are highlight-driven — short standalone moments scored for engagement and tagged with a type (INSIGHTFUL, FUNNY, CONTROVERSIAL, AHA_MOMENT, …). Typically a handful per episode. They answer “what’s worth sharing?”
For MCP agents, a known episode’s clips are bundled into particle_podcast_get_episode with include: ["clips"] (and segments with include: ["segments"]). Clips that overlap a dialogue match arrive inline on particle_podcast_search_transcripts.

Segments

Segment types

Segments for an episode

In chronological order, this is the structural outline of the episode.
Response (truncated)

Segments partition the transcript, not the clock

Segments are contiguous in transcript lines, not in wall-clock seconds. On any episode that reports start_line/end_line, every spoken line belongs to exactly one segment, and a segment’s end_line + 1 is the next segment’s start_line, running from line 1 through the last line of the transcript. Older episodes are covered by the caveat below. The timestamps behave differently, and this trips people up. start_seconds is when a segment’s first spoken line begins; end_seconds is when its last spoken line ends. So one segment’s end_seconds is normally a little before the next segment’s start_seconds — you can see it in the response above, where #4 ends at 242.4 and #5 starts at 242.46. That interval is silence: the pause between two utterances. It is usually well under a second, but when a show ends and a trailing ad is stitched in much later it can be minutes long. Nothing is missing from those intervals, on any episode that reports start_line/end_line. They contain no transcribed speech at all: if they did, the lines would belong to a segment.
Two separate cutoffs matter here, and they are not the same date.start_line/end_line are recorded only for episodes segmented from September 2026 onward, when we began persisting them. Everything older omits them, regardless of how good its coverage is.Separately, episodes segmented before 24 July 2026 came from a version of the segmenter that could genuinely leave transcript lines in no segment, and about 11% of them did. On those, a gap between two segments may contain real speech. A repair of that cohort is in progress.So a missing start_line does not imply a gap — most episodes without line ranges were segmented after the coverage fix and are complete. It means only that you cannot verify the partition from the segments response alone. Where it matters, check the episode transcript for lines falling in the gap.
To slice a transcript by segment, use the line numbers rather than arithmetic on the floats. start_line/end_line are exact, and they match the number field on each line of GET /v1/podcasts/episodes/{id}/transcript:
start_line and end_line are omitted on episodes segmented before line ranges were recorded. Fall back to start_seconds/end_seconds when they are absent, keeping the caveat above in mind: on those episodes the segments are not guaranteed to cover every line.

Segment transcripts and audio

Each segment has its own transcript endpoint and an audio URL with the extracted MP3. To filter by type server-side (for example, to skip ads), use the cross-catalog endpoint with an episode filter: GET /v1/podcasts/segments?episode_id={id}&type=AD.

Cross-episode segment lookup

At least one of episode_id, podcast_id, or type is required — the endpoint does not return a global feed. Combine filters to narrow further (e.g., ?podcast_id=all-in&type=INTERVIEW).

Clips

Clips are the highlight moments — the parts of an episode worth pulling out for sharing, embedding, or social posts. Each is AI-extracted, scored for engagement, and tagged with a type.

Clip types

Clips for an episode

Returned ranked by engagement score (highest first):
Response (truncated)
Each clip carries:
  • audio_url — direct MP3 of the clip; embed it without slicing yourself
  • intro_statement — ready-to-use share copy
  • engagement_score — integer 0–100. Higher is more shareable; values above 70 are typical for a strong clip.
  • speaker — who’s speaking, with a knowledge-graph link
  • segment — which structural section the clip came from

Clips by speaker

GET /v1/podcasts/clips filters across the whole catalog by podcast_id, episode_id, type, min_engagement, and speaker. The speaker filter takes a person slug (e.g. sam-altman), a knowledge-graph entity slug for the same person, or an ID, and returns only clips whose primary speaker is that person — so “an insightful Sam Altman clip” is one call:
A speaker or podcast_id reference that resolves to nothing returns an empty listing rather than silently widening back to the full catalog.

Discovering clips by what’s discussed

Highlight clips are returned alongside their parent segment by GET /v1/podcasts/episodes/search. Whenever a clip’s time range overlaps the matching segment, it appears in the result’s clips array.
See the episode search docs for ranked dialogue search, and the mentions docs for entity-mention search.
GET /v1/podcasts/clips (above) is for browsing highlight clips ranked by engagement. For text-based discovery — by topic or keyword — use /v1/podcasts/episodes/search (clips on matching segments come along). For entity-mention discovery, use /v1/podcasts/mentions.

Embeds

Public clip embed endpoints (no API key required) return shareable JSON suitable for iframe-style players:
The embed payload includes the clip title, intro statement, audio URL, podcast artwork, and duration — everything you need for a thumbnail player.
  • Transcripts — fetch dialogue scoped to a segment or clip
  • Episodes — list and filter episodes
  • Concepts — pagination, slugs, pricing weight