How to Fix 'Stripe Payment Attempt Failed Because Additional Action Is Required'
How to Fix 'Stripe Payment Attempt Failed Because Additional Action Is Required'
TL;DR — Quick Answer
1 min readThe 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
- Check your bank app or email. Your bank may have sent an authentication request that needs approval.
- Try the payment again. Some banks require you to explicitly approve the transaction through their mobile app or website.
- Contact your bank. If the issue persists, your bank may be blocking the transaction and can help authorize it.
- Use a different payment method. If your primary card continues to fail, try an alternative card or payment method.
For Developers
- Implement Stripe's Payment Intents API. The older Charges API does not support SCA. Payment Intents handle the authentication flow automatically.
- Use Stripe.js and Stripe Elements. These client-side tools manage the 3D Secure authentication popup that banks require.
- Handle the
requires_actionstatus. When a PaymentIntent returns this status, usestripe.confirmCardPayment()on the client side to trigger the bank's authentication flow. - Update webhook handlers. Ensure your backend handles the
payment_intent.succeededevent 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 3184for 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...
Related Articles
How to Investigate and Diagnose a Drop in Website Traffic
A systematic 9-step approach to diagnosing why your website traffic dropped, from checking analytics channels and pages to investigating algorithm updates and competitor activity.
How to Find and Fix 404 Error Pages Using Web Analytics
404 errors silently damage UX, SEO, and conversions. Learn how to track them with analytics, identify the worst offenders, and fix them with redirects and updated links.
How to Verify That Your Web Analytics Tool Is Working Correctly
A step-by-step checklist to confirm your analytics script is installed correctly, tracking pageviews, recording goals, and not double-counting visitors.