> ## 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.

# Third Party Validation

> Learn how to verify customer payments through specific bank accounts using TPV, including multi-bank support for UPI, NetBanking, and bank transfers (Challans).

For merchants with Third-Party Validation (TPV) enabled on UPI or NetBanking, Cashfree shares the customer's bank account details with the issuing bank, which checks that the payment is sent from the expected account.

For [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans), Cashfree validates the incoming IMPS, NEFT, or RTGS transfer against the order and the account details you pass when TPV is enabled.

TPV applies across these payment methods: the values you pass in `customer_bank_account_number` and `customer_bank_ifsc` (and `customer_bank_code` for NetBanking TPV) must match how the customer actually pays.

<Tip>
  Fill this [Support Form](https://merchant.cashfree.com/merchants/landing?env=prod\&raise_issue=1) or contact your account manager to enable TPV for your account.
</Tip>

To process a TPV payment through Cashfree, include specific customer details in the Create Order API request. During checkout (UPI or NetBanking) or when the bank transfer is received (Challan), Cashfree checks these details against the payer or remitter information for that payment. The required fields are `customer_bank_account_number` and `customer_bank_ifsc`, where the IFSC is an alphanumeric code (for example, `SBIN000001`) that uniquely identifies a bank branch in India.

## Implement a TPV-enabled order

To process a payment with bank account verification (TPV), pass the customer account number (`customer_bank_account_number`) and IFSC (`customer_bank_ifsc`) with every Create Order request. If you want the customer to pay through NetBanking, also pass `customer_bank_code`. For [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans), the customer pays to a Virtual Bank Account; Cashfree validates the remitter account and IFSC against the same TPV fields when the transfer is received.

<CodeGroup>
  ```shell cURL request {13-15} theme={"dark"}
  curl --request POST \
    --url https://sandbox.cashfree.com/pg/orders \
    --header 'Content-Type: application/json' \
    --header 'x-api-version: 2022-09-01' \
    --header 'x-client-id: xxxx' \
    --header 'x-client-secret: xxxx' \
    --data '{
      "customer_details": {
          "customer_email": "test@cashfree.com",
          "customer_id": "LD09755CSCON10092021",
          "customer_name": "Rohit",
          "customer_phone": "9999911111",
          "customer_bank_ifsc": "CITI0000001",
          "customer_bank_account_number": "1518121112",
          "customer_bank_code": "3044"
      },
      "order_amount": 1,
      "order_currency": "INR"
    }'
  ```

  ```json Response {13-14} theme={"dark"}
  {
    "cf_order_id": 621203980,
    "order_id": "order_1065211zDHKtAsflTH9dczd6itFy1wFv8",
    "entity": "order",
    "order_currency": "INR",
    "order_amount": 2.00,
    "order_expiry_time": "2021-11-07T12:17:57+05:30",
    "customer_details": {
      "customer_id": "LD09755CSCON10092021",
      "customer_name": "Rohit",
      "customer_email": "test@cashfree.com",
      "customer_phone": "9999911111",
      "customer_bank_ifsc": "CITI0000001",
      "customer_bank_account_number": "1518121112"
    },
    "order_meta": {
      "return_url": null,
      "notify_url": null,
      "payment_methods": null
    },
    "order_status": "ACTIVE",
    "payment_session_id": "NLfmvDBT3dfdflkjlu1JNHDcSDFACAsEqEdKMLuW",
    "order_note": "5% club",
    "order_tags": null,
    "order_splits": []
  }
  ```
</CodeGroup>

## Pre-built UI

To process a TPV payment using the pre-built UI, [open checkout](/payments/online/web/redirect) using the `payment_session_id` from the Create Order API response. The customer can then complete payment only through their linked account using an enabled method such as UPI, NetBanking, or a [bank transfer](/payments/manage/payment-methods/bank-transfers) (Challan). If the customer attempts to pay from a different account, the payment fails and the order remains in an `ACTIVE` state.

## Custom UI

To process TPV payments using your own UI, integrate either the JavaScript Elements SDK or use the `/orders/sessions` API. There is no change to the API request. You can read about the [API contract for the payments pay endpoint](/api-reference/payments/latest/payments/pay). Offer UPI, NetBanking, and [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans) according to the payment methods enabled on your account.

## TPV with payment links

You can process TPV payments using Payment Links through the Payment Link API, a bulk CSV file upload, or the Cashfree Dashboard. Pass `customer_bank_account_number` and `customer_bank_ifsc` for every TPV link; include `customer_bank_code` when you expect the customer to pay with NetBanking. Field usage for [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans) differs from NetBanking; see the "Implement a TPV-enabled order" and "Multi-bank TPV" sections on this page. Which payment methods appear on the link depends on what you enable for that link.

### Bulk upload

When using a CSV file to bulk-create payment links, pass the customer bank details using the Notes columns. Use the following column mapping:

* **Note 1:** `customer_bank_code`
* **Note 2:** `customer_bank_account_number`
* **Note 3:** `customer_bank_ifsc`

The following sample file illustrates the expected format. In this example, `Note 1 Title` is set to `customer_bank_code` and the corresponding value appears in `Note 1 Description`.

<Accordion title="Sample CSV">
  ```csv theme={"dark"}
  Link Id,Expiry Time,Currency,Amount,Min Amount,Description,Customer Name,Customer Phone,Customer Email,Note 1 Title,Note 1 Description,Note 2 Title,Note 2 Description,Note 3 Title,Note 3 Description,Webhook URL

  Order-12zzsa,2023-02-11,INR,22.5,10,Payment for order,John Doe,9999999999,John.doe@cashfree.com,customer_bank_code,3044,customer_bank_account_number,37866911583,customer_bank_ifsc,SBIN0001882,https://cashfree.com/callback-webhook
  Order-12zsdca,2023-02-11,INR,22.5,10,Payment for order,John Doe,9999999999,John.doe@cashfree.com,customer_bank_code,3026,customer_bank_account_number,6633835901,customer_bank_ifsc,IDIB000V018,https://cashfree.com/callback-webhook
  ```
</Accordion>

### Payment Link API

To use TPV with the Payment Link API, pass the customer bank details in the `customer_details` object. See the request and response below for reference.

<CodeGroup>
  ```bash cURL request {12-14} theme={"dark"}
  curl --request POST \
    --url https://api.cashfree.com/pg/links \
    --header 'Content-Type: application/json' \
    --header 'x-api-version: 2025-01-01' \
    --header 'x-client-id: xxxx' \
    --header 'x-client-secret: xxxx' \
    --data '{
       "customer_details": {
            "customer_phone": "9908734803",
            "customer_email": "rohit@cashfree.com",
            "customer_name": "Rohit",
            "customer_bank_account_number": "78123123",
            "customer_bank_ifsc": "SBIN0000001",
            "customer_bank_code": "3044"
       },
       "link_notify": {
            "send_sms": true
       },
       "link_id": "testlink12354",
       "link_amount": 4,
       "link_currency": "INR",
       "link_purpose": "Test for TPV"
    }'
  ```

  ```json Response {24-28} theme={"dark"}
  {
    "cf_link_id": 14796319,
    "link_id": "testlink12354",
    "link_status": "ACTIVE",
    "link_currency": "INR",
    "link_amount": 4,
    "link_amount_paid": 0,
    "link_partial_payments": false,
    "link_minimum_partial_amount": null,
    "link_purpose": "Test for TPV",
    "link_created_at": "2023-02-09T23:25:16+05:30",
    "customer_details": {
      "customer_name": "Rohit",
      "country_code": "+91",
      "customer_phone": "9908734803",
      "customer_email": "rohit@cashfree.com"
    },
    "link_meta": {
      "payment_methods": "",
      "upi_intent": "false"
    },
    "link_url": "https://payments.cashfree.com/links/U4dfsav0ug50",
    "link_expiry_time": "2023-03-11T23:25:16+05:30",
    "link_notes": {
      "customer_bank_account_number": "5178191812",
      "customer_bank_code": "3044",
      "customer_bank_ifsc": "CITI0000001"
    },
    "link_auto_reminders": false,
    "link_notify": {
      "send_email": false,
      "send_sms": true
    }
  }
  ```
</CodeGroup>

## Multi-bank TPV

Multi-bank TPV allows you to pass up to four customer bank accounts in a single payment request. Customers can select their preferred account at checkout, which increases the likelihood of a successful payment.

Multi-bank TPV is supported on the following payment methods:

* UPI
* NetBanking
* [Bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans)

<Note>
  For bank transfers (Challans), the `customer_bank_account_number` and `customer_bank_ifsc` fields are used to validate the remitter when the transfer reaches the Virtual Bank Account.
</Note>

To pass multiple accounts, use pipe-separated values (`|`) in the `customer_bank_account_number` and `customer_bank_ifsc` fields within the `customer_details` object. The mapping between accounts and IFSC codes is index-based, so the order of values in both fields must match.

The following example shows a Create Order request with three bank accounts:

```json theme={"dark"}
"customer_details": {
  "customer_id": "customer_1",
  "customer_email": "customer@email.com",
  "customer_phone": "+919999999999",
  "customer_bank_account_number": "1234567891|1234567892|1234567893",
  "customer_bank_ifsc": "SBIN000000001|ICIC000000002|HDFC000000003"
}
```

### Key rules

Follow these rules when passing multiple bank accounts for **multi-bank UPI or NetBanking** TPV. They do not describe multi-account selection for [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans); use a single expected remitter account and IFSC for Challan TPV unless Cashfree confirms otherwise for your account.

* You can pass a maximum of four bank accounts per request.
* The `customer_bank_account_number` and `customer_bank_ifsc` fields must contain the same number of pipe-separated values. Account 1 maps to IFSC 1, account 2 maps to IFSC 2, and so on.

### UPI

Multi-bank TPV for UPI is supported on select UPI rails. Contact the Cashfree team to get the required rails enabled for your account.

### NetBanking

When using multi-bank TPV with NetBanking, do not pass a value in `customer_details.customer_bank_code`. Cashfree automatically populates the bank list on the checkout page based on the IFSC codes you provide. The checkout page displays both retail and corporate banking options, depending on the modes enabled for your account.

If you pass multiple accounts from the same bank, only the first account is used for TPV.

### Bank transfers

For [bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans), pass the remitter account number and IFSC you expect the customer to use in `customer_bank_account_number` and `customer_bank_ifsc`. Do not rely on `customer_bank_code`; that field applies to NetBanking TPV. When the customer sends IMPS, NEFT, or RTGS to the order Virtual Bank Account, Cashfree validates the transfer against those TPV fields.

<Note>
  Fill this [Support Form](https://merchant.cashfree.com/merchants/landing?env=prod\&raise_issue=1) or contact your account manager to enable multi-bank TPV for your account.
</Note>

## Supported banks

The following tables list the banks that support TPV through NetBanking and UPI. [Bank transfers](/payments/manage/payment-methods/bank-transfers) (Challans) do not use the NetBanking bank code list; TPV for those payments relies on the account number and IFSC you pass at order creation and on the remitter details returned with the incoming transfer.

<Accordion title="NetBanking supported banks">
  | Sr | Bank code | Bank name                                   |
  | -- | --------- | ------------------------------------------- |
  | 1  | 3003      | Axis Bank                                   |
  | 2  | 3005      | Bank of Baroda - Retail Banking             |
  | 3  | 3006      | Bank of India                               |
  | 4  | 3007      | Bank of Maharashtra                         |
  | 5  | 3009      | Canara Bank                                 |
  | 6  | 3010      | CSB Bank Limited                            |
  | 7  | 3011      | Central Bank of India                       |
  | 8  | 3012      | City Union Bank                             |
  | 9  | 3016      | Deutsche Bank                               |
  | 10 | 3019      | Dhanlakshmi Bank                            |
  | 11 | 3020      | Federal Bank                                |
  | 12 | 3021      | HDFC Bank                                   |
  | 13 | 3022      | ICICI Bank                                  |
  | 14 | 3023      | IDBI Bank                                   |
  | 15 | 3024      | IDFC FIRST Bank                             |
  | 16 | 3026      | Indian Bank                                 |
  | 17 | 3027      | Indian Overseas Bank                        |
  | 18 | 3028      | IndusInd Bank                               |
  | 19 | 3029      | Jammu and Kashmir Bank                      |
  | 20 | 3030      | Karnataka Bank Ltd                          |
  | 21 | 3031      | Karur Vysya Bank                            |
  | 22 | 3032      | Kotak Mahindra Bank                         |
  | 23 | 3037      | Punjab & Sind Bank                          |
  | 24 | 3038      | Punjab National Bank Retail Banking         |
  | 25 | 3039      | RBL Bank                                    |
  | 26 | 3040      | Saraswat Bank                               |
  | 27 | 3042      | South Indian Bank                           |
  | 28 | 3043      | Standard Chartered Bank                     |
  | 29 | 3044      | State Bank Of India                         |
  | 30 | 3052      | Tamilnad Mercantile Bank Ltd                |
  | 31 | 3054      | UCO Bank                                    |
  | 32 | 3055      | Union Bank of India                         |
  | 33 | 3058      | Yes Bank Ltd                                |
  | 34 | 3060      | Bank of Baroda - Corporate                  |
  | 35 | 3086      | Shivalik Small Finance Bank                 |
  | 36 | 3087      | AU Small Finance Bank                       |
  | 37 | 3088      | Bandhan Bank - Retail Banking               |
  | 38 | 3089      | Utkarsh Small Finance Bank                  |
  | 39 | 3090      | The Surat Peoples Co-operative Bank Limited |
  | 40 | 3091      | Gujarat State Co-operative Bank Limited     |
  | 41 | 3092      | HSBC Retail NetBanking                      |
  | 42 | 3097      | Cosmos Bank                                 |
  | 43 | 3098      | Capital Small Finance Bank                  |
  | 44 | 3102      | Jana Small Finance Bank                     |
  | 45 | 3115      | SBM Bank India                              |
  | 46 | 3117      | The Sutex Co-op Bank Ltd                    |
  | 47 | 3126      | Ujjivan Small Finance Bank                  |
  | 48 | 3123      | Airtel Payments Bank                        |
</Accordion>

<Accordion title="UPI supported apps">
  All UPI apps support bank account validation.
</Accordion>
