A read-only HTTP API for Exploring Next episodes: metadata, audio, scripts, and
transcripts. There is also an iframe player you can embed on any site. No account or
API key is required.
Example response (captured at build time). Press Run it to fetch it live from your browser.
{
"episodes": [
{
"id": "e6329300-abc3-4672-88ca-8bf20e5c558a",
"episodeNumber": 798,
"title": "The 2026-07-28 MCP Specification Release Candidate",
"summary": "Miles leads a skeptic's take on the MCP 2026-07-28 release candidate — the biggest protocol overhaul since launch. Stateless core, extensions framework, Tasks redesign, and authorization hardening all land today. Miles is genuinely impressed by the infrastructure work but skeptical about the migration burden on teams who shipped against the old spec. Cooper pushes back on whether the pain is real or just spec-update noise.",
"publishedAt": "2026-07-28T15:58:36.496+00:00",
"durationSeconds": 661,
"hosts": {
"a": "Cooper",
"b": "Miles"
},
"topics": {
"domains": [
"developer-tools",
"agents"
],
"concepts": [
"state-management-in-language-models",
"tool-use-and-function-calling",
"agentic-loops",
"directed-acyclic-graph",
"durable-execution"
],
"entities": [
"model-context-protocol",
"kimi-k3"
]
},
"links": {
"self": "https://ingest.sandrise.io/v1/episodes/798",
"audio": "https://ingest.sandrise.io/v1/episodes/798/audio",
"script": "https://ingest.sandrise.io/v1/episodes/798/script",
"transcript": "https://ingest.sandrise.io/v1/episodes/798/transcript",
"page": "https://sandrise.io/exploring-next/798",
"embed": "https://sandrise.io/exploring-next/embed/798",
"oembed": "https://sandrise.io/exploring-next/oembed?url=https%3A%2F%2Fsandrise.io%2Fexploring-next%2F798"
}
}
],
"pagination": {
"nextCursor": "eyJkIjoiMjAyNi0wNy0…",
"limit": 1
}
}
Conventions
Base URL
https://ingest.sandrise.io/v1. The discovery document lists every endpoint.
Auth
None. Every route is public and read-only (GET/HEAD only).
CORS
Access-Control-Allow-Origin: *, so it can be called directly from browser code.
Rate limits
120 requests/min per IP for metadata, 30/min for audio. A 429 response includes Retry-After.
Caching
Responses include an ETag. Send If-None-Match and unchanged resources return 304 Not Modified.
IDs
An episode's UUID and its episode number are interchangeable wherever an episode is referenced.
Endpoints
GET/v1/episodes
List episodes. Published episodes, newest first. Keyset-paginated — follow pagination.nextCursor until it returns null.
Get one episode. Accepts a UUID or an episode number — /v1/episodes/798 works. The links object contains the URLs for the audio, script, transcript, episode page, and embed.
curl "https://ingest.sandrise.io/v1/episodes/798"
GET/v1/episodes/{idOrNumber}/audio
Get the audio. Returns the episode MP3. Supports HTTP Range requests, so players can seek. Add ?download=1 to get a Content-Disposition: attachment response with a descriptive filename.
Query parameters for /v1/episodes/{idOrNumber}/audio
Get the script. Returns the dialogue as speaker-labeled segments with stage directions removed, plus chapters with per-chapter summaries and takeaways.
Trimmed here for length. Run it to see every segment.
{
"id": "e6329300-abc3-4672-88ca-8bf20e5c558a",
"episodeNumber": 798,
"title": "The 2026-07-28 MCP Specification Release Candidate",
"hosts": {
"a": "Cooper",
"b": "Miles"
},
"chapters": [
{
"title": "The session is dead, long live the session",
"summary": "Miles opens with his read: the stateless move is genuinely good infrastructure work, but the migration cost is real and the timing is rough for teams mid-deployment.",
"takeaways": [
"MCP drops protocol-level sessions entirely — no more Mcp-Session-Id, no more initialize handshake",
"Sticky load balancers and shared session stores are no longer required at the protocol layer",
"State moves into explicit handles the model threads between calls, which is arguably more powerful"
]
},
"… more chapters"
],
"segments": [
{
"speaker": "Cooper",
"text": "Okay so MCP dropped what they're calling the biggest spec revision since launch, today, and Miles has thoughts. I can already tell from the look on your face."
},
{
"speaker": "Miles",
"text": "I do have thoughts. And look — I want to be clear upfront: some of this is genuinely good work. The stateless move is the right call. Dropping the session handshake, killing Mcp-Session-Id, letting any server instance handle any request — that's real infrastructure maturity. Round-robin load balancers instead of sticky sessions, no shared Redis store at the gateway. Teams who've been fighting that in production will feel it immediately."
},
"… 25 more segments"
]
}
GET/v1/episodes/{idOrNumber}/transcript
Get the transcript. Returns the transcript as text/plain, one line per spoken turn.
the episode has no usable script (uncommon; older episodes)
rate_limited
too many requests; retry after Retry-After seconds (429)
Embed the player
A self-contained iframe player for embedding on other sites. It plays the audio, seeks,
changes speed, and offers a download. It sets no cookies, uses no storage, and loads no
third-party scripts. Each player includes a "Listen on Exploring Next" link back to the
episode page.
the most recent episode; updates as new episodes publish
/embed/{number}
a specific episode, by number or UUID (e.g. /embed/798)
?theme=dark
dark palette; the default is the light theme above
?accent=RRGGBB
accent color as 6-digit hex, without the #
size
height is fixed at 180; width is fluid down to 250px
keyboard
Space/K play–pause, ←/→ seek ±5s
The player posts playback events to the parent page via postMessage, as
{ source: "exploring-next-embed", event, id, episodeNumber }, where
event is one of ready, play, pause, or
ended.
oEmbed
Platforms that support oEmbed (for
example WordPress and Ghost) embed the player automatically when an episode URL is
pasted. Episode pages declare the endpoint in their <head>. You can
also call it directly:
https://mcp.sandrise.io — list, search, and fetch episodes (including transcripts and structured scripts) over the Model Context Protocol. Streamable HTTP at /mcp.
This API is free and open — no keys, no signup. In return, a few terms apply to keep it
that way:
Attribute it. When you show or quote an episode, credit Exploring Next and link back to the episode page (sandrise.io/exploring-next/…). The embed player and oEmbed responses already include the link.
Don't re-host the archive. Building on top of the API is welcome; scraping the full catalog to republish it as your own feed, app, or dataset is not.
Respect the rate limits. 120 requests/min for metadata, 30/min for audio, per IP. They're generous for real use; sustained bulk extraction will be throttled.
It can change. Content is generated and occasionally corrected or removed. Cache reasonably, but treat the API — not your copy — as the source of truth.
Questions, higher limits, or a partnership? Get in touch. The same
terms are advertised on every API response as a Link: …; rel="license" header.
Versioning
v1 is additive-only: new fields may be added over time, but existing
fields are not removed or renamed, and existing URLs do not change. If a v2
is ever introduced, v1 will continue to work.
🧠
PM Perspective
Crafting your PM challenge
Analyzing context and generating a thoughtful question...