Skip to content

Webhook events

How to receive and verify them: Webhooks and Verifying signatures. Every delivery is a JSON POST with this envelope; data is per event and always starts with the org.

{
"id": "msg_2f1c0e9d8b7a4c6e9a3b5d7f1e2c4a6b",
"type": "booking.created",
"version": "2026-10-20",
"timestamp": "2026-11-03T14:59:58.120Z",
"data": { }
}

id is also the webhook-id header and is the same on every retry and redelivery, so a receiver can de-duplicate on it. The payload is rendered as the API version pinned on the endpoint when it was created (version; also sent as Quorum-Version).

Retries. A delivery that does not get a 2xx within 10 seconds is retried after 5 seconds, 5 minutes, 30 minutes, 2 hours, 5 hours, 10 hours, 10 hours: 8 tries over about 27 hours. Redirects are not followed. An endpoint that has accepted nothing for 5 days (or answers 410 Gone) is switched off and the org’s admins are emailed.

Someone booked a team’s link. Sent when the time is reserved; a booking whose calendar event can’t be made follows with booking.cancelled (reason calendar_error).

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"booking": {
"id": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"linkId": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"start": "2026-11-03T15:00:00.000Z",
"end": "2026-11-03T15:30:00.000Z",
"timezone": "America/New_York",
"status": "confirmed",
"booker": {
"name": "Alex Rivera",
"email": "alex@example.com"
},
"people": [
{
"userId": "11111111-2222-4333-8444-555555555555",
"role": "host"
},
{
"userId": "66666666-7777-4888-8999-aaaaaaaaaaaa",
"role": "member"
}
],
"meetUrl": "https://meet.google.com/abc-defg-hij"
}
}
}

A booking moved to a new time, by the booker or the team. A move the calendar refused is reverted and sent again with the original time.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"booking": {
"id": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"linkId": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"start": "2026-11-04T16:00:00.000Z",
"end": "2026-11-04T16:30:00.000Z",
"timezone": "America/New_York",
"status": "confirmed",
"booker": {
"name": "Alex Rivera",
"email": "alex@example.com"
},
"people": [
{
"userId": "11111111-2222-4333-8444-555555555555",
"role": "host"
},
{
"userId": "66666666-7777-4888-8999-aaaaaaaaaaaa",
"role": "member"
}
],
"meetUrl": "https://meet.google.com/abc-defg-hij"
},
"previous": {
"start": "2026-11-03T15:00:00.000Z",
"end": "2026-11-03T15:30:00.000Z"
}
}
}

A booking was cancelled. reason is booker_or_host (cancelled through Quorum), calendar_deleted (the event was deleted in the calendar) or calendar_error (the booking could not be put on the calendar).

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"booking": {
"id": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"linkId": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"start": "2026-11-03T15:00:00.000Z",
"end": "2026-11-03T15:30:00.000Z",
"timezone": "America/New_York",
"status": "cancelled",
"booker": {
"name": "Alex Rivera",
"email": "alex@example.com"
},
"people": [
{
"userId": "11111111-2222-4333-8444-555555555555",
"role": "host"
},
{
"userId": "66666666-7777-4888-8999-aaaaaaaaaaaa",
"role": "member"
}
],
"meetUrl": "https://meet.google.com/abc-defg-hij"
},
"reason": "booker_or_host"
}
}

A pool member on a booking was replaced by someone else from the same pool.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"booking": {
"id": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"linkId": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"start": "2026-11-03T15:00:00.000Z",
"end": "2026-11-03T15:30:00.000Z",
"timezone": "America/New_York",
"status": "confirmed",
"booker": {
"name": "Alex Rivera",
"email": "alex@example.com"
},
"people": [
{
"userId": "11111111-2222-4333-8444-555555555555",
"role": "host"
},
{
"userId": "66666666-7777-4888-8999-aaaaaaaaaaaa",
"role": "member"
}
],
"meetUrl": "https://meet.google.com/abc-defg-hij"
},
"from": "66666666-7777-4888-8999-aaaaaaaaaaaa",
"to": "99999999-8888-4777-8666-555555555555",
"reason": "swapped"
}
}

A team poll was created.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"poll": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"title": "Fall planning",
"publicId": "k3j9x2m1",
"creatorId": "11111111-2222-4333-8444-555555555555",
"deadline": "2026-10-30T22:00:00.000Z"
}
}
}

Someone answered a team’s poll (or changed their answers). Respondent emails are included, as they are for the team’s members.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"poll": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"title": "Fall planning"
},
"response": {
"id": "0f1e2d3c-4b5a-4968-8776-655443322110",
"name": "Alex Rivera",
"email": "alex@example.com",
"isMember": false
}
}
}

A team poll was finalized at one of its times.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"poll": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"title": "Fall planning",
"publicId": "k3j9x2m1",
"creatorId": "11111111-2222-4333-8444-555555555555",
"deadline": "2026-10-30T22:00:00.000Z"
},
"option": {
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"start": "2026-11-05T19:00:00.000Z"
}
}
}

A week of a recurring poll series was scheduled: its meeting was booked, or kept or moved by the owner.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"series": {
"id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"title": "Weekly sync"
},
"week": {
"startDate": "2026-11-02",
"start": "2026-11-03T15:00:00.000Z",
"end": "2026-11-03T16:00:00.000Z"
}
}
}

A series was paused. reason is owner, required_left, host_left or event_deleted.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"series": {
"id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"title": "Weekly sync"
},
"reason": "owner",
"note": null
}
}

A booking link was created for a team.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"link": {
"id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"slug": "intro-call",
"title": "Intro call",
"durationMinutes": 30
}
}
}

A team’s booking link was changed.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"link": {
"id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"slug": "intro-call",
"title": "Intro call (30 min)",
"durationMinutes": 30
}
}
}

A team’s booking link was deleted. Its past and upcoming bookings stay.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"team": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"slug": "advising"
},
"link": {
"id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"slug": "intro-call",
"title": "Intro call",
"durationMinutes": 30
}
}
}

Someone joined the org.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"member": {
"userId": "11111111-2222-4333-8444-555555555555",
"name": "Sam Chen",
"email": "sam@example.com",
"role": "member"
}
}
}

Someone left the org, or was removed from it.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"member": {
"userId": "11111111-2222-4333-8444-555555555555",
"name": "Sam Chen",
"email": "sam@example.com",
"role": "member"
}
}
}

Sent by the Send test event button and quorum orgs webhooks test.

{
"data": {
"org": {
"id": "6f0b2c1e-7a54-4d0e-9a3a-0c1f6d2b8e11",
"handle": "devdogs"
},
"message": "This is a test event from Quorum."
}
}