The lab_order.updated* webhook event is triggered when:
partial_results, results_ready)results_amended)*Available in the US only
It does not fire on lab purchases, appointment scheduling, or other state transitions like purchased, processing, schedule_appointment, or interpretation_shared.
| Status | Triggers lab_order.updated? | Notes |
|---|---|---|
| not_purchased | ❌ | Internal state only; returned in API |
| purchased | ❌ | Use order.placed webhook |
| schedule_appointment | ❌ | Only relevant for labs that require phlebotomy |
| upcoming_appointment | ❌ | Follows patient scheduling |
| processing | ❌ | Sample received but no results yet |
| partial_results (results_received) | ✅ | Some results available |
| results_ready (all_results_received) | ✅ | All results available |
| results_amended | ✅ | One or more results updated |
| interpretation_shared | ❌ (unless amended) | May be reached via auto-share settings |
This webhook does not trigger on every state change. If your integration depends on showing lab status in real-time, you must poll the lab_order endpoint for state changes outside of result readiness.
| Scopes needed: | patients:order_history |
| Event payload: | a subset of the lab order object |
"event_payload": {
"event": {
"id": "x5xxxxx8-92x7-4xxx-9x0x-345x404x94x1",
"type": "lab_order.updated",
"created_at": "2025-01-01T05:00:00.000Z",
"clinic_id": "xx7x357x-9x36-xxxx-x553-7x3xx398xxx",
"data": {
"lab_order": {
"id": "x0x50x8x-711x-43xx-85xx-5xx80365xxxx",
"practitioner_id": "bad7f9c6-dfd5-4227-9611-aac387331801",
"patient_id": "005aabb2-d97c-4dec-96a6-1e5f33508254",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@mail.com",
"status": "results_received"
}
}
}
}