- Segments are structural — sections classified by purpose (intro, ad, topic discussion, interview, transition). On episodes that report
start_line/end_linethey 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 reportsstart_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.
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
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)
audio_url— direct MP3 of the clip; embed it without slicing yourselfintro_statement— ready-to-use share copyengagement_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 linksegment— 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:
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 byGET /v1/podcasts/episodes/search. Whenever a clip’s time range overlaps the matching segment, it appears in the result’s clips array.
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:Related
- Transcripts — fetch dialogue scoped to a segment or clip
- Episodes — list and filter episodes
- Concepts — pagination, slugs, pricing weight