Fires when an ecommerce order payment is collected. The eventType is ecommerce_order_paid. Categories: COMMERCE, PAYMENT.
Use first_purchase to distinguish a new sale from a renewal order that also pays. A renewal must never be attributed as a new purchase. Deduplicate on event_id. Money is integer cents (84900 = $849.00).
Field guarantees
| Field | Guarantee |
|---|---|
ecommerce_order_id, commerce_status, total_value_cents, currency, first_purchase, plan_type | ✅ Always present |
payment_status | ⚠️ Conditional |
attribution | ⚠️ Omitted when no tracking data was captured |
journey_id | ⚠️ Omitted when no journey relationship is resolved |
Payload (v2)
{
"event_type": "ecommerce_order_paid",
"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,
"ecommerce_order_id": "eord::example",
"commerce_status": "processing",
"total_value_cents": 4999,
"currency": "usd",
"payment_status": "collected",
"first_purchase": true,
"plan_type": "one_time",
"journey_id": "jour::example",
"attribution": {
"first": {
"captured_at": "2026-01-04T10:22:31.000Z",
"landing_url": "https://shop.example.com/get-started",
"params": {
"utm_source": "google",
"gclid": "Cj0KCQexample"
}
},
"touch_count": 1,
"visitor_id": "550e8400-e29b-41d4-a716-446655440000"
}
}| Field | Type | Always? | Notes |
|---|---|---|---|
ecommerce_order_id, commerce_status | string | ✅ | |
total_value_cents, currency | number/string | ✅ | Integer cents. 4999 = $49.99. |
first_purchase | boolean | ✅ | true unless metadata.isRenewal on this order. |
plan_type | string | ✅ | monthly · quarterly · sixmonth · annual · one_time. Per this order. |
payment_status | string | ⚠️ | e.g. collected |
is_returning_patient | boolean | ✅ | Per-patient, not per-order. true when another ecommerce order is already paid, processing, or completed. |
attribution | object | ⚠️ | See Attribution Passthrough. |
