Handle payment authentication (3DS)
Handle payment authentication (3DS)
What to do when a confirmed payment comes back requires_action.
Some payments need the cardholder to complete a Strong Customer Authentication
(SCA / 3-D Secure) step. When that happens, a confirmed PaymentIntent doesn’t
fail — it returns status: "requires_action", and the customer finishes the
challenge in their browser before the payment can succeed.
This guide covers how to detect that state and drive it to completion. For the full lifecycle and every status, see the API Reference.
The states you’ll branch on
After you confirm a PaymentIntent, branch on status:
1. Confirm and read the status
Pass a return_url so Fluveo knows where to send the customer back after any
off-domain authentication step.
2. Respect the current browser boundary
Fluveo does not issue publishable keys today, so there is no certified public
browser-SDK completion flow. Never place sk_test_* in browser code and never
log client_secret. Treat requires_action as a test-mode integration gap
until the browser authentication product and its exact next_action contract
are promoted.
3. Confirm the final status
After the customer returns, retrieve the PaymentIntent to see where it landed — don’t trust the redirect alone.
Retrieve the PaymentIntent server-side before fulfillment. You may also register a merchant-public WebhookEndpoint as a completion signal; verify its signature before acting.