Room
A Room is a shared audio resource identified by room_id. The full resource
returned by the get method reflects room playback and a room
Recording.
When to use
Use a Room to connect two or more Sessions in one conversation, such as a caller and an agent or a group call.
Room lifecycle
Use the events on this page to react to creation, confirmed deletion, membership changes, and room playback outcomes. Use the get method to reconcile the latest Room state after a missed event.
Methods
The list method returns a RoomSummary projection for each room. Use the get
method when you need the complete Room representation shown below.
Enable member voice-activity events
Room voice-activity events are opt-in. To receive
room.member.voice_activity_changed
events when members start and stop talking, create the Room with
voice_activity_events set to true:
If you omit voice_activity_events or set it to false, the Room does not emit
voice-activity events. The voice_activity_events property on the Room resource
reports the value selected when the Room was created.
Resource representation
Properties
Lifecycle, member, and playback events
Use room events to track room lifecycle, membership, and playback.
Event ordering: All room.* events for this Room, including events for
different members, are delivered in production order. Failures hold this Room,
not other Rooms. See Ordering guarantees.
Event envelope: Every room event also includes a timestamp: the emission
time as an RFC 3339 / ISO 8601 UTC string, such as
"2026-06-28T14:30:00.000Z". Treat this value as event-time metadata, not as a
total-order key.
Delivery requests carry W3C trace context in their headers.
Member identity: Room membership events identify a member by session_uuid.
For an inbound Session, the caller number is available on its session.created
webhook. For an outbound Session, use the caller number from your dial request.
room.created
The platform emits this event when POST /api/v1/rooms creates a room.
room.deleted
The platform emits this event after processing a room deletion request.
DELETE /api/v1/rooms/{room_id} first returns 202 Accepted with
{"room_id": "...", "status": "deleting"}. This response only acknowledges
that the request was admitted.
The event arrives when the platform confirms that the room is gone
(reason: "closed") or when that confirmation times out (reason: "timeout").
The reason field is always present.
room.member.joined
The platform emits this event after a call joins a room. The join is
asynchronous: POST /api/v1/rooms/{room_id}/members
returns 202 Accepted with status "joining" when it accepts the request. Wait
for room.member.joined to confirm that the member is in the room.
room.member.left
The platform emits this event when a call leaves a room through
DELETE /api/v1/rooms/{room_id}/members/{uuid}, is
kicked, or hangs up.
The reason value identifies how the member left:
"hangup"means the member’s channel hung up."removed"means an explicit leave or kick through the room leave endpoint."orphan"means the platform detected that the member’s call had already gone away, typically because of a crash or dropped connection, and removed the stale membership. Treat this as an abnormal disconnect, not a clean leave.
room.member.muted
The platform emits this event when the room/mute command mutes a member.
room.member.unmuted
The platform emits this event when the room/unmute command unmutes a member.
room.member.voice_activity_changed
The platform emits this event when a room member’s
voice activity detection (VAD)
state changes. talking: true marks speech onset, and talking: false marks the
return to silence. During an active conversation, expect frequent events and
debounce them in your application.
VAD state is delivered via this webhook. The member object returned by GET /api/v1/rooms/{room_id}/members/{uuid} contains only {uuid, muted}.
room.playback.ended
The platform emits this terminal event exactly once when room playback completes
naturally or stops through the API. For a multi-source playlist, the platform
emits one event after every source completes, not one event per source. Playback
failures and start-confirmation timeouts emit room.playback.failed instead.
room.playback.failed
The platform emits this event when room playback fails. A failure occurs when the platform reports a playback error, any source in a multi-source playlist fails, or the platform does not receive start confirmation within 10 seconds.
One failed source fails the entire operation. Playback that starts within the
10-second window can continue for longer without failing. This event resets
playback_status to "stopped" so the room can accept a new play.
Triggered by
These events are produced by the following endpoints:
room.created— POST /rooms.room.deleted— automatic: fires on confirmed teardown after DELETE /rooms/{room_id} returns202 Accepted(reason: "closed"), or withreason: "timeout"if confirmation never arrives.room.member.joined— POST /rooms/{room_id}/members (asynchronous).room.member.left— DELETE /rooms/{room_id}/members/{uuid}, or automatic on hangup.room.member.muted— room/mute.room.member.unmuted— room/unmute.room.member.voice_activity_changed— automatic: VAD state change.room.playback.ended— terminal: fires once when playback completes naturally or is stopped through the API.room.playback.failed— automatic: fires on a playback failure or when the playback watchdog times out.
For room deletion, member volume, and room playback play, pause, resume, stop,
and volume commands, only the request’s 202 Accepted response acknowledges
admission.