ISO 8583 reference

ISO 8583 response codes (DE39)

Data element 39 is two characters wide and carries the outcome of a transaction: one value approves, every other value explains a refusal. It is the field the whole message set exists to deliver, and it is where interfaces most often disagree — because the standard names the codes but each rail decides exactly when to send them.

Below is the widely-implemented set: 54values from ISO 8583:1987 plus a few in common use that the standard never defined. Treat it as a map, not as law — your scheme’s specification wins wherever it disagrees.

How DE39 behaves on the wire

  • — It appears on responses, not requests: a 0200 request earns a 0210 response, 0100 → 0110, 0400 → 0410, 0800 → 0810. The message function digit advances; DE39 carries the verdict.
  • — It is two characters, and on most rails two numeric characters. A single digit, a space-padded value or an alphanumeric code is a conformance failure on interfaces that specify numeric.
  • 00 is the only unqualified approval. 10 approves a different amount than the one requested — the response DE4 is authoritative, and treating it as an approval of the original is a classic partial-approval bug.
  • — A decline is not an error. Declines are answered, logged and settled like any other response; only a missing reply is a failure.

The codes

“Tested by” names the case in SwitchLab’s rail-neutral conformance pack that makes a switch produce that code. marks values in wide use that are not part of ISO 8583:1987.

DE39MeaningIn practiceTested by
00ApprovedThe only unqualified approval. Everything else is a decline or a qualified approval.FN-01 Purchase approved
01Refer to card issuerVoice referral. The terminal should not retry automatically.RC-01
02Refer to card issuer, special conditionAs 01, with an issuer-defined condition attached.
03Invalid merchantThe card acceptor (DE18/DE42) is unknown or not permitted for this transaction.VAL-03 Invalid merchant type (DE18)
04Pick up cardCapture the card; no fraud suspicion implied.
05Do not honourThe catch-all issuer decline. If your switch answers 05 for everything, your decline taxonomy is broken.RC-02
06ErrorUnspecified error at the issuer. Prefer a specific code where one exists.
07Pick up card, special conditionCapture with a fraud condition attached.
08Honour with identificationApproved provided the acceptor verifies identity.
09Request in progressInterim response; the final answer follows.
10Approved for partial amountPartial approval — DE4 in the response carries the approved amount, not the requested one.
12Invalid transactionThe processing code (DE3) or message type is not supported on this interface.VAL-02 Unknown processing code
13Invalid amountDE4 is out of range, zero where it must not be, or otherwise unusable.VAL-04 Zero-amount purchase
14Invalid card numberPAN fails a structural check (length, Luhn) or does not exist.VAL-01 PAN fails Luhn
15No such issuerThe PAN's BIN routes nowhere the switch knows.
17Customer cancellationThe cardholder cancelled at the terminal.
19Re-enter transactionTransient; the terminal may retry with a new STAN.
21No action takenThe request was understood but changed nothing — often a reversal with no matching original.
25Unable to locate recordTypically a reversal or inquiry whose original cannot be found.
30Format errorThe message is structurally wrong: a mandatory DE missing, wrong length, non-numeric where numeric is required. This is the code that proves a switch validates its input at all.MND-01…05, FMT-01…05
31Bank not supported by switchRouting exists but the destination institution is not enabled.
39No credit accountThe named account type does not exist for this card.
40Requested function not supportedThe function is valid ISO but not offered on this interface.
41Lost cardHot-listed as lost. Usually paired with a capture instruction.RC-03
43Stolen cardHot-listed as stolen.RC-04
51Insufficient fundsThe single most-tested decline. Must not be confused with a limit breach (61/65).RC-05
52No checking accountAccount-type selection does not resolve.
53No savings accountAccount-type selection does not resolve.
54Expired cardDE14 is in the past. A switch that returns 05 here is losing diagnostic information.RC-06
55Incorrect PINPIN verification failed. Also used by many switches when a PIN is required and absent.RC-07, SEC-04 Withdrawal with PIN absent
56No card recordThe PAN is well-formed but unknown to the issuer.
57Transaction not permitted to cardholderThe cardholder's product does not allow this transaction.RC-08
58Transaction not permitted to terminalThe terminal or acceptor is not entitled — distinct from 57, and often confused with it.RC-09
59Suspected fraudDeclined on a fraud rule.
61Exceeds withdrawal amount limitA limit breach, not a balance problem. Returning 51 here misleads the cardholder.RC-10
62Restricted cardGeographic or usage restriction on the card.RC-11
63Security violationCommonly a missing or failed MAC. Presence of DE128 is the structural half; the cryptographic half needs an HSM.SEC-02 MAC absent on a MAC-required terminal
65Exceeds withdrawal frequency limitVelocity limit, not an amount limit.RC-12
68Response received too lateThe answer arrived after the acquirer's timer expired. Worth testing deliberately: a switch that never produces it probably has no timer.RC-17 Late response
75Allowable number of PIN tries exceededPIN retry counter exhausted — distinct from 55.RC-13
76Invalid / nonexistent 'To Account'Transfer destination account does not resolve.
77Invalid / nonexistent 'From Account'Transfer source account does not resolve.
78Invalid / nonexistent accountAccount specified in DE102/DE103 does not resolve.
80Invalid dateAlso used for 'cutoff in progress' on some rails.
81Cryptographic error in PIN blockThe PIN block could not be deciphered — a key or format problem, not a wrong PIN.
83Unable to verify PINPIN verification unavailable (HSM or key problem).
85No reason to declineApproval for a zero-value or account-verification request.
88 †Key synchronisation / key exchange errorWidely used for a failed key change (0800 network management). Not part of the base standard.NM-06 Key change, key material absent
89 †Authentication failureChip or cardholder authentication failed.
90Cutoff is in progressThe issuer is running settlement cutover and cannot authorise.
91Issuer or switch inoperativeThe destination is unreachable. Should trigger stand-in if the rail supports it.RC-14
92Routing error — destination unknownNo route to the financial institution. Distinct from 91: nothing is down, the routing table is wrong.RC-15
93Transaction cannot be completed — violation of lawRegulatory block.
94Duplicate transmissionA retransmission of a request already seen (same acquirer, STAN and RRN inside the window). The switch must answer 94, not reprocess — this is the difference between a retry and a double debit.STF-01 Duplicate transmission
95Reconciliation errorSettlement totals do not balance.
96System malfunctionAn internal failure at the issuer or switch.RC-16
98 †Exceeds cash limitCash-specific limit breach. Not part of the base standard.

Which of these does your switch actually produce?

Most switches answer a handful of codes correctly and collapse the rest into 05. That passes a happy-path test and fails a real certification, because the reviewer is checking whether a limit breach says 61, an expired card says 54, and a retransmission says 94 instead of debiting twice.

SwitchLab fires a 61-case battery at your switch over TCP and scores the genuine responses — 17 decline codes, a deliberately late reply, reversals including repeat idempotency, duplicate detection, and mandatory-field, format and value-domain enforcement. It takes about a minute to set up and you can run it as often as you like.