# Indian Payment Methods for Global SaaS: UPI, Cards, NetBanking, Wallets

> How global SaaS accept UPI and Indian-issued cards, the RBI mandate rules for subscriptions, the 48-hour processing delay, and integration patterns that win in India.
- **Author**: Ayush Agarwal
- **Published**: 2026-05-13
- **Category**: Payments, SaaS, India
- **URL**: https://dodopayments.com/blogs/indian-payment-methods-saas

---

India has a payment infrastructure unlike any other major market. UPI processes more than 10 billion transactions a month. RuPay sits alongside Visa and Mastercard as a domestic card network. Recurring billing operates under RBI mandate rules with a unique 48-hour processing window that catches most foreign SaaS off guard. For global SaaS targeting Indian customers, accepting payments well in India is its own discipline.

This guide unpacks the Indian payment stack for global SaaS: which methods to support, how RBI subscription mandates work, the 48-hour delay reality, and the integration patterns that convert in the Indian market.

## The Indian Payment Reality

Three things to know before designing your India payment stack.

### Reality 1: UPI Dominates

UPI (Unified Payments Interface) has become the dominant retail payment method in India. Most Indian consumers default to UPI for online and offline payments. Many young Indian buyers do not have international-acceptable credit cards. They have UPI on every device.

For SaaS targeting Indian consumers, prosumers, or SMB owners, UPI must be on the checkout. A card-only checkout converts at a fraction of what a UPI-enabled one does in India.

### Reality 2: Indian-Issued Cards Are Different

Indian banks issue Visa, Mastercard, RuPay, and American Express cards. These work for international purchases, but with quirks: 3D Secure is mandatory, RBI rules apply to recurring transactions, and the 48-hour processing delay affects all subscription charges.

Indian-issued cards are not the same as US-issued cards from a billing perspective. Treating them as identical creates failures in production.

### Reality 3: The RBI Subscription Framework

The Reserve Bank of India regulates how recurring payments work for Indian customers. Every subscription requires an authorized mandate. The mandate has a limit. The first charge can happen instantly, but every recurring charge afterward goes through a 48-hour processing window with mandatory pre-debit notification to the customer.

This is the biggest source of confusion for foreign SaaS entering the Indian market. Understanding it is non-negotiable for shipping subscription products to India.

For broader Indian context, see our guides on [top merchant of record for SaaS in India](https://dodopayments.com/blogs/top-merchant-of-record-for-saas-india), [B2C billing for Indian micro SaaS](https://dodopayments.com/blogs/b2c-billing-for-indian-microsaas-with-merchant-of-record), and [navigating Indian GST for SaaS](https://dodopayments.com/blogs/navigating-indian-gst-saas).

## Methods to Support

For global SaaS targeting Indian customers, three methods cover most of the market.

| Method | Type | Subscriptions | Min Amount |
|---|---|---|---|
| UPI Collect | QR code or VPA | Yes (with mandate) | Re 1 |
| Credit cards (Visa, MC, RuPay, Amex) | Card | Yes (with mandate) | Re 1 |
| Debit cards (Visa, MC, RuPay) | Card | Yes (with mandate) | Re 1 |

UPI Collect is the dominant method by volume. The customer enters their UPI ID (the VPA, like `name@upi`), or scans a QR code, and authorizes the payment in their UPI app (Google Pay, PhonePe, Paytm, BHIM, or any RBI-authorized UPI app).

Cards work but with the RBI mandate framework for recurring. NetBanking is sometimes added, but its share has declined as UPI absorbed most traffic. Wallets like Paytm and PhonePe Wallet exist but are less common than they once were; UPI ate their use case.

## How RBI Mandates Work

```mermaid
sequenceDiagram
    participant Customer
    participant Your App
    participant Dodo
    participant Bank
    
    Customer->>Your App: Subscribe
    Your App->>Dodo: Create subscription
    Dodo->>Bank: Create mandate
    Bank->>Customer: Authorize mandate
    Customer->>Bank: Approve face value or Rs 15K limit
    Bank->>Dodo: Mandate active
    Note over Dodo,Bank: On renewal date...
    Dodo->>Bank: Initiate charge
    Note over Bank: 48-hour window starts
    Bank->>Customer: Pre-debit notification
    Note over Bank: After 48 hours...
    Bank->>Dodo: Debit completed
    Dodo->>Your App: payment.succeeded webhook
```

A subscription on UPI or an Indian-issued card requires a mandate. Mandates come in two types based on subscription amount.

| Subscription Amount | Mandate Type | Limit |
|---|---|---|
| Below Rs 15,000 | On-demand mandate | Rs 15,000 |
| Rs 15,000 or above | Fixed-amount mandate | Exact subscription amount |

For most SaaS subscriptions targeting Indian consumers (where prices are typically Rs 99 to Rs 4,999 per month), the on-demand mandate at the Rs 15,000 cap is the relevant pattern. The customer authorizes a mandate up to Rs 15,000 and the SaaS can debit any amount up to that limit on each cycle.

For larger plans (Rs 15,000+ per month), the mandate is fixed at the exact subscription amount. Any plan upgrade that crosses Rs 15,000 requires a new mandate authorization.

## The 48-Hour Delay

This is the critical detail. The mandate authorization happens at signup. But every recurring charge after the first goes through a 48-hour window:

1. **Day 0:** Dodo initiates the charge with the bank on the renewal date.
2. **Pre-debit notification:** The bank notifies the customer about the upcoming debit.
3. **48-hour window:** The customer can cancel the mandate during this period via their banking app.
4. **Debit completed (~48-51 hours):** After 48 hours plus a few hours for bank processing, the funds are debited.
5. **Webhook:** `payment.succeeded` fires after the actual debit, not at initiation.

The implication for your application: do not grant benefits at charge initiation. Wait for `payment.succeeded`, which arrives roughly 48-51 hours after the scheduled charge date.

> The 48-hour delay catches every foreign SaaS the first time. Teams build subscription logic that grants access on the renewal date, then customers get a "your subscription is canceled" email three days later when the actual charge arrives. The fix is webhook-driven access, never date-driven.
>
> - Ayush Agarwal, Co-founder & CPTO at Dodo Payments

Here is the wrong pattern and the right pattern in code.

```javascript
// Wrong: granting access on the scheduled renewal date
async function handleSubscriptionRenewal(subscription) {
  // Bad: Granting access immediately when charge is initiated
  grantPremiumAccess(subscription.customer_id);
}

// Right: granting access only when the webhook confirms payment
async function handlePaymentWebhook(event) {
  if (event.type === 'payment.succeeded') {
    // Good: Only grant access after payment is confirmed
    grantPremiumAccess(event.data.customer_id);
  }
  
  if (event.type === 'payment.failed') {
    // Handle failed payment (mandate cancelled, insufficient funds)
    revokePremiumAccess(event.data.customer_id);
  }
}
```

For more on webhook-driven subscription state, see our [webhooks for payment notifications](https://dodopayments.com/blogs/webhooks-payment-notifications) and [revenue recovery for SaaS](https://dodopayments.com/blogs/revenue-recovery-saas) guides.

## Webhook Events for Indian Subscriptions

The webhook events that matter for Indian recurring billing.

| Event | When | Action |
|---|---|---|
| `subscription.active` | Mandate authorized | Record subscription start |
| `payment.succeeded` | ~48h after charge date | Grant or continue access |
| `payment.failed` | Debit failed | Notify customer, pause access |
| `subscription.on_hold` | Payment failed, retries paused | Prompt for payment update |
| `subscription.active` | Reactivated after payment | Restore access |

Build your application state machine around these events. The renewal date itself does not trigger access. The `payment.succeeded` event does.

## Configuration

The integration code for India-focused checkout.

```javascript
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: [
    'upi_collect',
    'credit',
    'debit'
  ],
  billing_currency: 'INR',
  customer: {
    email: 'customer@example.in',
    name: 'Priya Sharma',
    phone_number: '+919876543210'
  },
  billing_address: {
    country: 'IN',
    zipcode: '560001'
  },
  return_url: 'https://yoursite.com/success'
});
```

Three rules.

1. **Currency must be INR for UPI.** UPI does not work with USD, EUR, or any other currency. Set INR pricing for the Indian market.
2. **Billing country must be IN.** Set the customer's billing address country to IN to surface the right methods.
3. **Always include card fallbacks.** Some Indian customers prefer cards. Some have UPI issues. Cards must be available as backup.

For non-Indian merchants, Adaptive Currency must be enabled at the platform level for UPI to appear. This is a one-time configuration step at the merchant of record level.

For implementation detail, see the [Dodo Payments India payment methods documentation](https://docs.dodopayments.com/features/payment-methods/india).

## Plan Changes and Mandate Limits

A subtle gotcha. If a customer's plan upgrade pushes their subscription amount above the existing mandate limit, the next charge will fail.

Example: a customer has an on-demand mandate at the Rs 15,000 limit. They are on a Rs 999 a month plan. They upgrade to a Rs 19,999 a month plan. The new charge exceeds the mandate. The charge fails. The customer must re-authorize a new mandate at the higher limit.

For plan upgrade flows targeting India, build this into your UX:

- Detect when an upgrade would cross a mandate threshold
- Trigger a new mandate authorization at the upgrade time, before the next billing cycle
- Communicate clearly to the customer that they need to re-authorize for the higher amount

Without this, you get failed renewals and confused customers.

For broader subscription mechanics, see the [subscription management documentation](https://docs.dodopayments.com/features/subscription-management).

## Common India Stack Mistakes

### Mistake 1: Card-Only Checkout

Already covered. Card-only checkouts in India convert at a fraction of multi-method checkouts. UPI must be there.

### Mistake 2: Pricing in USD for Indian Customers

UPI requires INR billing. If you ship a USD-priced checkout to an Indian customer, UPI does not appear. The customer either pays via card (if they have an internationally accepted one) or bounces. Local INR pricing is essential for Indian market entry.

### Mistake 3: Granting Access on Renewal Date

The 48-hour delay means the renewal date is not when the customer's payment confirms. Building logic that says "if today is the renewal date, extend the subscription" creates failures when the actual debit takes longer or fails. Always wait for `payment.succeeded`.

### Mistake 4: Not Handling Mandate Cancellations

Customers can cancel mandates from their bank apps at any time. The cancellation does not always immediately move the subscription to canceled state in your system. Monitor `subscription.on_hold` events and prompt customers to re-authorize when this happens.

### Mistake 5: Hardcoding the Mandate Limit

Some teams hardcode "Rs 15,000" as the mandate limit. The framework can change. RBI updates rules periodically. Use the platform's mandate-amount field rather than hardcoded constants, so when rules shift you update one config rather than every code path.

For broader Indian SaaS context, see our [stripe alternatives India](https://dodopayments.com/blogs/stripe-alternatives-india), [merchant of record vs payfac](https://dodopayments.com/blogs/merchant-of-record-vs-payfac), and [scaling global SaaS](https://dodopayments.com/blogs/scaling-global-saas-microsaas-expansion) guides.

## A Real India Setup

Imagine a productivity SaaS targeting Indian SMB owners with a Rs 499 a month plan and a Rs 4,990 annual plan.

- INR pricing (not converted from USD)
- Checkout offers UPI Collect, then credit cards, then debit cards in that order
- Default selection is UPI Collect for first-time visitors with India billing country
- Annual plan is positioned as the best value with a 17% discount
- Subscription state machine listens for `payment.succeeded` events, not renewal dates
- Plan upgrade UX checks for mandate limit and triggers re-authorization when needed
- Customer support documentation includes a "How to use UPI for subscription" page in English and Hindi
- Settlement to USD via merchant of record handling INR-USD conversion and Indian tax compliance

This stack converts well in India and avoids the renewal failures that come with treating Indian subscriptions like US ones.

## When to Skip India

Skip the full India stack if:

- You do not target Indian customers
- You are doing direct-contracted enterprise sales where finance handles wires (less common)
- Your processor does not support UPI or Indian cards at acceptable rates

For most consumer or SMB SaaS targeting any meaningful Indian audience, the full stack is the right answer. Half-measures (card-only checkouts, USD pricing for Indian customers) leave significant conversion on the table.

## FAQ

### Do I need an Indian entity to accept UPI?

No, not if you use a merchant of record with the local relationships. The MoR handles the Indian-side regulatory work, including UPI integration, GST compliance, and INR-USD conversion. You operate from your existing entity. For a global SaaS without an Indian presence, this is the cleanest path.

### Why is there a 48-hour delay only on subscriptions, not first payments?

The 48-hour window applies to recurring debits under RBI mandates. The initial subscription payment (where the customer is actively at the checkout authenticating) does not have this delay. It is the recurring charges where the framework requires pre-debit notification and the customer's right to cancel within 48 hours.

### Can I bill in USD for Indian customers?

You can, but UPI will not surface. UPI requires INR billing. If your audience is Indian-affluent buyers who specifically want to pay with international cards in USD (some prefer this for accounting reasons), USD billing works for them via card. But for the broader Indian audience, INR pricing is essential.

### What happens if a customer's mandate gets canceled?

The next attempted charge will fail. Your platform sends a `payment.failed` webhook, and depending on configuration, the subscription moves to `subscription.on_hold`. The customer needs to re-authorize a new mandate, typically through a payment method update flow you provide.

### Are there local Indian payment methods beyond UPI and cards?

NetBanking is still supported by some processors. Wallets like Paytm and PhonePe Wallet exist. But UPI has absorbed most of the use case for these. For most SaaS, UPI plus cards covers more than 90% of the addressable Indian market. Adding NetBanking and wallets is sometimes done for the last few percentage points of coverage.

## Final Take

India is a major market for global SaaS, but it is not a market you can win with a US-style payment stack. UPI is the dominant method. Indian-issued cards work but with the RBI mandate framework. The 48-hour processing delay on recurring charges is the critical detail that breaks naive subscription logic.

Get the basics right: INR pricing, UPI prominently on the checkout, card fallbacks always available, webhook-driven subscription state, and mandate-aware plan upgrade flows. Do those and India becomes a high-converting market for your SaaS.

The merchant of record pattern abstracts most of the complexity. The MoR handles UPI integration, GST compliance, INR-USD settlement, and the regulatory specifics that change from time to time. Your job is to build the right product UX on top. Visit [dodopayments.com](https://dodopayments.com) for the integration patterns and [dodopayments.com/pricing](https://dodopayments.com/pricing) for transparent fee details.
</content>
</invoke>
---
- [More Payments articles](https://dodopayments.com/blogs/category/payments)
- [All articles](https://dodopayments.com/blogs)