Smart Collect with TPV

Create and manage virtual accounts. Fetch payment details using Razorpay Smart Collect TPV APIs.


You can 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.
  • Create, retrieve and close virtual accounts using the Smart Collect TPV APIs.
  • The virtual account response is an array that defines what receivers are available for the virtual account. It contains:
    • attributes such as id and customer_id
    • and a field, receivers

Know more about

.

You can try out our APIs on the Razorpay Postman Public Workspace.

The Smart Collect with TPV entity has the following fields:

id

string The unique identifier of the virtual account.

name

string The merchant billing label as it appears on the Razorpay Dashboard.

entity

string Indicates the type of entity. Here, it is virtual account.

status

string Indicates whether the virtual account is in active or closed state.

description

string A brief description about the virtual account.

amount_paid

integer The amount paid by the customer into the virtual account.

notes

json object Any custom notes you might want to add to the virtual account can be entered here. Check the

to know more.

customer_id

string Unique identifier of the customer the virtual account is linked with. Check the

section to know more.

receivers

json object Configuration of desired receivers for the virtual account.

id

string The unique identifier of the virtual bank account. Sample ID for virtual bank account is ba_Di5gbQsGn0QSz3

entity

string Name of the entity. Possible value is bank_account.

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 can be entered here. Check the

to know more. This parameter appears in the response only when bank_account is passed as the receiver type.

allowed_payers

array Details of customer bank accounts which will be allowed to make payments to your virtual account. The parent parameter under which the customer bank account details must be passed as child parameters.

Handy Tips

You can add account details of 10 allowed payers for a virtual account. For more details, refer to the

section.

type

string The type of account through which the customer will make the payment. Possible value is bank_account.

id

string The unique identifier of the allowed_payers account.

bank_account

object Indicates the bank account details such as ifsc and account_number.

ifsc

string The IFSC associated with the bank account through which the customer is expected to make the payment.

account_number

string The bank account number through which the customer is expected to make the payment.

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).

Handy Tips
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.

The following endpoint creates a virtual account.

POST
/virtual_accounts

receivers

mandatory

json object Configuration of desired receivers for the virtual account.

types

array List of desired receiver types. Possible value is bank_account

allowed_payers

mandatory

array Details of customer bank accounts which will be allowed to make payments to your virtual account. The parent parameter under which the customer bank account details must be passed as child parameters.

Handy Tips

You can add account details of 10 allowed payers for a virtual account. For more details, refer to the

section.

type

mandatory

string The type of account through which the customer will make the payment. Possible value is bank_account.

bank_account

mandatory

object Indicates the bank account details such as ifsc and account_number.

ifsc

mandatory

string The IFSC associated with the bank account through which the customer is expected to make the payment.

account_number

mandatory

string The bank account number through which the customer is expected to make the payment.

Handy Tips

The SBI account number contains zeros preceding actual numbers. You should enter the complete account number, including these zeros, or else the transaction will fail, and the amount will be refunded automatically.

For example, if the account number is 00000022234631312, add the complete account number and not just 22234631312.

description

optional

string A brief description of the virtual account.

customer_id

optional

string Unique identifier of the customer to whom the virtual account must be tagged. Refer to the

documentation to learn how to create a customer.

notes

optional

json object Any custom notes you might want to add to the virtual account can be entered here. Refer to the

to learn more.

close_by

optional

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).

Handy Tips
Any request beyond 2147483647 UNIX timestamp will fail.

Handy Tips

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.

Descriptions for the response parameters are present in the

parameters table.

The following endpoint adds an allowed payer's account.

POST
/virtual_accounts/{va_id}/allowed_payers

type

mandatory

string The type of account. Possible value is bank_account.

bank_account

mandatory

object Indicates the bank account details such as ifsc and account_number.

ifsc

mandatory

string The IFSC associated with the bank account.

account_number

mandatory

string The bank account number.

Handy Tips

The SBI account number contains zeros preceding actual numbers. You should enter the complete account number, including these zeros, or else the transaction will fail, and the amount will be refunded automatically.

For example, if the account number is 00000022234631312, add the complete account number and not just 22234631312.

va_id

mandatory

string The unique identifier of the virtual account to which you want to add allowed_payers account details.

The following section provides information about all the possible errors and their description.

This error occurs when you try to add an allowed payer account on a virtual account with VPA added as a receiver (with or without a Bank account).

This error occurs when you try to add new allowed payer accounts when the overall allowed_payers limit is exceeded. You can only add up to 10 allowed payer accounts.

This error occurs when you do not pass the bank account number in the request.

This error occurs when you do not pass the IFSC in the request.

This error occurs when you pass an incorrect IFSC in the request. An IFSC must be 11 characters.

This error occurs when you try to add a duplicate allowed payer's account with the same IFSC and account number that already exists.

The following endpoint fetches a virtual account by ID.

GET
/virtual_accounts/:id

id

mandatory

string The unique identifier of the virtual account whose details are to be fetched.

Descriptions for the response parameters are present in the

parameters table.

The following endpoint fetches the details of all virtual accounts.

GET
/virtual_accounts

from

optional

integer Timestamp, in seconds, from when virtual accounts are to be fetched.

to

optional

integer Timestamp, in seconds, till when virtual accounts are to be fetched.

count

optional

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

optional

integer Number of records to be skipped while fetching the virtual accounts. This can be used for pagination, in combination with count.

Descriptions for the response parameters are present in the

parameters table.

The following endpoint fetches payments made against a particular virtual account.

GET
/virtual_accounts/:id/payments

id

mandatory

string The unique identifier of the virtual account for which the payment details are to be fetched.

The response parameters are the same as those mentioned in

.

from

optional

integer Timestamp, in seconds, from when payments are to be fetched.

to

optional

integer Timestamp, in seconds, till when payments are to be fetched.

count

optional

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

optional

integer Number of records to be skipped while fetching the payments. This can be used for pagination, in combination with count.

Descriptions for the response parameters are present in the

parameters table.

You can retrieve details of a payment using the Payment ID and transfer method.

The following endpoint fetches payment details for a bank transfer.

GET
/payments/:id/bank_transfer

Handy Tips

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.

id

mandatory

string The unique identifier of the payment made to the virtual account.

Descriptions for the response parameters are present in the

parameters table.

The following endpoint deletes allowed payer's account details added to a virtual account. You can delete one account detail in a single request.

DELETE
/virtual_accounts/{:va_id}/allowed_payers/{:id}

You get a 204(No Content) response if the allowed payer account details are deleted successfully.

va_id

mandatory

string The unique identifier of the virtual account from which the allowed_payers account details should be deleted.

id

mandatory

string The unique identifier of the allowed_payers account that has to be deleted.

The following endpoint refunds a payment using the payment ID.

POST
/payments/:id/refund

id

mandatory

string The unique identifier of the payment to be refunded.

amount

optional

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.

speed

optional

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.

notes

optional

json object Key-value pairs used to store additional information. A maximum of 15 key-value pairs can be included.

receipt

optional

string A unique identifier provided by you for your internal reference.

Descriptions for the response parameters are present in the

.

Know more about

to perform other refund-related operations:

  • Fetch a particular refund or a list of refunds for a payment id.
  • Update a refund to modify the Notes field.

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.

The following endpoint adds receiver to an existing virtual account.

POST
/virtual_accounts/:id/receivers

id

mandatory

string The unique identifier of the virtual account to which another receiver type is to be added.

types

mandatory

array The receiver type to be added to the virtual account. Possible values are:

  • bank_account
  • vpa

vpa

optional

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.

Descriptions for the response parameters are present in the

parameters table.

The following endpoint closes a virtual account.

POST
/virtual_accounts/:id/close

id

mandatory

string The unique identifier of the virtual account that is to be closed.

Descriptions for the response parameters are present in the

parameters table.