Events & streaming
Watch calls as they happen, and resume exactly where you left off.
Two streams, both server-sent events over plain HTTP with the same bearer token. The organization stream carries lifecycle events for the whole tenant; the per-call stream carries everything about one call, including the events that are far too frequent to push over HTTP — transcript segments and live voice updates. Every event carries an id, and reconnecting with `Last-Event-ID` replays exactly what was missed before the live feed continues, so a dropped connection costs nothing. The same events feed outbound webhooks, so a stream and a webhook tell you the same things in the same words.
Organization stream
Every non-stream-only event in the organization. Open it once and leave it open; heartbeats keep it alive through idle proxies.
/api/v1/eventsQuery parameters
| Parameter | Type | Description |
|---|---|---|
types | string | Comma-separated event types to narrow to. An unknown name is rejected. Example: |
lastEventId | string | Resume point. The `Last-Event-ID` header does the same thing. |
Responses
{"event": "call.ended","id": "1789525082142-0","data": {"type": "call.ended","organizationId": "7380…","callId": "5f1c…","occurredAt": "2026-09-15T14:07:44.101Z","data": {"status": "completed","durationSeconds": 184,"engine": "realtime"}}}
curl -X GET "https://voice.evryhealth.com/api/v1/events" \-H "Authorization: Bearer YOUR_API_KEY"
Call stream
Everything happening on one call: lifecycle, transcript segments as they are finalized, who the analyzer thinks is speaking, and how the call sounds. The stream stays useful after the call ends — the after-call passes publish here too, so final voice insights arrive minutes later on the same connection.
/api/v1/calls/{callId}/eventsPath parameters
| Parameter | Type | Description |
|---|---|---|
callIdrequired | string | Platform call id. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
types | string | Comma-separated event types. |
lastEventId | string | Resume point. |
Responses
{"event": "intelligence.speaker.identified","id": "1789525083001-0","data": {"type": "intelligence.speaker.identified","callId": "5f1c…","data": {"status": "returning","name": "Maria","timesSpokenBefore": 3,"source": "live"}}}
curl -X GET "https://voice.evryhealth.com/api/v1/calls/{callId}/events" \-H "Authorization: Bearer YOUR_API_KEY"
Event catalog
Every event type, what it means, and whether it can be delivered by webhook. Served from the same constant the publishers and the delivery worker read, so it cannot drift from what actually fires.
/api/v1/events/typesResponses
{"data": {"events": [{"type": "call.started","description": "The call connected.","delivery": ["stream","webhook"]},{"type": "call.transcript.updated","description": "A transcript segment was finalized.","delivery": ["stream"]}]},"meta": {"requestId": "req_…"}}
curl -X GET "https://voice.evryhealth.com/api/v1/events/types" \-H "Authorization: Bearer YOUR_API_KEY"