Docs
REST API v1

Webhook event

The event envelope and data sent to your receiver.

Envelope

FieldTypeMeaning
idstringStable event ID. Use it to deduplicate processing.
typestringOne of the supported events below.
projectIdstringOwning project.
environmentIdstringOwning environment.
occurredAtISO datetimeEvent time in UTC.
dataJSON objectFields specific to the event.
JSON
{
  "id": "event_example",
  "type": "participant.joined",
  "projectId": "project_example",
  "environmentId": "environment_example",
  "occurredAt": "2026-01-01T12:00:00.000Z",
  "data": {
    "roomId": "room_example",
    "participantId": "participant_example",
    "sessionId": "session_example",
    "boundary": "observed"
  }
}

Event types

EventWhen it is emittedData
room.createdA room is created.roomId and boundary.
room.startedThe room lifecycle records its start.roomId and boundary.
room.endedThe room lifecycle records its end.roomId and boundary.
participant.joinedA participant establishes their first signaling connection.roomId, participantId, sessionId and boundary.
participant.leftThe participant lifecycle records a departure.roomId, participantId, boundary and sessionId when available.
participant.reconnectedThe same session establishes another signaling connection.roomId, participantId, sessionId and boundary.
track.publishedA media publication is created.roomId and track.
track.unpublishedA media publication is removed.roomId and track.
connection.degradedQuality moves from excellent/good to poor/critical/lost.roomId, participantId, previousQuality and quality.
connection.recoveredQuality moves from poor/critical/lost to excellent/good.roomId, participantId, previousQuality and quality.

Lifecycle boundary is observed or lease_bound. A lease-bound event uses the service lease boundary when an exact disconnect time is unavailable.

Track fields

The track object contains id, roomId, participantId, sessionId, type, state, priority, metadata, publishedAt and unpublishedAt. The last field is null until the track is unpublished.

Supported room media types are audio, camera_video, screen_video and screen_audio. Track states are published, paused, resumed and unpublished. Pause/resume is represented in the protocol types but is not currently signaled by room mute controls.

Delivery and replay

The event ID and body stay the same across retries and explicit replay. The signed timestamp and replay count identify the delivery attempt context. Delivery order is not guaranteed.

Verify the signature before processing. Subscribe only to events your receiver handles, and store the event ID with its processing result.