Fired by the automated titration engine when a rule evaluates a patient's questionnaire responses. targetEntity is the Order. The eventType is order_product_variation_transitioned.
Field guarantees
| Field | Guarantee |
|---|---|
eventData titration fields | ⚠️ Conditional — shape varies by titration direction; some firings omit configName/statusTransition, others send {} |
| Titration context in v2 | ⛔ Not delivered — none on the ORDER allowlist |
v2 order reference (order_id, order_status, product_variation_ids) | ✅ Always present |
Titration context is v1-only. v2 shows what the current product variations are (product_variation_ids) but not why they changed. Keep this webhook on v1 for the titration detail.
v1 payload (legacy)
Example of the none direction (order flagged, no variation change). Other directions include additional fields describing the change.
{
"_id": "event::1c2d3e4f-xxxx-xxxx-xxxx-5a6b7c8d9e0f",
"ownerEntity": "pat::117eb3b9-xxxx-xxxx-xxxx-9424274b5425",
"ownerEntityModel": "Patient",
"targetEntity": "order::e5576e92-xxxx-xxxx-xxxx-3c3173a3fb82",
"targetEntityModel": "Order",
"eventTitle": "Titration Safety Check: Semaglutide Dose Escalation",
"eventDescription": "Order flagged for review based on questionnaire responses. No product variation changes were applied. Status transition: requires_admin_review.",
"eventType": "order_product_variation_transitioned",
"eventData": {
"titrationConfig": "titrconf::2f3e4d5c-xxxx-xxxx-xxxx-6b7a8c9d0e1f",
"titrationDirection": "none",
"configName": "Semaglutide Dose Escalation",
"statusTransition": "requires_admin_review",
"questionnaireId": "qnr::7a8b9c0d-xxxx-xxxx-xxxx-1e2f3a4b5c6d",
"locationId": "loc::identification-questionnaire:2"
},
"deleted": false,
"createdAt": { "$date": "2026-01-01T12:00:00.000Z" },
"updatedAt": { "$date": "2026-01-01T12:00:00.000Z" },
"__v": 0
}eventData field | Type | Always? | Notes |
|---|---|---|---|
titrationConfig, titrationDirection, configName, statusTransition, questionnaireId, locationId | mixed | ⚠️ | Shape varies by firing/direction; treat all as optional |
v2 payload
Sanitized envelope. None of the titration fields are on the ORDER allowlist; product_variation_ids is resolved from the order.
{
"event_type": "order_product_variation_transitioned",
"event_id": "event::1c2d3e4f-xxxx-xxxx-xxxx-5a6b7c8d9e0f",
"api_version": "2026-08-09",
"timestamp": "2026-05-30T14:00:00.000Z",
"affiliate_id": "aff::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"patient_id": "pat::117eb3b9-xxxx-xxxx-xxxx-9424274b5425",
"patient_external_id": "ext-patient-123",
"patient_marketing_consent": false,
"is_returning_patient": true,
"order_id": "order::e5576e92-xxxx-xxxx-xxxx-3c3173a3fb82",
"order_status": "requires_admin_review",
"product_variation_ids": ["pvt::233025da-xxxx-xxxx-xxxx-2641363f9b75"]
}| Field | Delivered in v2 | Notes |
|---|---|---|
| Envelope + patient identity | ✅ | |
order_id, order_status, product_variation_ids | ✅ | Resolved from the target order |
| Titration fields | ⛔ | Not on the allowlist |
