Payment Declined

Fires when a payment attempt is declined. Category: PAYMENT. The eventType is payment_declined.

Envelope only — documented eventData fields are not actually sent. The emitting code sets eventData to an empty object, so this event does not currently carry payment_status or an eventData.order_id. Do not rely on any payment-specific field for this event. This is a known gap; see Field Guarantees.

Field guarantees

FieldGuarantee
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"
}
FieldDelivered in v2Notes
Envelope + patient identity
order_id, order_statusResolved from the target order
payment_statusNot set by the emitting code