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.

Deduplicate on event_id. Money is integer cents. A failed renewal is not a new purchase.

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
plan_type, first_purchase⚠️ Added by the v2 sanitizer when the subscription can be joined to a checkout order
attribution⚠️ Omitted when no tracking data was captured
journey_id⚠️ Omitted when no journey relationship is resolved

Payload (v2)

Live emission (renewal worker dead-letter):

{
  "event_type": "subscription_payment_failed",
  "event_id": "evt::example",
  "api_version": "2026-08-17",
  "timestamp": "2026-05-26T12:00:00.000Z",
  "timestamp_epoch": 1779796800,
  "affiliate_id": "aff::example",
  "patient_id": "pat::example",
  "patient_external_id": "ext-patient-123",
  "patient_marketing_consent": false,
  "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",
  "event_id": "evt::example",
  "api_version": "2026-08-17",
  "timestamp": "2026-05-26T12:00:00.000Z",
  "timestamp_epoch": 1779796800,
  "affiliate_id": "aff::example",
  "patient_id": "pat::example",
  "patient_external_id": "ext-patient-123",
  "patient_marketing_consent": false,
  "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, currencynumber/string✅Integer cents. 4999 = $49.99.
payment_statusstring✅e.g. failed
ecommerce_order_id, commerce_statusstring⛔Not set by live emission — test-fire sample only
attributionobject⚠️See Attribution Passthrough.