Virtual accounts are a trending topic among corporate treasurers, but what are they, and how have they evolved to improve business finances? 

Virtual accounts are non-physical accounts that have the same features as a standard bank account. Also known as ‘shadow accounts’, they don’t come with the workload and costs associated with traditional bank accounts. 

Every virtual account is unique. That makes it easier and faster for businesses to identify who made each transaction. Furthermore, virtual accounts give companies the ability to reconcile payments in real-time.

In this article, we will dive deep into the different types of virtual accounts, use cases, and details of how it works.

Virtual Accounts APIs from Zwitch

Zwitch allows you to create unique virtual accounts for your customers on-demand and collect payments via NEFT, RTGS, IMPS and UPI. Since virtual accounts give you details of customers, the amount they paid, and at the time – instantly, they can help you with payment reconciliation. 

Zwitch Virtual account APIs send you an instant call-back notification as soon as the payment is received, along with the complete details of the remitter. This information helps you capture and understand the source of the payments in real-time.

You can compare Virtual accounts to a payment gateway. A payment gateway is used primarily for one-time transactions or purchases. It might be expensive as approximately 1 to 2% of the transaction value goes as transaction/platform fees to the payment gateway provider. On the other hand, you can use virtual accounts for one-time payments, and recurring payments (such as a wallet) and the charges are minimal compared to a payment gateway. 

In case you are wondering, will virtual accounts replace a payment gateway? Yes, it will in the coming years.

Virtual Account Number Structure

When you create a Virtual account using Zwitch APIs, our banking partner (YES Bank) automatically generates a 28-digit primary Virtual Account Number (VAN) with an IFSC code. If you have a business, you can use VAN to send money to a virtual account (customer, vendor, etc.) or collect money from any virtual account. 

For ease of reconciliation, we have divided the VAN generated with Zwitch into three parts. The first six digits of VAN denote that it belongs to Zwitch. The following seven digits are for the merchant onboarded on Zwitch (say Swiggy, Zomato, etc.), and the next 15 digits are for the merchant’s customer/user/supplier, etc.

For example, let’s say our APIs generated a virtual account number as 3636360000003000000000000056. In this case, 363636 denotes that it is from Zwitch, 0000003 represents the merchant and 000000000000056 represents the customer/user/supplier, etc.

Virtual Account Number explanation | Zwitch

Benefits of creating a Virtual Account using Zwitch

Virtual accounts from Zwitch offer several significant practical advantages:

  • You can open virtual accounts for your customers/suppliers using Zwitch on the fly.
  • There is no KYC requirement for your customer. Virtual Accounts will ride on the KYC of your primary Savings or Current Account.
  • Virtual Accounts created using our APIs doesn’t have any expiry date. It doesn’t have any maintenance/annual fee or any virtual account-to-virtual account transfer fee.
  • Zwitch’s virtual accounts support NEFT/RTGS/IMPS/UPI transactions.
  • There is no restriction on money transfer or collections except the usual UPI based restrictions.
  • You can build your algorithms on money moving in & out of the virtual accounts of your customers.
  • You can auto-trigger money flowing into these virtual accounts to your primary bank account.
  • You can provide spend capabilities to your customer with co-branded virtual cards or VPA on top of the virtual accounts you create.

Types of Virtual Accounts using Zwitch APIs

You can create different types of virtual accounts using our APIs depending on your use case. There are two main use-cases for virtual accounts. They are:

1. Virtual Account as a Wallet

When you use a virtual account as a wallet, the customer can load the money to its virtual account via NEFT/RTGS/IMPS/UPI & use it to do transactions on the website. The merchants can use these wallets to transfer refunds to their customers instead of transferring them to their primary bank account.

Let’s consider an example. Say you own an e-commerce store or run an online flight/bus ticketing company. You can create virtual accounts with the type wallet for your customers to load money and make payments on your website. The balance amount (if any) from any transaction will remain in the customer’s wallet, which they can use for future transactions. If the customer cancels the order/booking, you can refund the amount directly to the customer’s wallet.

Note: When you create a virtual account as a type wallet, you WILL NOT be able to transfer money to your primary virtual account from your customer’s virtual account.

2. Virtual Account for Collecting payments

In this case, the customer can load money to their virtual account via NEFT/RTGS/IMPS, which can be programmatically transferred to the merchant’s primary virtual account. The virtual account created as a collection_tool is used as a collection medium and enables you to move these funds to any bank account using the Transfers API.

Let’s consider an example. Say you own an NBFC and collect EMI payments from customers through bank transfers by sharing your current account number. You’ll have to rely on the bank account statement to reconcile the transaction. Most of the time, bank account statements don’t provide remitter information which makes the reconciliation difficult.

Here, you can use virtual accounts as a collection_tool for all your customers. Customers can transfer money through NEFT/RTGS/IMPS/UPI to a virtual account number. Zwitch then sends a webhook with the payment and remitter information to your configured webhook URL, notifying you about the incoming payment. All the amount collected will be accumulated in your primary virtual account number, and you can then transfer it to any bank account using our Transfers API.

Virtual Account Modes

A Virtual Payment Address (VPA) is a unique identifier that helps UPI track a person’s account. It acts as an ID independent of your bank account number and other details. VPA can be used to make and request payments through a UPI-enabled app. You need not fill in your bank account details repeatedly for making multiple payments. Whether you are creating virtual accounts as collection_tool or wallet, Zwitch allows you to create virtual accounts with two modes:

Virtual Account without VPA

In this mode, API generates the virtual account number and IFSC code without a VPA handle for your customers. Customers need to add the virtual account number as a beneficiary in their net banking account and make an online transfer or enter complete account details in their UPI app (if the app allows).

Virtual Account with VPA

In this mode, the API generates a VPA or Virtual UPI ID along with a virtual account number and IFSC code. This is a dynamically generated UPI ID for each customer to add money to using any UPI app – such as Google Pay, PhonePe, PayTM etc.

Virtual Account as a Wallet

In some cases, Virtual Accounts as an interoperable wallet might suit better. Let’s understand in detail the API for creating virtual accounts as a wallet. You need to pass the following mandatory parameters in request to our APIs:

  • Customer Name as name
  • Customer Email-id as email
  • Customer Mobile Number as mobile_number

Now, there are two more parameters, which will remain constant if you are creating a Virtual Account as a wallet:

  • type with value as virtual
  • used_as with value as wallet

You can create a Virtual Payment Address (VPA) and a virtual account or just generate a Virtual Account Number and IFSC code, as per your choice. Ideally, it is advisable to generate VPA along with the virtual account number and IFSC Code. This will help users load money in their VA from their bank account easily using any UPI app like Google Pay, PhonePe, etc. Many businesses these days convert VPA into a QR Code on the fly to improve customer experience. If you chose to create VPA/UPI ID for your customer then, you need to add the following additional parameters in the request headers of our APIs:

  • state_code with value as KA for Karnataka, KL for Kerala, DL for Delhi, etc.
  • city
  • pan
  • postal_code
  • business_type with value as an individual for Individual, public-or-private-limited for Public/Private Limited
  • business_category with value as agri_business for Agri-Business, banking_or_financial_services for Banking / Financial Services, etc.

You’ll find the complete details for state_code, business_type and business_category here.

Here is a sample request header for creating a virtual account as a wallet with VPA/UPI ID:

curl --request POST \
     --url \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer <access_key>:<secret_key>' \
     --header 'Content-Type: application/json' \
     --data '
     "type": "virtual",
     "create_vpa": true,
     "kyc": {
          "state_code": "KA",
          "city": "Bengaluru",
          "pan": "ABCDE1234F",
          "postal_code": 560010,
          "business_type": "individual",
          "business_category": "banking_or_financial_services"
     "name": "John Doe",
     "email": "[email protected]",
     "mobile_number": "9675196666",
     "used_as": "wallet"

Note: All Zwitch API calls require an Authorization header to be passed in the format ACCESS_KEY:SECRET_KEY. Make sure to replace <access_key> and <secret_key> with the actual access and secret key you will find in your Sandbox Dashboard.

Here is a sample response header after the request for creating a virtual account as a wallet with VPA/UPI ID is completed:

The use cases discussed above are just the tip of the iceberg of what Zwitch APIs can do to transform your business. Integrating Virtual Account APIs from Zwitch is an essential step towards improving your relationship with customers by introducing a distinctively new proposition like a wallet. Want to know more? Go ahead and explore our APIs.

What’s your Reaction?

Siddhant Agarwal

A design thinker at heart. Currently working as Developer Relations Lead @ living in Bangalore, India. An avid public speaker and love helping startups scale in User Experience (UX).


Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *