For the complete documentation index, see llms.txt. Any page on this site can be fetched as Markdown by appending .md to its URL.

Voice agentsLive conversations

Stream live conversation changes

GET
/v1/agent-media/live-conversations/stream

A server-sent events stream that pushes the full list whenever it changes. The connection stays open until you close it.

The first snapshot event carries the current state, so a client that only opens the stream needs no separate read. After that, an event arrives when a conversation starts, ends, or changes state — an unchanged list is never re-sent, so every event you receive is a real change. Comment lines (: keep-alive) arrive periodically to hold the connection open and carry no data; ignore them.

Read this with fetch and a streaming response body rather than EventSource, which cannot send an Authorization header.

Each event's data is JSON in which < and > are written as the escapes \u003c and \u003e. JSON.parse restores both characters, so parse the payload rather than matching against its raw text.

Authorization

bearerAuth
AuthorizationBearer <token>

A Tandem bearer token. Requests are scoped to the organization the token belongs to; no organization header is required.

In: header

Response Body

text/event-stream

application/json

curl -X GET "https://example.com/v1/agent-media/live-conversations/stream"
"event: snapshot\ndata: {\"conversations\":[{\"conversationId\":\"call-01J8Z\",\"channel\":\"voice\",\"agentId\":\"agent-01J7\",\"agentName\":\"Billing Bot\",\"ani\":\"+15552344141\",\"startedAt\":\"2026-08-21T10:00:00.000Z\",\"state\":\"live\",\"sentiment\":{\"polarity\":\"neutral\",\"escalation\":\"high\"}},{\"conversationId\":\"HhK2v9QqXk7bR3nT\",\"channel\":\"chat\",\"agentId\":\"agent-01J7\",\"agentName\":\"Billing Bot\",\"widgetName\":\"Storefront\",\"startedAt\":\"2026-08-21T09:41:00.000Z\",\"lastActivityAt\":\"2026-08-21T09:59:12.000Z\",\"state\":\"active\",\"sentiment\":{\"polarity\":\"positive\",\"escalation\":\"none\"}}],\"partial\":false}\n\n: keep-alive\n"
{  "error": "string",  "message": "string",  "limit": 0,  "length": 0,  "reason": "string"}
Empty