Order Product Variation Transition Occurred

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

FieldGuarantee
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 fieldTypeAlways?Notes
titrationConfig, titrationDirection, configName, statusTransition, questionnaireId, locationIdmixed⚠️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"]
}
FieldDelivered in v2Notes
Envelope + patient identity
order_id, order_status, product_variation_idsResolved from the target order
Titration fieldsNot on the allowlist