Skip to main content
UPI Reserve Pay uses Single Block Multi Debit (SBMD) to allow you to block a maximum amount once from your customer’s account and then debit multiple times against that blocked amount. This feature is ideal for EMIs, usage-based billing, and subscription services.

Key benefits

  • One-time authorisation: Customer provides approval once for multiple future debits
  • Flexible charging: Debit multiple amounts until the blocked limit is reached or the mandate expires
  • Fund management: Release unused blocked funds back to customers when needed

Workflow overview

The UPI Reserve Pay SBMD workflow involves the following steps:
  1. Create subscription for mandate setup
    • You initialise the subscription with customer and plan details
    • Subscription is created in INITIALISED state
  2. Raise authorisation to get customer approval
    • You raise the authorisation request for blocking the amount
    • Customer approves the blocked amount via UPI
    • On success, subscription moves to ACTIVE state
    • Cashfree sends SUBSCRIPTION_AUTH_STATUS webhook
  3. Raise charge to debit funds
    • You raise charges against the blocked amount (partial or multiple)
    • Payment is processed and status is sent via webhook:
      • SUBSCRIPTION_PAYMENT_SUCCESS
      • SUBSCRIPTION_PAYMENT_FAILED
  4. Get mandate details
    • You fetch all charges and remaining limit using subscription ID
  5. Refund individual charge
    • You can refund an individual charge
    • Notification of refund status is sent via SUBSCRIPTION_REFUND_STATUS webhook
  6. Manage mandate
    • You can unblock unused debits and release funds back to the customer

Implementation steps

UPI Reserve Pay extends the Subscription APIs with SBMD-specific parameters for fund blocking. Follow these steps to implement the feature:
All API examples belong to version 2025-01-01.

Quick reference

Step 1: Create subscription

Create a subscription to set up the mandate for blocking funds. UPI Reserve Pay requires setting the subscription category to SBMD. API Endpoint: POST https://api.cashfree.com/pg/subscriptions Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions
SBMD-specific requirementAdd "category": "SBMD" in the subscription_meta object to enable fund blocking:
For complete request parameters and response structure, see Create Subscription API.
Request
After you create the subscription, it will be in the INITIALISED state, ready for customer authorisation.

Step 2: Raise authorisation

Raise an authorisation request for customers to approve the fund blocking. The key requirement for SBMD is setting payment_type to AUTH. API Endpoint: POST https://api.cashfree.com/pg/subscriptions/pay Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/pay
SBMD-specific requirementSet "payment_type": "AUTH" in your request to initiate the authorisation flow:
For complete request parameters and response structure, see Raise Payment API.
Available UPI channels:
  • link: Payment link that redirects to UPI apps
  • qrcode: QR code for scanning with UPI apps
  • collect: Direct UPI collect request (requires upi_id)
Example for UPI collect:
After the customer completes the authorisation, you’ll receive a SUBSCRIPTION_AUTH_STATUS webhook notification.

SUBSCRIPTION_AUTH_STATUS webhook

Webhook Example

Step 3: Raise charges

After successful authorisation, you can debit amounts from the blocked funds. Set payment_type to CHARGE for debit requests. API Endpoint: POST https://api.cashfree.com/pg/subscriptions/pay Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/pay
SBMD-specific requirementSet "payment_type": "CHARGE" to debit from blocked funds:
For complete request parameters and response structure, see Raise Payment API.
You’ll receive webhook notifications for each charge attempt:

SUBSCRIPTION_PAYMENT_SUCCESS webhook

Webhook Example

SUBSCRIPTION_PAYMENT_FAILED webhook

Webhook Example

Step 4: Get mandate details

Retrieve information about all payments made against a subscription and the remaining blocked amount. API Endpoint: GET https://api.cashfree.com/pg/subscriptions/{subscription_id}/payments Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/payments
SBMD subscriptions use the same API as regular subscriptions. For complete response structure and parameters, see Fetch Payments API.To get individual payment details, use Fetch Payment API.

Step 5: Refund individual charges

Refund specific charges using the subscription refund APIs. SBMD refunds work the same as regular subscription refunds. Create Refund: POST https://api.cashfree.com/pg/subscriptions/{subscription_id}/refunds Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds Get Refund Status: GET https://api.cashfree.com/pg/subscriptions/{subscription_id}/refunds/{refund_id} Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds/{refund_id}
For complete API documentation and examples, see:

Step 6: Manage mandate

Release unused blocked funds back to the customer using the manage subscription API. API Endpoint: POST https://api.cashfree.com/pg/subscriptions/{subscription_id}/manage Sandbox URL: https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/manage
SBMD limitationOnly the CANCEL action is supported for SBMD subscriptions. Other management actions like PAUSE are not available.
For complete API documentation, see Manage Subscription API.

Subscription webhooks

Cashfree sends webhook notifications for various subscription events during the SBMD lifecycle.

SUBSCRIPTION_STATUS_CHANGED

This webhook is sent when a subscription’s status changes during the lifecycle.
Webhook Example