Event object
The Event is the envelope wrapper around every webhook delivery. It carries identifying metadata (event id, subscription id, correlation id) and a polymorphic data field whose shape depends on the eventType.
For scheduling events, data is a canonical Meetingmodel object — the same shape returned by the Platform API's /api/v1alpha1/scheduled-meetings endpoints. This is the point of the v2 payload version: partners who integrate against both the Platform API and webhooks write one Meeting mapper, not two.
The Event schema
{
"eventId": "wev_...",
"eventType": "scheduling.smartscheduler.scheduled",
"eventTimestamp": "2026-06-16T17:30:00Z",
"subscriptionId": "sub_...",
"orgId": "org_...",
"correlationId": "corr_...",
"attemptNumber": 1,
"deliveryTimestamp": "2026-06-16T17:30:01Z",
"payloadVersion": "v2",
"data": {
// For scheduling events: a canonical Meeting object.
// See /developer/v1alpha1/model/platform-api/scheduled-meeting
"id": "mtg_...",
"orgId": "org_...",
"host": { "userId": "usr_...", "email": "...", "firstName": "...", "lastName": "...", "displayName": "..." },
"attendee": { "...": "..." },
"smartScheduling": { "...": "..." },
"personalScheduling": null,
"teamScheduling": null,
"meetingAi": null,
"...": "... see Meeting model for the full field set"
}
}Fields
eventId string
Unique identifier for this event, prefixed wev_. Stable across delivery attempts — the same eventId is used for the initial delivery and every retry. Use this for idempotency in your handler: if you've already processed the id, skip the payload.
eventType string
The event type that triggered this delivery. See Event Types for the catalog.
eventTimestamp string
When the event occurred, ISO 8601 UTC. Distinct from deliveryTimestamp — the two differ by network + queue latency.
subscriptionId string
The webhook subscription this delivery is going to, prefixed sub_. Useful if your endpoint serves multiple subscriptions.
orgId string
Your organization's identifier, prefixed org_. Also present inside data.orgId on scheduling events; kept at the envelope level so partners routing across multiple orgs can filter without parsing the payload.
correlationId string
Shared across every delivery attempt for one event, prefixed corr_. Use this to correlate a retry in your logs with the original attempt. Also queryable through the delivery log endpoint.
attemptNumber number
1 for the initial delivery, 2 and up for retries. See Lifecycle for the retry policy.
deliveryTimestamp string
When this specific delivery attempt was sent, ISO 8601 UTC.
payloadVersion string
Currently always "v2" in v1alpha1. Distinguishes the canonical Meeting shape (v2) from the legacy nested meetingInfo shape (v1). Subscriptions created via POST /api/v1alpha1/webhook-subscriptions default to v2. Subscriptions created via the pre-v1alpha1 developer dashboard continue emitting v1 payloads — see v0.1 webhooks documentation for that shape.
Also carried on the outgoing HTTP request as X-Cirrus-Payload-Version: 2 so a consumer parsing raw HTTP without inspecting subscription metadata can still branch on version.
data object
The event-specific payload. Its shape is determined by eventType:
eventType | data shape |
|---|---|
scheduling.smartscheduler.*, scheduling.personalscheduling.*, scheduling.teamscheduling.* | Canonical Meetingmodel |
meetingai.* | Reserved for Meeting AI events. Payload shapes will be documented on the event-type pages as they become available. |
For scheduling events, presence of a feature sub-object on the meeting tells you which scheduling experience produced the booking: data.smartScheduling populated → Smart Scheduler; data.personalScheduling populated → personal scheduling; data.teamScheduling populated → team scheduling. There is no separate type discriminator — the sub-objects are self-identifying.