This page shows the exact payload your endpoint receives for each of the 12 webhook events. Every field is described once in the field reference at the bottom.
For what each event means and how to subscribe, see Webhooks and Register Webhook.
Bill events
bill.created
Sent when a new bill is created.
bill.completed
Sent when every report on the bill is finished and the bill moves to completed (or delivered).
bill.deleted
Sent when a bill is deleted. The payload carries identifiers only — no billData, no reportURL, no test list.
Report events
report.completed
Sent each time an individual test on the bill is marked complete, while the bill as a whole is still unfinished.
CRM events
All eight CRM events share the same shape.
lead.created
Sent when a lead is created in the CRM. This is the only CRM event where phase is lead.
booking.created
Sent when a booking is created directly, or when an existing lead is converted into a booking. In the conversion case leadID is unchanged and phase flips to booking.
Booking lifecycle events
The six events below track a home-collection booking from assignment through completion or cancellation. The body is identical in every case — only eventType differs.
booking.phlebotomist_sample_submitted also auto-creates the bill for that booking, so a bill.created delivery follows it, then report.completed and bill.completed for the same patient.
Field reference
Envelope
Present on every event.
Bill and report events
Patient data
bill.completed only. Every key below is always present; a detail the lab never recorded is sent as an empty string, never null or omitted. Values are sent exactly as the lab stored them, so treat them as free text unless noted.
age and date_of_birth are recorded independently. A patient can have an
age with no date of birth, and the two are not recalculated against each
other — use whichever your system needs, and prefer date_of_birth when both
are present.
patientData carries personal and health information, including government
identity numbers when the lab has recorded them. Store only the fields you
need, and keep them encrypted in transit and at rest.
CRM events