LostChurn Docs
API Reference

Decline Code Reference

Complete reference of payment decline codes across Stripe, Braintree, and generic processors — with categories, descriptions, and recommended actions.

This page provides a comprehensive reference of all decline codes that LostChurn maps across supported payment processors. Each code is classified into one of four decline categories that determine the recovery strategy.

Category Summary

CategoryRecovery StrategyExpected Recovery Rate
Soft RetrySilent automatic retries at optimized times30-40%
Hard CustomerDunning campaigns prompting customer action10-20%
TerminalNo retry -- mark as unrecoverable0%
UnknownTreated as Hard Customer (conservative default)10-15%

Stripe Decline Codes

Soft Retry

CodeDescriptionSubcategoryMax RetriesCooldown
insufficient_fundsInsufficient funds in the accountBalance448h
processing_errorProcessing error at the issuerIssuer Temporary324h
try_again_laterIssuer temporarily unable to processIssuer Temporary312h
card_velocity_exceededToo many transactions in short periodRate Limit272h
generic_declineDeclined without specific reasonGeneric348h
do_not_honorIssuer declined without reasonGeneric348h
issuer_not_availableIssuer system temporarily unavailableIssuer Temporary312h
reenter_transactionIssuer requests re-entryIssuer Temporary26h
withdrawal_count_limit_exceededExceeded withdrawal count limitRate Limit272h
service_not_allowedCard type not accepted for serviceGeneric248h
transaction_not_allowedTransaction type not permittedGeneric248h
not_permittedTransaction not permitted to cardholderGeneric248h
offline_pin_requiredOffline PIN verification requiredIssuer Temporary224h
online_or_offline_pin_requiredPIN verification requiredIssuer Temporary224h
no_action_takenIssuer could not processGeneric248h
revocation_of_all_authorizationsAll authorizations revokedGeneric172h
approve_with_idCan be approved with identificationGeneric224h

Hard Customer

CodeDescriptionSubcategoryCustomer Action
expired_cardCard has expiredCard ExpiredUpdate payment method
incorrect_cvcCVC number is incorrectCard DataRe-enter card details
incorrect_numberCard number is incorrectCard DataRe-enter card details
incorrect_zipZIP/postal code is incorrectCard DataRe-enter card details
invalid_cvcCVC is invalidCard DataRe-enter card details
invalid_numberCard number is invalidCard DataRe-enter card details
invalid_expiry_monthExpiry month is invalidCard DataRe-enter card details
invalid_expiry_yearExpiry year is invalidCard DataRe-enter card details
authentication_required3D Secure authentication requiredSCA / 3D SecureComplete authentication
call_issuerCustomer must contact card issuerVerificationContact bank
card_not_supportedCard does not support this purchase typeCard TypeUse a different card
currency_not_supportedCard does not support this currencyCard TypeUse a different card
do_not_try_againIssuer has permanently blocked transactionIssuer BlockContact bank or update card
new_account_information_availableCard renewed with new detailsCard UpdatedUpdate payment method
restricted_cardCard restricted by issuerIssuer BlockContact bank
stop_payment_orderCardholder requested stop on paymentIssuer BlockContact merchant
security_violationSecurity violation detectedSecurityContact bank
card_declinedGeneral card declineGenericContact bank or update card
invalid_accountAccount is invalidGenericUpdate payment method
live_mode_test_cardTest card used in live modeCard DataUse a real card
pin_try_exceededPIN entry attempts exceededSecurityContact bank
testmode_declineDecline in test modeCard DataUse test-approved card

Terminal

CodeDescriptionSubcategoryWhy Terminal
fraudulentSuspected fraudFraudFraud risk -- never retry
merchant_blacklistCard on merchant fraud blacklistFraudPermanently blocked
stolen_cardCard reported stolenFraudCard deactivated
lost_cardCard reported lostFraudCard deactivated
pickup_cardCard ordered confiscated by issuerFraudCard deactivated
revocation_of_authorizationAuthorization permanently revokedClosed AccountCannot charge

Never retry Terminal decline codes. Repeated attempts on cards flagged as stolen or fraudulent can result in fines from card networks and may jeopardize your merchant account.


Braintree Decline Codes

Braintree uses numeric processor response codes. LostChurn maps these to the same four categories.

Soft Retry

CodeDescriptionSubcategoryMax RetriesCooldown
2001Insufficient fundsBalance448h
2002Limit exceededRate Limit272h
2003Cardholder activity limit exceededRate Limit272h
2038Processor declinedIssuer Temporary324h
2046DeclinedGeneric348h
2047Call issuer -- general declineGeneric348h
2053Card reported as lost or stolen (soft)Generic172h
2057Issuer or cardholder restrictionGeneric248h
2059Contact issuerGeneric248h
2099General processor errorIssuer Temporary312h

Hard Customer

CodeDescriptionSubcategoryCustomer Action
2004Expired cardCard ExpiredUpdate payment method
2005Invalid credit card numberCard DataRe-enter card details
2006Invalid expiration dateCard DataRe-enter card details
2010Card issuer declined CVVCard DataRe-enter card details
2014Card type not acceptedCard TypeUse a different card
2024Card type not enabledCard TypeUse a different card
2044Decline -- CVV2/CID failureCard DataRe-enter card details
2048Invalid amountGenericContact merchant
2051Insufficient funds (hard)GenericAdd funds or use different card
2074Funding source funding failedGenericUpdate funding source
2075PayPal business account restrictedGenericContact PayPal

Terminal

CodeDescriptionSubcategoryWhy Terminal
2000Do not honorFraudGeneral permanent decline
2007No accountClosed AccountAccount does not exist
2009No such issuerClosed AccountInvalid routing
2015Transaction not allowedFraudPermanently blocked
2041Declined -- fraud detectedFraudFraud risk
2043Fraud detected -- card reported lost/stolenFraudCard deactivated
2060Contact gatewayClosed AccountGateway-level block
2062Invalid gateway configurationClosed AccountConfiguration issue

Generic Decline Codes

For payment processors not explicitly mapped, LostChurn uses a generic mapping based on common decline patterns.

Soft Retry

PatternDescriptionSubcategory
insufficient_fundsInsufficient fundsBalance
temporary_failureTemporary processing failureIssuer Temporary
rate_limitedRate limit exceededRate Limit
try_againRetry suggestedIssuer Temporary
processing_errorGeneral processing errorIssuer Temporary
issuer_unavailableIssuer system downIssuer Temporary

Hard Customer

PatternDescriptionSubcategory
expiredCard or account expiredCard Expired
invalid_cardCard details invalidCard Data
invalid_cvcCVC/CVV invalidCard Data
authentication_requiredAuthentication neededSCA / 3D Secure
card_not_supportedCard type not acceptedCard Type
restrictedCard or account restrictedIssuer Block
contact_issuerCustomer must contact bankVerification

Terminal

PatternDescriptionSubcategory
fraudFraud detectedFraud
stolenCard reported stolenFraud
lostCard reported lostFraud
blacklistedCard blacklistedFraud
account_closedAccount permanently closedClosed Account

How LostChurn Uses Decline Codes

When a failed payment webhook arrives, LostChurn:

  1. Extracts the raw decline code from the webhook payload.
  2. Looks up the code in the PSP-specific mapping table.
  3. Assigns a category and subcategory that determine the recovery strategy.
  4. Sets retry parameters (max retries, cooldown period) based on the subcategory.
  5. Routes to the appropriate handler -- silent retries for Soft Retry, dunning campaigns for Hard Customer, or immediate terminal marking.

If a code is not found in the mapping table, it defaults to Unknown and is treated as Hard Customer to avoid retrying codes that should not be retried.

LostChurn's decline code mapping is updated regularly as payment processors introduce new codes. If you encounter an unmapped code, it will be classified as Unknown until the mapping is updated. You can report unmapped codes to support@lostchurn.com to expedite mapping.

Querying Decline Codes via API

You can filter payments by decline code or category using the Payments API:

# All payments with insufficient_funds decline
curl "https://api.lostchurn.com/v1/payments?decline_code=insufficient_funds" \
  -H "Authorization: Bearer lc_live_your_api_key"

# All payments in the soft_retry category
curl "https://api.lostchurn.com/v1/payments?decline_category=soft_retry" \
  -H "Authorization: Bearer lc_live_your_api_key"

Next Steps

On this page