Zoom Session Events (SSE)
Real-time Server-Sent Event stream for live Zoom session bot status and transcript updates.
The Scribe API exposes a live event stream for active Zoom sessions. The stream delivers bot lifecycle updates and transcript segments in real time so the client does not need to poll.
Opening the Stream
GET /sessions/{session_id}/eventsThe endpoint requires the same provider-JWT authentication used by other Scribe session endpoints. Because an Authorization header is required, use fetch streaming rather than the browser EventSource API.
The response content type is text/event-stream.
Path Parameters
session_id
string (UUID)
The session to stream events for. Must be an active Zoom session owned by the authenticated provider.
Request Headers
Authorization
Yes
Provider JWT bearer token.
Last-Event-ID
No
The id of the last event the client received. When present, the server replays recent events from that offset so no frames are lost on reconnect.
Event Types
Each SSE frame is delivered as event: <type>\ndata: <json>\n\n. Frames include an id field that clients should store for reconnect replay.
bot_status
Bot lifecycle state change.
Yes, when state is done or error.
transcript_segment
A finalized transcript utterance.
No
interim_transcript
An in-progress (not yet final) transcript hypothesis for the same ordinal. Replaced by the subsequent transcript_segment with the same ordinal.
No
transcript_finalized
Emitted once when the full transcript is complete. Empty payload ({}).
No
ping
Keepalive frame with an empty payload ({}).
No
bot_status Payload
state
string
One of: joining, waiting_for_host, waiting_for_participant, playing_disclosure, listening, paused, idle, leaving, done, error.
reason
string or null
A machine-readable reason on non-happy-path transitions (e.g. join_timeout, upstream_unavailable).
When state is done or error, the stream closes immediately after the frame. Clients should stop reconnecting.
transcript_segment / interim_transcript Payload
ordinal
integer
Monotonically increasing segment index. Use this to deduplicate or replace interim with final.
speaker
string or null
Speaker label, when available.
text
string
The transcript text.
timestamp
string
Timestamp of the utterance.
Reconnect Behavior
If the connection drops, open a new GET request with Last-Event-ID set to the last received event id. The server replays recent events from that offset. The stream is stateless from the client's perspective - all replay state is managed server-side.
Error Responses
401
Missing or invalid authentication.
403
The authenticated provider does not own this session.
404
No live Zoom event stream exists. Returned for non-Zoom sessions, unknown session IDs, sessions that have already completed, or sessions without an active bot.
503
The live event stream is temporarily unavailable. Retry after a short delay.
If the upstream event source fails mid-stream, the server emits a terminal bot_status frame with state: "error" and reason: "upstream_unavailable", then closes the stream. The client should reconnect with its stored Last-Event-ID.
Example
Last updated
Was this helpful?

