Subscription Payment Failed

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_id and commerce_status are 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

FieldGuarantee
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"
}
FieldTypeAlways?Notes
subscription_id, subscription_statusstringāœ…When the event is emitted
total_value_cents, currency, payment_statusmixedāœ…
ecommerce_order_id, commerce_statusstringā›”Not set by live emission — test-fire sample only