Accept UPI Autopay payments using our APIs, and build your own payment form to have full control over the look and feel of your checkout page. Use this page to offer recurring UPI Autopay payments to your shoppers.
You can accept recurring UPI Autopay payments for the following types of payments:
- Subscriptions: A recurring transaction made at regular intervals for a product or a service. These payments use the Subscription recurring processing model.
- Automatic top-ups: Contracts that occur on a non-fixed schedule using stored card details. This includes automatic top-ups when the cardholder's balance drops below a certain amount. These payments use the UnscheduledCardOnFile [recurring processing model](/online-payments/tokenization/advanced-flow.
How to pay with UPI Autopay
After shoppers select to pay through UPI on your website for the first time:
- Shoppers are prompted to provide the Virtual Payment Address (VPA).
- The shoppers then get a notification on their UPI app asking them to complete the payment.
- On the UPI app, shoppers provide their UPI pin to confirm the payment.
- When shoppers go back to your checkout page, they are redirected to a page showing the payment status.
For subsequent payments, shoppers receive a pre-debit notification in the form of an SMS or an email at least 24 hours before the recurring amount is charged.
Set up a billing plan
To start a billing plan for a shopper, you need to store their payment details and create a mandate in their UPI app. The UPI payment service provider and the issuer uses this mandate to have visibility of your shopper's billing plan. They can then let the shopper cancel (or pause/unpause) the mandate on their side.
Make sure that every billing plan has a unique mandate associated with it.
-
From your server, make a POST /payments request, specifying:
Field Required Description paymentMethod.type
upi_collect paymentMethod.virtualPaymentAddress
Virtual Payment Address. A unique identifier used to let UPI connect to the shopper's bank account. storePaymentMethod
Set to true to store shopper's payment details. shopperInteraction
Set to Ecommerce. recurringProcessingModel
Set to Subscription or UnscheduledCardOnFile. shopperReference
The shopper reference associated with the billing plan (minimum length three characters). mandate.amount
The amount the shopper will be charged per recurring debit in minor units. Must be more than or equal to the transaction amount. The recurring charge does not need to go through authentication if the amount is less than or equal to INR 15,000.mandate.amountRule
Possible values: max (default) and exact. - max - The shopper can be charged any amount between INR 1 to the amount in the
amount
field. - exact - The shopper can only be charged the amount in the
amount
field.
mandate.frequency
The frequency at which the shopper will be charged. Possible values: monthly and adhoc. mandate.startsAt
Start date of the billing plan, in YYYY-MM-DD format. The default value is the transaction date. mandate.endsAt
End date of the billing plan, in YYYY-MM-DD format. mandate.remarks
Limited to 50 characters, no special characters. Shown in the shopper's UPI app, under the Mandate section. mandate.billingAttemptsRule
Possible values: before, after, and on. - before - You can initiate the charge and retries anytime from 1st day of the billing cycle to the
mandate.billingDay
. - after - You can initiate the charge and retries any time from the
mandate.billingDay
to the end of billing cycle (if the frequency is monthly, till the end of the month). - on - You can initiate the charge and retries only on the
mandate.billingDay
.
mandate.billingDay
The day of the billing cycle when the shopper would be charged. If the mandate.frequency
is monthly, andmandate.billingDay
is 26th, the shopper should be charged on the 26th of every month. This field does not apply for adhoc frequency. Possible values: 1-31The details in the
mandate
object are used to create the mandate for the shopper's billing plan.The /payments response is:
- max - The shopper can be charged any amount between INR 1 to the amount in the
-
Show a waiting screen to the shopper, telling them you are waiting for them to complete the payment.
-
Check your webhooks to see the payment result. We send a webhook to you with the final status of the payment.
eventCode success field Description Action to take AUTHORISATION false The transaction failed. Cancel the order and inform the shopper that the payment failed and any amount debited will be refunded in 2-3 days. AUTHORISATION true The shopper successfully completed the payment and a mandate was created. Inform the shopper that the payment has been successful and proceed with the order. You can receive the mandate details as part of your standard webhooks. To do this:
- In your Customer Area, go to Developers > Webhooks.
- Next to Standard webhook, select the edit webhook icon .
- Under Additional Settings, select Include Mandate Details.
- Select Save Configuration.
Then, the webhook will also contain the details on the shopper's mandate, including:
mandate.mandateId
: The identifier for the mandate created by the issuer.mandate.providerId
: The ID returned by the provider.mandate.status
: The status of the mandate.mandate.txVariant
: The transaction variant.
You will need the
recurringDetailReference
andshopperReference
to make subsequent payments in the billing plan. -
Once you get the webhook, redirect them to your website, and present the payment result.
Modify the billing plan
If you need to modify the billing plan, then you have to cancel the mandate and create a new one with the modified information.
Make recurring payments
For every subsequent payment in a billing plan, you need to:
Before proceeding with a subsequent payment in a billing plan, you can check the mandate details of the shopper's billing plan to make sure all relevant information is available for the payment to be successful.
(Optional) Check mandate details
For each billing plan, you have to create a unique mandate. To check the mandates created for a shopper's billing plans, make a POST /listRecurringDetails call.
The /listRecurringDetails response contains the details of the mandate created for the shopper with a specific shopperReference
.
Send a pre-debit notification
A pre-debit notification is an email or SMS notification sent to a shopper to inform them of their impending recurring charge. You need to inform the issuer when the notification needs to be sent out and subsequently the issuer sends the email or SMS. When they receive the notification, shoppers can choose to cancel the mandate. Shoppers receive the pre-debit notification at least 24 hours before every recurring payment.
To send a pre-debit notification to your shopper, make a POST call to /notifyShopper
:
storedPaymentMethodId
: The token for your shopper's stored payment details.merchantAccount
: Your merchant account associated with the shopper's stored payment details.shopperReference
: The shopper reference associated with the billing plan.amount
: The amount you are going to charge the shopper. If you have configured max for themandate.amountRule
, the shopper can be charged any amount between INR 1 to the amount in themandate.amount
field. If you have configured exact, the shopper can only be charged the amount in themandate.amount
field.billingDate
: Optional. The date the shopper will be charged.reference
: The notification reference.
The /notifyShopper
response contains:
message
: Information about the status of the pre-debit notification.shopperNotificationReference
: Unique reference to the pre-debit notification. Store this value to make the subsequent payment.
If the /notifyShopper
request fails, you will receive a response with resultCode
set to Refused.
If there was an issue with the /notifyShopper
request, you will receive a response containing an errorCode
and a message
explaining the error. For a list of possible values, refer to Generic error codes.
Make a recurring payment
Once the shopper has received the pre-debit notification, you can carry out a recurring payment.
-
To do so, make a POST /payments call, including:
Field Required Description paymentMethod.type
upi_collect paymentMethod.storedPaymentMethodId
The token value for the shopper's stored payment information. paymentMethod.shopperNotificationReference
Unique reference to the pre-debit notification from the /notifyShopper
response.amount
Include the currency
andvalue
of the shopper's recurring payment.merchantAccount
Your merchant account shopperReference
The shopper reference associated with the billing plan. shopperInteraction
Set to ContAuth. recurringProcessingModel
Set to Subscription or UnscheduledCardOnFile. mandate.remarks
Limited to 50 characters, no special characters. Shown in the shopper's UPI app, under the Mandate section. -
The /payments response contains:
- resultCode: Received
-
Check your webhooks to see the payment result.
eventCode success field Description Action to take AUTHORISATION false The transaction failed. Cancel the order and inform the shopper that the payment failed. AUTHORISATION true The shopper successfully completed the payment. Inform the shopper that the payment has been successful and proceed with the order.
Cancel a billing plan
If your shopper wants to end their billing plan, then you need to cancel the mandate generated for their stored payment details on your side.
To do so, make a DELETE /storedPaymentMethods
call, including:
Field | Description |
---|---|
merchantAccount |
Your merchant account associated with the shopper's stored payment details. |
shopperReference |
The shopper reference associated with the mandate you want to remove. |
recurringDetailReference |
The token for the shopper's stored payment details that you want to remove. |
Test and go live
Contact Support Team to set up your test environment for UPI Autopay.
Use the following credentials to test UPI Autopay :
Parameter | Value |
---|---|
VPA | testvpa@icici |
If you have access to the UPI simulator, the /payments response contains the upiSimulatorUrl
that you can use to test payments. This is returned in the test environment only.
Check the status of UPI Autopay test payments in your Customer Area > Transactions > Payments.
Before you can accept live UPI Autopay payments, you need to submit a request for UPI Autopay in your live Customer Area.