Payment Decline Code Lookup

Search Stripe's card decline codes, see whether it's worth retrying, and get a plain-language line to show the customer.

Describe the result you need. AI will set up the tool and ask for any missing details.

Configure with AI

Enter to submit · Shift + Enter for a new line

Sent to AI. Leave out passwords and private customer data.

47 of 47 decline codes

  • authentication_requiredWorth retrying

    The payment needs extra verification, usually 3D Secure.

    Tell the customer: Your bank needs you to verify this payment. Try again and complete the verification step when it appears.

  • authentication_not_handledWorth retrying

    The customer skipped the required verification step, so the bank declined it again.

    Tell the customer: Try the payment again and complete the verification step this time.

  • approve_with_idWorth retrying

    The payment couldn't be authorized as submitted.

    Tell the customer: Try the payment again.

  • call_issuerDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • card_not_supportedDon't just retry

    The card doesn't support this type of purchase.

    Tell the customer: Check with your bank that this card can be used for this kind of purchase, or try another card.

  • card_velocity_exceededDon't just retry

    The customer has hit a balance, credit or transaction-amount limit.

    Tell the customer: Contact your bank, or try a different card.

  • currency_not_supportedDon't just retry

    The card doesn't support this currency.

    Tell the customer: Try a different card.

  • do_not_honorDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • duplicate_transactionDon't just retry

    An identical charge (same amount, same card) went through very recently.

    Tell the customer: Check your order history first, this charge may already have gone through.

  • expired_cardDon't just retry

    The card has expired.

    Tell the customer: Use a different card.

  • fraudulentDon't just retry

    Stripe suspects the payment is fraudulent.

    Tell the customer: Your card was declined. Try a different card or contact your bank.

  • generic_declineDon't just retry

    A generic decline, or blocked by Stripe Radar.

    Tell the customer: Your card was declined. Try a different card or contact your bank.

  • incorrect_addressWorth retrying

    The billing address doesn't match.

    Tell the customer: Double-check the billing address matches your card statement and try again.

  • incorrect_cvcWorth retrying

    The security code (CVC) is wrong.

    Tell the customer: Check the 3 or 4 digit code on your card and try again.

  • incorrect_numberWorth retrying

    The card number is wrong.

    Tell the customer: Re-check the card number and try again.

  • incorrect_pinWorth retrying

    The PIN entered was wrong (card-present payments only).

    Tell the customer: Re-enter your PIN.

  • incorrect_zipWorth retrying

    The postal code doesn't match.

    Tell the customer: Check the billing postal code and try again.

  • insufficient_fundsDon't just retry

    Not enough available balance on the card.

    Tell the customer: Use a different card or payment method.

  • invalid_accountDon't just retry

    The card, or the account behind it, is invalid.

    Tell the customer: Contact your bank to check the card is working, or try another card.

  • invalid_amountDon't just retry

    The amount is invalid or over the card's allowed limit.

    Tell the customer: If the amount looks right, check with your bank that you can make a purchase this size.

  • invalid_cvcWorth retrying

    The security code (CVC) is wrong or in the wrong format.

    Tell the customer: Check the 3 or 4 digit code on your card and try again.

  • invalid_expiry_monthWorth retrying

    The expiry month is invalid.

    Tell the customer: Re-check the card's expiry date.

  • invalid_expiry_yearWorth retrying

    The expiry year is invalid.

    Tell the customer: Re-check the card's expiry date.

  • invalid_numberWorth retrying

    The card number is in the wrong format.

    Tell the customer: Re-check the card number and try again.

  • invalid_pinWorth retrying

    The PIN is wrong or in the wrong format (card-present payments only).

    Tell the customer: Re-enter your PIN.

  • issuer_not_availableWorth retrying

    The card issuer couldn't be reached to authorize the payment.

    Tell the customer: Try the payment again in a few minutes.

  • lost_cardDon't just retry

    The card has been reported lost.

    Tell the customer: Your card was declined. Try a different card or contact your bank.

  • merchant_blacklistDon't just retry

    The payment matches a value on your own block list.

    Tell the customer: Your card was declined. Try a different card or contact your bank.

  • new_account_information_availableDon't just retry

    The card, or the account behind it, is invalid.

    Tell the customer: Contact your bank for more information, or try another card.

  • no_action_takenDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • not_permittedDon't just retry

    This payment isn't permitted.

    Tell the customer: Contact your bank, or try a different card.

  • offline_pin_requiredWorth retrying

    The card needs a PIN (card-present payments only).

    Tell the customer: Insert the card and enter your PIN.

  • online_or_offline_pin_requiredWorth retrying

    The card needs a PIN (card-present payments only).

    Tell the customer: Insert the card and enter your PIN.

  • pickup_cardDon't just retry

    The card may have been reported lost or stolen.

    Tell the customer: Contact your bank, or try a different card.

  • pin_try_exceededDon't just retry

    Too many wrong PIN attempts.

    Tell the customer: Use a different card or payment method.

  • processing_errorWorth retrying

    An error happened while processing the card.

    Tell the customer: Try the payment again. If it keeps failing, contact your bank.

  • reenter_transactionWorth retrying

    The issuer couldn't process the payment for an unspecified reason.

    Tell the customer: Try the payment again. If it keeps failing, contact your bank.

  • restricted_cardDon't just retry

    The card may have been reported lost or stolen.

    Tell the customer: Contact your bank, or try a different card.

  • revocation_of_all_authorizationsDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • revocation_of_authorizationDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • security_violationDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • service_not_allowedDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • stolen_cardDon't just retry

    The card has been reported stolen.

    Tell the customer: Your card was declined. Try a different card or contact your bank.

  • stop_payment_orderDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • testmode_declineDon't just retry

    A Stripe test card number was used.

    Tell the customer: This only happens with test cards. Use a real card to complete a real payment.

  • transaction_not_allowedDon't just retry

    Declined for an unspecified reason.

    Tell the customer: Contact your bank, or try a different card.

  • withdrawal_count_limit_exceededDon't just retry

    The customer has hit a balance or credit limit.

    Tell the customer: Use a different card or payment method.

What a decline code actually tells you

When a card payment fails, Stripe returns a decline_code alongside the generic error, with a more specific reason than the card network's own decline code alone gives you. That code is what should decide your next move: retry the same card, ask for a different one, or just say the payment was declined without more detail.

A few codes (fraudulent, stolen_card, lost_card, merchant_blacklist) are deliberately vague on purpose. Stripe recommends showing the customer the same generic message you'd show for any decline, not the specific reason, since surfacing it can tip off whoever's actually running the card.

Using this on Shopify or WooCommerce

  • Shopify: Shopify Payments runs on Stripe under the hood for many regions; check a failed order's timeline or your Stripe Dashboard (if you use Stripe directly through a custom gateway) for the decline_code.
  • WooCommerce: the official WooCommerce Stripe Gateway logs the decline code in the order notes and in WooCommerce → Status → Logs. Search there after a failed payment.

Questions people ask

Should I always retry a decline automatically?

No. Some codes (insufficient_funds, expired_card, stolen_card) won't succeed on retry and just annoy the customer or risk a second decline fee from your processor. Only retry the codes marked "worth retrying" here.

Why does Stripe hide the real reason for some declines?

For fraud-related codes, showing the specific reason ("reported stolen") can help someone testing stolen cards learn which ones still work. Stripe recommends a generic message for those instead.

Is this specific to Stripe, or does it cover other processors too?

This list is Stripe's own decline codes. PayPal, Authorize.net and other processors use different (though often similar) code sets.

Does a decline always mean the customer's card is the problem?

Usually, but not always. issuer_not_available and processing_error point at a temporary problem on the bank's or network's side, worth a retry a few minutes later.

Want this builtinto your store?

I'm Emmanuel, a Shopify and WooCommerce developer. If this tool pointed at something you'd rather have fixed for you (a faster store, cleaner product data, a migration, a custom feature), send me a note.

Emmanuel Asika

Emmanuel Asika

Shopify & WooCommerce developer, Dublin

I build and fix online stores: new builds, migrations, speed, SEO and the custom bits apps can't do.

hello@emmanuelasika.com

Last reviewed 30 September 2026.

Sources: Stripe Docs: Decline codes