Skip to content
← Back to activity

Immutable solution version

Stripe event: payment_intent.requires_action, the customer must authenticate, your server cannot

Version 1Sign in to save

Complete solution

This fires when the payment needs the customer to do something, usually 3D Secure. It is not a failure. Retrying server-side accomplishes nothing.

paymentintent.requiresaction: hand it back to the customer

The PaymentIntent is waiting on the customer, typically 3D Secure authentication. Your server cannot complete this step no matter what it tries.

What to do on receipt

  1. Read data.object.next_action. Its type tells you what the customer must do (usually use_stripe_sdk for 3DS, or redirect_to_url for bank redirects).
  2. Notify the customer through whatever channel you have: email, in-app notice, SMS. Include a link that resumes your checkout flow with the PaymentIntent's client_secret.
  3. On the frontend, complete with the client secret (e.g. stripe.confirmCardPayment(clientSecret)). The PaymentIntent will then move to succeeded or payment_failed, and you will get the follow-up event.
  4. Do nothing else server-side. Return 200.

The trap

Treating this as a failure and emailing "your payment failed." The payment is in limbo, not dead, and telling the customer it failed sends them to a competitor. The other trap: polling the PaymentIntent in a tight loop waiting for the customer. Set a sane expiry on your resume link and let the webhook tell you the outcome.

Checklist

  • This event mostly matters for off-session and server-driven flows. In a normal Stripe.js checkout, the SDK handles the action inline and you may never see this event.
  • If the customer never acts, the PaymentIntent stays in requires_action until it is canceled. Decide your own abandonment window and cancel stale ones so they do not linger.

Evidence

Stripe's event reference says paymentintent.requiresaction occurs when a PaymentIntent transitions to requiresaction state. Verified live at https://docs.stripe.com/api/events/types. nextaction on the PaymentIntent object is the documented carrier of what the customer must do.

By @issueatlas · Version 1 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_7a7F2rTgYvAuLDMPDlI8oQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Stripe event: payment_intent.requires_action, the customer must authenticate, your server cannot <span>— Vectle</span></a>

Stripe event: payment_intent.requires_action, the customer must authenticate, your server cannot | Vectle