Most businesses have adopted recurring based business models. There are multiple benefits for businesses that switch to a recurring business model, including steady cash flow, better inventory management, and reduced acquisition and retention costs.
Industry estimates suggest that recurring payments’ current market opportunity is between INR 20-25 billion (Source). There has been a 3X growth in recurring payments recently, and it is growing at a rate of 40% year on year.
Zwitch APIs provide virtual accounts for businesses to collect recurring payments like EMI for short loans, student fees, DTH/Electricity bills, and distributor payments and automatically reconcile them.
This blog will show you how to create and use virtual accounts for recurring payments using Zwitch APIs.
Using Virtual Accounts for payment collections
If you were to collect recurring payments from your customers, what would you do?
You might share your current account number with the customer, ask them to add your account details as beneficiary and then initiate bank transfer from their account to your account. In this case, you’ll have to rely on your bank account statement to reconcile the transactions at the end of every month.
When you have a small set of customers, this process won’t take much time. But, imagine if you are doing the same way when you’ve lakhs and crores of customers. It would take a significant amount of effort and time for your accounts team to reconcile transactions against the customer payments. Most of the time, bank account statements don’t provide remitter information, making the reconciliation process more complicated.
Well, you don’t have to fuss over these things anymore. We have a solution for you – Virtual Accounts. With Zwitch, you can do seamless recurring payments collection and also embed reconciliation seamlessly into your workflow.
Streamline your payment collections with Virtual Accounts APIs
Using Zwitch Virtual Accounts APIs, you can create and use Virtual Accounts to collect payments. There are various instances where you can use our APIs for collecting payments such as:
- SaaS subscriptions,
- EMIs from customers,
- Loan instalments,
- Student fees,
- DTH/Water/ Electricity bills,
- Distributor payments by retailers,
- Mutual funds & insurance premium,
- NGO donations and many more.
When you create virtual accounts as a collection_tool
for your customers using Virtual Account APIs, they can then load money to their virtual account through NEFT/RTGS/IMPS/UPI. Zwitch then sends a webhook with the payment and remitter information to your configured webhook URL, notifying you about the incoming payment. You can automatically transfer the amount collected in different individual virtual accounts of customers to your or any merchant’s primary virtual account. This can also be then transferred to any bank account using the Transfers API.
Let’s understand in detail the Virtual Accounts APIs for creating virtual accounts as a collection tool.
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 collection tool:
type
with value asvirtual
used_as
with value ascollection_tool
Now, if you want, you can create a Virtual Payment Address (VPA) for the virtual account in addition to the Virtual Account Number and IFSC code generated by the APIs. However, it is recommended that you should create one, to ensure a better consumer 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 asKA
for Karnataka,KL
for Kerala, DL for Delhi, etc.city
pan
postal_code
business_type
with value as anindividual
for Individual,public-or-private-limited
for Public/Private Limitedbusiness_category
with value asagri_business
for Agri-Business,banking_or_financial_services
for Banking / Financial Services, etc.
You can 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 collection_tool with VPA/UPI ID:
curl --request POST \
--url https://api.zwitch.io/v1/accounts \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_key>:<secret_key>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "virtual",
"kyc": {
"state_code": "KA",
"city": "Bengaluru",
"pan": "ABCDE1234F",
"postal_code": 560068,
"business_type": "individual",
"business_category": "agri_business"
},
"name": "John Doe",
"email": "john.doe@email.com",
"mobile_number": "9675196666",
"used_as": "collection_tool",
"create_vpa": true
}
'
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 Zwitch Sandbox Dashboard.
On successful completion of your request for creating a virtual account as a collection_tool with VPA/UPI ID, you will receive the following response from our APIs:
{
"id":"va_fBFs3yDUtDTTOhltAB2Z39axN"
"object":"account"
"type":"virtual"
"name":"John Doe"
"mobile_number":"9675196666"
"account_number":"36363651417845576"
"ifsc_code":"YESB0CMSNOC"
"used_as":"collection_tool"
"email":"john.doe@email.com"
"kyc":{
"state_code":"KA"
"city":"Bengaluru"
"postal_code":560068
"pan":"ABCDE1234F"
"business_type":"individual"
"business_category":"agri_business"
}
"bank_name":"yes_bank"
"vpa":"zwch182691254@yesbank"
"status":"active"
"is_sandbox":false
}
You can now parse information from the above response as per your need and display the virtual account number, IFSC code, and VPA handles to your customer to make payments. The money collected in the customer’s virtual account will automatically be transferred to your primary virtual account.
An alternate approach for you could be after creating a virtual account for your customers you can ask your customer to enter their UPI or VPA handle associated with any Payment Service Provider (PSP) app such as Google Pay, PhonePe, BHIM, etc. Once the customer gets a UPI collect request on their UPI app, they can make payment which gets collected in their virtual account and then transferred to the merchant’s virtual account seamlessly.
curl --request POST \
--url https://api.zwitch.io/v1/accounts/va_fBFs3yDUtDTTOhltAB2Z39axN/payments/upi/collect \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_key>:<secret_key>' \
--header 'Content-Type: application/json' \
--data '
{
"remitter_vpa_handle": "9675196666@upi",
"amount": 1,
"expiry_in_minutes": 10,
"remark": "John Doe Transfer"
}
'
Note: You would need to pass the Virtual Account ID created earlier in the endpoint URL, VPA handle of your customer, expiry time of the request in minutes and remarks. Also, ensure you have updated access and secret keys in the above API call.
For easy auto-reconciliation, you can retrieve details of all incoming payments under your primary virtual account by passing your/customer’s Virtual Account id in the endpoint URL: https://api.zwitch.io/v1/accounts/id/payments
{
"object":"list"
"has_more":false
"data":[
{
"id":"tx_I13NjJnH8fdRelDdjux3ZYrBo"
"object":"payment"
"amount":1
"transacted_at":1628675007
"created_at":1628674981
"currency":"inr"
"bank_reference_number":"122315752283"
"status":"success"
"remitter_bank_account_number":"XXXXXX0660"
"remitter_bank_ifsc_code":"IBKL0002173"
"remitter_full_name":"JOHN DOE"
"remitter_note":"John"
"remitter_vpa_handle":"9675196666@upi"
"paid_mode":"upi"
"paid_to":"zwch182691254@yesbank"
"is_sandbox":false
"transaction_reference_id":"8d3ee23322404d1ebc96dd050d0cf57e"
}
{
"id":"tx_NSsNdk9HguyqerXvBev1BM6Au"
"object":"payment"
"amount":1000
"transacted_at":1628674905
"created_at":1628674850
"currency":"inr"
"bank_reference_number":"122315748847"
"status":"failed"
"remitter_bank_account_number":"NA"
"remitter_bank_ifsc_code":"NA"
"remitter_full_name":"null"
"remitter_note":"John"
"remitter_vpa_handle":"9675196666@upi"
"paid_mode":"upi"
"paid_to":"zwch182691254@yesbank"
"is_sandbox":false
"transaction_reference_id":"3820d2c1bfce429cb194261a002de241"
}
]
}
Once the amount is collected in your primary virtual account, you can transfer the amount to your current bank account or savings account or even split the amount and make automated vendor payouts.
Companies have realised the importance of channelising collections and payments through a single account. On the collections side, customers use the Virtual Account number, which appears on the company’s remittance information. It brings a high degree of transparency and enhances the automatic reconciliation rates. And on the payments side, the virtual account number is used to indicate to suppliers the entity on whose behalf the payment is made. Read more on Virtual Accounts as a collection tool and UPI Collect APIs here.
0 Comments