---
title: "List clips"
method: GET
path: "/v1/podcasts/clips"
tags: ["Podcast Clips", "tier:standard"]
---

# List clips

`GET /v1/podcasts/clips`

## Request

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

Returns AI-extracted highlight clips across podcast episodes, ranked by engagement potential. Filter by podcast, episode, clip type, minimum engagement score, or speaker (the person talking in the clip). For text-based clip discovery (semantic, keyword, or entity mention search), use GET /v1/podcasts/episodes/search — matching clips are embedded inside each search result alongside the parent segment and dialogue.

## Query parameters

- `limit` integer: Results per page
- `cursor` string: Opaque pagination cursor from previous response
- `episode_id` string: Filter to a specific episode by slug or ID
- `podcast_id` string: Podcast slug (e.g., 'all-in'), internal ID, or numeric iTunes ID
- `speaker` string: Speaker filter: person slug (e.g., 'sam-altman'), knowledge-graph entity slug for the same person, or ID. Returns only clips whose primary speaker is this person.
- `type` 'SPICY' | 'CONTROVERSIAL' | 'EMOTIONAL' | 'FUNNY' | 'SHOCKING' | 'INSIGHTFUL' | 'INFORMATIVE' | 'EDUCATIONAL' | 'PHILOSOPHICAL' | 'AHA_MOMENT' | 'NOTABLE_LINE' | 'BEST_STORY' | 'DEBATE_DISAGREEMENT': Clip type filter, case-insensitive: SPICY, CONTROVERSIAL, EMOTIONAL, FUNNY, SHOCKING, INSIGHTFUL, INFORMATIVE, EDUCATIONAL, PHILOSOPHICAL, AHA_MOMENT, NOTABLE_LINE, BEST_STORY, DEBATE_DISAGREEMENT
- `min_engagement` integer: Minimum engagement potential score (integer, 0 to 100). Values above 70 are typical for a strong clip.

## Response `200`

OK

- PageClip
  - `cursor` string: Pass to next request for more results
  - `data` Clip[], nullable, required: List of results
    - `audio_url` string: Direct audio URL for this clip
    - `description` string: AI-generated clip description
    - `duration_seconds` number, double, required: Clip duration
    - `end_seconds` number, double, required: End time within the episode
    - `engagement_score` number, double, required: AI-predicted engagement potential (integer, 0 to 100). Values above 70 are typical for a strong clip.
    - `episode` EpisodeCompactWithPodcast
      - `id` string, required: Episode ID
      - `podcast` PodcastCompact
        - `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
      - `published_at` string, date-time: Publication date
      - `slug` string: Human-readable slug identifier
      - `title` string, required: Episode title
      - `web_url` string: The episode's page on Radar, where it plays beside its transcript: https://radar.particle.pro/podcasts/{podcast}/episodes/{episode}, each segment the slug or, when there is none, the raw UUID. Append ?t={seconds} to start at a moment; the hit's own url field already does. Omitted for back-catalogue episodes we have not ingested, which have no page, and in episode stream, feed and archive payloads stored before this field shipped (they are replayed as stored): build it from the slugs, or fetch the episode.
    - `id` string, required: Unique identifier
    - `intro_statement` string: AI-generated hook text for social sharing
    - `quote` string: Verbatim transcript line from the clip, at most 140 characters, by the clip's speaker where possible
    - `segment` SegmentCompact
      - `id` string, required: Segment ID
      - `title` string, required: Segment title
      - `type` string, required: Segment type
    - `speaker` ClipSpeaker
      - `entity` EntityCompact
        - `company` EntityCompany
          - `domain` string: Company website domain
          - `id` string, required: Company identifier
          - `ticker` string: Primary stock ticker symbol
        - `description` string: Short description
        - `id` string, required: Entity ID
        - `image_url` string: Entity image URL
        - `name` string, required: Entity name
        - `person` EntityPerson
          - `company` string: Current company name
          - `id` string, required: Person identifier
          - `image_url` string: Person headshot URL
          - `title` string: Current role title
        - `slug` string, required: Human-readable slug identifier
        - `type` EntityType
          - `name` string, required: Human-friendly display label (e.g. 'Company').
          - `slug` string, required: Stable identifier, safe to pass to the type query parameter (e.g. 'company').
        - `wikipedia_url` string: Wikipedia URL
      - `name` string, required: Speaker name
      - `person` PersonCompact
        - `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.
      - `role` string: Speaker role
    - `start_seconds` number, double, required: Start time within the episode
    - `title` string, required: AI-generated clip title
    - `type` 'SPICY' | 'CONTROVERSIAL' | 'EMOTIONAL' | 'FUNNY' | 'SHOCKING' | 'INSIGHTFUL' | 'INFORMATIVE' | 'EDUCATIONAL' | 'PHILOSOPHICAL' | 'AHA_MOMENT' | 'NOTABLE_LINE' | 'BEST_STORY' | 'DEBATE_DISAGREEMENT': Clip type
    - `url` string: Moment link that plays the clip in its episode on Radar: the episode's web_url with ?t= at start_seconds. Cite or share it to link the exact moment. On a clip inside a search match it comes from the match's episode. Omitted when the episode is not known.
  - `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)
