Skip to main content
Accept UPI, Indian-issued cards (Visa, Mastercard, and RuPay), and Apple Pay from customers in India. UPI carries more than 80% of India’s digital payment transactions by volume. Dodo Payments supports subscriptions on UPI and Indian-issued cards through RBI-compliant mandates.

Why India Payment Methods Matter

UPI Dominance

UPI processes more than 20 billion transactions a month, and many Indian customers don’t have an international card.

Low-Value Payments

UPI accepts payments from ₹5, which suits high-volume, lower-value transactions.

Subscription Support

Unlike most alternative payment methods, UPI and Indian-issued cards, including Visa, Mastercard, and RuPay, support recurring payments through RBI mandates.

Supported Methods

The table lists each method, whether it supports subscriptions, and its minimum amount: *Subscriptions require RBI-compliant mandates with special processing rules. The 48-hour processing delay applies to recurring charges on all Indian-issued cards, UPI, and Apple Pay. A payment billed in INR must be at least ₹5, for both one-time payments and subscriptions.

Configuration

API Method Types

Pass these values in allowed_payment_method_types:
Checkout offers UPI only as upi_intent. If allowed_payment_method_types lists upi_collect but not upi_intent, UPI doesn’t appear at checkout.

Example: India-Focused Checkout

This session offers UPI, cards, and Apple Pay to a customer in India, billed in INR:

Requirements for UPI

UPI appears at checkout only when all of these are true:
  1. The billing country is India (IN).
  2. The billing currency is INR.
  3. For subscriptions from merchants outside India, Adaptive Currency is enabled. One-time checkouts don’t need it if the product is priced in INR.
If you’re a merchant outside India and Adaptive Currency is disabled, your customers can’t pay for subscriptions with UPI.

Subscriptions with RBI Mandates

Subscriptions paid with UPI or Indian-issued cards run on RBI (Reserve Bank of India) mandates, which add rules that other payment methods don’t have.

How RBI Mandates Work

The customer authorizes a mandate when they subscribe. Each renewal charge then waits 48 hours after a pre-debit notification before the bank debits the funds:

Mandate Types

The mandate type depends on how the subscription amount compares with the mandate floor: The amount registered with the customer’s bank is max(mandate_floor, billing_amount). When the billing amount is below the floor, the floor becomes the customer-facing authorization ceiling. Plan changes: If an upgrade produces a charge above the existing mandate limit, the charge fails and the customer must authorize again.

Configurable Mandate Floor

Set the mandate floor for INR e-mandates with the mandate_min_amount_inr_paise field, in INR paise (₹1 = 100 paise).
This setting only affects e-mandates registered for Indian-issued cards (Visa, Mastercard, RuPay) on INR subscriptions. UPI subscriptions follow their own AutoPay flow and aren’t affected.
You can override the system default of ₹15,000 at three levels: Dodo Payments uses the first value that’s set: the per-request override, then the merchant setting, then the system default. To set the floor, pass mandate_min_amount_inr_paise in the request body when you create a checkout session. The deprecated Create Subscription endpoint accepts the same field.
The field accepts these values:
A higher floor lets you make larger one-off charges later, such as plan upgrades or usage-based overages, without asking customers to authorize again. A lower floor keeps the customer’s authorization closer to the actual billing amount, but leaves less room for future variable charges.

The 48-Hour Processing Delay

A renewal charge on an Indian card or UPI completes about 48 hours after the renewal date. This is the most important difference from international card payments:
1

Charge Initiated (Day 0)

On the scheduled renewal date, Dodo Payments initiates the charge with the bank.
2

Pre-Debit Notification

The customer’s bank notifies them about the upcoming debit.
3

48-Hour Window

During this period, the customer can cancel the mandate in their banking app.
4

Debit Completed (~48-51 Hours)

After 48 hours, plus up to 3 more hours for bank processing, the bank debits the funds.
5

Webhook Sent

Dodo Payments sends the payment.succeeded webhook after the actual debit, not when the charge is initiated.
Don’t grant benefits when the charge is initiated. Wait for the payment.succeeded webhook, which arrives about 48–51 hours after the scheduled charge date.

Handling the 48-Hour Window

Grant access from the payment webhook, not from the renewal date:

Webhook Events for Indian Subscriptions

Handle these events for subscriptions paid with UPI or Indian-issued cards:

Testing

UPI Test IDs

In test mode, enter these UPI IDs to simulate each outcome:

Indian Card Test Numbers

Use these Indian-issued test cards:

Best Practices

Build your application to handle the gap between charge initiation and the actual payment. Consider:
  • Grace periods for subscription access
  • Clear communication to customers about processing time
  • Webhook-driven fulfillment, not date-driven fulfillment
Customers can cancel mandates in their banking apps at any time. Monitor subscription.on_hold webhooks, and prompt customers to subscribe again or update their payment method.
For variable pricing, such as usage-based billing, check whether an on-demand mandate at the mandate floor (₹15,000 by default) covers your largest charge. If charges might exceed it, raise the floor with mandate_min_amount_inr_paise. Otherwise, customers must authorize a new mandate.
For Indian customers, make UPI the primary payment option. Many prefer it to cards because it’s familiar and has less friction.

Troubleshooting

Check:
  1. Is the billing country set to IN?
  2. Is the billing currency set to INR?
  3. If you’re a merchant outside India, is Adaptive Currency enabled?
  4. Is upi_intent included in allowed_payment_method_types?
Solution: Set country: "IN" in the billing address and billing_currency: "INR". If Adaptive Currency is disabled, the API ignores billing_currency, so price the product in INR instead.
Cause: The new charge amount exceeds the existing mandate limit: the mandate floor (₹15,000 by default), or the subscription amount if that’s higher.Solution: The customer must update their payment method to set up a new mandate with the correct limit.
Cause: The customer may have cancelled the mandate during the 48-hour window, or their bank declined the debit.Solution: The customer needs to authorize the mandate again or update their payment method.
Cause: Bank API delays can extend processing by 2–3 hours.Solution: This is expected. Build your system to handle delays of up to about 51 hours in total.
Cause: An edge case in RBI regulations: cancelling a mandate during the processing window doesn’t cancel the subscription right away.Solution: The next charge fails, and the subscription moves to on_hold. Monitor webhooks for payment.failed.

Payment Methods Overview

See all supported payment methods.

Subscriptions

Complete subscription documentation including RBI mandates.

Webhooks

Webhook handling for payment events.

Testing Process

All test data including UPI IDs and Indian cards.
Last modified on September 26, 2026