Skip to content
GurukulLiveDevelopers
Build

Event catalog

Server-side webhook events (v1) and the browser-side events of the embedded room. Webhook payload types are exported from @vmeet/types.

Webhook envelope

Every webhook body has the same envelope; data depends on type.

json
{
  "id": "evt_01JA7XQ4…",            // identical across retries and redeliveries — dedupe on it
  "type": "participant.joined",
  "createdAt": "2026-10-14T09:31:12.000Z",
  "organizationId": "org_123",
  "data": {
    "meetingId": "cm2x8k3…",
    "externalMeetingId": "algebra-10a-2026-10-14",
    "kind": "MEETING",
    "participantId": "cm2p…",
    "user": { "id": "cm2u…", "externalId": "student-1001", "name": "Aarav P.", "role": "STUDENT" },
    "device": "android",
    "joinedAt": "2026-10-14T09:31:10.000Z"
  }
}

Webhook events

Subscribe to individual types, or to * for everything (including types added later). Sample payloads for each type are in the webhooks guide.

Meetings & classes

TypeWhendata
meeting.createdA meeting or live class was scheduled/createdWebhookMeetingData
meeting.updatedTitle, schedule or settings changedWebhookMeetingData
meeting.startedThe host or first participant started the roomWebhookMeetingData
meeting.endedThe room ended (host ended it, or everyone left)WebhookMeetingData
meeting.cancelledA scheduled meeting or class was cancelledWebhookMeetingData

Participants

TypeWhendata
participant.joinedSomeone joined the roomWebhookParticipantData
participant.leftSomeone left (includes durationSeconds)WebhookParticipantData
participant.waitingSomeone is waiting in the waiting roomWebhookWaitingRoomData
participant.admittedA host admitted someone from the waiting roomWebhookWaitingRoomData

Recordings

TypeWhendata
recording.startedCloud recording startedWebhookRecordingData
recording.readyThe recording is processed and playableWebhookRecordingData
recording.failedRecording or processing failed (failureReason)WebhookRecordingData
recording.deletedA recording was deleted (deletedAt)WebhookRecordingData

Transcripts

TypeWhendata
transcript.readyThe AI transcript of a recording is availableWebhookTranscriptData

insights

TypeWhendata
insights.readyAI notes (summary, chapters, quiz draft) of a recording are readyWebhookInsightsData

Attendance

TypeWhendata
attendance.finalizedAttendance for a class session is finalWebhookAttendanceData

Users

TypeWhendata
user.createdAn org member was provisionedWebhookUserData
user.updatedAn org member’s name, role or metadata changedWebhookUserData
user.deactivatedAn org member was deactivatedWebhookUserData

Enrollments

TypeWhendata
enrollment.createdA student was enrolled in a class or batchWebhookEnrollmentData
enrollment.removedA student was removed from a class or batchWebhookEnrollmentData

Classes

TypeWhendata
class.createdAn academic class was createdWebhookClassData
class.updatedAn academic class changedWebhookClassData

poll

TypeWhendata
poll.closedunknown

question

TypeWhendata
question.answeredunknown

webhook.test is sent only by “Send test event” and cannot be subscribed to. Participant events include the device (web, android, ios, unknown), and participant.left includes durationSeconds.

Embedded room events (browser)

Delivered with postMessage to your page (or to your native app's WebView bridge). Payloads and commands are described in the embedding guide.

EventWhen
readyThe embedded room (or recording player) loaded and accepted your origin
joinedYour user connected to the class
leftYour user left, was removed, joined elsewhere, or the connection failed
participant-joined / participant-leftSomeone else joined or left
recording-started / recording-stoppedCloud recording state changed
hand-raisedA hand went up or down
meeting-endedThe host ended the meeting for everyone
errorSomething went wrong (code, message, fatal)
play / pause / endedRecording player only

Browser events are for your UI; use webhooks for anything you store (attendance, billing, analytics) — they are signed, retried and do not depend on the user's tab staying open.