Skip to content

Stripe decline codeStripe: card declined, decline code fraudulent

fraudulent is the Stripe decline code for a payment Stripe suspects is fraud. Show the customer a generic decline, never the reason, and don’t retry the same card. Radar blocks often show as generic_decline instead, so check the payment’s risk outcome.

Short answer

Show the same message as a generic decline and don’t retry the same card. Open the payment in the Dashboard and read the Radar outcome and risk insights. If many fraudulent declines arrive in a short time, treat it as card testing and add rate limits or a CAPTCHA to checkout.

Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.

Why Stripe flags the payment, and the fix

  1. 01

    Stripe suspects the payment is fraud

    “By default, a score of 65 or above indicates elevated risk, while a score of 75 or above indicates high risk.” Stripe, Risk evaluations

    Open the payment in the Dashboard and read the risk level. On Radar plans that show a score, it runs from 0 to 99. By default a high risk payment is blocked before the bank is asked, so the customer isn’t charged.

  2. 02

    The app shows the real reason

    “Don’t report more detailed information to your customer.” Stripe, Decline codes (fraudulent)

    Telling a fraudster the payment looked fraudulent helps them adjust. Catch the card error and show one generic message for fraudulent, lost_card and stolen_card.

    try {
      await stripe.paymentIntents.confirm(paymentIntentId);
    } catch (err) {
      const hide = ['fraudulent', 'lost_card', 'stolen_card', 'merchant_blacklist'];
      if (err.type === 'StripeCardError' && hide.includes(err.decline_code)) {
        console.error('card declined', err.decline_code); // for your logs only
        return res.status(402).json({ message: 'Your card was declined. Try another card or contact your bank.' });
      }
      throw err;
    }
  3. 03

    A burst of declines is card testing

    Many small payments with different cards, often from the same IP address, mean someone is testing stolen cards. Rate limit the payment endpoint, add a CAPTCHA, and require sign-in before checkout.

  4. 04

    A real customer was blocked

    “If Stripe Radar blocks a payment that you know is legitimate, you can remove the block by viewing the payment in the Dashboard and clicking Add to allow list.” Stripe, Risk evaluations

    If you know the customer is real, open the payment in the Dashboard and click Add to allow list, then ask them to pay again. Allow-listing doesn’t retry the payment for you.

Checked against the vendor’s docs on : Stripe docs: Decline codes; Stripe docs: Declines; Stripe docs: Risk evaluations; Stripe docs: Review payments.

Rather hand it over?

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
A buyer in the United States, January 2026. App development on Fiverr
All 127 Fiverr reviews

Related: Stripe lost_card and stolen_card · Stripe generic_decline · Stripe card_velocity_exceeded · Stripe dispute (chargeback)

Questions

More on this error

Was the customer charged?

No. A declined payment isn’t charged. When Stripe blocks a payment it never asks the bank to authorize it, though some banks show a pending amount for a few days.

Should I refund and mark a payment as fraudulent?

Only for real fraud. Use refund and mark as fraudulent in the review queue for a payment you are sure was fraud. For a customer who just wants money back, use a plain refund.

Should I retry the payment?

Not with the same card. Ask the customer for another payment method, and look at the charge in the Dashboard before you let a flagged customer through.

Can you fix it for me?

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

A different error?

Describe it and get a written quote

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.