WebSocket Events

Reference for all WebSocket message types and their formats.

transcript.mutable

Live transcript segments that may be updated as the AI refines its transcription.

{
  "type": "transcript.mutable",
  "meeting": {
    "id": 123
  },
  "payload": {
    "segments": [
      {
        "text": "Hello everyone",
        "speaker": "Alice",
        "language": "en",
        "start": 0,
        "end_time": 2.5,
        "absolute_start_time": "2024-01-01T12:00:00Z",
        "absolute_end_time": "2024-01-01T12:00:02Z",
        "session_uid": "session-123",
        "updated_at": "2024-01-01T12:00:02Z"
      }
    ]
  },
  "ts": "2024-01-01T12:00:02Z"
}
transcript.finalized

Final transcript segments that will not be updated further.

{
  "type": "transcript.finalized",
  "meeting": {
    "id": 123
  },
  "payload": {
    "segments": [
      {
        "text": "Hello everyone, welcome to the meeting.",
        "speaker": "Alice",
        "language": "en",
        "start": 0,
        "end_time": 3.2,
        "absolute_start_time": "2024-01-01T12:00:00Z",
        "absolute_end_time": "2024-01-01T12:00:03Z",
        "session_uid": "session-123",
        "updated_at": "2024-01-01T12:00:03Z"
      }
    ]
  },
  "ts": "2024-01-01T12:00:03Z"
}
meeting.status

Meeting status updates. Sent when the meeting status changes. This is the primary way to track bot progress from creation to completion.

{
  "type": "meeting.status",
  "meeting": {
    "platform": "google_meet",
    "native_id": "abc-defg-hij"
  },
  "payload": {
    "status": "active"
  },
  "ts": "2024-01-01T12:00:05Z"
}

Status Flow

The bot progresses through these statuses in order:

  1. requested - Bot creation requested, container starting up
  2. joining - Bot is connecting to the meeting platform
  3. awaiting_admission - Bot is in the meeting waiting room, waiting for host to admit
  4. active - Bot is admitted and actively transcribing
  5. completed - Transcription finished (meeting ended or bot stopped)
  6. failed - Bot failed to join or transcription error occurred

Status Descriptions

requested:
Bot container is being created and initialized. Usually takes 10-30 seconds.
joining:
Bot is launching the browser and connecting to the meeting platform. Usually takes 5-15 seconds.
awaiting_admission:
Bot is in the meeting waiting room. The meeting host must admit the bot. This can take any amount of time depending on when the host checks the waiting room.
active:
Bot is admitted to the meeting and actively transcribing audio. You will receive transcript.mutable and transcript.finalized events during this state.
completed:
Transcription has finished. The meeting ended or the bot was stopped. Final transcripts are available via REST API.
failed:
An error occurred. Common reasons: admission timeout, meeting ended before bot joined, connection failure, or bot was removed.

Example: Status Progression

// 1. Bot created
{
  "type": "meeting.status",
  "payload": { "status": "requested" },
  "ts": "2024-01-01T12:00:00Z"
}

// 2. Bot connecting
{
  "type": "meeting.status",
  "payload": { "status": "joining" },
  "ts": "2024-01-01T12:00:15Z"
}

// 3. Bot in waiting room
{
  "type": "meeting.status",
  "payload": { "status": "awaiting_admission" },
  "ts": "2024-01-01T12:00:30Z"
}

// 4. Bot admitted and transcribing
{
  "type": "meeting.status",
  "payload": { "status": "active" },
  "ts": "2024-01-01T12:01:00Z"
}

// 5. Meeting ended
{
  "type": "meeting.status",
  "payload": { "status": "completed" },
  "ts": "2024-01-01T13:00:00Z"
}
subscribed

Confirmation message sent after successfully subscribing to meetings.

{
  "type": "subscribed",
  "meetings": [
    123,
    124
  ]
}
pong

Response to ping messages. Confirms the connection is alive.

{
  "type": "pong"
}
error

Error messages sent when something goes wrong.

{
  "type": "error",
  "message": "Invalid meeting ID"
}