Guides

Response Codes

Every Purchase, Refund and Auth/Capture response from Fat Zebra includes a response_code: a standard two-digit code, 00 to 99, from the card network describing exactly what happened to the transaction. 00 is Approved, 51 is Insufficient Funds, 05 is Do Not Honour, and so on.

Shown to a customer as-is, these codes mean nothing. "Refer to Card Issuer" doesn't tell anyone what to do next. Some codes are worse than unhelpful: they describe why a card was declined in ways that are actively risky to repeat back. Telling a customer their card was declined because it's reported lost or stolen hands that information to anyone running a stolen card through your checkout to see if it still works.

The fix is two separate mappings, built once and reused everywhere response_code reaches your UI or your support tooling:

  • a customer-facing map: response code to one of a small number of safe, generic messages
  • an internal map: response code to the real bank meaning, for support and reconciliation

Important: Never pass Fat Zebra's raw response_code, or the message string returned alongside it, straight through to a customer. Map it first.

Where you'll see it

response_code sits in the response object of every Purchase, Refund and Auth/Capture response, next to successful (a boolean) and message. The same code list applies across all of those, so one mapping covers your whole integration.

Fat Zebra also returns a separate merchant_advice_code on declines: a plain-English category (retry_later, do_not_retry, update_required, not_supported, cancelled, none) describing how to handle the decline. If you're building retry logic rather than customer messaging, use merchant_advice_code directly rather than re-deriving the same thing from response_code.

Step 1: Build the customer-facing message map

Don't map codes one-to-one. Group them into a handful of message buckets, and map every code into one of those buckets:

CategoryResponse codesCustomer-facing message
Approved00, 08, 10, 11, 16Payment approved.
Lost, stolen or restricted card04, 07, 34, 35, 36, 37, 41, 43Your card issuer declined this payment. Please use a different card or contact your bank.
Temporary error, safe to retry19, 22, 90, 91, 92, 96We couldn't process that just now. Please try again in a moment.
Card number or security code14, 82Please check your card number and security code and try again.
Expired card33, 54This card has expired. Please use a different card.
Insufficient funds51This card was declined. Please use a different card or payment method.
Everything elseall other codesYour bank declined this payment. Please use a different card or contact your bank.

Keep that message set small. A dozen or so unique messages is plenty; anything more granular starts leaking back the detail you're trying to hide, without giving the customer anything new to act on.

Lost, stolen and restricted card codes aren't a style choice here, they're Fat Zebra's own guidance. Codes 04, 07, 34 to 37, 41 and 43 must never be shown to the customer as the real reason. Always show the generic decline instead.

Step 2: Route specific codes back to the right field

Two codes are worth handling as UI behaviour rather than a message string, because the fix is something the customer can act on immediately in the field they're already looking at:

  • 14 Invalid Card Number and 82 CVV Validation Error: send focus back to the card number or security code field instead of showing a generic decline banner. The customer likely mistyped something.
  • 19, 22, 90, 91, 92, 96: these are temporary network or issuer errors, not real declines. Offer an immediate retry rather than treating them as a hard decline or asking the customer to try a different card.

Step 3: Keep a separate internal mapping for support and reconciliation

The message field Fat Zebra returns alongside most codes is generic (Declined, Approved) and isn't diagnostic on its own. Support and reconciliation need the real bank meaning behind the code, sitting right next to the transaction, so they can answer "why was this customer's card declined" without cross-referencing anything.

The full list:

CodeBank meaningSuccessfulRecommended action
00 ApprovedYesNo action needed, the payment succeeded.
01 Transaction DeclinedNoAsk the customer to contact their card issuer for more information.
02 Transaction DeclinedNoAsk the customer to contact their card issuer for more information.
03 Merchant configuration errorNoThis is a merchant setup issue, not a card problem. Contact ArtsPay support to check your merchant configuration.
04 Card marked as Lost or StolenNoDo not tell the customer their card was reported lost or stolen. Show the generic decline message and let them try a different card.
05 Do Not HonorNoAsk the customer to contact their card issuer for more information.
06 Error, Original Not Found or similarNoThis is usually a gateway-side error rather than a card problem. Retry the request, and contact ArtsPay support if it persists.
07 Card marked as lost or stolen (Pick Up Card)NoDo not tell the customer their card was reported lost or stolen. Show the generic decline message and let them try a different card.
08 Honour with IdentificationYesNo action needed, the payment succeeded, though the issuer may request further identification at a physical terminal.
09 Request in Progress (local terminal error)NoThis is a temporary local processing delay. Retry the payment.
10 Approved for Partial AmountYesThe payment succeeded for a partial amount only. Check whether that partial amount is acceptable for the order before fulfilling it.
11 Approved, VIPYesNo action needed, the payment succeeded.
12 Invalid Transaction TypeNoAsk the customer to confirm with their card issuer that the card supports this type of transaction.
13 Invalid AmountNoIf the amount looks correct on your end, ask the customer to confirm with their card issuer that they can make purchases of that amount.
14 Invalid Card NumberNoSend the customer back to the card number field rather than asking them to contact their card issuer. This is usually a simple typo.
15 No valid issuer for this cardNoThe card's issuer isn't recognised by the network. Ask the customer to try a different card.
16 Approved, Update Track 3YesNo action needed, the payment succeeded.
17 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
18 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
19 Re-enter last transactionNoRetry the payment automatically. If it still fails, ask the customer to contact their card issuer.
20 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
21 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
22 Suspected MalfunctionNoThis is usually a temporary fault at the issuer's end, so retry the payment; if it still fails, try again later.
23 Unacceptable Transaction FeeNoThis relates to fee configuration rather than the card. Contact ArtsPay support if you see this repeatedly.
24 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
25 Unable to Locate Record on FileNoThe issuer couldn't find a record to match this transaction. Ask the customer to try a different card.
26 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
27 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
28 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
29 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
30 Format ErrorNoThis indicates a formatting problem with the request rather than the card. Contact ArtsPay support if you see this repeatedly.
31 Bank Not Supported by Switch/RouteNoThe customer's bank isn't supported on this route. Ask them to try a different card.
32 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
33 Expired CardNoAsk the customer to use a different card; this one has expired.
34 Suspected Fraud - Retain CardNoDo not disclose the fraud suspicion to the customer. Show the generic decline message and let them try a different card.
35 Contact Acquirer, Retain CardNoDo not disclose the specific reason to the customer. Show the generic decline message and let them try a different card.
36 Restricted Card, Retain CardNoDo not disclose the specific reason to the customer. Show the generic decline message and let them try a different card.
37 Contact Acquirer Security Department, Retain CardNoDo not disclose the specific reason to the customer. Show the generic decline message and let them try a different card.
38 PIN Retries ExceededNoAsk the customer to use a different card or payment method; PIN retries have been exceeded on this one.
39 No Credit AccountNoAsk the customer to contact their card issuer; this card doesn't have a credit facility available for the transaction.
40 Function Not SupportedNoThe card issuer doesn't support this function. Ask the customer to try a different card or payment method.
41 Lost CardNoDo not tell the customer their card was reported lost. Show the generic decline message and let them try a different card.
42 No Universal (credit-capable) accountNoAsk the customer to contact their card issuer; this card doesn't have a credit-capable account attached.
43 Stolen CardNoDo not tell the customer their card was reported stolen. Show the generic decline message and let them try a different card.
44 No Investment AccountNoAsk the customer to contact their card issuer; this card doesn't have the account type required for the transaction.
45 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
46 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
47 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
48 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
49 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
50 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
51 Insufficient FundsNoAsk the customer to use a different card or payment method; this one doesn't have sufficient funds.
52 No Cheque AccountNoAsk the customer to contact their card issuer; there's no cheque account attached to this card.
53 No Savings AccountNoAsk the customer to contact their card issuer; there's no savings account attached to this card.
54 Expired CardNoAsk the customer to use a different card; this one has expired.
55 Incorrect PINNoAsk the customer to try again with the correct PIN.
56 No Card Record, check with issuerNoAsk the customer to contact their card issuer to check the card is set up correctly.
57 Function Not Permitted to Card HolderNoAsk the customer to confirm with their card issuer that the card supports this type of transaction.
58 Function Not Permitted to TerminalNoThe terminal or channel isn't permitted for this function. Contact ArtsPay support if you see this repeatedly.
59 Suspected FraudNoDo not disclose the fraud suspicion to the customer. Show the generic decline message and let them try a different card.
60 Merchant to Contact AcquirerNoThis requires the merchant to contact the acquirer directly. Contact ArtsPay support.
61 Exceeds Withdrawal LimitNoThe customer has exceeded their withdrawal limit. Ask them to try a different card or a smaller amount.
62 Restricted CardNoThe card is restricted for this type of transaction. Ask the customer to try a different card.
63 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
64 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
65 Exceeds Withdrawal FrequencyNoThe customer has exceeded their withdrawal frequency limit. Ask them to try a different card or try again later.
66 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
67 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
68 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
69 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
70 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
71 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
72 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
73 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
74 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
75 PIN Tries ExceededNoAsk the customer to use a different card or payment method; PIN tries have been exceeded on this one.
76 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
77 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
78 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
79 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
80 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
81 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
82 CVV Validation ErrorNoSend the customer back to the security code field rather than asking them to contact their card issuer. This is usually a simple typo.
83 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
84 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
85 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
86 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
87 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
88 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
89 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
90 Cutoff In Progress, retry allowedNoThe issuer is temporarily unavailable, but retries are explicitly allowed, so retry the payment automatically.
91 Host or Switch Unavailable, Signed Off or Timed OutNoThis is usually temporary. Retry the payment automatically; if it still fails, ask the customer to contact their card issuer.
92 Unable to Route TransactionNoThis is usually temporary. Retry the payment automatically; if it still fails, try again later.
93 Cannot Complete, Violation of the LawNoDo not disclose the specific reason to the customer. Show the generic decline message.
94 Duplicate TransactionNoThis looks like a duplicate submission, so check whether a matching payment already exists before retrying.
95 Declined, not usedNoRarely returned by the network. Treat it as a generic decline and ask the customer to try a different card.
96 System ErrorNoThis is a temporary system error, so retry the payment; if it still fails, try again later.
99 System ErrorNoThis is a temporary system error, so retry the payment; if it still fails, try again later.

This table is complete but long by nature, a hundred codes across the financial network. If you need to work through it by category rather than scrolling the whole list, filter for "Do not disclose" first: that's the set of codes covered by the security guidance in Step 1.

Testing

Fat Zebra's sandbox test cards return predetermined response codes, so you can trigger any outcome without needing real card behaviour. Some cards are fixed to a single response, for example VISA 4557 0123 4567 8902 always returns 05 Declined. Others are dynamic: with a card like 4242 4242 4242 4242, the last two digits of the purchase amount become the response code, so a purchase of $50.09 returns 09 Acquirer Busy. Use this to exercise every branch of your customer-facing map, including the retry and card-entry paths, before going live.

FAQ

Should I check successful or the HTTP status code to detect a decline?

Check successful. HTTP status covers request-level problems, like a malformed request or a permissions error, while response_code and successful describe the outcome of the transaction itself. A declined payment is still a 200.

Do response codes differ between Purchase, Refund and Auth/Capture?

No. The financial network response codes and their meaning stay the same across Purchase, Refund and Auth/Capture responses, so one mapping table covers all three.

Where should the internal mapping actually live?

Wherever your support team already looks at a transaction, alongside the merchant dashboard's transaction detail view or your reconciliation exports. It only needs to be visible to staff, never to the customer-facing app.

What's the difference between response_code and merchant_advice_code?

response_code is the raw two-digit network code covered in this guide. merchant_advice_code is Fat Zebra's own category for how to handle a decline (retry_later, do_not_retry, update_required, and so on), returned alongside it. Use merchant_advice_code directly for retry logic rather than reconstructing it from response_code.

Can I show the bank meaning to a merchant, just not the customer?

Yes. The restriction in Step 1 is specifically about the customer-facing checkout experience. A merchant looking at their own dashboard, or your support team looking at a case, can see the real reason.