> ## Documentation Index
> Fetch the complete documentation index at: https://www.cashfree.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# UPI Collect Flow Deprecation

> Learn about the UPI Collect flow, its deprecation, and migration to secure UPI payment methods as per NPCI guidelines.

The National Payments Corporation of India (NPCI) has mandated a phased deprecation of the UPI Collect flow for P2M (Person-to-Merchant) transactions to enhance security and reduce fraud. This change impacts all merchants using UPI Collect for payments.

### What's changing

NPCI has mandated the following changes for UPI P2M transactions:

* **UPI Collect flow phase-out**: UPI Collect for P2M transactions must be discontinued.
* **Migration to secure flows**: Merchants must prioritise UPI Intent (mobile) and UPI QR (desktop) as primary payment methods.
* **Device-specific enforcement**: Different rules apply based on customer device type.

<Note>
  UPI Collect was previously sunset for P2P transactions. These changes now extend to merchant payments to address rising fraud instances.
</Note>

### Understanding UPI payment flows

Cashfree supports the following UPI payment flows:

<Accordion title="UPI Collect flow">
  1. Customer enters their UPI ID (VPA).
  2. Collect request is sent to the customer's UPI app.
  3. Customer authorises the payment using their UPI PIN.
</Accordion>

<Accordion title="UPI Intent and QR flow">
  1. On mobile, the customer is redirected to their preferred UPI app by clicking the app icon on checkout.
  2. On desktop, the customer scans a dynamically generated QR code using their UPI app.
  3. Payment is completed securely within the UPI app without manually entering a VPA.
</Accordion>

<Note>
  UPI Intent and QR flows are now the dominant payment methods in the ecosystem due to enhanced security and user experience.
</Note>

### Device-specific UPI rules

The following table shows NPCI's mandated UPI flows by device type:

| Device or platform | Allowed UPI flows        | UPI collect status                               |
| ------------------ | ------------------------ | ------------------------------------------------ |
| Android mobile     | UPI Intent               | To be deprecated effective **February 28, 2026** |
| Desktop (Web)      | UPI QR                   | To be phased out                                 |
| iOS mobile         | UPI Intent + UPI Collect | Temporarily allowed                              |

<Note>iOS is currently exempted by NPCI and will continue to support UPI Collect until further notice.</Note>

### Required actions by integration type

<Accordion title="Non-seamless merchants (Cashfree Hosted Checkout)">
  **Applies to**: Mobile web and native SDK integrations using standard [Cashfree Hosted Checkout](/payments/checkout/hosted)

  **Action required**: No action needed

  **Impact**: Cashfree will automatically handle the phase-out. Alternate flows (Intent and QR) are already supported, so customers won't experience disruptions. The Collect option will be removed from checkout once sunset is enforced.
</Accordion>

<Accordion title="Non-seamless merchants using WebView">
  **Applies to**: Android or iOS mobile WebView integrations using Cashfree Checkout

  **Action required**: The following scenarios determine your required actions:

  * **Scenario A** (Not using standard Checkout): No action required.
  * **Scenario B** (Using standard Checkout in WebView): Implement specific code changes to ensure UPI Intent displays correctly. Refer to the [Android Custom Checkout](/payments/online/mobile/misc/upi_intent_support_js_sdk) documentation for WebView integration details.
</Accordion>

<Accordion title="Seamless merchants (Custom checkout or API-based integration)">
  **Applies to**: Direct API integrations using [custom checkout](/payments/online/element/overview) or [Order Pay API](/api-reference/payments/latest/payments/pay)

  <Warning>
    Critical actions are required for seamless merchants to ensure compliance with NPCI guidelines.
  </Warning>

  #### Migrate from Collect to Intent or QR

  Update your checkout logic to prioritise the following flows:

  * **Mobile**: Enable UPI Intent.
  * **Desktop**: Use UPI QR.
  * **Deprecate**: Remove UPI Collect as a payment option according to device rules above.

  #### Pass client environment details

  Cashfree requires visibility into the customer’s device to enforce NPCI rules. You must pass the following headers in your [Order Pay API](/api-reference/payments/latest/payments/pay) and [Get Eligible Payment Methods](/api-reference/payments/latest/eligibility/get-eligible-payment-methods) request:

  | Header                    | Example value | Requirement                   |
  | ------------------------- | ------------- | ----------------------------- |
  | `x-client-device`         | `mobile`      | Required                      |
  | `x-client-os`             | `ios`         | Required                      |
  | `x-client-rendering-type` | `mweb`        | Required (when device=mobile) |
  | `x-client-browser`        | `safari`      | Required                      |

  **Header values:**

  | Header                    | Accepted values                                         | Description                           |
  | ------------------------- | ------------------------------------------------------- | ------------------------------------- |
  | `x-client-device`         | `mobile`, `desktop`, `tablet`                           | Type of device used by customer       |
  | `x-client-os`             | `android`, `ios`, `windows`, `macos`, `linux`, `others` | Operating system of customer's device |
  | `x-client-rendering-type` | `mweb`, `webview`, `native`                             | How the checkout is being rendered    |
  | `x-client-browser`        | `safari`, `chrome`, `firefox`, `edge`, `others`         | Browser used by customer              |

  **Merchant type and rendering type details:**

  | Merchant type                                                     | Rendering type | What does it mean                                                                      | Impact or required changes                                                                                                                                                                                                                                                                                                                                                                                            |
  | ----------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | Non-seamless merchants using Cashfree checkout                    | Native         | Payment rendered natively within the merchant's mobile app using Android and iOS SDKs  | Cashfree will automatically handle the UPI Collect phase-out. Alternate flows (UPI Intent and QR) are already supported. UPI Collect will be removed from checkout once the sunset is enforced, with no customer disruption.                                                                                                                                                                                          |
  | Non-seamless merchants using Cashfree checkout                    | MWeb           | Payment rendered in a mobile browser using JS SDK (browser on a mobile device)         | Cashfree will automatically handle the UPI Collect phase-out. Alternate flows (UPI Intent and QR) are already supported. UPI Collect will be removed from checkout once the sunset is enforced, with no customer disruption.                                                                                                                                                                                          |
  | Non-seamless merchants using Cashfree checkout                    | WebView        | Payment rendered inside an in-app browser using JS SDK (WebView within a merchant app) | Using standard Checkout in WebView requires code changes to ensure UPI Intent displays correctly. Refer to the [WebView integration documentation](/payments/online/mobile/misc/upi_intent_support_js_sdk) for required changes.                                                                                                                                                                                      |
  | Seamless merchants using custom checkout or API-based integration | Not applicable | Mobile and Desktop flows                                                               | **Mobile**: Enable and prioritise UPI Intent. Remove UPI Collect as a payment option based on device rules.<br />**Desktop**: Use UPI QR. Remove UPI Collect.<br /><br />Cashfree requires visibility into the customer's device to enforce NPCI rules. You must pass the required headers in your [Order Pay API](/api-reference/payments/latest/payments/pay) request as detailed in the header values table above. |

  <Info>
    If headers aren't passed, Cashfree will assume full migration to Intent or QR flows. UPI Collect will only be allowed in permitted environments once NPCI confirms final sunset timelines.
  </Info>
</Accordion>

### Timeline and compliance

| Item                     | Details                                       |
| ------------------------ | --------------------------------------------- |
| **Recommended timeline** | Complete all changes by **February 28, 2026** |
| **Current status**       | Tentative (subject to NPCI confirmation)      |
| **iOS support**          | Continues until further notice                |

<Note>
  Cashfree will block UPI Collect effective **February 28, 2026**. Implement the recommended changes now to ensure a smooth transition.
</Note>

### Product-level exemptions

The following transaction categories are exempted from UPI Collect sunset:

| Category                     | Details                                                                                    |
| ---------------------------- | ------------------------------------------------------------------------------------------ |
| **IPO and Secondary Market** | IPO (Creation, Execution and Revoke) and Secondary Market use cases (Payee MCC 6012, 6211) |
| **UPI Mandates**             | All UPI based Mandates (OTM, Autopay) (Execution, Modification and Revoke)                 |
| **eRupi voucher**            | eRupi voucher transactions                                                                 |
| **PACB Merchants**           | PACB-related transaction flows                                                             |
| **iOS transactions**         | iOS mobile App and mobile Web based transactions                                           |

### Implementation checklist

Use this checklist to track your compliance progress:

<div class="checklist-item bg-[rgba(255,251,235,0.5)] dark:bg-[rgba(31,41,55,0.5)] border border-gray-800 dark:border-gray-300 rounded-lg p-6 mb-5 max-w-2xl" data-question="integration-type">
  <div class="flex justify-between items-center mb-4">
    <div class="flex items-center gap-3">
      <div class="checklist-circle-icon">
        <svg class="checklist-check-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
        </svg>
      </div>

      <span>Have you identified your integration type (Non-seamless or Seamless)?</span>
    </div>

    <div class="button-group">
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="yes">Yes</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="no">No</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="na">N/A</button>
    </div>
  </div>

  <div class="warning-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
    </svg>

    <span>Your integration type (Non-seamless or Seamless) determines the actions you must take for UPI Collect deprecation compliance.</span>
  </div>

  <div class="info-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
    </svg>

    <span>Review the [Required actions by integration type](#required-actions-by-integration-type) section above to determine which category your implementation falls under.</span>
  </div>
</div>

<div class="checklist-item bg-[rgba(255,251,235,0.5)] dark:bg-[rgba(31,41,55,0.5)] border border-gray-800 dark:border-gray-300 rounded-lg p-6 mb-5 max-w-2xl" data-question="upi-flows">
  <div class="flex justify-between items-center mb-4">
    <div class="flex items-center gap-3">
      <div class="checklist-circle-icon">
        <svg class="checklist-check-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
        </svg>
      </div>

      <span>Have you ensured that UPI Intent and QR flows are enabled and functional?</span>
    </div>

    <div class="button-group">
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="yes">Yes</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="no">No</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="na">N/A</button>
    </div>
  </div>

  <div class="warning-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
    </svg>

    <span>UPI Intent and QR flows are now the dominant and secure payment methods. Ensure both are fully enabled and tested before deprecating UPI Collect.</span>
  </div>

  <div class="info-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
    </svg>

    <span>Refer to the [Understanding UPI payment flows](#understanding-upi-payment-flows) section for flow descriptions, or contact your Account manager for assistance in enabling these flows.</span>
  </div>
</div>

<div class="checklist-item bg-[rgba(255,251,235,0.5)] dark:bg-[rgba(31,41,55,0.5)] border border-gray-800 dark:border-gray-300 rounded-lg p-6 mb-5 max-w-2xl" data-question="deprecate-collect">
  <div class="flex justify-between items-center mb-4">
    <div class="flex items-center gap-3">
      <div class="checklist-circle-icon">
        <svg class="checklist-check-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
        </svg>
      </div>

      <span>Have you deprecated UPI Collect in non-exempt environments (Android or Desktop)?</span>
    </div>

    <div class="button-group">
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="yes">Yes</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="no">No</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="na">N/A</button>
    </div>
  </div>

  <div class="warning-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
    </svg>

    <span>NPCI requires UPI Collect to be phased out on Android and Desktop devices. Ensure your checkout removes this option for non-exempt transaction types.</span>
  </div>

  <div class="info-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
    </svg>

    <span>Review the [Device-specific UPI rules](#device-specific-upi-rules) table and [Product-level exemptions](#product-level-exemptions) section to confirm which flows to deprecate for your use case.</span>
  </div>
</div>

<div class="checklist-item bg-[rgba(255,251,235,0.5)] dark:bg-[rgba(31,41,55,0.5)] border border-gray-800 dark:border-gray-300 rounded-lg p-6 mb-5 max-w-2xl" data-question="api-headers">
  <div class="flex justify-between items-center mb-4">
    <div class="flex items-center gap-3">
      <div class="checklist-circle-icon">
        <svg class="checklist-check-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
        </svg>
      </div>

      <span>Have you updated the Order Pay API with client environment headers (seamless merchants only)?</span>
    </div>

    <div class="button-group">
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="yes">Yes</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="no">No</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="na">N/A</button>
    </div>
  </div>

  <div class="warning-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
    </svg>

    <span>Seamless merchants must pass client environment headers to allow Cashfree to enforce NPCI device-specific rules correctly.</span>
  </div>

  <div class="info-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
    </svg>

    <span>Review the API documentation section above to see required and optional headers, or consult the [Order Pay API](/api-reference/payments/latest/payments/pay) documentation for implementation details.</span>
  </div>
</div>

<div class="checklist-item bg-[rgba(255,251,235,0.5)] dark:bg-[rgba(31,41,55,0.5)] border border-gray-800 dark:border-gray-300 rounded-lg p-6 mb-5 max-w-2xl" data-question="monitor-updates">
  <div class="flex justify-between items-center mb-4">
    <div class="flex items-center gap-3">
      <div class="checklist-circle-icon">
        <svg class="checklist-check-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
        </svg>
      </div>

      <span>Are you monitoring Cashfree updates for final NPCI enforcement dates?</span>
    </div>

    <div class="button-group">
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="yes">Yes</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="no">No</button>
      <button class="checklist-btn px-3.5 py-1 rounded border-none bg-[rgba(31,41,55,0.2)] text-gray-800 dark:text-gray-100 cursor-pointer text-sm transition-all hover:bg-[rgba(31,41,55,0.4)]" data-value="na">N/A</button>
    </div>
  </div>

  <div class="warning-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
    </svg>

    <span>NPCI enforcement timelines are subject to change. Stay updated to ensure your implementation remains compliant with the latest regulatory requirements.</span>
  </div>

  <div class="info-box">
    <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
    </svg>

    <span>Review the [Timeline and compliance](#timeline-and-compliance) section above, or contact your Account manager for the latest enforcement date information.</span>
  </div>
</div>

### Support

For questions or technical clarifications, contact Cashfree through the following channels:

* **Support**: [Cashfree support form](https://merchant.cashfree.com/merchants/landing?env=prod\&raise_issue=1).
* **Account manager**: Reach out to your designated Account manager.

<snippet>snippets/related-topics-loader.mdx</snippet>

<div class="hidden" data-table-of-contents="bottom">
  <p class="mt-4 font-medium flex items-center gap-2 related-docs-heading">
    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="w-4 h-4">
      <path d="M3 4h7a2 2 0 0 1 2 2v13a2 2 0 0-2-2H3z" />

      <path d="M21 4h-7a2 2 0 0-2 2v13a2 2 0 0 1 2-2h7z" />
    </svg>

    <span>Related topics</span>
  </p>

  <ul>
    <li><a href="/docs/api-reference/payments/latest/payments/pay">Order Pay API</a></li>
    <li><a href="/docs/payments/developers/custom-checkout/android">Android Custom Checkout</a></li>
    <li><a href="/docs/payments/features/upi">UPI Overview</a></li>
    <li><a href="/docs/help/payments/upi">UPI FAQs</a></li>
  </ul>
</div>
