How to test the Indian credit card 3DS flow with Stripe in Lago
Last updated: July 10, 2026
Lago applies India-specific payment settings based on the country field on the Lago customer record, not on the card itself. Setting a customer's country to IN is what triggers the RBI-compliant 3DS flow; without it, Lago treats the payment as a standard off-session charge and errors out if Stripe requires 3DS authentication, so payment.requires_action never fires.
How it works
When a customer's country is IN, Lago adjusts the Stripe PaymentIntent parameters to comply with RBI (Reserve Bank of India) recurring payment mandates: it disables off_session mode and allows requires_action responses.
How to set it up
Set the customer's
countryfield to"IN", a top-level field on the customer record, viaPOST /api/v1/customersorPUT /api/v1/customers/:external_id({"customer": {"country": "IN", ...}}), or in the Lago UI under the customer's billing country.Use a test card from Stripe's India recurring payments test cards page, not the general Stripe test cards page. The India-specific cards are at https://docs.stripe.com/india-recurring-payments#testing.
Trigger a payment. Lago receives a
requires_actionstatus from Stripe, stores the 3DS redirect URL, and fires thepayment.requires_actionwebhook.
If the webhook still isn't firing
Check that invoice.customer.country is exactly "IN" (two-letter ISO code, uppercase). The 3DS flow is gated on this exact value; other India-related fields like city or address aren't used for this check.
This article reflects guidance drawn from customer case resolutions. It is not officially supported documentation and may not apply to all situations.