UPI Autopay - Create Mandate API

This API is used to create a UPI based mandate.

Overview

This API allows the platform to initiate an UPI-based mandate registration request. The payer can then authorize the request using Intent flow. In this flow, the platform doesn't need to have the payer's VPA. Decentro validates the request and the payer can pay using any supported UPI app on their mobile device. It is suitable for mobile apps.

👍

We support both Intent Flow and Collect Requests with TPV (Third-Party Validation) for UPI Mandate registration.

Flow

Below is the intent flow for using this API.

  • The platform captures the mandate details like amount, frequency, timeframe, etc. at their end
  • The platform passes the same in this API against the endpoints
  • The platform receives a shortened link that can be displayed on the platform's app
  • The payer can choose the app of their choice as available on their app
  • The payer authorizes the request by using the UPI MPIN
  • The platform receives the Mandate Status Callback to a pre-configured endpoint
  • The platform receives the status of mandate registration in the callback itself
  • Alternatively, the platform can check the status using the Mandate Status API

UPI Autopay Flows:

  • Intent Links: UPI Autopay using Intent Links allows users to authenticate and approve recurring payments via a simple link.
  • Intent Links with Deep Links: This flow enhances Intent Links by directing users straight to the UPI app for seamless authorization through deep links.
  • Collect Requests: Collect Requests enable merchants to request payments directly from the user's UPI app, streamlining the payment process.
  • Collect Requests with TPV: This flow includes third-party validation (TPV), ensuring additional security and compliance for Collect Requests before payment authorization.

📘

As per latest NPCI directives, Collect Request capability is only applicable for select use cases - IPO and Secondary Market transactions (Payee MCC - 6012 and 6211), effective from 28th Feb, 2026.

is_downpayment Flag:

  • Introduced support for auto-debit within 5 minutes of registration when is_downpayment = true is passed in the Create Mandate API.
  • is_downpayment = false first auto-debit won't happen.
  • Applicable across all frequencies. For “Daily” mandates, is_downpayment must be always true.
  • Presentation is triggered automatically post successful registration.
  • If amount_rule = Max then default_amount will be used for debiting within 5mins of registration.
  • If amount_rule = Fixed then amount will be used for debiting within 5mins of registration.
  • is_first_txn_amount and is_downpayment both cannot be true.
  • is_downpayment flag can not be true if start_date > current date
  • downpayment_reference_id value will be passed only if is_downpayment is set as true.
  • This downpayment_reference_id will be used to initiate the instant presentations(5mins presentations). Value will be passed only if is_downpayment flag is set as true
  • The same value can be used to check the presentation status & will be part of merchant callback.

is_first_txn_amount Flag:

  • Mandate is registered with the is_first_txn_amount flag enabled.
  • Only supported for QR/Intent-based Autopay flows.
  • In FAM, the amount rule type must be set to MAX.
  • Merchant can collect the specified FAM amount during the first debit.
  • Amount specified in default_amount parameter will be considered for instant debit post registration in both is_first_txn_amount & is_downpayment scenario. No changes with default_amount or amount parameter logic.
  • A callback with status "ACTIVE" is sent post successful registration.
  • A financial callback is sent after the debit attempt.
  • If both is_first_txn_amount and is_downpayment are set to false, the mandate will follow the regular flow without upfront collection.
  • is_first_txn_amount and is_downpayment both cannot be true.
  • Mandate creation will fail if both flags are enabled simultaneously.
  • The FAM flag is mandatory for any merchant intending to use this capability.
  • One-time frequency mandates are not supported by FAM.
  • Support for FAM has been validated across major TPAPs (GPay, PhonePe, Paytm, CRED). Compatibility may vary for other apps.
  • is_first_txn_amount flag can not be true if start_date > current date
  • first_txn_amount_reference_id value will be passed only if is_first_txn_amount is set as true.
  • This first_txn_amount_reference_id will be used to initiate the instant presentations(5mins presentations). Value will be passed only if is_first_txn_amount flag is set as true
  • The same value can be used to check the presentation status & will be part of merchant callback.

is_revokable & is_block_funds:

is_block_funds - This flag is used to block funds in the user's bank account. This feature is available only for one-time mandates and IPO & BIMA-ASBA MCCs.

is_revokable - This flag is used to set non-revokable mandates. It is available only for IPO and Lending MCCs. Accepted values are: "true" – the user can revoke the mandate, "false" – the mandate cannot be revoked by the user.

Validations:

  • MCC 7322 – Lending
  • Allowed: Non revokable mandates
  • Not Allowed: Block funds not supported
  • Max Amount: ₹1,00,000
  • Frequency: All

  • MCC 6211 – IPO & MCC 6300 – BIMA / ASBA (Insurance)
  • Allowed: Supports both non revokable & block funds.
  • Max Amount: ₹5,00,000
  • Frequency: One Time

Mutual Funds Order Details

  • A new optional field mutual_funds_order has been added to the request payload.
  • This field is an array that supports multiple mutual fund order entries.
  • Each entry can include: member_id, user_id, mf_partner, folio_number, order_number, amount, scheme_code, amc_code, pan_number, and investment_type.
  • If mutual fund details are included in the request, they will be returned unchanged in the callback payload.
  • If omitted, the mandate flow and callback remain unchanged.

📘

Note

If an Autopay intent link is opened on a desktop, a QR code will be displayed by default.

Mandate Status

StatusDescription
ActiveMandate is successfully registered & in active state. These mandates can be used for presentations.
RevokedMandate is revoked/ cancelled. These mandates are not eligible for presentations. (Not in use)
PendingMandate registration link is created & no action is performed on the link yet.
ExpiredMandate registration link has expired as no action was taken by the user.
If the user opens the link, the status update & callback may take up to 5 minutes.
If the link is not accessed, the status change and callback happen immediately.
CompletedWhen mandate end date is passed or all scheduled presentations are completed. No further presentations allowed.
RejectedWhen mandate registration is failed.
PausedMandate is paused by the end user. No presentations allowed during paused state.
FailedWhen mandate registration is failed.
CancelledMandate is revoked/ cancelled. These mandates are not eligible for presentations.

Frequency

Below are the parameters accepted under the 'frequency' field in the request body and their interpretation.

ValueDescription
DAILYThe mandate can be presented daily.
WEEKLYThe mandate can be presented weekly on a specific day of the week
FORTNIGHTLYThe mandate can be presented once every 2 weeks from the start date
MONTHLYThe mandate can be presented once a month on a specific date of the month
BIMONTHLYThe mandate can be presented once in 2 months on a specific date of the month
QUARTERLYThe mandate can be presented once a quarter from the start date
HALFYEARLYThe mandate can be presented once every 6 months from the start date
YEARLYThe mandate can be presented once every 12 months from the start date
ONETIMEThe mandate can be presented only once before the end date. The tenure of the mandate to be less than 90 calendar days.
ASPRESENTEDThe mandate can be presented as needed

Rule Type

Below are the parameters accepted under the 'rule_type' field in the request body and their interpretation.

ValueDescription
OnThe mandate can be presented on the exact date
BeforeThe mandate can be presented before the due date as long as frequency & presentation window is maintained
AfterThe mandate can be presented after the due date as long as frequency & presentation window is maintained

Amount Rule

Below are the parameters accepted under the 'amount_rule' field in the request body and their interpretation.

ValueDescription
MaxThe amount registered is the maximum that can be debited. Any presentation amount lesser than the amount can be presented
FixedThe amount registered is the exact amount that can be debited.

API Endpoints

Below are the API endpoints to be used by the platform basis the environments.

Simulation Data

Decentro's simulation data helps developers simulate all the real-world scenarios when using the Create mandate API.
This requires the platform to use standard request payloads to handle scenarios for each API and scenario, as mentioned below.
The platform will need to whitelist their IP and configure callback endpoints with Decentro if they wish to handle the flow. Please reach out to us at [email protected] for the same.

How to test?

Below is the flow to test the Simulation data

  1. Generate a mandate link by using Create Mandate API with the 'amount' parameter in the required range as mentioned in the test bed section.
    1. Note: To test the instant presentation within a 5-minute scenario when the amount rule is set to MAX, ensure that you pass the simulation amount value in the default_amount parameter.
  2. Click the generated link once before proceeding. This is a mandatory step to receive the simulation responses.
  3. Next Decentro will propagate the updated status of the mandate as per the amount (range) passed in step-1.
  4. Alternatively, client can use Get Mandate Status to fetch the latest status of the mandate.
  5. Next proceed to trigger the Pre Debit Notification API to test various scenario basis the amount range values mentioned in the respective test bed section.
  6. Next, proceed to trigger the Mandate Presentation API to test various scenarios basis the amount range values as mentioned in the respective test bed section.
  7. Note: The simulation environment is an exact replica of production environment including all the checks of production systems for registration, notification and, presentation .

Test Bed

Mandate Creation

AmountScenario
1 - 1000Mandate registration is successful. Mandate status is Active
1001 - 1500Mandate is paused
1501 - 2000Mandate registration is rejected by user
2001 3000Mandate registration is failed

Pre Debit Notification

AmountScenario
1 - 500Pre debit notification is successful.
501 - 1000Pre debit notification failed

Presentation

AmountScenario
1 - 300Mandate Presentation is successful.
301 - 500Mandate Presentation failed

Mandate Presentation Callback

AmountScenario
1 - 150Mandate Presentation is successful.
151 - 300Mandate Presentation failed

Mandate Registration Callback

AmountScenario
0 - 500Active
501 - 1000Active, Pause, Unpause (Active)
1001 - 1500Paused
1501 - 2000Rejected
Body Params
string
required

A specific unique ID assigned by you for this transaction. If not kept unique, transaction status extraction could behave erratically.

string
required

A unique identifier provided by Decentro at the time of onboarding

string
required

Name of the mandate/subscription

float
required

Mandate Amount. Min: 1. Max: 1,00,000

string
required

Frequency of the debits (Onetime, Monthly, Weekly, Daily, Quarterly, Bimonthly, Fortnightly, Halfyearly, Yearly, Aspresented)

string

The narration that you want to show as a message for the mandate registration.

string
required

Type of Rule (ON / BEFORE / AFTER). If frequency is other than ONETIME/AS PRESENTED/DAILY, then rule_type is mandatory

string
required

Mandate amount rule: (MAX or FIXED) MAX: Maximum amount FIXED: Exact amount

date
required

Mandate start date. Needs to be on and after the date when the API is triggered.

date
required

Mandate end date. Needs to be after the date when the API is triggered. Max tenure is 30 years

int32
required

Expiry Time of the mandate within 24 hrs and data to be provided in Minutes. Min: 1. Max: 1440

float

The default amount to be used for presentation. Mandatory if amount_rule = MAX

string
required

To enable any instant presentation, pass this flag as True; Else pass as False. Amount will be deducted immediately after mandate registration. is_downpayment flag & is_first_txn_amount flag can't set as true at a same time.

string
required

If set to true, the mandate will be treated as a First Amount Mandate. Only supported for QR/Intent-based Autopay flows. In FAM, the amount rule type must be set to MAX. is_downpayment flag & is_first_txn_amount flag can't set as true at a same time.

string
required

true/ false depending on the choice to generate UPI mandate URI/intent flow to implement customized flow based on URI data.

string
required

This param is used to identify if the mandate is managed by Decentro. Accepted values true or false.

string
required

This flag is used to identify whether the QR code is requested. Pass true for QR code and false for no QR code.

string
required

This flag is used to block funds in the user's bank account. This feature is available only for one-time mandates and lending MCCs. Accepted values are "true" to block funds, and "false" to not block funds.

string
required

This flag is used to set non-revokable mandates. It is available only for IPO and Lending MCCs. Accepted values are: "true" – the user can revoke the mandate, "false" – the mandate cannot be revoked by the user.

string
required

This flag is used to identify whether the merchant is initiating the collect request or intent link. Pass true for collect requests and false for intent. Supported MCCs 6012 & 6211.

string
required

This flag is used to identify whether the collect request requires third-party validation. TPV will only work for collect requests.

payer_details
object

This object is required only if "is_collect_request" is set to true.

mandate_action_callback_subscriber_data
object

Custom endpoint for sharing the Mandate Status Callback. This will override the default callback endpoints configured for your account.

string

This is a optional parameter. Merchants can pass the redirection URL. Max support of characters are 2048. Only "https://" endpoints will be accepted.

additional_fields
array of objects
additional_fields
string

This reference_id will be used to initiate the instant presentations(5mins presentations). Value will be passed only if is_downpayment flag is set as true

string

This reference_id will be used to initiate the instant presentations(5mins presentations). Value will be passed only if is_first_txn_amount flag is set as true

Headers
string
required

Decentro assigned client_id during on boarding.

string
required

Decentro assigned client_secret during on boarding.

Responses

Language
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json