Skip to main content
POST
/
pg
/
vba
Create Virtual Bank Account
curl --request POST \
  --url https://sandbox.cashfree.com/pg/vba \
  --header 'Content-Type: application/json' \
  --header 'x-api-version: <x-api-version>' \
  --header 'x-client-id: <x-client-id>' \
  --header 'x-client-secret: <x-client-secret>' \
  --data '
{
  "virtual_account_details": {
    "virtual_account_id": "User01",
    "virtual_account_name": "John Doe",
    "virtual_account_email": "user@cashfree.com",
    "virtual_account_phone": 9876543210
  },
  "kyc_details": {
    "gst": "29AAICP2912R1ZR",
    "pan": "ABCPV1234D",
    "aadhaar": 655675523712
  },
  "remitter_lock_details": {
    "allowed_remitters": [
      {
        "account_number": 26291800001191,
        "ifsc": "YESB0000262"
      }
    ]
  },
  "amount_lock_details": {
    "min_amount": 1000,
    "max_amount": 5000
  },
  "bank_codes": [
    "YESB"
  ],
  "notification_group": "finance_team"
}
'
import requests

url = "https://sandbox.cashfree.com/pg/vba"

payload = {
    "virtual_account_details": {
        "virtual_account_id": "User01",
        "virtual_account_name": "John Doe",
        "virtual_account_email": "user@cashfree.com",
        "virtual_account_phone": 9876543210
    },
    "kyc_details": {
        "gst": "29AAICP2912R1ZR",
        "pan": "ABCPV1234D",
        "aadhaar": 655675523712
    },
    "remitter_lock_details": { "allowed_remitters": [
            {
                "account_number": 26291800001191,
                "ifsc": "YESB0000262"
            }
        ] },
    "amount_lock_details": {
        "min_amount": 1000,
        "max_amount": 5000
    },
    "bank_codes": ["YESB"],
    "notification_group": "finance_team"
}
headers = {
    "x-client-id": "<x-client-id>",
    "x-client-secret": "<x-client-secret>",
    "x-api-version": "<x-api-version>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {
    'x-client-id': '<x-client-id>',
    'x-client-secret': '<x-client-secret>',
    'x-api-version': '<x-api-version>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    virtual_account_details: {
      virtual_account_id: 'User01',
      virtual_account_name: 'John Doe',
      virtual_account_email: 'user@cashfree.com',
      virtual_account_phone: 9876543210
    },
    kyc_details: {gst: '29AAICP2912R1ZR', pan: 'ABCPV1234D', aadhaar: 655675523712},
    remitter_lock_details: {allowed_remitters: [{account_number: 26291800001191, ifsc: 'YESB0000262'}]},
    amount_lock_details: {min_amount: 1000, max_amount: 5000},
    bank_codes: ['YESB'],
    notification_group: 'finance_team'
  })
};

fetch('https://sandbox.cashfree.com/pg/vba', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://sandbox.cashfree.com/pg/vba",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'virtual_account_details' => [
        'virtual_account_id' => 'User01',
        'virtual_account_name' => 'John Doe',
        'virtual_account_email' => 'user@cashfree.com',
        'virtual_account_phone' => 9876543210
    ],
    'kyc_details' => [
        'gst' => '29AAICP2912R1ZR',
        'pan' => 'ABCPV1234D',
        'aadhaar' => 655675523712
    ],
    'remitter_lock_details' => [
        'allowed_remitters' => [
                [
                                'account_number' => 26291800001191,
                                'ifsc' => 'YESB0000262'
                ]
        ]
    ],
    'amount_lock_details' => [
        'min_amount' => 1000,
        'max_amount' => 5000
    ],
    'bank_codes' => [
        'YESB'
    ],
    'notification_group' => 'finance_team'
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "x-api-version: <x-api-version>",
    "x-client-id: <x-client-id>",
    "x-client-secret: <x-client-secret>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://sandbox.cashfree.com/pg/vba"

	payload := strings.NewReader("{\n  \"virtual_account_details\": {\n    \"virtual_account_id\": \"User01\",\n    \"virtual_account_name\": \"John Doe\",\n    \"virtual_account_email\": \"user@cashfree.com\",\n    \"virtual_account_phone\": 9876543210\n  },\n  \"kyc_details\": {\n    \"gst\": \"29AAICP2912R1ZR\",\n    \"pan\": \"ABCPV1234D\",\n    \"aadhaar\": 655675523712\n  },\n  \"remitter_lock_details\": {\n    \"allowed_remitters\": [\n      {\n        \"account_number\": 26291800001191,\n        \"ifsc\": \"YESB0000262\"\n      }\n    ]\n  },\n  \"amount_lock_details\": {\n    \"min_amount\": 1000,\n    \"max_amount\": 5000\n  },\n  \"bank_codes\": [\n    \"YESB\"\n  ],\n  \"notification_group\": \"finance_team\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-client-id", "<x-client-id>")
	req.Header.Add("x-client-secret", "<x-client-secret>")
	req.Header.Add("x-api-version", "<x-api-version>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://sandbox.cashfree.com/pg/vba")
  .header("x-client-id", "<x-client-id>")
  .header("x-client-secret", "<x-client-secret>")
  .header("x-api-version", "<x-api-version>")
  .header("Content-Type", "application/json")
  .body("{\n  \"virtual_account_details\": {\n    \"virtual_account_id\": \"User01\",\n    \"virtual_account_name\": \"John Doe\",\n    \"virtual_account_email\": \"user@cashfree.com\",\n    \"virtual_account_phone\": 9876543210\n  },\n  \"kyc_details\": {\n    \"gst\": \"29AAICP2912R1ZR\",\n    \"pan\": \"ABCPV1234D\",\n    \"aadhaar\": 655675523712\n  },\n  \"remitter_lock_details\": {\n    \"allowed_remitters\": [\n      {\n        \"account_number\": 26291800001191,\n        \"ifsc\": \"YESB0000262\"\n      }\n    ]\n  },\n  \"amount_lock_details\": {\n    \"min_amount\": 1000,\n    \"max_amount\": 5000\n  },\n  \"bank_codes\": [\n    \"YESB\"\n  ],\n  \"notification_group\": \"finance_team\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://sandbox.cashfree.com/pg/vba")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-client-id"] = '<x-client-id>'
request["x-client-secret"] = '<x-client-secret>'
request["x-api-version"] = '<x-api-version>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"virtual_account_details\": {\n    \"virtual_account_id\": \"User01\",\n    \"virtual_account_name\": \"John Doe\",\n    \"virtual_account_email\": \"user@cashfree.com\",\n    \"virtual_account_phone\": 9876543210\n  },\n  \"kyc_details\": {\n    \"gst\": \"29AAICP2912R1ZR\",\n    \"pan\": \"ABCPV1234D\",\n    \"aadhaar\": 655675523712\n  },\n  \"remitter_lock_details\": {\n    \"allowed_remitters\": [\n      {\n        \"account_number\": 26291800001191,\n        \"ifsc\": \"YESB0000262\"\n      }\n    ]\n  },\n  \"amount_lock_details\": {\n    \"min_amount\": 1000,\n    \"max_amount\": 5000\n  },\n  \"bank_codes\": [\n    \"YESB\"\n  ],\n  \"notification_group\": \"finance_team\"\n}"

response = http.request(request)
puts response.read_body
{
  "virtual_bank_accounts": [
    {
      "vba_bank_code": "UTIB",
      "vba_account_number": 94351020001772,
      "vba_ifsc": "UTIB0CCH274",
      "vba_status": "ACTIVE",
      "vba_created_on": "2019-08-24T14:15:22Z",
      "vba_last_updated_on": "2019-08-24T14:15:22Z",
      "virtual_account_details": {
        "virtual_account_id": "User01",
        "virtual_account_name": "John Doe",
        "virtual_account_email": "user@cashfree.com",
        "virtual_account_phone": 9876543210
      },
      "kyc_details": {
        "gst": "29AAICP2912R1ZR",
        "pan": "ABCPV1234D",
        "aadhaar": "655675523712"
      },
      "remitter_lock_details": {
        "allowed_remitters": [
          {
            "account_number": "026291800001191",
            "ifsc": "YESB0000262"
          }
        ]
      },
      "amount_lock_details": {
        "min_amount": 1000,
        "max_amount": 5000
      },
      "notification_group": "<string>"
    }
  ]
}
{
  "message": "bad URL, please check API documentation",
  "code": "request_failed",
  "type": "invalid_request_error"
}
{
  "message": "authentication Failed",
  "code": "request_failed",
  "type": "authentication_error"
}
{
  "message": "something is not found",
  "code": "somethind_not_found",
  "type": "invalid_request_error"
}
{
  "message": "order with same id is already present",
  "code": "order_already_exists",
  "type": "invalid_request_error"
}
{
  "message": "something is not found",
  "code": "request_invalid",
  "type": "idempotency_error"
}
{
  "message": "Too many requests from IP. Check headers",
  "code": "request_failed",
  "type": "rate_limit_error"
}
{
  "message": "something is not found",
  "code": "bank_processing_failure",
  "type": "api_error"
}

Headers

x-client-id
string
required

Client app ID. You can find your app id in the Merchant Dashboard.

x-client-secret
string
required

Client secret key. You can find your secret key in the Merchant Dashboard.

x-api-version
enum<string>
required

API version to be used. The accepted format is YYYY-MM-DD.

Available options:
2024-07-10T00:00:00.000Z
x-request-id
string

Request ID for the API call. Can be used to resolve tech issues. Communicate this in your tech related queries to Cashfree.

Example:

"4dfb9780-46fe-11ee-be56-0242ac120002"

Body

application/json

Request parameters to create a virtual bank account.

virtual_account_details
object

It contains the details of the virtual bank account.

kyc_details
object

It contains the KYC information of the virtual bank account holder.

remitter_lock_details
object

It contains the bank account information of the remitter.

amount_lock_details
object

It contains the details of the amount for the remittance at VBA account level.

bank_codes
string[]

It is the respective code used to create a virtual bank account in the corresponding bank. UTIB - Axis Bank ICIC - ICICI Bank YESB - Yes Bank Each bank code corresponds to a specific bank name.

notification_group
string

It is the group you created with the recipients to receive notificiations regarding the payment details. The parameter allows alphanumeric characters, hyphen (-), underscore

Example:

"finance_team"

Response

Success response for creating a virtual bank account.

virtual_bank_accounts
object[]

It contains the details of the virtual bank account.