Skip to content

Stripe API errorStripe: payment_intent_authentication_failure (3D Secure failed)

payment_intent_authentication_failure is the Stripe error for a card payment whose 3D Secure check failed, so the bank never approved it. The PaymentIntent goes back to requires_payment_method. Nothing is charged, and the customer can retry the check or pay with another card.

Short answer

Catch the error after confirmPayment, show a message that the bank couldn’t confirm the payment, and keep the same PaymentIntent so the customer can try again or enter another card. For redirect flows, read the PaymentIntent on your return page and check for requires_payment_method. Test it with card 4000000000003220 and the Failure button.

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

What the error means, and what to do

  1. 01

    The customer failed or closed the 3D Secure check

    “The provided payment method has failed authentication. Provide a new payment method to attempt to fulfill this PaymentIntent again.” Stripe, Error codes (payment_intent_authentication_failure)

    The bank asked for a code, an app approval or a password, and the customer got it wrong, cancelled or closed the window. Stripe reports this as an authentication failure, not a card decline.

  2. 02

    Let the customer try again

    “Failure: The PaymentIntent transitions to a status of requires_payment_method, indicating that you need to try a different payment method, or you can retry 3DS by reconfirming.” Stripe, Authenticate with 3D Secure

    Keep the same PaymentIntent. Confirming it again starts a new 3D Secure check, and a new card can go through the same flow.

    const { error } = await stripe.confirmPayment({
      elements,
      confirmParams: { return_url: 'https://example.com/done' },
      redirect: 'if_required',
    });
    if (error?.code === 'payment_intent_authentication_failure') {
      showMessage('Your bank couldn’t confirm this payment. Try again or use another card.');
    }
  3. 03

    Redirect flows end on your return page

    When the check happens on a redirect, the error doesn’t come back from confirmPayment. Retrieve the PaymentIntent on the return page and show the retry message when its status is requires_payment_method.

  4. 04

    Test it before customers hit it

    “Clicking the Failure button simulates an unsuccessful attempt at authentication.” Stripe, Authenticate with 3D Secure (testing)

    In a sandbox, pay with test card 4000000000003220, which always requires 3D Secure, then click Failure on Stripe’s test page to see the error your app shows.

Checked against the vendor’s docs on : Stripe docs: Error codes; Stripe docs: Authenticate with 3D Secure.

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 authentication_required decline · Stripe subscription incomplete (requires_action) · Stripe card declined (generic_decline) · Stripe card_not_supported

Questions

More on this error

Was the customer charged?

No. The payment stops at authentication, and the PaymentIntent waits for a new attempt in requires_payment_method.

What about renewals that need 3D Secure?

Off-session charges that need 3D Secure usually fail with authentication_required instead, because the customer isn’t there to complete the check. Either way, send the customer to a page where they can pay on session, such as the invoice’s hosted page.

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.