Fires when a payment attempt is declined. Category: PAYMENT. The eventType is payment_declined.
Envelope only — documentedeventDatafields are not actually sent. The emitting code setseventDatato an empty object, so this event does not currently carrypayment_statusor aneventData.order_id. Do not rely on any payment-specific field for this event. This is a known gap; see Field Guarantees.
Field guarantees
| Field | Guarantee |
|---|---|
eventData | ⛔ Empty — no payment-specific fields are emitted |
v2 order reference (order_id, order_status) | ✅ Present via entity extraction when the event targets an order |
v1 payload (legacy)
eventData is an empty object. ownerEntity/targetEntity are the raw patient/order references.
{
"ownerEntityModel": "Patient",
"targetEntityModel": "Order",
"deleted": false,
"ownerEntity": "pat::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"targetEntity": "order::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"eventTitle": "Payment was declined.",
"eventType": "payment_declined",
"eventData": {},
"createdAt": { "$date": "2026-01-01T12:00:00.000Z" },
"updatedAt": { "$date": "2026-01-01T12:00:00.000Z" },
"__v": 0
}v2 payload
Sanitized envelope. There is no eventData to carry through; the order reference is resolved from the target order. Note payment_status is not delivered (the emitting code doesn't set it).
{
"event_type": "payment_declined",
"event_id": "event::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"api_version": "2026-08-09",
"timestamp": "2026-05-30T14:00:00.000Z",
"affiliate_id": "aff::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"patient_id": "pat::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"patient_external_id": "ext-patient-123",
"patient_marketing_consent": false,
"is_returning_patient": false,
"order_id": "order::xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"order_status": "requires_order_processing"
}| Field | Delivered in v2 | Notes |
|---|---|---|
| Envelope + patient identity | ✅ | |
order_id, order_status | ✅ | Resolved from the target order |
payment_status | ⛔ | Not set by the emitting code |
