---
title: "Stream episodes"
method: GET
path: "/v1/podcasts/episodes/stream"
tags: ["Podcast Episodes", "tier:standard"]
---

# Stream episodes

`GET /v1/podcasts/episodes/stream`

## Request

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

Server-Sent Events stream of podcast episodes as they are ingested. **Enterprise plan only** — other plans should poll `GET /v1/podcasts/episodes/feed` instead. Subscribe to a single hydration `milestone` (default `transcribed`); each episode is delivered once it reaches that stage. Optionally filter by `podcast_ids` (slug or ID) and/or `popularity_threshold`. Supply `cursor` or `since` to backfill, then the stream continues live. Delivery is at-least-once — dedupe on the episode id. For more than 100 explicit podcast ids, use the POST form.

## Query parameters

- `milestone` 'discovered' | 'transcribed' | 'segmented' | 'fully_ingested': Hydration milestone to stream. Episodes are delivered once they reach this stage. Milestones are ordered discovered < transcribed < segmented < fully_ingested.
- `podcast_ids` string[], nullable: Filter to a set of podcasts by slug or ID (comma-separated). An episode is delivered if its podcast matches any of them. Unknown values are ignored; if none match you receive a terminal error. For more than 100, use the POST form.
- `popularity_threshold` number, double: Filter to podcasts whose popularity percentile is at least this value, in (0,1). Omit (or 0) for no popularity filter. Popularity is normalized 0–1 across the catalog, so 0.9 ≈ the top 10%. Combines with podcast_ids as a union.
- `cursor` string: Opaque cursor from a prior event envelope. When supplied, the stream replays everything after it then continues live.
- `since` string: ISO 8601 date or date-time to backfill from when no cursor is supplied. Ignored if cursor is set.
- `include` string[], nullable: Heavy relations to embed in each episode (comma-separated). transcript is the dialogue transcript; segments and clips are the AI-derived sets; entities are the knowledge graph entities discussed, with the transcript lines that mention each; ads are the advertising spots detected; all means everything available at the chosen milestone. A field is only valid when its data is guaranteed at the milestone (transcript→transcribed, segments→segmented, clips, entities and ads→fully_ingested); requesting one earlier is a terminal error.

## Response `200`

OK

## Other responses

- `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)
