Electronic Commerce Indicator on Card Payments
Access the Electronic Commerce Indicator that card networks return in the authorization response.
Stripe exposes the Electronic Commerce Indicator (ECI) that card networks return in the authorization response on the Charge object. This field tells you the transaction’s network-confirmed authentication level and helps you assess whether liability for a fraudulent dispute might shift from you to the issuing bank.
This field applies to all card payments processed on the Visa and Mastercard networks, including Apple Pay and Google Pay wallet transactions as well as 3D Secure-authenticated payments.
Why ECI matters
When a cardholder authenticates a payment, whether through biometric verification on Apple Pay or Google Pay or through 3D Secure, the card network assigns an ECI value indicating the level of authentication. This value helps you assess whether liability shift might be possible, but doesn’t determine the outcome by itself.
The card network can downgrade the ECI in the authorization response from an authenticated to an unauthenticated value. The electronic_commerce_indicator field gives you direct access to the network’s final ECI, so you can:
- Assess whether a given transaction might be eligible for liability shift.
- Submit the card network response ECI as evidence when contesting fraud disputes.
- Programmatically analyze response ECI values across your volume.
ECI values
The ECI is a raw string value that the card network returns. Its meaning is network-specific.
| Visa ECI value | Meaning |
|---|---|
05 | Fully authenticated (secure e-commerce) |
06 | Authentication attempted |
07 | Not authenticated |
| Mastercard ECI value | Meaning |
|---|---|
00 | Not supported—authentication failed or couldn’t be attempted |
01 | Authentication attempted |
02 | Fully authenticated |
04 | Frictionless transaction through the Mastercard Identity Check Data Only service |
06 | Merchant-based liability |
07 | Partial shipment or recurring transaction |
These tables list the ECI values most relevant to authentication and liability shift, but they aren’t exhaustive. Card networks might return other valid ECI values for specific transaction types. Interpret each value in the context of the network that returned it.
The same ECI value can have different meanings across card networks. For example, Visa returns 02 for a recurring transaction, while Mastercard uses 02 to indicate a fully authenticated transaction. Some ECI values aren’t related to liability shift. Don’t use an ECI meaning from one network to interpret a transaction processed on another network.
Note
A populated response ECI is the card network’s final ECI. If the response ECI indicates that the transaction is unauthenticated (for example, Visa 07 or Mastercard 00, 04, or 06), liability shift isn’t available for that transaction. An authenticated ECI is necessary but not sufficient for liability shift. Card network rules and transaction conditions determine the final liability shift outcome.
The ECI value is null when the card network doesn’t return an ECI in the authorization response. Non-Visa and non-Mastercard networks (such as American Express and Discover) don’t return ECI. Visa and Mastercard also might not return an ECI value in some cases, such as when the transaction was unauthenticated in the first place.
Access ECI in the API
The ECI is available on the Charge object at payment_method_details.card.electronic_commerce_indicator.
Read ECI after confirming a PaymentIntent
Expand latest_charge to read the ECI on the resulting charge when you confirm a PaymentIntent.
Command Line
The response contains the ECI on the expanded charge:
{
"id": "pi_xxx",
"object": "payment_intent",
"status": "succeeded",
"latest_charge": {
"id": "ch_xxx",
"object": "charge",
"payment_method_details": {
"card": {
"brand": "visa",
"electronic_commerce_indicator": "05"
},
"type": "card"
}
}
}
Retrieve ECI from an existing Charge
Command Line
The response contains the ECI:
{
"id": "ch_xxx",
"object": "charge",
"payment_method_details": {
"card": {
"brand": "mastercard",
"electronic_commerce_indicator": "02"
},
"type": "card"
}
}
This field is also present in webhook event payloads that include the Charge object, such as charge.succeeded and payment_intent.succeeded.
Relationship to other parameters
Stripe also exposes the ECI from the 3D Secure authentication outcome.
| Parameter | What it represents |
|---|---|
payment_method_details.card.three_d_secure.electronic_commerce_indicator | Existing: The ECI from the 3D Secure authentication outcome, sent in the authorization request. This is the provisional value before the card network can modify it. |
payment_method_details.card.electronic_commerce_indicator | New: The final ECI that the card network returned in the authorization response. Use this value when assessing the transaction’s authentication level. |
When both fields are present on a charge, use the top-level payment_method_details.card.electronic_commerce_indicator. The 3D Secure field represents what was requested; the new field represents the final ECI that the network returned.
In most cases these values match. When they differ, the card network changed the authentication level, and you must use the response ECI when assessing the transaction. ECI alone doesn’t determine liability shift.
The following example shows a downgraded Visa transaction, where 3D Secure authentication succeeded and sent ECI 05 in the request, but the card network returned 07 in the response. The authentication was downgraded, and liability shift doesn’t apply for this transaction.
{
"id": "ch_xxx",
"object": "charge",
"payment_method_details": {
"card": {
"brand": "visa",
"electronic_commerce_indicator": "07",
"three_d_secure": {
"electronic_commerce_indicator": "05",
"result": "authenticated"
}
},
"type": "card"
}
}
View ECI in the Stripe Dashboard
The ECI value also appears on the Payment details page in the Dashboard, under the Payment method section. The field is labeled Electronic commerce indicator.
- For Visa and Mastercard transactions, the field displays the ECI value (for example, 05 or 02 ), or a dash ( — ) if the network didn’t return a value.
- For other networks (such as American Express and Discover), the field is hidden, because those networks don’t return ECI in the authorization response.
Query ECI in Sigma
The response ECI is also available in Sigma. Query the card_electronic_commerce_indicator column on the payment_method_details table to analyze ECI values across your charges. For example, you can report on the share of your Visa and Mastercard card payments with authenticated or unauthenticated response ECI values.
Recommended actions
Because the response ECI reflects the network’s final ECI, you can use it to strengthen dispute evidence and to understand authentication patterns across your payments.
Use ECI as dispute evidence
When you counter a fraudulent dispute on a transaction where the response ECI indicates authentication (for example, Visa 05 or Mastercard 02), Stripe automatically adds the response ECI to your evidence details. The network considers this value together with its rules and the transaction conditions when determining liability shift. Also include additional details to increase your chance of winning the dispute.
Analyze your transaction data
Use the ECI field to identify authentication patterns in your fraudulent and disputed volume. Query the field in Sigma to compare response ECI values across transactions, and use these insights to inform payment method mix, routing, and fraud prevention decisions.
Limitations
- Network coverage : Only Visa and Mastercard return ECI in the authorization response. The field is null for American Express, Discover, and other networks.
- Historical data : API data is populated from June 10, 2026, without a backfill for earlier non-preview data. Stripe Sigma and Stripe Data Pipeline data is populated from July 22, 2026, without a backfill for earlier data.
- Not a definitive liability shift indicator : ECI is one factor in liability shift determination. Other conditions, such as a valid cryptogram and merchant category eligibility, must also be satisfied. Stripe doesn’t guarantee liability shift outcomes.
