Events

Booking events

booking.created, booking.rescheduled and booking.canceled.

All three carry the same booking object. The two change events add one field describing what changed.

The booking object

{
  "booking": {
    "id": "5e9c…",
    "chatbot_id": 17,
    "conversation_id": 8214,
    "name": "Ada Lovelace",
    "email": "[email protected]",
    "event_label": "Intro call",
    "provider": "native",
    "external_uid": "abc123…",
    "start_at": "2026-09-02T14:00:00.000Z",
    "end_at": "2026-09-02T14:30:00.000Z",
    "attendee_timezone": "Europe/Dublin",
    "status": "confirmed",
    "created_at": "2026-08-26T10:05:00.000Z",
    "meet_url": "https://meet.google.com/…"
  }
}
FieldNotes
providernative for our own scheduling on your Google Calendar, calcom for a Cal.com connection.
external_uidThe Google event id, or the Cal.com booking uid.
start_at / end_atUTC. Use attendee_timezone to render the visitor's local time.
meet_urlPresent for native bookings with a Google Meet location; null otherwise.
statusconfirmed or canceled.

booking.created

Fires when a meeting is booked, whether the visitor picked a slot from the booking card or asked the agent to book it in conversation.

booking.rescheduled

Adds the previous start so you can update an existing record rather than guess:

{
  "booking": { "…": "…" },
  "previous_start_at": "2026-09-01T09:00:00.000Z"
}

The id does not change on a reschedule — it is the same booking at a new time.

booking.canceled

Adds the reason, when one was given:

{
  "booking": { "…": "…" },
  "cancel_reason": "Something came up"
}

cancel_reason is null when the booking was cancelled without one. The booking object's status reads canceled.

For native bookings we already email the visitor a confirmation, a reschedule notice, a cancellation and 24-hour and 1-hour reminders. You do not need a webhook to cover that — use these events for your systems, not for the visitor's messages.