Docs

Events and payloads

The nine active workspace events, their public JSON envelope and the fields to use in your integration.

Available events

EventMeaning
lead.capturedA lead with contact details was saved. It may not have a booking.
lead.abandonedAn eligible captured form inquiry timed out without booking.
lead.convertedA previously abandoned lead later booked.
booking.createdA booking was created; it can still require guest confirmation.
booking.rescheduledA booking was moved.
booking.cancelledA booking was cancelled.
booking.confirmed_by_inviteeThe guest explicitly confirmed a booking requiring confirmation.
booking.expiredAn unconfirmed booking expired.
booking.completedThe scheduled appointment ended. This does not establish attendance or an outcome.

lead.disqualified and booking.no_show are reserved and cannot currently be selected.

Abandoned-form capture applies only to eligible Form and calendar links with capture enabled. Calendar-first and headless leads do not produce lead.abandoned. A lead saved because the Free booking limit blocked a booking is not an abandoned-form event. If contact capture happens with a booking, lead.captured is created before booking.created.

Public envelope

The public webhook is an immutable event snapshot, not an internal database event. Its outer field names use snake case; nested lead and booking fields use the names shown below. Do not change their casing when mapping them.

FieldMeaning
event_idStable identity of this event; deduplicate on this signed body field.
typeOne of the nine active event names.
created_atUTC timestamp of the event, not the current delivery attempt.
data.actorinvitee, host or system.
data.schema_versionPublic event schema version, currently 1.
data.workspace_idWorkspace that owns the event.
data.form_versionVersion of the form represented by the snapshot.
data.consentBoolean follow-up consent at event time. It is not tracking or reminder consent.
data.leadLead identifiers and available contact/status fields.
data.bookingBooking snapshot when present; required for booking events.
data.answersForm answers keyed by question identifier.
data.attributionCaptured campaign and source fields.
data.testtrue on a synthetic test event; normally absent.

Example booking event

The following is an illustrative payload with invented identifiers and contact details. The ID strings are examples, not values to use in API calls.

{
  "event_id": "ev_example",
  "type": "booking.created",
  "created_at": "2026-11-04T10:00:00.000Z",
  "data": {
    "actor": "invitee",
    "schema_version": 1,
    "workspace_id": "ws_example",
    "form_version": 1,
    "consent": false,
    "lead": {
      "id": "lead_example",
      "workspaceId": "ws_example",
      "funnelId": "funnel_example",
      "name": "Alex Example",
      "email": "alex@example.com",
      "phone": null,
      "status": "booked",
      "createdAt": "2026-11-04T10:00:00.000Z"
    },
    "booking": {
      "id": "booking_example",
      "workspaceId": "ws_example",
      "funnelId": "funnel_example",
      "hostId": "host_example",
      "leadId": "lead_example",
      "start": "2026-11-10T09:00:00.000Z",
      "end": "2026-11-10T09:30:00.000Z",
      "timeZone": "Europe/Vienna",
      "inviteeTimeZone": "Europe/London",
      "status": "confirmed"
    },
    "answers": { "topic": "First consultation" },
    "attribution": { "utm_source": "newsletter", "utm_campaign": "november" }
  }
}

For a lead-only event, data.booking may be absent. Contact fields and timestamps can be omitted when unavailable; phone and team references can be null. Use the WebhookEvent schema for the full contract. Do not interpret absent fields as instructions to erase CRM data.

Important boundaries

Payloads do not contain booking action tokens, reschedule/cancellation links or Google Meet links. Retrieve current booking details through the API with the appropriate scopes if needed.

A snapshot's consent must not be replaced with a guess from its status or from today's contact row. Do not automatically message an abandoned lead with data.consent=false.

Test events must not create real contacts, deals or outbound messages. Retry/replay preserves the event ID and body; follow delivery and ordering rules before treating multiple events as a strict timeline.

On this page