{"title":"UPI Autopay for API only","category":"default","creationDate":1776961628,"content":"<p>With UPI Autopay, shoppers can link their bank account to a mobile app, allowing them to set up recurring payments via instant bank transfer. Shoppers can use one of a number of apps built by participating banks or third party app partners that support UPI Autopay. Refer to this <a href=\"https:\/\/www.npci.org.in\/what-we-do\/autopay\/list-of-banks-and-apps-live-on-autopay\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">comprehensive list<\/a>.<\/p>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">Make sure that you have an existing <a href=\"\/pt\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only\">API-only integration<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">To design your front-end, follow the <a href=\"\/pt\/payment-methods\/upi\/upi-autopay#frontend-design-considerations\">recommended design guidelines<\/a> to provide an optimal checkout experience to your shoppers on UPI Autopay.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sc-notice note\"><div>\n<p><strong>Special characters are not allowed by the acquirer.<\/strong><\/p>\n<p>All merchant-defined values, such as for <code>merchantReference<\/code>, <code>shopperReference<\/code>, and <code>remarks<\/code>, that you send to the various applicable API requests (like  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> and  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/refunds\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/{paymentPspReference}\/refunds<\/a> must be alphanumeric.<\/p>\n<\/div><\/div>\n<h2 id=\"billing-plan\">Set up a billing plan<\/h2>\n<p>To initiate a billing plan for a shopper, you need to get shopper approval to create an Autopay mandate in their UPI app and store their payment details when the mandate is approved successfully . The UPI payment service provider and the issuing bank use this mandate to track the shopper's billing plan. This setup also enables the shopper to cancel the mandate directly from their UPI app.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Field<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.type<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Type of UPI flow.<br\/> Possible values: <span translate=\"no\"><strong>upi_collect<\/strong><\/span>, <span translate=\"no\"><strong>upi_intent<\/strong><\/span>, and <span translate=\"no\"><strong>upi_qr<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.virtualPaymentAddress<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required for <span translate=\"no\"><strong>upi_collect<\/strong><\/span>.<br\/> Virtual Payment Address. A unique identifier used to let UPI connect to the shopper's bank account.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.appId<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required for <span translate=\"no\"><strong>upi_intent<\/strong><\/span>.<br\/> The ID of the Third Party Application that is used in intent flow. Possible values: <span translate=\"no\"><strong>gpay<\/strong><\/span>, <span translate=\"no\"><strong>phonepe<\/strong><\/span>, <span translate=\"no\"><strong>bhim<\/strong><\/span>, and <span translate=\"no\"><strong>paytm<\/strong><\/span>.<br\/>If omitted or set to <span translate=\"no\"><strong>null<\/strong><\/span>, response returns a generic Android app drawer link (not supported on iOS).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>storePaymentMethod<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>true<\/strong><\/span> to store shopper's payment details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperInteraction<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>Ecommerce<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>recurringProcessingModel<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>Subscription<\/strong><\/span> or <span translate=\"no\"><strong>UnscheduledCardOnFile<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperReference<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The shopper reference associated with the billing plan (minimum length three characters).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Optional, must be alphanumeric when included. No space and special characters allowed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount.value<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The first authorisation amount to charge the shopper in minor units. Note that this amount should be less than or equal to the <code>mandate.amount<\/code> and the first authorisation on this amount happens automatically within 5 minutes of successful mandate registration. <br\/> If there is no amount to be charged during the signup (in case of free trails, tokenising shopper payment details etc.,) refer to <a href=\"\/pt\/payment-methods\/upi\/upi-autopay#handling-free-trials-in-autopay\">handling free trials<\/a> section<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount.currency<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>INR<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.amount<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The maximum amount the shopper will be charged per recurring debit in minor units. Must be more than or equal to <code>amount.value<\/code>. <br\/>The recurring charge does not need to go through authentication if the amount is less than or equal to INR 15,000.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.amountRule<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Possible values: <span translate=\"no\"><strong>max<\/strong><\/span> and <span translate=\"no\"><strong>exact<\/strong><\/span>. <ul><li markdown=\"1\"><span translate=\"no\"><strong>max<\/strong><\/span> - The shopper can be charged any amount between INR 1 to the amount in the <code>amount.value<\/code> field.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>exact<\/strong><\/span> - The shopper can only be charged the amount in the <code>amount.value<\/code> field.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.frequency<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The frequency at which the shopper will be charged. Possible values: <span translate=\"no\"><strong>monthly<\/strong><\/span>, <span translate=\"no\"><strong>weekly<\/strong><\/span> and <span translate=\"no\"><strong>adhoc<\/strong><\/span>.<br\/>Use <span translate=\"no\"><strong>adhoc<\/strong><\/span> if free trial or billing cycles differ.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.startsAt<\/code><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Current transaction date in <span translate=\"no\"><strong>YYYY-MM-DD<\/strong><\/span> format. Defaulted to the current date if not sent explicitly in the request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.endsAt<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">End date of the billing plan, in <span translate=\"no\"><strong>YYYY-MM-DD<\/strong><\/span> format.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.remarks<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Limited to 20 characters, spaces allowed, but no special characters. Displayed in the shopper's UPI app (on supported apps), under the <span translate=\"no\"><strong>Autopay<\/strong><\/span> section.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.billingAttemptsRule<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required for monthly and weekly frequencies.<br\/> Possible values: <span translate=\"no\"><strong>before<\/strong><\/span>, <span translate=\"no\"><strong>after<\/strong><\/span>, and <span translate=\"no\"><strong>on<\/strong><\/span>. <ul><li markdown=\"1\"><span translate=\"no\"><strong>before<\/strong><\/span> - You can initiate the charge and retries anytime from the 1st day of the billing cycle to the <code>mandate.billingDay<\/code>.<\/li><li markdown=\"1\"><span translate=\"no\"><strong>after<\/strong><\/span> - You can initiate the charge and retries any time from the <code>mandate.billingDay<\/code> to the end of billing cycle (for example end of the month for monthly frequency).<\/li><li markdown=\"1\"><span translate=\"no\"><strong>on<\/strong><\/span> - You can initiate the charge and retries only on the <code>mandate.billingDay<\/code>.<\/li><\/ul><br\/>This field does not apply to adhoc frequencies.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.billingDay<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required for monthly and weekly frequencies.<br\/> The day of the billing cycle when the shopper will be charged.<br\/>For monthly frequency:  If <code>mandate.billingDay<\/code> is 26, the shopper is charged on the 26th of every month. Valid values: 1\u201331.<br\/>For weekly frequency: If <code>mandate.billingDay<\/code> is 5, the shopper is charged every Friday. (1 = Monday, 2 = Tuesday, ..., 7 = Sunday). Valid values: 1\u20137. <br\/>This field does not apply to adhoc frequencies.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<div id=\"tabyQbnB\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;UPI Intent&quot;,&quot;content&quot;:&quot;\\n&lt;ol&gt;\\n&lt;li&gt;UPI Intent should be implemented only for mobile app and mobile web integrations. It is not supported on desktop web.&lt;\\\/li&gt;\\n&lt;li&gt;From your server, make a  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Checkout\\\/latest\\\/post\\\/payments\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/payments&lt;\\\/a&gt; request containing the &lt;a href=\\&quot;#billing-plan\\&quot;&gt;required parameters&lt;\\\/a&gt;. Note that &lt;code&gt;paymentMethod.appId&lt;\\\/code&gt; is a mandatory field for iOS devices.&lt;\\\/li&gt;\\n&lt;li&gt;Use the &lt;code&gt;action.url&lt;\\\/code&gt; in the response to launch the selected UPI app.&lt;\\\/li&gt;\\n&lt;li&gt;The shopper will complete the approval on their UPI app.&lt;\\\/li&gt;\\n&lt;li&gt;On Android devices, the UPI app automatically closes after the shopper approves the payment, returning the shopper to your checkout page. On iOS devices, the shopper must manually close the UPI app to return to your checkout page.&lt;\\\/li&gt;\\n&lt;li&gt;Display a waiting screen to the shopper, telling them you are awaiting the payment status.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check your &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/development-resources\\\/webhooks\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;webhooks&lt;\\\/a&gt; to see the payment result and display the result to the shopper. We send a webhook to you with the final status of the payment.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments request for UPI Intent&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;json&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/checkout-test.adyen.com\\\\\\\/checkout\\\\\\\/v72\\\\\\\/payments \\\\\\\\\\\\n-H &#039;x-api-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-H &#039;content-type: application\\\\\\\/json&#039; \\\\\\\\\\\\n-d &#039; {\\\\n \\\\&amp;quot;amount\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;currency\\\\&amp;quot;: \\\\&amp;quot;INR\\\\&amp;quot;,\\\\n    \\\\&amp;quot;value\\\\&amp;quot;: 12000\\\\n },\\\\n \\\\&amp;quot;countryCode\\\\&amp;quot;: \\\\&amp;quot;IN\\\\&amp;quot;,\\\\n \\\\&amp;quot;merchantAccount\\\\&amp;quot;: \\\\&amp;quot;ADYEN_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n \\\\&amp;quot;reference\\\\&amp;quot;: \\\\&amp;quot;YOUR_ORDER_NUMBER\\\\&amp;quot;,\\\\n \\\\&amp;quot;paymentMethod\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;type\\\\&amp;quot;: \\\\&amp;quot;upi_intent\\\\&amp;quot;,\\\\n    \\\\&amp;quot;appId\\\\&amp;quot;: \\\\&amp;quot;gpay\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;mandate\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;amount\\\\&amp;quot;: \\\\&amp;quot;100000\\\\&amp;quot;,\\\\n    \\\\&amp;quot;amountRule\\\\&amp;quot;: \\\\&amp;quot;max\\\\&amp;quot;,\\\\n    \\\\&amp;quot;frequency\\\\&amp;quot;: \\\\&amp;quot;monthly\\\\&amp;quot;,\\\\n    \\\\&amp;quot;startsAt\\\\&amp;quot;: \\\\&amp;quot;2025-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;endsAt\\\\&amp;quot;: \\\\&amp;quot;2030-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;remarks\\\\&amp;quot;: \\\\&amp;quot;MandateRemark\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingAttemptsRule\\\\&amp;quot;: \\\\&amp;quot;before\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingDay\\\\&amp;quot;: \\\\&amp;quot;25\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;returnUrl\\\\&amp;quot;: \\\\&amp;quot;https:\\\\\\\/\\\\\\\/your-company.com\\\\\\\/checkout?shopperOrder=12xy..\\\\&amp;quot;,\\\\n \\\\&amp;quot;storePaymentMethod\\\\&amp;quot;: true,\\\\n \\\\&amp;quot;shopperInteraction\\\\&amp;quot;: \\\\&amp;quot;Ecommerce\\\\&amp;quot;,\\\\n \\\\&amp;quot;recurringProcessingModel\\\\&amp;quot;: \\\\&amp;quot;Subscription\\\\&amp;quot;,\\\\n \\\\&amp;quot;shopperReference\\\\&amp;quot;: \\\\&amp;quot;YOUR_SHOPPER_REFERENCE\\\\&amp;quot;\\\\n}&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments response for UPI Intent&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;pspReference\\\\\\&quot;: \\\\\\&quot;KSCZHX7J867Q8CX2\\\\\\&quot;,\\\\n    \\\\\\&quot;resultCode\\\\\\&quot;: \\\\\\&quot;Pending\\\\\\&quot;,\\\\n    \\\\\\&quot;action\\\\\\&quot;: {\\\\n        \\\\\\&quot;paymentData\\\\\\&quot;: \\\\\\&quot;Ab02b4c0!BQABAgBim..\\\\\\&quot;\\\\n        \\\\\\&quot;paymentMethodType\\\\\\&quot;: \\\\\\&quot;upi_intent\\\\\\&quot;,\\\\n        \\\\\\&quot;url\\\\\\&quot;: \\\\\\&quot;upi:\\\\\\\/\\\\\\\/mandate?...\\\\\\&quot;,\\\\n        \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;await\\\\\\&quot;\\\\n    },\\\\n\\\\\\&quot;paymentData\\\\\\&quot;: \\\\\\&quot;Ab02b4c0!BQABAgBim..\\\\\\&quot;\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;upi_intent_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;UPI QR&quot;,&quot;content&quot;:&quot;\\n&lt;ol&gt;\\n&lt;li&gt;From your server, make a  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Checkout\\\/latest\\\/post\\\/payments\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/payments&lt;\\\/a&gt; request containing the &lt;a href=\\&quot;#billing-plan\\&quot;&gt;required parameters&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Use the &lt;code&gt;action.qrCode&lt;\\\/code&gt; in the response to display the QR code to the shopper.&lt;\\\/li&gt;\\n&lt;li&gt;The shopper will scan the QR code to complete the approval on their UPI app.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check your &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/development-resources\\\/webhooks\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;webhooks&lt;\\\/a&gt; to see the payment result and display the result to the shopper. We send a webhook to you with the final status of the payment.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments request for UPI QR&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;json&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/checkout-test.adyen.com\\\\\\\/checkout\\\\\\\/v72\\\\\\\/payments \\\\\\\\\\\\n-H &#039;x-api-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-H &#039;content-type: application\\\\\\\/json&#039; \\\\\\\\\\\\n-d &#039; {\\\\n \\\\&amp;quot;amount\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;currency\\\\&amp;quot;: \\\\&amp;quot;INR\\\\&amp;quot;,\\\\n    \\\\&amp;quot;value\\\\&amp;quot;: 12000\\\\n },\\\\n \\\\&amp;quot;countryCode\\\\&amp;quot;: \\\\&amp;quot;IN\\\\&amp;quot;,\\\\n \\\\&amp;quot;merchantAccount\\\\&amp;quot;: \\\\&amp;quot;ADYEN_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n \\\\&amp;quot;reference\\\\&amp;quot;: \\\\&amp;quot;YOUR_ORDER_NUMBER\\\\&amp;quot;,\\\\n \\\\&amp;quot;paymentMethod\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;type\\\\&amp;quot;: \\\\&amp;quot;upi_qr\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;mandate\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;amount\\\\&amp;quot;: \\\\&amp;quot;100000\\\\&amp;quot;,\\\\n    \\\\&amp;quot;amountRule\\\\&amp;quot;: \\\\&amp;quot;max\\\\&amp;quot;,\\\\n    \\\\&amp;quot;frequency\\\\&amp;quot;: \\\\&amp;quot;monthly\\\\&amp;quot;,\\\\n    \\\\&amp;quot;startsAt\\\\&amp;quot;: \\\\&amp;quot;2025-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;endsAt\\\\&amp;quot;: \\\\&amp;quot;2030-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;remarks\\\\&amp;quot;: \\\\&amp;quot;MandateRemark\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingAttemptsRule\\\\&amp;quot;: \\\\&amp;quot;before\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingDay\\\\&amp;quot;: \\\\&amp;quot;25\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;returnUrl\\\\&amp;quot;: \\\\&amp;quot;https:\\\\\\\/\\\\\\\/your-company.com\\\\\\\/checkout?shopperOrder=12xy..\\\\&amp;quot;,\\\\n \\\\&amp;quot;storePaymentMethod\\\\&amp;quot;: true,\\\\n \\\\&amp;quot;shopperInteraction\\\\&amp;quot;: \\\\&amp;quot;Ecommerce\\\\&amp;quot;,\\\\n \\\\&amp;quot;recurringProcessingModel\\\\&amp;quot;: \\\\&amp;quot;Subscription\\\\&amp;quot;,\\\\n \\\\&amp;quot;shopperReference\\\\&amp;quot;: \\\\&amp;quot;YOUR_SHOPPER_REFERENCE\\\\&amp;quot;\\\\n}&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments response for UPI QR&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;resultCode\\\\\\&quot;: \\\\\\&quot;Pending\\\\\\&quot;,\\\\n    \\\\\\&quot;action\\\\\\&quot;: {\\\\n        \\\\\\&quot;paymentData\\\\\\&quot;: \\\\\\&quot;Ab02b4c0!BQABAgBim..\\\\\\&quot;\\\\n        \\\\\\&quot;paymentMethodType\\\\\\&quot;: \\\\\\&quot;upi_qr\\\\\\&quot;,\\\\n        \\\\\\&quot;url\\\\\\&quot;: \\\\\\&quot;upi:\\\\\\\/\\\\\\\/mandate?pa...\\\\\\&quot;,\\\\n        \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;qrCode\\\\\\&quot;\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;upi_qr_1_2&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;UPI Collect&quot;,&quot;content&quot;:&quot;\\n&lt;div class=\\&quot;sc-notice note\\&quot;&gt;&lt;div&gt;\\n&lt;ul&gt;\\n&lt;li&gt;In November 2025, the National Payments Corporation of India (NPCI) has informed ecosystem partners of its plan to &lt;strong&gt;deprecate UPI Collect&lt;\\\/strong&gt;, shifting its focus toward UPI Intent and UPI QR as the primary UPI payment methods going forward. This decision has been driven by lower authorization rates and a higher likelihood of fraudulent transactions associated with UPI Collect.&lt;\\\/li&gt;\\n&lt;li&gt;Therefore, we will no longer offer UPI Collect for &lt;u&gt;new&lt;\\\/u&gt; merchant integrations, and &lt;u&gt;we have updated our drop-in and components (&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-web\\\/releases\\\/tag\\\/v6.30.0\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;V6.30.0&lt;\\\/a&gt;)&lt;\\\/u&gt; to reflect this change.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;If you use UPI Collect via a custom Checkout API and UI&lt;\\\/strong&gt;: We strongly recommend that you begin offering &lt;strong&gt;UPI Intent&lt;\\\/strong&gt; and\\\/or &lt;strong&gt;UPI QR&lt;\\\/strong&gt; (if not already enabled) and start your migration as soon as possible.&lt;\\\/li&gt;\\n&lt;li&gt;Adyen is keeping merchants informed about this initiative with specific system messages.\\n&lt;\\\/div&gt;&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;ol&gt;\\n&lt;li&gt;From your server, make a  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Checkout\\\/latest\\\/post\\\/payments\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/payments&lt;\\\/a&gt; request containing the &lt;a href=\\&quot;#billing-plan\\&quot;&gt;required parameters&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Display a waiting screen to the shopper, informing them that you&#039;re waiting for payment approval in their UPI app. Include a &lt;strong&gt;5-minute countdown timer&lt;\\\/strong&gt; to indicate the time remaining to complete the approval.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check your &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/development-resources\\\/webhooks\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;webhooks&lt;\\\/a&gt; to see the payment result. We send a webhook to you with the final status of the payment.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments request for UPI QR&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;json&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/checkout-test.adyen.com\\\\\\\/checkout\\\\\\\/v72\\\\\\\/payments \\\\\\\\\\\\n-H &#039;x-api-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-H &#039;content-type: application\\\\\\\/json&#039; \\\\\\\\\\\\n-d &#039; {\\\\n \\\\&amp;quot;amount\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;currency\\\\&amp;quot;: \\\\&amp;quot;INR\\\\&amp;quot;,\\\\n    \\\\&amp;quot;value\\\\&amp;quot;: 12000\\\\n },\\\\n \\\\&amp;quot;countryCode\\\\&amp;quot;: \\\\&amp;quot;IN\\\\&amp;quot;,\\\\n \\\\&amp;quot;merchantAccount\\\\&amp;quot;: \\\\&amp;quot;ADYEN_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n \\\\&amp;quot;reference\\\\&amp;quot;: \\\\&amp;quot;YOUR_ORDER_NUMBER\\\\&amp;quot;,\\\\n \\\\&amp;quot;paymentMethod\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;type\\\\&amp;quot;: \\\\&amp;quot;upi_collect\\\\&amp;quot;,\\\\n    \\\\&amp;quot;virtualPaymentAddress\\\\&amp;quot;: \\\\&amp;quot;9999999999@upi\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;mandate\\\\&amp;quot;: {\\\\n    \\\\&amp;quot;amount\\\\&amp;quot;: \\\\&amp;quot;100000\\\\&amp;quot;,\\\\n    \\\\&amp;quot;amountRule\\\\&amp;quot;: \\\\&amp;quot;max\\\\&amp;quot;,\\\\n    \\\\&amp;quot;frequency\\\\&amp;quot;: \\\\&amp;quot;monthly\\\\&amp;quot;,\\\\n    \\\\&amp;quot;startsAt\\\\&amp;quot;: \\\\&amp;quot;2025-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;endsAt\\\\&amp;quot;: \\\\&amp;quot;2030-07-21\\\\&amp;quot;,\\\\n    \\\\&amp;quot;remarks\\\\&amp;quot;: \\\\&amp;quot;MandateRemark\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingAttemptsRule\\\\&amp;quot;: \\\\&amp;quot;before\\\\&amp;quot;,\\\\n    \\\\&amp;quot;billingDay\\\\&amp;quot;: \\\\&amp;quot;25\\\\&amp;quot;\\\\n },\\\\n \\\\&amp;quot;returnUrl\\\\&amp;quot;: \\\\&amp;quot;https:\\\\\\\/\\\\\\\/your-company.com\\\\\\\/checkout?shopperOrder=12xy..\\\\&amp;quot;,\\\\n \\\\&amp;quot;storePaymentMethod\\\\&amp;quot;: true,\\\\n \\\\&amp;quot;shopperInteraction\\\\&amp;quot;: \\\\&amp;quot;Ecommerce\\\\&amp;quot;,\\\\n \\\\&amp;quot;recurringProcessingModel\\\\&amp;quot;: \\\\&amp;quot;Subscription\\\\&amp;quot;,\\\\n \\\\&amp;quot;shopperReference\\\\&amp;quot;: \\\\&amp;quot;YOUR_SHOPPER_REFERENCE\\\\&amp;quot;\\\\n }&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example \\\/payments response for UPI QR&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n    \\\\\\&quot;resultCode\\\\\\&quot;: \\\\\\&quot;Pending\\\\\\&quot;,\\\\n    \\\\\\&quot;action\\\\\\&quot;: {\\\\n        \\\\\\&quot;paymentData\\\\\\&quot;: \\\\\\&quot;Ab02b4c0!BQABAgBim..\\\\\\&quot;\\\\n        \\\\\\&quot;paymentMethodType\\\\\\&quot;: \\\\\\&quot;upi_collect\\\\\\&quot;,\\\\n        \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;await\\\\\\&quot;\\\\n    },\\\\n    \\\\\\&quot;paymentData\\\\\\&quot;: \\\\\\&quot;Ab02b4c0!BQABAg...\\\\\\&quot;\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;upi_collect_2_3&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<h3>Webhooks for payment result<\/h3>\n<p>You can receive the mandate details as part of your standard webhooks. To do this:<\/p>\n<ol>\n<li>In your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>, go to <strong>Developers<\/strong> &gt; <strong>Webhooks<\/strong>.<\/li>\n<li>Next to <strong>Standard webhook<\/strong>, select the <strong>edit webhook<\/strong> icon.<\/li>\n<li>Under <strong>Additional Settings<\/strong>, select <strong>Include Mandate Details<\/strong>.<\/li>\n<li>If you would like to receive additional UPI metadata like VPA, issuer handle and bank code, <strong>Under Additional Settings<\/strong>, select <strong>Include UPI Metadata<\/strong> (VPA, handle and issuer bank code).<\/li>\n<li>Select <strong>Save Configuration<\/strong>.<\/li>\n<\/ol>\n<p>Specific fields for UPI Autopay in the authorization webhook:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Field<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.mandateId<\/code><\/td>\n<td style=\"text-align: left;\">Unique Mandate Number for the mandate created by NPCI (also called UMN). Store this id for future use.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.status<\/code><\/td>\n<td style=\"text-align: left;\">Current status of the mandate (for example active, or cancelled).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>mandate.txVariant<\/code><\/td>\n<td style=\"text-align: left;\">Transaction variant used (<span translate=\"no\"><strong>upi_collect<\/strong><\/span> or <span translate=\"no\"><strong>upi_qr<\/strong><\/span>)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>upi.vpa<\/code><\/td>\n<td style=\"text-align: left;\">Shopper's Virtual Payment Address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>upi.handle<\/code><\/td>\n<td style=\"text-align: left;\">Third-party UPI app handle (for example <span translate=\"no\"><strong>okhdfc<\/strong><\/span>, or <span translate=\"no\"><strong>okicici<\/strong><\/span>).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>upi.issuerBank<\/code><\/td>\n<td style=\"text-align: left;\">First four characters of the shopper's issuing bank IFSC code.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Webhook for payment result:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">eventCode<\/th>\n<th style=\"text-align: left;\">success<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Action to take<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">AUTHORISATION<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<td style=\"text-align: left;\">The transaction failed.<\/td>\n<td style=\"text-align: left;\">Cancel the order and inform the shopper that the payment failed. Any amount debited will be refunded in 2\u20133 days.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">AUTHORISATION<\/td>\n<td style=\"text-align: left;\">true<\/td>\n<td style=\"text-align: left;\">The shopper successfully completed the payment and a mandate was created.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that the payment was successful and proceed with the order.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example webhook'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"live\\\" : \\\"false\\\",\\n    \\\"notificationItems\\\" : [\\n        {\\n            \\\"NotificationRequestItem\\\" : {\\n                \\\"additionalData\\\" : {\\n                  \\\"refusalReasonRaw\\\" : \\\"MD000: Request successful\\\",\\n                  \\\"recurring.recurringDetailReference\\\" : \\\"9915989424854370\\\",\\n                  \\\"recurring.shopperReference\\\" : \\\"YOUR_SHOPPER_REFERENCE\\\",\\n                  \\\"mandate.amount\\\" : \\\"1000.00\\\",\\n                  \\\"mandate.amountRule\\\" : \\\"max\\\",\\n                  \\\"mandate.currency\\\" : \\\"INR\\\",\\n                  \\\"mandate.frequency\\\" : \\\"monthly\\\",\\n                  \\\"mandate.startsAt\\\" : \\\"2020-09-21 00:00:00\\\",\\n                  \\\"mandate.endsAt\\\" : \\\"2021-06-28 00:00:00\\\",\\n                  \\\"mandate.billingAttemptsRule\\\" : \\\"after\\\",\\n                  \\\"mandate.billingDay\\\" : \\\"1\\\",\\n                  \\\"mandate.mandateId\\\" : \\\"UNIQUE_MANDATE_NUMBER\\\",\\n                  \\\"mandate.providerId\\\" : \\\"UNIQUE_MANDATE_NUMBER\\\",\\n                  \\\"mandate.status\\\" : \\\"active\\\",\\n                  \\\"mandate.txVariant\\\" : \\\"upi_collect\\\",\\n                  \\\"upi.vpa\\\": \\\"username@handle\\\",\\n                  \\\"upi.issuerBank\\\": \\\"ICIC\\\",\\n                  \\\"upi.handle\\\": \\\"okicici\\\",\\n                },\\n            \\\"amount\\\" : {\\n                \\\"currency\\\" : \\\"INR\\\",\\n                \\\"value\\\" : 12000\\n            },\\n            \\\"eventCode\\\" : \\\"AUTHORISATION\\\",\\n            \\\"eventDate\\\" : \\\"2020-09-21T10:57:26+02:00\\\",\\n            \\\"merchantAccountCode\\\" : \\\"ADYEN_MERCHANT_ACCOUNT\\\",\\n            \\\"merchantReference\\\" : \\\"YOUR_ORDER_NUMBER\\\",\\n            \\\"paymentMethod\\\" : \\\"upi_collect\\\",\\n            \\\"pspReference\\\" : \\\"8826006786035918\\\",\\n            \\\"reason\\\" : \\\"null\\\",\\n            \\\"success\\\" : \\\"true\\\"\\n            }\\n        }\\n    ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Make recurring payments<\/h2>\n<p>For every subsequent payment in a billing plan, you need to:<\/p>\n<ol>\n<li>Send a pre-debit notification.<\/li>\n<li>Make the recurring payment.<\/li>\n<\/ol>\n<div class=\"sc-notice note\"><div>\n<p>As per the latest NPCI guidelines, you are required to perform any non-customer initiated transactions, such as Autopay pre-debit notifications and recurring transactions, during non-peak hours only, as outlined below for Indian Standard Time:<\/p>\n<ul>\n<li>Before 10:00 AM<\/li>\n<li>Between 1:00 PM and 5:00 PM<\/li>\n<li>After 9:30 PM<\/li>\n<\/ul>\n<\/div><\/div>\n<h3>Send a pre-debit notification<\/h3>\n<p>A pre-debit notification is an email, SMS or a push notification alert sent to a shopper, informing them of an upcoming recurring charge by the issuer.<\/p>\n<ul>\n<li>To trigger this notification, you must notify Adyen using the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> endpoint.<\/li>\n<li>Adyen then forwards the request to the UPI network, which will subsequently inform the relevant Issuer(s) to send the alert to the shopper.<\/li>\n<li>Upon receiving this notification, shoppers have the option to cancel their mandate.<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>As per UPI regulations, the pre-debit notification <strong>must be sent at least 24 hours before<\/strong> each recurring payment.<\/p>\n<\/div><\/div>\n<p>To send a pre-debit notification to your shopper, send a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request and include the following:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Field<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>storedPaymentMethodId<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The token for your shopper's stored payment details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchantAccount<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your merchant account associated with the shopper's stored payment details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperReference<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The shopper reference associated with the billing plan.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The amount you are going to charge the shopper.<br\/>If <code>mandate.amountRule<\/code> = <span translate=\"no\"><strong>max<\/strong><\/span>: You can charge any amount between INR1 and the value of mandate.amount.<br\/>If <code>mandate.amountRule<\/code> = <span translate=\"no\"><strong>exact<\/strong><\/span>: You must charge exactly mandate.amount.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingDate<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The date on which the shopper will be charged. Must be at least 24 hours from the notification date.<br\/>Example: If the notification date is 2025-08-13, the billing date should be 2025-08-14 or later.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingSequenceNumber<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required when mandate.frequency = adhoc.<br\/> Maximum length is 3. Use a unique number for each  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request. If using a single-digit number, use any value other than 1, ensuring it is unique for each subsequent recurring cycle.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The reference for the pre-debit notification.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example \/notifyShopper request'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;json&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/pal-test.adyen.com\\\/pal\\\/servlet\\\/Recurring\\\/v67\\\/notifyShopper \\\\\\n-u \\&quot;ws@Company.YourCompany\\&quot;:\\&quot;YourWSPassword\\&quot; \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;storedPaymentMethodId\\&quot;: \\&quot;8415995487234100\\&quot;,\\n    \\&quot;shopperReference\\&quot;: \\&quot;YOUR_SHOPPER_REFERENCE\\&quot;,\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;currency\\&quot;: \\&quot;INR\\&quot;,\\n        \\&quot;value\\&quot;: 20000\\n    },\\n    \\&quot;billingDate\\&quot;: \\&quot;2020-10-02\\&quot;,\\n    \\&quot;reference\\&quot;: \\&quot;Example reference\\&quot;,\\n    \\&quot;billingSequenceNumber\\&quot;: 2\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> response contains:<\/p>\n<p><code>message<\/code>: Information about the status of the pre-debit notification.<br \/>\n<code>shopperNotificationReference<\/code>: Unique reference to the pre-debit notification. Store this value to make the subsequent payment.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example \/notifyShopper response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"message\\\": \\\"Request Processed Successfully\\\",\\n    \\\"resultCode\\\": \\\"Success\\\",\\n    \\\"shopperNotificationReference\\\": \\\"3456789098765432\\\",\\n    \\\"storedPaymentMethodId\\\": \\\"8415995487234100\\\",\\n    \\\"pspReference\\\": \\\"3456789098765432\\\",\\n    \\\"reference\\\": \\\"Example reference\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Make the recurring payment<\/h3>\n<p>Once the pre-debit notification is successful, you can carry out a recurring payment on your billing date.<\/p>\n<ol>\n<li>From your server, make a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request containing fields listed in the below section.<\/li>\n<li>Check your webhooks to see the payment result. Refer to the webhook section below to understand how to handle failed recurring payments.<\/li>\n<\/ol>\n<p>Include the following in your  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Field<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.type<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Type of UPI flow.<br\/> Possible values: <span translate=\"no\"><strong>upi_collect<\/strong><\/span>, <span translate=\"no\"><strong>upi_intent<\/strong><\/span>, and <span translate=\"no\"><strong>upi_qr<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.storedPaymentMethodId<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The token value for the shopper's stored payment information.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.shopperNotificationReference<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Unique reference to the pre-debit notification, taken from the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> response.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.billingSequenceNumber<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Required when <code>mandate.frequency<\/code> = <span translate=\"no\"><strong>adhoc<\/strong><\/span>.<br\/>The value must match the value used in the corresponding  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request.<br\/><div class=\"notices green\">In case of retries, the same sequenceNumber from the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request can be used until the no of allowed retries are exceeded and new  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request is raised.<\/div><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">The recurring charge. Include both currency and value.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchantAccount<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Your Adyen merchant account.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperReference<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Unique reference identifying the shopper associated with the billing plan.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Optional, must be alphanumeric when included. No space and special characters allowed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperInteraction<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>ContAuth<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>recurringProcessingModel<\/code><\/td>\n<td style=\"text-align: left;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <span translate=\"no\"><strong>Subscription<\/strong><\/span> or <span translate=\"no\"><strong>UnscheduledCardOnFile<\/strong><\/span>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example \/payments request for a recurring payment'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;json&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/checkout\\\/v72\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;currency\\&quot;: \\&quot;INR\\&quot;,\\n        \\&quot;value\\&quot;: 20000\\n    },\\n    \\&quot;paymentMethod\\&quot;: {\\n        \\&quot;type\\&quot;: \\&quot;upi_collect\\&quot;,\\n        \\&quot;storedPaymentMethodId\\&quot;: \\&quot;XHS58FLSNBF87FW2\\&quot;,\\n        \\&quot;shopperNotificationReference\\&quot;: \\&quot;991600060053751D\\&quot;,\\n        \\&quot;billingSequenceNumber\\&quot; : 2\\n    },\\n    \\&quot;mandate\\&quot;: {\\n       \\&quot;remarks\\&quot;: \\&quot;Remark on mandate\\&quot;\\n    },\\n    \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n    \\&quot;shopperInteraction\\&quot;: \\&quot;ContAuth\\&quot;,\\n    \\&quot;recurringProcessingModel\\&quot;: \\&quot;Subscription\\&quot;,\\n    \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;shopperReference\\&quot;: \\&quot;YOUR_SHOPPER_REFERENCE\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example \/payments response for a recurring payment'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"additionalData\\\": {\\n        \\\"refusalReasonRaw\\\": \\\"MD200:Mandate Execution request is initiated to NPCI\\\",\\n        \\\"recurring.contractTypes\\\": \\\"ONECLICK,RECURRING\\\",\\n        \\\"recurring.recurringDetailReference\\\": \\\"XHS58FLSNBF87FW2\\\",\\n        \\\"recurringProcessingModel\\\": \\\"Subscription\\\",\\n        \\\"paymentMethodVariant\\\": \\\"upi_collect\\\",\\n        \\\"paymentMethod\\\": \\\"upi_collect\\\",\\n        \\\"recurring.shopperReference\\\": \\\"YOUR_SHOPPER_REFERENCE,\\n    },\\n    \\\"pspReference\\\": \\\"SP8XTT68FBZX4VW2\\\",\\n    \\\"resultCode\\\": \\\"Received\\\",\\n    \\\"merchantReference\\\": \\\"YOUR_MERCHANT_REFERENCE\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>Webhook for payment result:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">eventCode<\/th>\n<th style=\"text-align: left;\">success<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Action to take<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">AUTHORISATION<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<td style=\"text-align: left;\">The transaction failed.<\/td>\n<td style=\"text-align: left;\">Cancel the order. You can retry the authorization request up to 3 times, with a minimum 1-hour interval between each attempt. If all retries fail, inform the shopper and initiate a new  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Recurring\/latest\/post\/notifyShopper\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/notifyShopper<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">AUTHORISATION<\/td>\n<td style=\"text-align: left;\">true<\/td>\n<td style=\"text-align: left;\">The shopper successfully completed the payment and a mandate was created.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that the payment was successful and proceed with the order.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Cancel a billing plan<\/h2>\n<p>If your shopper decides to end their billing plan, you must cancel the corresponding UPI Autopay mandate linked to their stored payment details.<\/p>\n<p><strong>Merchant-initiated cancellation:<\/strong><\/p>\n<ul>\n<li>Send a <a href=\"\/pt\/online-payments\/tokenization\/managing-tokens#delete-stored-details\">delete request<\/a> using <code>\/storedPaymentMethods\/{storedPaymentMethodId}<\/code> to remove the shopper\u2019s stored token and cancel the mandate.<\/li>\n<li>You will receive a <a href=\"\/pt\/online-payments\/tokenization\/managing-tokens\/#webhooks\">recurring.token.disabled<\/a> webhook to confirm the cancellation status.<\/li>\n<\/ul>\n<p><strong>Shopper-initiated cancellation (via UPI App):<\/strong><\/p>\n<ul>\n<li>If the shopper cancels their billing plan on their UPI app, you will receive a <a href=\"\/pt\/online-payments\/tokenization\/managing-tokens\/#webhooks\">recurring.token.disabled<\/a> webhook.<\/li>\n<\/ul>\n<h2>Test and go live<\/h2>\n<p>Contact your Implementation Manager to set up your test environment for UPI Autopay. You can use the following magic amounts to test various transaction outcomes.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Scenario<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Magic amount (<code>amount.value<\/code>)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Signup \u2013 Success<\/td>\n<td style=\"text-align: left;\">Shopper signup successful<\/td>\n<td style=\"text-align: left;\">7005<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Signup \u2013 Failure<\/td>\n<td style=\"text-align: left;\">Shopper signup unsuccessful<\/td>\n<td style=\"text-align: left;\">7006<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Pre debit notification - Success<\/td>\n<td style=\"text-align: left;\">Pre debit notification successful<\/td>\n<td style=\"text-align: left;\">7005<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Pre debit notification - Failure<\/td>\n<td style=\"text-align: left;\">Pre debit notification unsuccessful<\/td>\n<td style=\"text-align: left;\">1401<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Recurring Charge \u2013 Success<\/td>\n<td style=\"text-align: left;\">Successful recurring charge<\/td>\n<td style=\"text-align: left;\">7005<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Recurring Charge \u2013 Failure<\/td>\n<td style=\"text-align: left;\">Failed recurring charge<\/td>\n<td style=\"text-align: left;\">7008<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Mandate Revoke \u2013 Success<\/td>\n<td style=\"text-align: left;\">Successful mandate revoke<\/td>\n<td style=\"text-align: left;\">7008<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Mandate Revoke \u2013 Failure<\/td>\n<td style=\"text-align: left;\">Failed mandate revoke<\/td>\n<td style=\"text-align: left;\">7010<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Refund \u2013 Success<\/td>\n<td style=\"text-align: left;\">Successful refund<\/td>\n<td style=\"text-align: left;\">2010<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Refund \u2013 Failure<\/td>\n<td style=\"text-align: left;\">Failed refund<\/td>\n<td style=\"text-align: left;\">2011<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Before you can accept live UPI Autopay payments, contact your Account Manager to begin the onboarding process.<\/p>\n<h2 id=\"see-also\">See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/online-payments\/build-your-integration\/advanced-flow?platform=Web&amp;integration=API%20only\"\n                        target=\"_self\"\n                        >\n                    API only integration\n                <\/a><\/li><li><a href=\"\/development-resources\/webhooks\"\n                        target=\"_self\"\n                        >\n                    Webhooks\n                <\/a><\/li><li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/CheckoutService\/latest\/overview\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    API Explorer\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/payment-methods\/upi\/upi-autopay\/api-only","articleFields":{"description":"Offer recurring payments to your shoppers with our UPI Autopay integration.","feedback_component":true,"parameters":{"payment_method":"UPI Autopay","country_code":"IN","currency":"INR","payment_method_type":"upi_collect","return_url":"https:\/\/your-company.example.com\/checkout?shopperOrder=12xy..","component_name":"payu_IN_upi","integration_guide_url":"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&integration=API%20only"},"display_in_overview":false,"page_id":"6228d4db-38bc-4c25-99eb-709ee6735649","filters_component":false,"decision_tree":"[]"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/payment-methods\/upi\/upi-autopay\/api-only","title":"UPI Autopay for API only","content":"With UPI Autopay, shoppers can link their bank account to a mobile app, allowing them to set up recurring payments via instant bank transfer. Shoppers can use one of a number of apps built by participating banks or third party app partners that support UPI Autopay. Refer to this comprehensive list.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nMake sure that you have an existing API-only integration.\n\n\nSetup steps\nTo design your front-end, follow the recommended design guidelines to provide an optimal checkout experience to your shoppers on UPI Autopay.\n\n\n\n\nSpecial characters are not allowed by the acquirer.\nAll merchant-defined values, such as for merchantReference, shopperReference, and remarks, that you send to the various applicable API requests (like  \/payments and  \/payments\/{paymentPspReference}\/refunds must be alphanumeric.\n\nSet up a billing plan\nTo initiate a billing plan for a shopper, you need to get shopper approval to create an Autopay mandate in their UPI app and store their payment details when the mandate is approved successfully . The UPI payment service provider and the issuing bank use this mandate to track the shopper's billing plan. This setup also enables the shopper to cancel the mandate directly from their UPI app.\n\n\n\nField\nRequired\nDescription\n\n\n\n\npaymentMethod.type\n\nType of UPI flow. Possible values: upi_collect, upi_intent, and upi_qr.\n\n\npaymentMethod.virtualPaymentAddress\n\nRequired for upi_collect. Virtual Payment Address. A unique identifier used to let UPI connect to the shopper's bank account.\n\n\npaymentMethod.appId\n\nRequired for upi_intent. The ID of the Third Party Application that is used in intent flow. Possible values: gpay, phonepe, bhim, and paytm.If omitted or set to null, response returns a generic Android app drawer link (not supported on iOS).\n\n\nstorePaymentMethod\n\nSet to true to store shopper's payment details.\n\n\nshopperInteraction\n\nSet to Ecommerce.\n\n\nrecurringProcessingModel\n\nSet to Subscription or UnscheduledCardOnFile.\n\n\nshopperReference\n\nThe shopper reference associated with the billing plan (minimum length three characters).\n\n\nreference\n\nOptional, must be alphanumeric when included. No space and special characters allowed.\n\n\namount.value\n\nThe first authorisation amount to charge the shopper in minor units. Note that this amount should be less than or equal to the mandate.amount and the first authorisation on this amount happens automatically within 5 minutes of successful mandate registration.  If there is no amount to be charged during the signup (in case of free trails, tokenising shopper payment details etc.,) refer to handling free trials section\n\n\namount.currency\n\nSet to INR.\n\n\nmandate.amount\n\nThe maximum amount the shopper will be charged per recurring debit in minor units. Must be more than or equal to amount.value. The recurring charge does not need to go through authentication if the amount is less than or equal to INR 15,000.\n\n\nmandate.amountRule\n\nPossible values: max and exact. max - The shopper can be charged any amount between INR 1 to the amount in the amount.value field.exact - The shopper can only be charged the amount in the amount.value field.\n\n\nmandate.frequency\n\nThe frequency at which the shopper will be charged. Possible values: monthly, weekly and adhoc.Use adhoc if free trial or billing cycles differ.\n\n\nmandate.startsAt\n\nCurrent transaction date in YYYY-MM-DD format. Defaulted to the current date if not sent explicitly in the request.\n\n\nmandate.endsAt\n\nEnd date of the billing plan, in YYYY-MM-DD format.\n\n\nmandate.remarks\n\nLimited to 20 characters, spaces allowed, but no special characters. Displayed in the shopper's UPI app (on supported apps), under the Autopay section.\n\n\nmandate.billingAttemptsRule\n\nRequired for monthly and weekly frequencies. Possible values: before, after, and on. before - You can initiate the charge and retries anytime from the 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 (for example end of the month for monthly frequency).on - You can initiate the charge and retries only on the mandate.billingDay.This field does not apply to adhoc frequencies.\n\n\nmandate.billingDay\n\nRequired for monthly and weekly frequencies. The day of the billing cycle when the shopper will be charged.For monthly frequency:  If mandate.billingDay is 26, the shopper is charged on the 26th of every month. Valid values: 1\u201331.For weekly frequency: If mandate.billingDay is 5, the shopper is charged every Friday. (1 = Monday, 2 = Tuesday, ..., 7 = Sunday). Valid values: 1\u20137. This field does not apply to adhoc frequencies.\n\n\n\n\n\n    \n        \n        \n    \n\n\nWebhooks for payment result\nYou can receive the mandate details as part of your standard webhooks. To do this:\n\nIn your Customer Area, go to Developers &gt; Webhooks.\nNext to Standard webhook, select the edit webhook icon.\nUnder Additional Settings, select Include Mandate Details.\nIf you would like to receive additional UPI metadata like VPA, issuer handle and bank code, Under Additional Settings, select Include UPI Metadata (VPA, handle and issuer bank code).\nSelect Save Configuration.\n\nSpecific fields for UPI Autopay in the authorization webhook:\n\n\n\nField\nDescription\n\n\n\n\nmandate.mandateId\nUnique Mandate Number for the mandate created by NPCI (also called UMN). Store this id for future use.\n\n\nmandate.status\nCurrent status of the mandate (for example active, or cancelled).\n\n\nmandate.txVariant\nTransaction variant used (upi_collect or upi_qr)\n\n\nupi.vpa\nShopper's Virtual Payment Address.\n\n\nupi.handle\nThird-party UPI app handle (for example okhdfc, or okicici).\n\n\nupi.issuerBank\nFirst four characters of the shopper's issuing bank IFSC code.\n\n\n\nWebhook for payment result:\n\n\n\neventCode\nsuccess\nDescription\nAction to take\n\n\n\n\nAUTHORISATION\nfalse\nThe transaction failed.\nCancel the order and inform the shopper that the payment failed. Any amount debited will be refunded in 2\u20133 days.\n\n\nAUTHORISATION\ntrue\nThe shopper successfully completed the payment and a mandate was created.\nInform the shopper that the payment was successful and proceed with the order.\n\n\n\n\n    \n\nMake recurring payments\nFor every subsequent payment in a billing plan, you need to:\n\nSend a pre-debit notification.\nMake the recurring payment.\n\n\nAs per the latest NPCI guidelines, you are required to perform any non-customer initiated transactions, such as Autopay pre-debit notifications and recurring transactions, during non-peak hours only, as outlined below for Indian Standard Time:\n\nBefore 10:00 AM\nBetween 1:00 PM and 5:00 PM\nAfter 9:30 PM\n\n\nSend a pre-debit notification\nA pre-debit notification is an email, SMS or a push notification alert sent to a shopper, informing them of an upcoming recurring charge by the issuer.\n\nTo trigger this notification, you must notify Adyen using the  \/notifyShopper endpoint.\nAdyen then forwards the request to the UPI network, which will subsequently inform the relevant Issuer(s) to send the alert to the shopper.\nUpon receiving this notification, shoppers have the option to cancel their mandate.\n\n\nAs per UPI regulations, the pre-debit notification must be sent at least 24 hours before each recurring payment.\n\nTo send a pre-debit notification to your shopper, send a  \/notifyShopper request and include the following:\n\n\n\nField\nRequired\nDescription\n\n\n\n\nstoredPaymentMethodId\n\nThe token for your shopper's stored payment details.\n\n\nmerchantAccount\n\nYour merchant account associated with the shopper's stored payment details.\n\n\nshopperReference\n\nThe shopper reference associated with the billing plan.\n\n\namount\n\nThe amount you are going to charge the shopper.If mandate.amountRule = max: You can charge any amount between INR1 and the value of mandate.amount.If mandate.amountRule = exact: You must charge exactly mandate.amount.\n\n\nbillingDate\n\nThe date on which the shopper will be charged. Must be at least 24 hours from the notification date.Example: If the notification date is 2025-08-13, the billing date should be 2025-08-14 or later.\n\n\nbillingSequenceNumber\n\nRequired when mandate.frequency = adhoc. Maximum length is 3. Use a unique number for each  \/notifyShopper request. If using a single-digit number, use any value other than 1, ensuring it is unique for each subsequent recurring cycle.\n\n\nreference\n\nThe reference for the pre-debit notification.\n\n\n\n\n    \n\nThe  \/notifyShopper response contains:\nmessage: Information about the status of the pre-debit notification.\nshopperNotificationReference: Unique reference to the pre-debit notification. Store this value to make the subsequent payment.\n\n    \n\nMake the recurring payment\nOnce the pre-debit notification is successful, you can carry out a recurring payment on your billing date.\n\nFrom your server, make a  \/payments request containing fields listed in the below section.\nCheck your webhooks to see the payment result. Refer to the webhook section below to understand how to handle failed recurring payments.\n\nInclude the following in your  \/payments request:\n\n\n\nField\nRequired\nDescription\n\n\n\n\npaymentMethod.type\n\nType of UPI flow. Possible values: upi_collect, upi_intent, and upi_qr.\n\n\npaymentMethod.storedPaymentMethodId\n\nThe token value for the shopper's stored payment information.\n\n\npaymentMethod.shopperNotificationReference\n\nUnique reference to the pre-debit notification, taken from the  \/notifyShopper response.\n\n\npaymentMethod.billingSequenceNumber\n\nRequired when mandate.frequency = adhoc.The value must match the value used in the corresponding  \/notifyShopper request.In case of retries, the same sequenceNumber from the  \/notifyShopper request can be used until the no of allowed retries are exceeded and new  \/notifyShopper request is raised.\n\n\namount\n\nThe recurring charge. Include both currency and value.\n\n\nmerchantAccount\n\nYour Adyen merchant account.\n\n\nshopperReference\n\nUnique reference identifying the shopper associated with the billing plan.\n\n\nreference\n\nOptional, must be alphanumeric when included. No space and special characters allowed.\n\n\nshopperInteraction\n\nSet to ContAuth.\n\n\nrecurringProcessingModel\n\nSet to Subscription or UnscheduledCardOnFile.\n\n\n\n\n    \n\n\n    \n\nWebhook for payment result:\n\n\n\neventCode\nsuccess\nDescription\nAction to take\n\n\n\n\nAUTHORISATION\nfalse\nThe transaction failed.\nCancel the order. You can retry the authorization request up to 3 times, with a minimum 1-hour interval between each attempt. If all retries fail, inform the shopper and initiate a new  \/notifyShopper request.\n\n\nAUTHORISATION\ntrue\nThe shopper successfully completed the payment and a mandate was created.\nInform the shopper that the payment was successful and proceed with the order.\n\n\n\nCancel a billing plan\nIf your shopper decides to end their billing plan, you must cancel the corresponding UPI Autopay mandate linked to their stored payment details.\nMerchant-initiated cancellation:\n\nSend a delete request using \/storedPaymentMethods\/{storedPaymentMethodId} to remove the shopper\u2019s stored token and cancel the mandate.\nYou will receive a recurring.token.disabled webhook to confirm the cancellation status.\n\nShopper-initiated cancellation (via UPI App):\n\nIf the shopper cancels their billing plan on their UPI app, you will receive a recurring.token.disabled webhook.\n\nTest and go live\nContact your Implementation Manager to set up your test environment for UPI Autopay. You can use the following magic amounts to test various transaction outcomes.\n\n\n\nScenario\nDescription\nMagic amount (amount.value)\n\n\n\n\nSignup \u2013 Success\nShopper signup successful\n7005\n\n\nSignup \u2013 Failure\nShopper signup unsuccessful\n7006\n\n\nPre debit notification - Success\nPre debit notification successful\n7005\n\n\nPre debit notification - Failure\nPre debit notification unsuccessful\n1401\n\n\nRecurring Charge \u2013 Success\nSuccessful recurring charge\n7005\n\n\nRecurring Charge \u2013 Failure\nFailed recurring charge\n7008\n\n\nMandate Revoke \u2013 Success\nSuccessful mandate revoke\n7008\n\n\nMandate Revoke \u2013 Failure\nFailed mandate revoke\n7010\n\n\nRefund \u2013 Success\nSuccessful refund\n2010\n\n\nRefund \u2013 Failure\nFailed refund\n2011\n\n\n\nBefore you can accept live UPI Autopay payments, contact your Account Manager to begin the onboarding process.\nSee also\n\n\n                    API only integration\n                \n                    Webhooks\n                \n                    API Explorer\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Payment methods","lvl2":"UPI","lvl3":"UPI Autopay","lvl4":"UPI Autopay for API only"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/payment-methods","lvl2":"https:\/\/docs.adyen.com\/pt\/payment-methods\/upi","lvl3":"https:\/\/docs.adyen.com\/pt\/payment-methods\/upi\/upi-autopay","lvl4":"\/pt\/payment-methods\/upi\/upi-autopay\/api-only"},"levels":5,"category":"Payment method","category_color":"green","tags":["Autopay"]}}
