Stripe · Decline codes
What does the Stripe authentication_not_handled decline code mean?
Checked
Stripe's authentication_not_handled decline code is a follow-up to authentication_required. The card's bank asked for the cardholder to verify the payment, the payment went ahead without that verification, and the bank declined it again. The fix is to run the 3D Secure (strong customer authentication) step and let the shopper complete it. For payments taken while the customer is away, Stripe advises preparing authentication while the customer is present and falling back to an on-session payment if needed.
- Type
- Authentication needed (soft decline)
- Who declined
- The card's bank
- Retry
- Only with the verification step completed
- Shopper action
- Pay again and finish the bank's verification screen
- Merchant action
- Make sure checkout runs 3D Secure; bring off-session customers back to confirm
What PlatformDTC does
PlatformDTC's checkout routing treats authentication_not_handled as a 3D Secure case: the payment stays on the same processor for verification and is never offered to a backup processor. On renewals, on the fixed schedule or with Smart retry, it is not retried blindly: the subscription is held past due and the customer gets an "action required" email asking them to confirm the payment with their bank.
Why it happens
It usually means an integration or flow let the payment continue without showing the bank's challenge, or a saved card was charged without the customer present when the bank wanted them to verify.
What the shopper can do
Go back to checkout and pay again, and complete the verification window or banking-app prompt when it appears.
What the store can do
If you see this often, your checkout is skipping verification the bank asked for. For subscriptions, collect and authenticate the card while the customer is present (when they first subscribe), and email them a confirmation link when a later charge asks for verification again.
For developers
Stripe's guidance: run the EMV 3D Secure or SCA flow; for off-session payments, collect and prepare authentication on-session first, then fall back to on-session if needed. The value is in last_payment_error.decline_code.
Frequently asked questions
- What is the difference between authentication_required and authentication_not_handled?
- authentication_required is the bank asking for verification. authentication_not_handled means the payment continued without that verification, so the bank declined again.
- Will retrying the same payment work?
- Not without verification. The bank wants the cardholder to approve the payment, so the retry has to include the 3D Secure step.
Sources
- Stripe decline codes — Stripe
Related
- authentication_required — The bank wants the cardholder to verify the payment, usually with 3D Secure.
- payment_intent_authentication_failure — The card failed the bank's authentication check (such as 3-D Secure).
- mobile_device_authentication_required — The payment needs authentication; the customer should tap their phone again.
- approve_with_id — The bank could not authorize the payment as sent; one more try may work.
- call_issuer — The bank declined without a reason and wants the cardholder to contact it.
- card_not_supported — The card can't be used for this kind of purchase.
- card_velocity_exceeded — The card's balance, credit limit or amount limit has been reached.
- currency_not_supported — The card can't be charged in the currency of the payment.