Fires when a subscription renewal payment attempt fails. The eventType is subscription_payment_failed. Categories: COMMERCE, PAYMENT.
Single live emission path. This event is emitted by the renewal worker when a payment-auth job exhausts retries (dead-letter path). Live emissions include subscription and payment fields only āecommerce_order_idandcommerce_statusare not set, even when a pending renewal order was created before payment failed. Do not type order-level fields as required.
v1 and v2 payloads are identical for commerce events.
Field guarantees
| Field | Guarantee |
|---|---|
subscription_id, subscription_status | ā Always present (when emitted) |
ecommerce_order_id, commerce_status | ā Not set by live emission ā test-fire samples may include them for illustration |
Payload (v1 and v2)
Live emission (renewal worker dead-letter):
{
"event_type": "subscription_payment_failed",
"api_version": "2026-08-09",
"timestamp": "2026-05-26T12:00:00.000Z",
"affiliate_id": "aff::example",
"patient_id": "pat::example",
"patient_external_id": "ext-patient-123",
"patient_marketing_consent": true,
"is_returning_patient": false,
"subscription_id": "esub::example",
"subscription_status": "active",
"total_value_cents": 4999,
"currency": "usd",
"payment_status": "failed"
}Test-fire sample only ā includes order fields that live emissions do not send:
{
"event_type": "subscription_payment_failed",
"api_version": "2026-08-09",
"timestamp": "2026-05-26T12:00:00.000Z",
"affiliate_id": "aff::example",
"patient_id": "pat::example",
"patient_external_id": "ext-patient-123",
"patient_marketing_consent": true,
"is_returning_patient": false,
"subscription_id": "esub::example",
"subscription_status": "active",
"total_value_cents": 4999,
"currency": "usd",
"ecommerce_order_id": "eord::example",
"commerce_status": "pending",
"payment_status": "failed"
}| Field | Type | Always? | Notes |
|---|---|---|---|
subscription_id, subscription_status | string | ā | When the event is emitted |
total_value_cents, currency, payment_status | mixed | ā | |
ecommerce_order_id, commerce_status | string | ā | Not set by live emission ā test-fire sample only |
