Tracking down card declines with Stripe

There are several reasons why a credit card can be declined using the Payment for Stripe app. The reasons are generally surfaced in the app after a charge with a descriptive label outlining the reasoning. There are two possible reasons why a credit card payment can fail:

  • Payments declined by the card issuer
  • Blocked payments (Stripe Radar, fraud, etc)
Payments declined by card issuers

Card issuers have automated systems that determine whether the charge should be authorized or not. The algorithms look at various signals instantaneously, from spending habits, account balance and credit card information, as well as location of the charge. Unfortunately, not all of the information that led to the decline is shared with Stripe, and subsequently to the Payment app. In rare cases, card issuers may also provide helpful explanations, but generally, card decline reasons can be hard to track down.

In some cases, the type of restrictions on the credit card can also cause certain declines. For example, using an FSA/HSA card to create a charge for a non-medical payment.

In addition, geographic location can also play a role in declined or failed payments. If credit cards are issued in a different country than your Stripe account, you may be at a higher risk of fraud, and thus risk a higher rate of failed payments.

Payments blocked by Stripe Radar

Every Stripe account comes with automated fraud verification for every single charge made on the Stripe network. The reason this is helpful is simple: Stripe processes billions of dollars in transactions every single day, scanning and identifying trends that give your Stripe account real time feedback on fraud across a variety of mediums. In addition, the Radar prevention tool can also be used to scale up and down your protection, ultimately putting you in control of how finicky your payment protection should be.

How can card declines be avoided?

One of the easiest ways is by using a PCI-compliant card reader, such as Stripe Terminal. Not only does using a card reader give you an abundance of new ways to collect payment methods like Apple Pay and Google Pay, but you'll also be able to accept chip-enabled cards; further preventing fraud. Although manually inputting card numbers is supported by the Payment app, they are still treated by payment gateways and issuers like an online purchase would be, as there is no evidence that the card was “present” at the time of the transaction.

In some cases, it may also be helpful to provide additional information with the charge. At the very least, including a billing zip or postal code to be validated with the credit card can help exponentially, but other information including name on the card and billing address can also be validated and checked against known fraudulent transactions. Lastly, providing a billing email address also allows Stripe Radar to check to see if that email address has been used across the Stripe network (globally) for other types of fraud.

What are the bank decline codes?
Decline CodeDescription
authentication_requiredThe card was declined as the transaction requires authentication.
approve_with_idThe payment cannot be authorized.
call_issuerThe card has been declined for an unknown reason.
card_not_supportedThe card does not support this type of purchase.
card_velocity_exceededThe customer has exceeded the balance or credit limit available on their card.
currency_not_supportedThe card does not support the specified currency.
do_not_honorThe card has been declined for an unknown reason.
do_not_try_againThe card has been declined for an unknown reason.
duplicate_transactionA transaction with identical amount and credit card information was submitted very recently.
expired_cardThe card has expired.
fraudulentThe payment has been declined as Stripe suspects it is fraudulent.
generic_declineThe card has been declined for an unknown reason.
incorrect_numberThe card number is incorrect.
incorrect_cvcThe CVC number is incorrect.
incorrect_pinThe PIN entered is incorrect. This decline code only applies to payments made with a card reader.
incorrect_zipThe ZIP/postal code is incorrect.
insufficient_fundsThe card has insufficient funds to complete the purchase.
invalid_accountThe card, or account the card is connected to, is invalid.
invalid_amountThe payment amount is invalid, or exceeds the amount that is allowed.
invalid_cvcThe CVC number is incorrect.
invalid_expiry_yearThe expiration year invalid.
invalid_numberThe card number is incorrect.
invalid_pinThe PIN entered is incorrect. This decline code only applies to payments made with a card reader.
issuer_not_availableThe card issuer could not be reached, so the payment could not be authorized.
lost_cardThe payment has been declined because the card is reported lost.
merchant_blacklistThe payment has been declined because it matches a value on the Stripe user's block list.
new_account_information_availableThe card, or account the card is connected to, is invalid.
no_action_takenThe card has been declined for an unknown reason.
not_permittedThe payment is not permitted.
offline_pin_requiredThe card has been declined as it requires a PIN.
online_or_offline_pin_requiredThe card has been declined as it requires a PIN.
pickup_cardThe card cannot be used to make this payment (it is possible it has been reported lost or stolen).
pin_try_exceededThe allowable number of PIN tries has been exceeded.
processing_errorAn error occurred while processing the card.
reenter_transactionThe payment could not be processed by the issuer for an unknown reason.
restricted_cardThe card cannot be used to make this payment (it is possible it has been reported lost or stolen).
revocation_of_all_authorizationsThe card has been declined for an unknown reason.
revocation_of_authorizationThe card has been declined for an unknown reason.
security_violationThe card has been declined for an unknown reason.
service_not_allowedThe card has been declined for an unknown reason.
stolen_cardThe payment has been declined because the card is reported stolen.
stop_payment_orderThe card has been declined for an unknown reason.
testmode_declineA Stripe test card number was used.
transaction_not_allowedThe card has been declined for an unknown reason.
try_again_laterThe card has been declined for an unknown reason.
withdrawal_count_limit_exceededThe customer has exceeded the balance or credit limit available on their card.

The list above is directly from Stripe. For a complete list, as well as suggested next steps, please visit: https://stripe.com/docs/declines/codes

Ryan Scherf

Ryan Scherf

Solo-founder. Engineer. Designer.
Minneapolis, MN