Skip to Content
WebhooksEvents & Payloads

Events & Payloads

Every webhook delivery contains an event field and a payload with the event data. This page documents all available event types and their payloads.

Available Events

EventDescription
booking.createdA new booking was created
booking.cancelledA booking was cancelled by the host or guest
booking.rescheduledA booking was rescheduled to a new time
booking.approvedA pending booking was approved by the host
booking.declinedA pending booking was declined by the host
booking.noShowA booking was marked as no-show
booking.completedA booking was marked as completed

Common Payload Structure

All booking events share the same payload structure — a full representation of the booking:

{ "event": "booking.created", "createdAt": "2026-03-16T14:05:00Z", "payload": { "id": "bkg_xyz789", "eventTypeId": "evt_abc123", "eventTypeName": "30 Minute Call", "eventTypeSlug": "30min-call", "status": "Confirmed", "startTime": "2026-03-16T14:00:00Z", "endTime": "2026-03-16T14:30:00Z", "hostUserId": "usr_host123", "hostName": "Jane Doe", "hostEmail": "jane@example.com", "invitee": { "name": "Alex Johnson", "email": "alex@example.com", "phone": "+1-555-0123", "timezone": "America/New_York", "locale": "en", "notes": "I'd like to discuss the enterprise plan." }, "location": { "type": "GoogleMeet", "value": "https://meet.google.com/abc-defg-hij" }, "customFields": { "company": "Acme Inc.", "role": "Engineering Manager" }, "source": "BookingPage", "createdAt": "2026-03-16T14:05:00Z", "cancelledAt": null, "cancellationReason": null, "rescheduledFrom": null } }

Payload Fields

FieldTypeDescription
idstringUnique booking identifier
eventTypeIdstringEvent type identifier
eventTypeNamestringEvent type display name
eventTypeSlugstringEvent type URL slug
statusstringCurrent booking status
startTimestringMeeting start time (ISO 8601 UTC)
endTimestringMeeting end time (ISO 8601 UTC)
hostUserIdstringHost’s user identifier
hostNamestringHost’s display name
hostEmailstringHost’s email address
inviteeobjectGuest information
locationobjectMeeting location details
customFieldsobject | nullCustom field responses
sourcestringBooking source: BookingPage, EmbedWidget, API
createdAtstringWhen the booking was created
cancelledAtstring | nullWhen the booking was cancelled
cancellationReasonstring | nullReason provided for cancellation
rescheduledFromstring | nullOriginal booking ID if this is a rescheduled booking

Event-Specific Details

booking.created

Fired when a new booking is confirmed or enters pending approval state.

  • status will be Confirmed or PendingApproval
  • cancelledAt, cancellationReason, and rescheduledFrom will be null

booking.cancelled

Fired when a booking is cancelled by either the host or the guest.

  • status will be Cancelled
  • cancelledAt will contain the cancellation timestamp
  • cancellationReason may contain a reason if one was provided

booking.rescheduled

Fired when a booking is moved to a new time. This creates a new booking and cancels the old one.

  • rescheduledFrom will contain the original booking’s ID
  • The original booking will receive a booking.cancelled event

booking.approved

Fired when a host approves a booking that was in PendingApproval status.

  • status will change to Confirmed

booking.declined

Fired when a host declines a pending booking.

  • status will change to Declined

booking.noShow

Fired when a host marks a guest as a no-show after the meeting time has passed.

  • status will change to NoShow

booking.completed

Fired when a booking is marked as successfully completed.

  • status will change to Completed

Example: Handling Events

app.post('/webhooks/proximity', (req, res) => { const { event, payload } = req.body; switch (event) { case 'booking.created': console.log(`New booking from ${payload.invitee.email}`); // Add to CRM, send internal notification, etc. break; case 'booking.cancelled': console.log(`Booking ${payload.id} cancelled`); // Update CRM, free up resources, etc. break; case 'booking.rescheduled': console.log(`Booking rescheduled from ${payload.rescheduledFrom}`); // Update calendar, notify team, etc. break; default: console.log(`Unhandled event: ${event}`); } res.status(200).send('OK'); });
Last updated on