Skip to main content

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.

For merchants with Third Party Verification (TPV) enabled, Cashfree shares the customer’s bank account details with the issuing bank. The issuing bank verifies that the transaction is processed from the same bank account.
Fill this Support Form or contact your account manager to enable TPV for your account.
To process a TPV payment through Cashfree, include specific customer details in the Create Order API request. During payment authorization, Cashfree verifies these details against the actual payment instrument the customer uses. 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 order to be processed through NetBanking, also pass customer_bank_code.
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"
  }'

Pre-built UI

To process a TPV payment using the pre-built UI, open checkout using the payment_session_id from the Create Order API response. The customer can then complete payment only through their linked account. 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 here. You can process TPV payments using Payment Links through the Payment Link API, a bulk CSV file upload, or the Cashfree Dashboard.

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.
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
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.
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"
  }'

Multi-bank TPV

Multi-bank TPV allows you to pass up to four customer bank accounts in a single payment request. This gives customers the flexibility to choose their preferred account at checkout, which improves payment success rates. Multi-bank TPV is supported on both UPI and NetBanking. 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:
"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:
  • 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.
Fill this Support Form or contact your account manager to enable multi-bank TPV for your account.

Supported banks

The following tables list the banks that support TPV through NetBanking and UPI.
SrBank codeBank name
13003Axis Bank
23005Bank of Baroda - Retail Banking
33006Bank of India
43007Bank of Maharashtra
53009Canara Bank
63010CSB Bank Limited
73011Central Bank of India
83012City Union Bank
93016Deutsche Bank
103019Dhanlakshmi Bank
113020Federal Bank
123021HDFC Bank
133022ICICI Bank
143023IDBI Bank
153024IDFC FIRST Bank
163026Indian Bank
173027Indian Overseas Bank
183028IndusInd Bank
193029Jammu and Kashmir Bank
203030Karnataka Bank Ltd
213031Karur Vysya Bank
223032Kotak Mahindra Bank
233037Punjab & Sind Bank
243038Punjab National Bank Retail Banking
253039RBL Bank
263040Saraswat Bank
273042South Indian Bank
283043Standard Chartered Bank
293044State Bank Of India
303052Tamilnad Mercantile Bank Ltd
313054UCO Bank
323055Union Bank of India
333058Yes Bank Ltd
343060Bank of Baroda - Corporate
353086Shivalik Small Finance Bank
363087AU Small Finance Bank
373088Bandhan Bank - Retail Banking
383089Utkarsh Small Finance Bank
393090The Surat Peoples Co-operative Bank Limited
403091Gujarat State Co-operative Bank Limited
413092HSBC Retail NetBanking
423097Cosmos Bank
433098Capital Small Finance Bank
443102Jana Small Finance Bank
453115SBM Bank India
463117The Sutex Co-op Bank Ltd
473126Ujjivan Small Finance Bank
483123Airtel Payments Bank
All UPI apps support bank account validation.