Debugging Payment Declines: Understanding ISO 8583 Response Codes

7 min read
ISO 8583 Guides

A customer calls: “My card was declined, but I have money!” You check the logs and see Response Code: 05. What does that mean, and more importantly, how do you fix it?

Welcome to the world of ISO 8583 response codes — the two-character messages that make or break every card transaction on the planet.

What Are Response Codes?

Response codes (also called action codes or authorization codes) live in Field 39 of every ISO 8583 response message. When an issuing bank processes a transaction, it sends back a 2-character alphanumeric code indicating the result.

This code tells you one of three things:

ResponseMeaningExample Codes
ApprovedTransaction successful00, 10
DeclinedTransaction denied05, 51, 54
⚠️ ErrorSystem/format issue30, 91, 96

Debug faster: Paste your full ISO 8583 message into our ISO 8583 Studio to extract Field 39 automatically.

Also Known As…

Response codes go by several names in the industry:

NameContext
Response CodeISO 8583 specification
Action CodeVisa/Mastercard documentation
Authorization Response CodeAcquirer systems
Decline CodeWhen referring to rejections
Field 39Technical shorthand
DE 39Data Element 39 (formal ISO term)

They all refer to the same thing!

The Most Common Response Codes

Let’s start with the codes you’ll encounter 90% of the time:

Approval Codes

CodeNameWhat It Means
00ApprovedTransaction successful. Proceed with sale.
10Partial ApprovalApproved for less than requested. Common with prepaid/gift cards.
08Honor with IDApproved, but verify cardholder identity.
85AVS OnlyAddress verification processed. Card not charged.

Hard Declines (Do Not Retry)

These declines won’t change if you retry. The cardholder needs to take action:

CodeNameRoot CauseCustomer Action
05Do Not HonorGeneric decline from issuerContact bank
14Invalid Card NumberPAN doesn’t exist or fails LuhnFix card number
41Lost CardCard reported lostUse different card
43Stolen CardCard reported stolenUse different card
51Insufficient FundsNot enough balanceAdd funds
54Expired CardPast expiration dateUse current card
57Transaction Not PermittedCard not authorized for this purchase typeContact bank

Tip: Response code 05 (Do Not Honor) is the most frustrating — it’s a catch-all that means “declined, but we won’t tell you why.” The cardholder must contact their bank.

Soft Declines (Retry May Work)

These are temporary issues that may resolve with a retry or slight modification:

CodeNameRoot CauseRetry Strategy
1ASCA Required3D Secure authentication neededRetry with 3DS
51Insufficient FundsSometimes soft if funds are incomingWait and retry
61Exceeds LimitDaily limit hitWait until tomorrow
65Exceeds FrequencyToo many transactionsWait before retry
91Issuer UnavailableBank system downRetry in 30 seconds
96System ErrorGeneric system failureRetry immediately

PIN and Security Codes

CodeNameCauseFix
55Incorrect PINWrong PIN enteredRe-enter correctly
75PIN Tries ExceededToo many wrong attemptsCard may be blocked
82CVV Validation ErrorCVV/CVC mismatchVerify 3-digit code
N7CVV2/CVC2 MismatchSecurity code wrongRe-enter CVV

How to Debug a Payment Decline

When a transaction fails, follow this systematic approach:

Step 1: Extract the Response Code

If you have the raw ISO 8583 response, find Field 39. It’s always two characters.

0210723405412880880016491234567890123456000000001000000123456...05...
                                                                 ^^
                                                           Response Code

Quick decode: Use our ISO 8583 Studio to parse the complete message.

Step 2: Classify the Decline

If Code Is…CategoryNext Action
00, 10✅ ApprovedNo action needed
05, 14, 41-43, 51, 54❌ Hard DeclineNo retry; customer action needed
1A, 91, 96⚠️ Soft DeclineRetry with modifications
55, 75, 82🔐 Security IssueVerify PIN/CVV entry
30, 92🛠️ Technical ErrorCheck your integration

Response codes don’t tell the whole story. Always examine:

FieldPurposeWhy It Matters
Field 38Authorization CodePresent on approvals; needed for capture
Field 44Additional Response DataExtra details on declines
Field 55EMV DataChip card cryptogram results

For EMV transactions, the EMV tags inside Field 55 provide crucial context. Decode them with our EMV Tag Inspector.

Step 4: Implement Retry Logic

function shouldRetry(responseCode) {
    // Soft declines - safe to retry
    const softDeclines = ['91', '96', '19', '90', '92'];
    
    // SCA required - retry with 3DS
    const scaRequired = ['1A'];
    
    // Hard declines - never retry automatically
    const hardDeclines = [
        '05', '14', '41', '43', '51', '54', '57',
        '04', '07', '33', '59', '62', '63'
    ];
    
    if (softDeclines.includes(responseCode)) {
        return { retry: true, delay: 30000 }; // 30 second wait
    }
    
    if (scaRequired.includes(responseCode)) {
        return { retry: true, requires3DS: true };
    }
    
    return { retry: false };
}

Brand-Specific Response Codes

Card networks sometimes use proprietary codes beyond the standard two-digit values:

Visa Codes

CodeNameMeaning
Q1Card Authentication FailedARQC cryptogram failed
R0Stop Payment OrderRecurring payment cancelled
R1Revocation of AuthorizationCustomer revoked merchant auth
R3Revocation of All AuthorizationsCustomer blocked all merchant charges
P5PIN Change FailurePIN update denied
77Intervention RequiredCall authorization center

Mastercard Codes

CodeNameMeaning
N0Force STIPStand-in processing activated
N3Cashback Not AvailableCashback service unavailable
N7CVV2 MismatchCard security code failed

Discover D-PAS Codes

CodeNameMeaning
Y1Offline ApprovedChip approved without issuer
Y3Offline Approved (Fallback)Couldn’t reach issuer, card approved
Z1Offline DeclinedChip declined without issuer
Z3Offline Declined (Fallback)Couldn’t reach issuer, card declined

Quick Reference Table

Here’s a printable cheat sheet of the most common codes:

CodeStatusNameCustomer Message
00ApprovedPayment successful
05Do Not HonorContact your bank
10Partial ApprovalPartial payment accepted
14Invalid CardCheck card number
41Lost CardCard reported lost
43Stolen CardCard reported stolen
51Insufficient FundsNot enough balance
54Expired CardCard has expired
55Incorrect PINRe-enter PIN
57Not PermittedTransaction type not allowed
61Limit ExceededOver daily limit
75PIN Tries ExceededCard blocked
91⚠️Issuer UnavailableTry again shortly
96⚠️System ErrorTry again

What Response Codes DON’T Tell You

❌ They’re Not Always Accurate

Issuers sometimes send generic codes (05) when the real reason is more specific. This is intentional — revealing exact decline reasons could help fraudsters.

❌ They Don’t Explain Business Rules

A 57 (Transaction Not Permitted) doesn’t tell you which permission is missing. It could be:

  • Card not enabled for international use
  • Merchant category restricted
  • Transaction size above card’s single-purchase limit

❌ They’re Not Standardized Across All Issuers

While ISO 8583 defines the codes, some issuers interpret them differently. One bank’s 51 might appear as another bank’s 05.

Integrating Response Codes in Your System

Best Practices

  1. Log everything: Store the full response, not just Field 39
  2. Map to user-friendly messages: Never show 05 to customers; show “Please contact your bank”
  3. Track decline rates by code: High 14 rates suggest input validation issues
  4. Implement automatic retries carefully: Only for soft declines, with exponential backoff
  5. Monitor for pattern changes: Sudden spikes in specific codes indicate problems

Example Decline Rate Report

SELECT 
    response_code,
    COUNT(*) as decline_count,
    ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 2) as percent
FROM transactions
WHERE response_code != '00'
GROUP BY response_code
ORDER BY decline_count DESC
LIMIT 10;

Complete Response Code Reference

For the full list of 60+ response codes with meanings and actions, visit our Reference Database. You can:

  • Search by code number
  • Filter by card network
  • Copy descriptions directly

Next Steps

Now that you understand how to decode payment declines:

  1. Parse live messages: ISO 8583 Studio — Extract Field 39 from raw hex
  2. Decode EMV context: EMV Tag Inspector — Analyze Field 55 chip data
  3. Validate card numbers: Luhn Validator — Catch 14 errors before submission
  4. Browse all codes: Reference Database — Complete searchable reference
  5. Learn message structure: Understanding ISO 8583 Message Structure — Foundation for debugging
  6. Understand SCA declines: 3D Secure / SCA Guide — response code 1A means authentication is required
  7. Comply with PCI logging: PCI DSS Guide — how to log decline codes without violating Requirement 10
  8. Analyze logs instantly: ISO 8583 AI Copilot Guide — learn how to use local AI to decode your payment data in plaintext.
  9. Route smarter with ML: AI-Driven Intelligent Payment Routing — how response code history powers ML models that optimize processor selection.

This post is part of the ISO 8583 Mastery series. Follow along as we explore payment messaging in depth.

Related Posts

Understanding ISO 8583 Message Structure
Jan 30, 2026 4 min
The Luhn Algorithm Explained: How Credit Card Numbers Validate Themselves
Jan 31, 2026 7 min
Decoding EMV Field 55: A Complete Guide to Chip Card Data
Jan 30, 2026 6 min

💬 Discussion

Have a question or feedback? Leave a comment below — powered by GitHub Discussions.

Frequently Asked Questions

What is an ISO 8583 Response Code (Field 39)?

Field 39 is a 2-character alphanumeric code indicating the final disposition of an authorization request. It tells the terminal whether the transaction was approved, declined, or if there was a system error.

What does a '00' response code mean?

A ‘00’ response code universally means ‘Approved and completed successfully’. It is the standard success code across all major card networks.

What is the difference between a '05' and '51' decline?

‘05’ means ‘Do Not Honor’, which is a generic decline from the issuer often related to fraud rules or account status. ‘51’ specifically means ‘Insufficient Funds’.

\n