StripeRunbook 0/4 done
generic_decline

Stripe Error generic_decline: Generic decline (card_declined)

Warning✕ Not retryable · fix the payloadHTTP 402 Payment RequiredAPI Gateway
TL;DR · 10-second read

The issuer declined without giving Stripe a reason. Ask the customer to contact their bank or use another card; check Radar if many cards decline at once.

Identify: does your log match?

What you see · exact log / response
{
  "error": {
    "code": "card_declined",
    "decline_code": "generic_decline",
    "doc_url": "https://stripe.com/docs/error-codes/card-declined",
    "message": "Your card was declined.",
    "request_log_url": "https://dashboard.stripe.com/test/logs/req_9aBcD1eFgH2iJk",
    "type": "card_error"
  }
}
  1. High

    Issuer fraud rules, no reason given

    Banks often decline cross-border, unusual-amount or new-merchant payments and return a generic reason to avoid tipping off fraudsters.

  2. Medium

    Card not enabled for online payments

    Some debit and prepaid cards are blocked for card-not-present or international transactions.

  3. Low

    Radar or merchant block rule

    A custom Radar rule can block the payment; then the decline shows outcome.type blocked instead of issuer_declined.

Fix

Inspect the charge outcome before guessing

✕ Broken · Node.js
console.log('declined', err.message);
✓ Fixed · Node.js
const pi = await stripe.paymentIntents.retrieve(piId, {
  expand: ['latest_charge'],
});
const o = pi.latest_charge?.outcome;
console.log(o?.type, o?.network_status, o?.reason, o?.risk_level);
// issuer_declined | blocked, declined_by_network, ..., normal|elevated|highest

outcome.type tells you whether the issuer or Radar declined, which decides whether the customer or you must act.

Verify: reproduce it on purpose

Reproduce locally · Stripe CLI
$ stripe payment_intents create --amount=2000 --currency=usd --payment-method=pm_card_chargeDeclined --confirm=true

Run it against a dev environment to trigger generic_decline on purpose and test your error handler.

Prevent

  • Enable 3D Secure via automatic payment methods to lower declines.
  • Pass billing address and email to improve issuer approval.
  • Watch decline rate per BIN country in Radar.

FAQ

How do I test generic_decline?

Use card 4000 0000 0000 0002 in test mode. It returns card_declined with decline_code generic_decline.

Can Stripe tell me why the bank declined?

No. generic_decline means the issuer gave no reason; only the cardholder can get details from their bank.

Should I retry a generic decline?

Not automatically with the same card. Visa and Mastercard penalize repeated retries of declined cards.

Related errors

Last verified 2026-10-19 · Source: Stripe OpenAPI spec + decline codes + webhook docs · Official docs ↗ · ~14,800 searches/mo