Migrate from UPI Collect to UPI Intent - S2S APIs
Steps to migrate from UPI Collect to UPI Intent/QR code flows for Server-to-Server (S2S) API integrations across Desktop Web, mWeb and WebView platforms.
According to NPCI guidelines, the UPI Collect flow is being deprecated from 28 February 2026.
- Customers can no longer make payments or register UPI mandates by manually entering VPA/UPI id/mobile numbers.
- Save VPA and Validate VPA features will not be available after migration as these features work only with the UPI Collect flow.
Exemptions
UPI Collect will continue to be supported for:
- MCC 6012 & 6211 (IPO and secondary market transactions)
- iOS mobile app and mobile web transactions
- UPI Mandates (execute/modify/revoke operations only)
- eRupi vouchers
- PACB businesses (cross-border/international payments)
Action Required
- If you are a new Razorpay user, use .
- If you are an existing Razorpay user not covered by exemptions, you must migrate to UPI Intent or UPI QR code to continue accepting UPI payments if:
- You use Server-to-Server (S2S) API integration for UPI payments
- Your API calls include
"flow": "collect"parameter - You use the
/v1/payments/create/upiendpoint with Collect flow - Your users enter UPI id/VPAs for payment
Contact
to enable UPI Intent for your Razorpay account if it is not already enabled.Migrate from the Collect flow API to the Intent flow API. Once the intent URL is generated, you should embed this URL into the QR code that you generate at your end.
Change Needed
-
Update your API call to use UPI Intent flow instead of UPI Collect flow. Remove
for further information.vpaandexpiry_timeparameters from the request body. Replacecollectwithintentas the value of theupi.flowparameter. Refer to thecurl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \-H 'content-type: application/json' \-X POST https://api.razorpay.com/v1/payments/create/upi-d '{"amount": 50000,"currency": "INR","order_id": "order_9A33XWu170gUtm","email": "gaurav.kumar@example.com","contact": "9123456789","method": "upi",// Remove these Collect parameters//"upi": {// "flow": "collect",// "vpa": "gauravkumar@exampleupi",// "expiry_time": 5//},// Add this Intent parameter"upi": {"flow": "intent"}}' -
The API returns an intent URL in the response. Embed this intent URL into a QR code on your end and display it to customers on desktop.
{"razorpay_payment_id": "pay_FVmAstJWfsD3SO","link": "upi://pay?pa=merchant@upi&pn=Merchant&am=500.00&tr=rzp_FVmAstJWfsD3SO&tn=Payment","status": "created"} -
Use
.
On mobile web and WebView, you must migrate from UPI Collect to UPI Intent. UPI Intent returns a deeplink that launches UPI apps for payment completion.
Change Needed
-
Update your API call to use UPI Intent flow instead of UPI Collect flow. Remove
vpaandexpiry_timeparameters from the request body. Replacecollectwithintentas the value of theupi.flowparameter.curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \-H 'content-type: application/json' \-X POST https://api.razorpay.com/v1/payments/create/upi-d '{"amount": 50000,"currency": "INR","order_id": "order_9A33XWu170gUtm","email": "gaurav.kumar@example.com","contact": "9123456789","method": "upi",// Remove these Collect parameters//"upi": {// "flow": "collect",// "vpa": "gauravkumar@exampleupi",// "expiry_time": 5//},// Add this Intent parameter"upi": {"flow": "intent"}}' -
The API returns an intent URL in the response. Embed this intent URL into a QR code on your end and display it to customers on mobile.
{"razorpay_payment_id": "pay_FVmAstJWfsD3SO","link": "upi://pay?pa=merchant@upi&pn=Merchant&am=500.00&tr=rzp_FVmAstJWfsD3SO&tn=Payment","status": "created"} -
Use
.
Is this integration guide useful?