India recurring payments
The Reserve Bank of India (RBI) issued a directive (amended subsequently in December 2020 and March 2021) that introduces additional security measures for recurring payments on India issued cards. These measures include:
- Banks need to register cardholders and create an e-mandate through a one-time process, using additional factor authentication (AFA) like 3D Secure (3DS).
- Banks must alert cardholders at least 24 hours before charges take place and give them the ability to opt out of transactions.
- Recurring transactions over 15,000 INR (or equivalent in other currencies) must go through AFA each time.
If you’re an India-based Stripe user or an international (non-IN) Stripe user, your business is impacted if you have customers who use India cards for:
- Off-session payments
- Subscriptions or Invoices where the
collection_method
is set tocharge_automatically
How payments work with an e-mandate
Stripe has worked with a partner platform to support registering e-mandates and issuing pre-debit notifications to customers.
Note
We don’t currently offer the use of e-mandates to Stripe users in Mexico and Japan.
Depending on how you’ve integrated with Stripe, you might need to send Stripe additional information to set up a mandate. The customer must go through AFA (3DS) to register the mandate.
Subsequent off-session payments or auto-debits for a Subscription undergo a significant change. Customers need to receive a pre-debit notification at least 24 hours before the actual payment with the exact debit amount mentioned. The pre-debit notification contains information about the payment and an option to cancel the mandate. If the payment amount is above 15,000 INR or the mandate’s maximum amount, the pre-debit notification contains a link to perform AFA (3DS) to authorize the payment.
Because Stripe is integrating with a partner platform, we wait 26 hours before charging the customer after receiving a payment request (we add a buffer for possible downstream issues, which necessitates the 26 hours advance notification). This means that Stripe delays collecting payment by 26 hours.
Without a mandate for an off-session payment, the card issuer will likely decline the payment.
Integration
Pre-debit notification
When the off-session PaymentIntent is confirmed, the issuing bank sends the customer the pre-debit notification. The PaymentIntent transitions to a processing
state for the entire duration of the pre-debit notification period (26 hours) and can’t be canceled.
{ "object": "payment_intent", ... "processing": { "card": { "customer_notification": { "approval_requested": true, "completes_at": 1677307005 } }, "type": "card" }, ... "status": "processing", ... }
If processing.card.customer_notification.approval_requested is true
, the customer needs to authenticate the payment using the pre-debit notification sent to them by the issuing bank.
The processing.card.customer_notification.completes_at attribute specifies the time that the Stripe attempts to charge the card. If successfully processing the payment requires customer approval, they need to authenticate the payment by the specified time.
Decline codes
Note the decline codes that can occur in the following scenarios:
Decline code | Description |
---|---|
india_recurring_payment_mandate_canceled | This decline code is shown when a payment is attempted using a canceled mandate |
transaction_not_approved | This decline code is shown when a payment is attempted and the customer has paused permissions to auto-debit, or doesn’t authenticate the payment when it’s required. |
Testing
You can use these test card numbers to simulate different scenarios.
In test mode, it takes approximately 15 minutes for the PaymentIntent to transition out of the processing
state.
Caution
Stripe no longer supports 3D Secure 1, except for IN Stripe accounts. If you have a non-IN account, use the 3D Secure 2 test cards. If a non-IN business uses a 3D Secure 1 test card, a mandate isn’t created.
Limitations
Keep in mind the following limitations:
- Stripe attempts to automatically create mandates only on Subscriptions created after October 1, 2021. If you have a Subscription created before then, cancel and create a new Subscription to make sure a mandate is created.
- You can’t create a mandate using the Charges and Sources APIs. If you want to create a mandate, you must use the PaymentIntent or SetupIntent APIs.
- You can’t pass an existing mandate to a Subscription.
- You can’t cancel or update a mandate.