curl -X POST \
-H "X-API-Key: $PARTICLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' \
"https://api.particle.pro/v1/podcasts/episodes/stream?milestone=transcribed"[
{
"data": {
"cursor": "<string>",
"episode": {
"duration_seconds": 123,
"explicit": true,
"has_transcript": true,
"id": "<string>",
"title": "<string>",
"audio_url": "<string>",
"clip_count": 123,
"clips": [
{
"duration_seconds": 123,
"end_seconds": 123,
"engagement_score": 123,
"id": "<string>",
"start_seconds": 123,
"title": "<string>",
"audio_url": "<string>",
"description": "<string>",
"episode": {
"id": "<string>",
"title": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"slug": "<string>"
},
"intro_statement": "<string>",
"segment": {
"id": "<string>",
"title": "<string>",
"type": "<string>"
},
"speaker": {
"name": "<string>",
"entity": {
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"company": {
"id": "<string>",
"domain": "<string>",
"ticker": "<string>"
},
"description": "<string>",
"image_url": "<string>",
"person": {
"id": "<string>",
"company": "<string>",
"image_url": "<string>",
"title": "<string>"
},
"type": {
"name": "<string>",
"slug": "<string>"
},
"wikipedia_url": "<string>"
},
"person": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"slug": "<string>"
},
"role": "<string>"
}
}
],
"description": "<string>",
"entity_count": 123,
"episode_number": 123,
"image_url": "<string>",
"language": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"segment_count": 123,
"segments": [
{
"duration_seconds": 123,
"end_seconds": 123,
"id": "<string>",
"number": 123,
"start_seconds": 123,
"title": "<string>",
"type": "<string>",
"audio_url": "<string>",
"description": "<string>",
"episode": {
"id": "<string>",
"title": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"slug": "<string>"
},
"read_type": "<string>",
"summary": "<string>"
}
],
"slug": "<string>",
"speakers": [
{
"name": "<string>",
"description": "<string>",
"descriptor": "<string>",
"entity": {
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"company": {
"id": "<string>",
"domain": "<string>",
"ticker": "<string>"
},
"description": "<string>",
"image_url": "<string>",
"person": {
"id": "<string>",
"company": "<string>",
"image_url": "<string>",
"title": "<string>"
},
"type": {
"name": "<string>",
"slug": "<string>"
},
"wikipedia_url": "<string>"
},
"person": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"slug": "<string>"
},
"role": "<string>",
"speaking_duration_seconds": 123
}
],
"topics": [
{
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"ancestry": "<string>",
"ancestry_path": "<string>",
"episode_count": 123
}
],
"transcript": {
"duration_seconds": 123,
"episode_id": "<string>",
"lines": [
{
"end_seconds": 123,
"number": 123,
"speaker": "<string>",
"start_seconds": 123,
"text": "<string>",
"role": "<string>"
}
],
"language": "<string>"
},
"url": "<string>",
"videos": [
{
"url": "<string>",
"duration_seconds": 123,
"height": 123,
"mime_type": "<string>",
"width": 123
}
]
},
"milestone": "<string>"
},
"event": "<string>",
"id": 123,
"retry": 123
}
]{
"detail": "<string>",
"error_code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "<string>",
"resolve": {
"message": "<string>",
"action": "<string>",
"endpoint": "<string>",
"method": "<string>",
"url": "<string>"
},
"status": 123,
"title": "<string>",
"type": "about:blank"
}Stream episodes (POST)
Identical to the GET form (Enterprise plan only), but accepts the podcast filter in a JSON body so you can pass a large podcast_ids set (up to 1000) without hitting query-string limits. The milestone, cursor, and since controls remain query parameters.
curl -X POST \
-H "X-API-Key: $PARTICLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' \
"https://api.particle.pro/v1/podcasts/episodes/stream?milestone=transcribed"[
{
"data": {
"cursor": "<string>",
"episode": {
"duration_seconds": 123,
"explicit": true,
"has_transcript": true,
"id": "<string>",
"title": "<string>",
"audio_url": "<string>",
"clip_count": 123,
"clips": [
{
"duration_seconds": 123,
"end_seconds": 123,
"engagement_score": 123,
"id": "<string>",
"start_seconds": 123,
"title": "<string>",
"audio_url": "<string>",
"description": "<string>",
"episode": {
"id": "<string>",
"title": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"slug": "<string>"
},
"intro_statement": "<string>",
"segment": {
"id": "<string>",
"title": "<string>",
"type": "<string>"
},
"speaker": {
"name": "<string>",
"entity": {
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"company": {
"id": "<string>",
"domain": "<string>",
"ticker": "<string>"
},
"description": "<string>",
"image_url": "<string>",
"person": {
"id": "<string>",
"company": "<string>",
"image_url": "<string>",
"title": "<string>"
},
"type": {
"name": "<string>",
"slug": "<string>"
},
"wikipedia_url": "<string>"
},
"person": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"slug": "<string>"
},
"role": "<string>"
}
}
],
"description": "<string>",
"entity_count": 123,
"episode_number": 123,
"image_url": "<string>",
"language": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"segment_count": 123,
"segments": [
{
"duration_seconds": 123,
"end_seconds": 123,
"id": "<string>",
"number": 123,
"start_seconds": 123,
"title": "<string>",
"type": "<string>",
"audio_url": "<string>",
"description": "<string>",
"episode": {
"id": "<string>",
"title": "<string>",
"podcast": {
"id": "<string>",
"title": "<string>",
"best_rank": {
"captured_at": "2023-11-07T05:31:56Z",
"chart_type": "top_podcasts",
"rank": 123,
"category_slug": "<string>",
"country": "<string>"
},
"image_url": "<string>",
"popularity": 123,
"publisher": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"slug": "<string>"
},
"published_at": "2023-11-07T05:31:56Z",
"slug": "<string>"
},
"read_type": "<string>",
"summary": "<string>"
}
],
"slug": "<string>",
"speakers": [
{
"name": "<string>",
"description": "<string>",
"descriptor": "<string>",
"entity": {
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"company": {
"id": "<string>",
"domain": "<string>",
"ticker": "<string>"
},
"description": "<string>",
"image_url": "<string>",
"person": {
"id": "<string>",
"company": "<string>",
"image_url": "<string>",
"title": "<string>"
},
"type": {
"name": "<string>",
"slug": "<string>"
},
"wikipedia_url": "<string>"
},
"person": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"slug": "<string>"
},
"role": "<string>",
"speaking_duration_seconds": 123
}
],
"topics": [
{
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"ancestry": "<string>",
"ancestry_path": "<string>",
"episode_count": 123
}
],
"transcript": {
"duration_seconds": 123,
"episode_id": "<string>",
"lines": [
{
"end_seconds": 123,
"number": 123,
"speaker": "<string>",
"start_seconds": 123,
"text": "<string>",
"role": "<string>"
}
],
"language": "<string>"
},
"url": "<string>",
"videos": [
{
"url": "<string>",
"duration_seconds": 123,
"height": 123,
"mime_type": "<string>",
"width": 123
}
]
},
"milestone": "<string>"
},
"event": "<string>",
"id": 123,
"retry": 123
}
]{
"detail": "<string>",
"error_code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "<string>",
"resolve": {
"message": "<string>",
"action": "<string>",
"endpoint": "<string>",
"method": "<string>",
"url": "<string>"
},
"status": 123,
"title": "<string>",
"type": "about:blank"
}Authorizations
Pass your API key in the X-API-Key header (recommended).
Query Parameters
Hydration milestone to stream. Episodes are delivered once they reach this stage. Milestones are ordered discovered < transcribed < segmented < fully_ingested.
discovered, transcribed, segmented, fully_ingested Opaque cursor from a prior event envelope. When supplied, the stream replays everything after it then continues live.
ISO 8601 date or date-time to backfill from when no cursor is supplied. Ignored if cursor is set.
Heavy relations to embed in each episode (comma-separated). transcript is the dialogue transcript; segments and clips are the AI-derived sets; 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→fully_ingested); requesting one earlier is a terminal error.
transcript, segments, clips, all Body
Filter to a set of podcasts by slug or ID. An episode is delivered if its podcast matches any of them. Unknown values are ignored; if none match you receive a terminal error rather than the full firehose.
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.
x >= 0Was this page helpful?