3DS ECI & Status Codes
ECI values differ between Visa and Mastercard. Here is the mapping, plus 3DS transStatus.
Runs entirely in your browser. Nothing you paste is uploaded, logged or stored.
ECI — Visa, Amex, Discover, JCB
Most schemes follow the Visa numbering.
| Code | Meaning |
|---|---|
| 05 | Fully authenticatedokCardholder authenticated successfully. Liability shifts to the issuer. |
| 06 | Attempted authenticationwarnThe issuer or cardholder was not enrolled, or the ACS was unavailable. Liability generally still shifts. |
| 07 | Not authenticatedbadNo 3DS attempt, or it failed. Liability stays with the merchant. |
ECI — Mastercard
Mastercard uses entirely different values for the same three outcomes. This is the single most common source of 3DS confusion.
| Code | Meaning |
|---|---|
| 02 | Fully authenticatedokEquivalent to Visa ECI 05. |
| 01 | Attempted authenticationwarnEquivalent to Visa ECI 06. |
| 00 | Not authenticatedbadEquivalent to Visa ECI 07. |
| 04 | Merchant-initiated / recurringUsed on some MIT flows where authentication does not apply. |
3DS transStatus (ARes / RReq)
Returned by the authentication flow itself, before authorisation.
| Code | Meaning |
|---|---|
| Y | Authentication successfulokFull liability shift. |
| A | Attempted — proof of attempt generatedwarnAuthentication could not complete, but a proof of attempt was produced. Usually still carries liability shift. |
| N | Not authenticated / deniedbadThe issuer refused. Do not proceed to authorisation without accepting the risk. |
| U | Authentication could not be performedwarnTechnical problem or the ACS was unreachable. |
| R | Authentication rejected by the issuerbadStronger than N — the issuer is telling you not to retry as authorisation. |
| C | Challenge requiredStep-up needed. Continue to the challenge flow; this is not a final answer. |
| D | Decoupled authentication confirmedThe issuer will authenticate out of band. |
| I | Informational only3RI request acknowledged; no authentication performed. |
Visa 05 and Mastercard 02 mean the same thing
This is the trap. Both indicate a fully authenticated transaction with liability shifted to the issuer, but the numbers are completely different:
Visa 05 = Mastercard 02 — fully authenticated.
Visa 06 = Mastercard 01 — attempted.
Visa 07 = Mastercard 00 — not authenticated.
Note that Mastercard's ordering runs the opposite way, so a system that maps ECI values with a single table and no scheme check will not merely be wrong — it will invert the meaning, treating unauthenticated traffic as fully authenticated.
transStatus is not ECI
They describe the same transaction at different stages. transStatus comes from the 3DS authentication itself, in the ARes or RReq. ECI is what you send onward in the authorisation to tell the issuer what happened during authentication.
The mapping is roughly Y → fully authenticated, A → attempted, and N/U/R → not authenticated. But it is the ACS and your 3DS server that determine the ECI, not you — do not compute it yourself from transStatus.
C is not a result
C means a challenge is required. It is an instruction to continue the flow, not an
outcome. Treating C as a failure is a common and costly integration bug — you are abandoning
transactions that would have succeeded after a step-up. The real answer arrives in the RReq after
the challenge completes.
R deserves its own mention: it is a rejection by the issuer, stronger than
N. The issuer is telling you not to proceed to authorisation at all.
Authenticated does not mean approved
A successful 3DS authentication shifts fraud liability. It does not guarantee the authorisation will be approved — the issuer can still decline for funds, velocity or its own risk rules. ECI 05 with a DE 39 of 51 is entirely normal. Two separate decisions, two separate fields.
More Reference tools
Minor units
ISO 4217 codes and exponents, with a converter so you stop getting JPY and KWD wrong.
Country codes
ISO 3166-1 numeric to alpha, because EMV tag 9F1A and DE 19 speak in numbers.
Data converter
Convert between every encoding a payments message uses — including EBCDIC, which mainframe acquirers still speak.