Create and manage virtual accounts. Fetch payment details using Razorpay Smart Collect APIs.
Razorpay Smart Collect enables you to create virtual accounts to accept large payments from your customers in the form of bank transfers via NEFT, RTGS and IMPS.
Virtual accounts are similar to bank accounts wherein customers can transfer payments. You can create, retrieve and close virtual accounts using the Smart Collect APIs.
The virtual account response contains attributes such as id, customer_id and a field, receivers. This is an array that defines what receivers are available for the virtual account.
For example, if the receiver.types array of the original request contained bank_account, then the response will contain a receivers array which gives details of that bank_account receiver such as account number, IFSC and more.
You can try out our APIs on the Razorpay Postman Public Workspace.
string Unique identifier of the customer the virtual account is linked with. Refer the Customer API section to learn more.
receivers
json object Configuration of desired receivers for the virtual account.
id
string The unique identifier of the virtual bank account or virtual UPI ID. Sample IDs for:
- virtual bank account - ba_Di5gbQsGn0QSz3 - virtual UPI ID - vpa_CkTmLXqVYPkbxx.
entity
string Name of the entity. Possible values are - bank_account - vpa
ifsc
string The IFSC for the virtual bank account created. For example, RAZR0000001. This parameter appears in the response only when bank_account is passed as the receiver type.
bank_name
string The bank associated with the virtual bank account. For example, RAZR0000001. This parameter appears in the response only when bank_account is passed as the receiver type.
account_number
string The unique account number provided by the bank. For example, 1112220061746877. This parameter appears in the response only when bank_account is passed as the receiver type.
name
string The merchant billing label as it appears on the Razorpay Dashboard. This parameter appears in the response only when bank_account is passed as the receiver type.
notes
json object Any custom notes you might want to add to the virtual bank account or virtual UPI ID can be entered here. Refer Notes section of the API Reference Guide to learn more. This parameter appears in the response only when bank_account is passed as the receiver type.
username
string The UPI ID consists of the username and the bank handle. The username consists of the namespace (assigned by the bank to Razorpay), the merchant prefix (which can be customized by you) and the descriptor (which you provide to identify the customer). The unique identifier which forms the first half of the virtual UPI ID. For example, rpy.payto00000gaurikumar. This parameter appears in the response only when vpa is passed as the receiver type.
handle
string The bank name that forms the second half of the virtual UPI ID. For example, icici. This parameter appears in the response only when vpa is passed as the receiver type.
address
string The UPI ID that combines the username and the handle with the @ symbol. For example, rpy.payto00000gaurikumar@icici. This parameter appears in the response only when vpa is passed as the receiver type.
close_by
integer UNIX timestamp at which the virtual account is scheduled to be automatically closed. The time must be at least 15 minutes after current time. The date range can be set till 2147483647 in UNIX timestamp format (equivalent to Tuesday, January 19, 2038 8:44:07 AM GMT+05:30). Note: Any request beyond 2147483647 UNIX timestamp will fail.
closed_at
integer UNIX timestamp at which the virtual account is automatically closed.
created_at
integer UNIX timestamp at which the virtual account was created.
Note:
The request format for virtual account creation recently underwent a change. If you are looking for the request format as it was before 21/11/17, you can find it here.
For new integrations, we strongly recommend you use the updated request format, as it allows a host of new features, most particularly the support for completely-numeric account numbers by default.
Custom Merchant Prefix:
You can customize the merchant prefix of the vpa (payto00000) as per your business requirements. This is an on-demand feature and is not available by default. To enable creation of custom merchant prefix, raise a request on our Support Portal.
receiversmandatory
json object Configuration of desired receivers for the virtual account.
types
array List of desired receiver types. Possible values:
bank_account
vpa
qr_code
vpaoptional
json object Descriptor details for the virtual UPI ID. This is to be passed only when vpa is passed as the receiver types.
descriptor
string You can provide a custom descriptor for the UPI ID. This is a unique identifier provided by you to identify the customer. For example, gaurikumar and akashkumar are the descriptors in the usernames rpy.payto00000gaurikumar and rpy.payto00000akashkumar respectively. The combination of merchant prefix and descriptor must be 20 characters. If you go ahead with the default merchant prefix, you will get 10 characters. Hence the descriptor should be 10 characters only. Handy Tips If a user tries to input 11 or more characters in a descriptor, our API will throw an error for invalid character length.
json object Descriptor details for the Bank Account. This is to be passed only when bank_account is passed as the receiver types.
descriptor
string You can provide a custom descriptor for the bank account. This allows generation of bank account numbers in a sequence defined by you. The maximum length allowed is 8 digits. Handy Tips The descriptor parameter can be passed for both bank_account and vpa receiver types. Please reach out to the support team if you are unable to pass the parameter with bank_account.
descriptionoptional
string A brief description of the virtual account.
customer_idoptional
string Unique identifier of the customer to whom the virtual account must be tagged. Refer to the Customer API documentation to learn how to create a customer.
notesoptional
json object Any custom notes you might want to add to the virtual account can be entered here. Refer to the Notes section of the API Reference Guide to learn more.
close_byoptional
integer UNIX timestamp at which the virtual account is scheduled to be automatically closed. The time must be at least 15 minutes after current time. The date range can be set till 2147483647 in UNIX timestamp format (equivalent to Tuesday, January 19, 2038 8:44:07 AM GMT+05:30). Note: Any request beyond 2147483647 UNIX timestamp will fail.
Note:
While sharing the details of VAs (created using RBL bank) with the customers, ensure that the fifth character in the IFSC is number 0 and not the letter O. For example, valid IFSC is RATN0VAAPIS and not RATNOVAAPIS.
integer Timestamp, in seconds, from when virtual accounts are to be fetched.
to
integer Timestamp, in seconds, till when virtual accounts are to be fetched.
count
integer Number of virtual accounts to be fetched. The default value is 10 and the maximum value is 100. This can be used for pagination, in combination with skip.
skip
integer Number of records to be skipped while fetching the virtual accounts. This can be used for pagination, in combination with count.
integer Timestamp, in seconds, from when payments are to be fetched.
to
integer Timestamp, in seconds, till when payments are to be fetched.
count
integer Number of payments to be fetched. The default value is 10 and the maximum value is 100. This can be used for pagination, in combination with skip.
skip
integer Number of records to be skipped while fetching the payments. This can be used for pagination, in combination with count.
Note:
If Razorpay does not receive the bank account information of the customer from the remitting bank, the payer_bank_account key will be set to null.
string The unique identifier of the bank transfer.
entity
string The name of the entity. Here, it is bank_transfer.
payment_id
string The unique identifier of the payment.
mode
string The mode of bank transfer used. Possible values are:
- NEFT - RTGS - IMPS - UPI
bank_reference
string Unique reference number provided by the bank for the transaction.
payer_bank_account
object The payer bank account details from which payment is received.
id
string The unique identifier of the customer's bank account.
entity
string The name of the entity. Here, it is bank_account.
ifsc
string The IFSC associated with the bank account.
bank_name
string The name of the bank in which the customer has an account.
notes
object Any custom notes added to the virtual bank account.
account_number
string The unique account number of the customer.
virtual_account_id
string The unique identifier of the virtual account.
virtual_account
object Details of the virtual account.
id
string The unique identifier of the virtual account.
name
string The merchant billing label as it appears on Razorpay Dashboard.
entity
string The name of the entity. Here, it is virtual account.
status
string Indicates the status of the virtual account. Possible values are: - active - closed
description
string A brief description about the virtual account.
amount_paid
integer The amount paid by the customer to the virtual account.
notes
object Any custom notes added during the creation of the virtual account.
customer_id
string The unique identifier of the customer the virtual account is linked with. For more details, refer to the Customers API.
receivers
object Configuration of desired receivers for the virtual account.
id
string The unique identifier of the virtual bank account. For example, ba_Di5gbQsGn0QSz3.
entity
string The name of the entity. Here, it is bank_account.
ifsc
string The IFSC for the virtual bank account created. For example, RATN0VAAPIS.
bank_name
string The bank associated with the virtual bank account. For example, RBL.
account_number
string The unique account number provided by the bank. For example, 1112220061746877.
name
string The merchant billing label as it appears on Razorpay Dashboard.
notes
object Any custom notes added during the creation of the virtual account.
close_by
integer UNIX timestamp at which the virtual account is scheduled to be automatically closed. The time must be at least 15 minutes after current time. The date range can be set till 2147483647 in UNIX timestamp format (equivalent to Tuesday, January 19, 2038 8:44:07 AM GMT+05:30). Note: Any request beyond 2147483647 UNIX timestamp will fail.
closed_at
integer UNIX timestamp at which the virtual account is automatically closed.
created_at
integer UNIX timestamp at which the virtual account was created.
integer Number of payments to be fetched. Default value is 10. Maximum value is 100. This can be used for pagination, in combination with the skip parameter.
skip
integer Number of records to be skipped while fetching the payments.
va_transaction_id
integer The unique id of the transaction done via a Virtual Account.
string The payment amount represented in smallest unit of the currency passed. For example, amount = 100 translates to 100 paise, that is ₹1 (default currency is INR).
currency
string The currency in which the payment is made. Refer to the list of international currencies that we support.
status
string The status of the payment. Possible values: -created -authorized -captured -refunded -failed
base_amount
string The converted payment amount used to calculate fees and settlements. Represented in smallest unit of the base_currency. This attribute is currently only present if the currency is non-INR.
base_currency
string The conversion currency used to calculate fees and settlements. This currently defaults to INR, and is present only if the currency is non-INR.
method
string The payment method used for making the payment. Possible values: -card -netbanking -wallet - emi -upi
order_id
string Order ID, if provided. Know more about Orders API.
description `
string Description of the payment, if any.
international
boolean Indicates whether the payment is done via an international card or a domestic one.
refund_status
string The refund status of the payment. Possible values include: - null - partial - full
amount_refunded
integer The amount refunded in smallest unit of the currency passed. For example, if amount_refunded = 100, here 100 stands for 100 paise, which is equal to ₹1. INR is the default currency.
captured
boolean Indicates if the payment is captured.
email
string Customer email address used for the payment.
contact
string Customer contact number used for the payment.
fee
integer Fee (including GST) charged by Razorpay.
tax
integer GST charged for the payment.
error_code
string Error that occurred during payment. For example, BAD_REQUEST_ERROR.
error_description
string Description of the error that occurred during payment. For example, Payment processing failed because of incorrect OTP.
error_source
string The point of failure. For example, customer.
error_step
string The stage where the transaction failure occurred. The stages can vary depending on the payment method used to complete the transaction. For example, payment_authentication.
error_reason
string The exact error reason. For example, incorrect_otp.
notes
json object Contains user-defined fields, stored for reference purposes.
created_at
integer Timestamp, in UNIX format, on which the payment was created.
string The name of the entity. Here, it is upi_transfer.
amount
integer The amount paid by the customer.
payer_vpa
string The UPI ID of the customer that is used to make the payment.
payer_bank
string The name of the customer's bank.
payer_account
string The bank account number of the customer that is linked to the UPI ID.
payer_ifsc
string The IFSC associated with the bank account.
payment_id
string The unique identifier of the payment made by the customer.
npci_reference_id
string The unique reference number provided by NPCI for the payment.
virtual_account_id
string The unique identifier of the virtual account.
virtual_account
object Details of the virtual account.
id
string The unique identifier of the virtual account.
name
string The merchant billing label as it appears on Razorpay Dashboard.
entity
string The name of the entity. Here, it is virtual account.
status
string Indicates the status of the virtual account. Possible values are: - active - closed
description
string A brief description about the virtual account.
amount_paid
integer The amount paid by the customer into the virtual account.
notes
object Any custom notes added during the creation of the virtual account.
customer_id
string The unique identifier of the customer the virtual account is linked with. For more details, refer to the Customers API.
receivers
object Configuration of desired receivers for the virtual account.
id
string The unique identifier of the virtual UPI ID. For example, vpa_CkTmLXqVYPkbxx.
entity
string The name of the entity. Here, it is vpa.
username
string The unique identifier which forms the first half of the virtual UPI ID. For example, rpy.payto00000gaurikumar.
handle
string The bank name that forms the second half of the virtual UPI ID. For example, icici.
address
string The UPI ID that combines the username and the handle with the @ symbol. For example, rpy.payto00000gaurikumar@icici. This parameter appears in the response only when vpa is passed as the receiver type.
close_by
integer UNIX timestamp at which the virtual account is scheduled to be automatically closed. The time must be at least 15 minutes after current time. The date range can be set till 2147483647 in UNIX timestamp format (equivalent to Tuesday, January 19, 2038 8:44:07 AM GMT+05:30). Note: Any request beyond 2147483647 UNIX timestamp will fail.
closed_at
integer UNIX timestamp at which the virtual account is automatically closed.
created_at
integer UNIX timestamp at which the virtual account was created.
integer The amount to be refunded. Amount should be in the smallest unit of the currency in which the payment was made.
For a partial refund, enter a value lesser than the payment amount. For example, if the payment amount is ₹1500 and you want to refund only ₹500, you must pass 50000.
For full refund, enter the entire payment amount. If amount parameter is not passed, the entire payment amount will be refunded.
speedoptional
string The speed at which the refund is to be processed. The default value is normal. Refund will be processed via the normal speed and the customer will receive the refund within 5-7 working days.
notesoptional
json object Key-value pairs used to store additional information. A maximum of 15 key-value pairs can be included.
receiptoptional
string A unique identifier provided by you for your internal reference.
Refer Refunds API to perform other refund-related operations:
Fetch a particular refund or a list of refunds for a payment ID.
You can add receiver to an existing virtual account using the endpoint given below.
Watch Out:
If you had created a virtual account with a receiver, for example, bank account, you cannot add another bank account receiver or replace it. Similarly, if you had created a virtual account with only a VPA receiver, you cannot replace or update it.
array The receiver type to be added to the virtual account. Possible values are:
bank_account
vpa
vpaoptional
json object Descriptor details for the virtual UPI ID. This is to be passed only when vpa is passed as the receiver types.
descriptor
string You can provide a custom descriptor for the UPI ID. This is a unique identifier provided by you to identify the customer. For example, gaurikumar and akashkumar are the descriptors in the usernames rpy.payto00000gaurikumar and rpy.payto00000akashkumar respectively. The combination of merchant prefix and descriptor must be 20 characters. If you go ahead with the default merchant prefix, you will get 10 characters. Hence the descriptor should be 10 characters only. Note: If a user tries to input 11 or more characters in a descriptor, our API will throw an error for invalid character length.