Tutorials

How to Fix 'Stripe Payment Attempt Failed Because Additional Action Is Required'

How to Fix 'Stripe Payment Attempt Failed Because Additional Action Is Required'

Flowsery Team
Flowsery Team
1 min read

TL;DR — Quick Answer

1 min read

The Stripe 'additional action required' error is caused by Strong Customer Authentication (SCA) under EU PSD2 regulations. Fix it by implementing the Payment Intents API and handling the 3D Secure authentication flow.

If you encounter the Stripe error "payment attempt failed because additional action is required," this guide explains what causes it and how to resolve it.

What Causes This Error

This error typically occurs because of Strong Customer Authentication (SCA) requirements under European PSD2 regulations. SCA requires two-factor authentication for many online payments, meaning customers must verify their identity through their bank before the payment completes.

When a payment requires SCA but your integration does not handle the authentication flow, Stripe returns this error.

How to Fix It

For Customers

  1. Check your bank app or email. Your bank may have sent an authentication request that needs approval.
  2. Try the payment again. Some banks require you to explicitly approve the transaction through their mobile app or website.
  3. Contact your bank. If the issue persists, your bank may be blocking the transaction and can help authorize it.
  4. Use a different payment method. If your primary card continues to fail, try an alternative card or payment method.

For Developers

  1. Implement Stripe's Payment Intents API. The older Charges API does not support SCA. Payment Intents handle the authentication flow automatically.
  2. Use Stripe.js and Stripe Elements. These client-side tools manage the 3D Secure authentication popup that banks require.
  3. Handle the requires_action status. When a PaymentIntent returns this status, use stripe.confirmCardPayment() on the client side to trigger the bank's authentication flow.
  4. Update webhook handlers. Ensure your backend handles the payment_intent.succeeded event that fires after successful authentication, not just the initial creation event.

Example Flow

1. Customer submits payment
2. Stripe returns PaymentIntent with status: requires_action
3. Your frontend calls stripe.confirmCardPayment(clientSecret)
4. Customer completes bank authentication (3D Secure popup)
5. Stripe confirms payment and triggers webhook
6. Your backend processes the successful payment

Preventing Future Issues

  • Always use the Payment Intents API for new integrations
  • Test with Stripe's SCA test card numbers (e.g., 4000 0027 6000 3184 for authentication required)
  • Implement proper error handling for all payment statuses
  • Keep your Stripe library versions up to date

The SCA requirement affects all businesses processing payments from European customers. Implementing proper payment authentication is not optional -- it is a regulatory requirement.

Was this article helpful?

Let us know what you think!

Before you go...

Flowsery

Flowsery

Revenue-first analytics for your website

Track every visitor, source, and conversion in real time. Simple, powerful, and fully GDPR compliant.

Flowsery

Real-time dashboard

Goal tracking

Cookie-free tracking

Related Articles