As per RBI guidelines, card mandates registration has not been functional since April 1st. Juspay has integrated with the PGs as per the new mandate regime. Please find here the status of the Integration as well as the Banks supported by the new regime.
To start doing new mandate registrations for the live PGs, Merchants need to get it enabled at the PG end.
Axis, BoB Debit, BoI, Citi Credit, HDFC, ICICI, IDBI Credit, IDFC Credit, IndusInd, Kotak, RBL, SBICard Credit, SBM, SC, SBI, Union Bank of India Debit, Yes Credit, AU Small Finance Credit, Canara, BoB Credit, UBI Credit, Federal Bank, IDBI Bank Debit
Debit, BoI Credit, Citi, HDFC, ICICI, IDBI Credit, IndusInd, RBL, SBI Debit, SBICard Credit, SBM, SCB Credit, Union Bank of India Debit, Yes Credit, BoB Credit, Canara Bank Credit, Federal Bank Credit, IDBI Bank Debit
Equitas, HSBC, Onecard, KVB, City Union Bank
Equitas, HSBC, Onecard, KVB, Citi Union Bank
Rupay UAT sign off and CUG testing done, Production in one week. Amex is expected to come soon within a month or two
Requirement: In the new Mandate regime, merchants need to notify the Customer before doing the debit along with an Invoice Display Number.
Juspay has abstracted out the integration complexities in order to minimize the changes for Merchants .The possible scenarios and the change for merchants in each scenario is given below.
|Pre-debit Notification sent by||Invoice Display Number generation by||Change for Merchant|
|Juspay||Juspay||Merchants need to call the Mandate Recurring API of Juspay on T-1 day|
|Juspay||Merchant||Merchants need to call the Mandate Recurring API of Juspay on T-1 day|
mandate.display_invoice_number in Mandate Execution API
|Merchant||Juspay||mandate.notification_id in Mandate Execution API|
|Merchant||Merchant||mandate.display_invoice_number in Notification API|
mandate.notification_id in Mandate Execution API
- mandate.display_invoice_number - It should be alphanumeric and length upto 25 characters
- mandate.notification_id - The object_reference_id which was sent in notification call
- mandate.execution_date (Optional) - UNIX EPOCH timestamp format If a merchant wants to send a renewal date for each execution, then they can send a custom date if they don’t want the execution to happen 24hr post notification.
- Razorpay does not have an option to trigger pre-debit notification separately. . In this case, merchants always have to call Mandate Execution on T-1 day.
- Invoice Display Number acts as a reference for that recurring transaction. This would be shared to the user in the notification. Merchants can handle customer’s queries on debits with reference to Invoice Display Number. (Applicable for Billdesk, Paytm and PayU only)
- Merchants who are handling pre debit notification, can do notification retry with same display_invoice_number but different notification_id
- All the changes are updated in the developer doc. https://developer.juspay.in/reference#mandates
- Merchants who are not using pre-debit notification have to integrate the Notification API in case they want to handle pre-debit notification.
As of today, no issuing banks are ready for migration of old mandates that are registered before 1st April. We have below options to do the debit for Mandates registered before 1st April.
The banks agreed for migration of old mandates with SI Hub (For selected bins that are live) are as follows
HDFC, ICICI, IDFC, Kotak, AU small finance bank,RBL, IndusInd, Axis, BoB, BOI, SBI, SBI Cards, Yes Bank
Onecard, KVB agreed for migration with Mandate HQ
Silent Migration: PGs are exploring the option to do backend migration of the existing mandate tokens to the new regime without any user intervention. This depends on the issuing banks being ready to do this migration. Note: As of today, Kotak and HDFC banks are ready to do the migration of existing card mandates
Re-Registration: If merchants want to re-register the user for the same mandate id with new card mandate register or different mandate payment method, merchants can pass mandate_id in Create Mandate Order Request.
New Mandate Registration: Merchants can notify users to set a new mandate with either Card (for the live banks) or any other payment methods for banks that are not live. Ex: UPI, Wallet, NB mandates
One time debit: Merchants can notify users to do a one time payment by sharing merchant/Juspay payment page link for the existing card mandates till the banks go live with the new card mandates or are ready for migration of existing card mandates.
|Options||Juspay Change||Merchant Change|
|Silent Migration||No change required||No change required|
|Re-Registration||Add mandate_id in Create Mandate Order API and update mandate token and status with new registration||Add a new param mandate_in in Create Mandate Order API|
|New Mandate Registration||No change required||No change required|
|One time Debit||No change required||Merchant can generate One time payment page link or share Juspay’s payment page link triggered with Create Order API. For Juspay payment page link, merchants need to enable this feature with Juspay|
Here are some of the key guidelines with respect to how the new regime of cards SI works:
- Pre-debit notification is mandatory 24 hrs prior to the actual execution date.
- Mandate Payment transactions can be retried for successful pre-debit notification upto T+4 days. There is no constraint from PG on retry count and interval. Some issuing banks might /might not support this feature.
- During the mandate registration and notification, an SMS will be triggered by the issuing bank to the user with a bankpage link. Users can either cancel or modify the max amount and end date. Currently Billdesk gives a webhook on the changes done by the user.
- Merchants are recommended to show the following details in PP during customer Journey: Mandate Start & End date, Frequency, Amount Type, Maximum amount.
Note: Juspay added a merchant configurable page to show these details in the mandate flow on PP. Merchants on app, can get an SDK update for this change, For web, this will be a backend config.
- The minimum amount to be passed for card mandates - register or recurring flow is Rs 2.
We have done unification of common params across cards, wallets and UPI mandates across PGs. The changes are in the Create Mandate Order API as shown below.
Changes in params
|Metadata parms (Old Params)||Mapped to common params (New Params)|
|metadata.PAYTM_V2:SUBSCRIPTION_GRACE_DAYS||metadata.PAYTM_V2:SUBSCRIPTION_GRACE_DAYS( No change)|
|metadata.PAYTM_V2:SUBSCRIPTION_RETRY_COUNT||metadata.PAYTM_V2:SUBSCRIPTION_RETRY_COUNT( No Change)|
In case metadata fields are passed by the merchant, transactions will still proceed but with ASPRESENTED frequency. Please ensure that ON DEMAND frequency is enabled at Paytm’s end.
Definition of the new params
|mandate.start_date||String||Mandatory for UPI Mandate||Mandate start date in UNIX EPOCH timestamp (UTC timezone). In case of UPI mandate, the start date has to be today’s date.|
|mandate.end_date||String||Mandatory for UPI Mandate||Mandate end date in UNIX EPOCH timestamp (UTC timezone), from when a mandate will move to EXPIRED state and recurring mandate will not be allowed.|
By Default it is considered as ASPRESENTED
|mandate.rule_value||String||Optional||1-7 when frequency is WEEKLY|
1-16 when frequency is FORTNIGHTLY
1-31 when frequency is MONTHLY,BIMONTHLY,QUARTERLY,HALFYEARLY, YEARLY
Not required when frequency is ONETIME, DAILY, ASPRESENTED
For Razorpay rule_value will be considered as the last date of the week/month/year
For Paytm rule_value will be considered as today’s date/day
For example, if WEEKLY, this field can have values from 1-7 (Monday to Sunday)
curl -X POST \ https://sandbox.juspay.in/orders \ -H 'Authorization: Basic <base64 of key:>' \ -H ‘'Content-Type: application/x-www-form-urlencoded'\ -d "order_id=152664118690577-910" \ -d "amount=5.00" \ -d "currency=INR" \ -d "customer_id=test_juspay" \ -d "[email protected]" \ -d "customer_phone=987654321" \ -d "billing_address_first_name=Parth" \ -d "billing_address_city=Bengaluru" \ -d "shipping_address_city=Mumbai" \ -d "shipping_address_first_name=Parth" \ -d "options.create_mandate=REQUIRED" \ -d "mandate.start_date=1598965200" \ -d "mandate.end_date=1914141600" \ -d "mandate.frequency=MONTHLY" \ -d "mandate.rule_value=1" \ -d "mandate_max_amount=1000.00"