Fires when an abnormal lab result is received and abnormal-follow-up is enabled for the affiliate. targetEntity is the LabOrder. The eventType is lab_order_abnormal_result_received.
Field guarantees
| Field | Guarantee |
|---|---|
eventData.labOrderId, labName, interpretation, externalOrderId, providerEventType, providerOrderStatus, latestProviderEventStatus, reportedAt, webhookPayload (v1 eventData) | ✅ Always present when the event fires |
| Event firing | ⚠️ Conditional — only when the affiliate has abnormal-follow-up enabled |
interpretation (critical vs abnormal) in v2 | ⛔ Not delivered as a field — but the event type already identifies which result fired, so no signal is lost |
v2 lab reference (lab_order_id, lab_order_status) | ✅ Always present |
interpretationis v1-only. As with critical results, v2 cannot distinguish abnormal from critical. Keep this webhook on v1 if you needinterpretation.
v1 payload (legacy)
Identical shape to Critical Lab Result Received, with interpretation: "abnormal". ownerEntity/targetEntity abbreviated.
{
"ownerEntityModel": "Patient",
"targetEntityModel": "LabOrder",
"deleted": false,
"ownerEntity": { "id": "pat::50c75435-xxxx-xxxx-xxxx-25220febd9cf", "firstName": "<PATIENT_FIRST_NAME>", "lastName": "<PATIENT_LAST_NAME>", "…": "full patient document" },
"targetEntity": { "id": "lbo::3162cd49-xxxx-xxxx-xxxx-c8bb185b979a", "status": "completed", "labOrderId": "OIFUJO49W5", "…": "full lab order" },
"eventTitle": "Abnormal Lab Result From Quest Diagnostics",
"eventDescription": "An abnormal lab result was reported...",
"eventType": "lab_order_abnormal_result_received",
"eventData": {
"labOrderId": "OIFUJO49W5",
"labName": "Quest Diagnostics",
"interpretation": "abnormal",
"externalOrderId": "ext-order-88213",
"providerEventType": "order.completed",
"providerOrderStatus": "completed",
"latestProviderEventStatus": "completed",
"reportedAt": "2025-06-19T16:40:55.000Z",
"webhookPayload": { "event_type": "order.completed", "data": { "…": "raw provider payload" } }
},
"_id": "event::5b2b525f-xxxx-xxxx-xxxx-e79814e61bb2",
"createdAt": "2025-06-19T16:41:12.108Z",
"updatedAt": "2025-06-19T16:41:12.108Z",
"id": "event::5b2b525f-xxxx-xxxx-xxxx-e79814e61bb2"
}eventData field | Type | Always? | Notes |
|---|---|---|---|
interpretation | string | ✅ | abnormal for this event |
| (all other fields) | mixed | ✅ | Same as the critical-result event |
v2 payload
Sanitized envelope. Note the two lab identifiers are different values: v1 eventData.labOrderId carries the lab's external order number (e.g. OIFUJO49W5), while v2 lab_order_id is TelegraMD's internal lab-order reference (lbo::…), resolved from the event's target entity — it is a resolution, not a rename. The rest of eventData isn't on the LAB allowlist.
{
"event_type": "lab_order_abnormal_result_received",
"event_id": "event::5b2b525f-xxxx-xxxx-xxxx-e79814e61bb2",
"api_version": "2026-08-09",
"timestamp": "2026-05-30T14:00:00.000Z",
"affiliate_id": "aff::81253635-xxxx-xxxx-xxxx-c068ba573d7d",
"patient_id": "pat::50c75435-xxxx-xxxx-xxxx-25220febd9cf",
"patient_external_id": "ext-patient-123",
"patient_marketing_consent": false,
"is_returning_patient": true,
"lab_order_id": "lbo::3162cd49-xxxx-xxxx-xxxx-c8bb185b979a",
"lab_order_status": "completed"
}| Field | Delivered in v2 | Notes |
|---|---|---|
| Envelope + patient identity | ✅ | |
lab_order_id, lab_order_status | ✅ | Resolved from the lab order |
interpretation, labName, provider metadata | ⛔ | Not on the allowlist |
Completing the loop on v2. Full lab-order detail — the external requisition id (labOrderId), lab name, results, and a status history with dates — is retrievable viaGET /labOrders/:idusing the deliveredlab_order_id. The endpoint is scoped to your affiliate.
