Account Validation
Overview of Account Validation for RazorpayX, APIs and webhook payload. Validate customer's bank account before you make payouts.
Watch Out!
- Fund Account Validation is possible only for RazorpayX Lite.
- This feature is not available in test mode.
- It is mandatory to that you use while making payouts via APIs or the request will fail.
Explore the Account Validation API collection below in the Razorpay Postman Public Workspace. Fork the workspace and test the APIs with your
.Below is a high-level diagrammatic overview of how to validate a Contact's Fund Account in RazorpayX.
After you validate a Fund Account, it moves to the following statuses in its life cycle.
This state is assigned to an account validation transaction after Razorpay receives the API request. At this stage, we are awaiting a response from the beneficiary's bank. The account details have not been validated.
We do not recommend making payouts to the account while the account validation transaction is still in this status.
This state indicates that the account validation transaction was completed.
Watch Out!
The completed
status does not mean the bank account or VPA is valid. It just means the account validation transaction was completed and results are available to you via the API response and webhooks payloads.
Based on the response, you can decide if you should make a payout to the account.
Before you make an account validation transaction, you must:
- .
- Create a Fund Account for the Contact using either or .
Before you fire APIs, keep your Key id and Key Secret available. You can
in Live Mode or in on the .API Endpoint | Description |
---|---|
Validate API includes: | Validates a Contact's bank account. |
Validate API includes: | Validates a Contact's VPA. |
Retrieves all account validation transactions. | |
Retrieves a single account validation transaction with ID. |
You can only validate the following information for a contact's bank account:
-
Bank Account Number: When the status of the transaction changes to
completed
, the bank passes on the bank account status in the API response. If the account is active, you can transfer funds to the account. -
Beneficiary Validation: When the status of the transaction changes to
completed
, the bank passes on the name linked to the account in the API response. By comparing the name sent by the bank to the name provided by the customer, you can successfully validate if the account belongs to the same customer. -
Amount Validation: If you want to perform an amount validation, transfer a random amount ranging between ₹1 and ₹2, for example, ₹1.27. Ask your contact to enter the amount received on your website. This acts as an additional check to validate that the customer has access to the account.
Watch Out!
It is not possible to perform an amount validation for your contact's VPA.
You can only validate the following information for a contact's VPA:
-
Address Validation (VPA): When the status of the transaction changes to
completed
, the bank passes on the status of the VPA in the API response. If the VPA is active, you can transfer funds to the VPA. -
Beneficiary Validation: When the status of the transaction changes to
completed
, the bank passes on the name linked to the VPA in the API response. By comparing the name sent by the bank to the name provided by the customer, you can successfully validate if the account belongs to the same customer.
The Account Validation entity has the following fields:
id
string
The unique identifier linked to the fund account. For example, fa_00000000000001
.
entity
string
Here it is fund_account
.
contact_id
string
The unique identifier linked to the contact. For example, cont_00000000000001
.
account_type
string
The fund account type being created. Here it will either be bank_account
, vpa
or card
.
bank_account
object
The contact's bank account details.
ifsc
string
Beneficiary bank IFSC. For example, HDFC0000053
.
bank_name
string
The contact's bank name. For example, HDFC
.
name
string
Account holder's name. For example,Gaurav Kumar
.
account_number
string
Beneficiary account number. For example, 765432123456789
.
vpa
object
The contact's virtual payment address (VPA) details.
username
string
The username portion of the virtual payment address. For example, gaurav.kumar
.
handle
string
The handle portion of the virtual payment address. For example, exampleupi
.
address
string
The virtual payment address. For example, gaurav.kumar@exampleupi
.
card
object
The details of the card used.
name
string
The name of the cardholder. For example, Gauri Kumari
.
last4
string
The last four digits of the card. For example, 0011
.
network
string
The network issuer of the card.
Possible values are Visa
or Mastercard
.
type
string
The type of card details provided. For example, credit
or debit
.
issuer
string
The name of the aggregator/bank that has issued the card. For example, HDFC
, ICICI
and more.
active
boolean
Possible values of Fund Account status:
true
: activefalse
: inactive
batch_id
string
This value is returned if the fund account was created as part of a bulk upload.
For example, batch_00000000000001
.
status
string
The status of the account validation transaction.
Possible values:
created
completed
failed
results
object
Result of the validation. If the account validation is complete
and the account is invalid, the value in the below parameters is null
.
account_status
string
Displays if the account is valid or not.
Possible values:
active
null
registered_name
string
The name linked to the account. For example,Gaurav Kumar
or null
.
created_at
integer
Timestamp, in Unix, when the fund account was created. For example, 1543650891
.
{"id": "fav_00000000000001","entity": "fund_account.validation","fund_account": {"id": "fa_00000000000001","entity": "fund_account","contact_id": "cont_00000000000001","account_type": "bank_account","bank_account": {"name": "Gaurav Kumar","bank_name": "HDFC","ifsc": "HDFC0000053","account_number": "765432123456789"},"batch_id": null,"active": true,"created_at": 1567064019},"status": "completed","amount": 100,"currency": "INR","notes": {"random_key_1": "Make it so.","random_key_2": "Tea. Earl Grey. Hot."},"results": {"account_status": "active","registered_name": "Gaurav Kumar"},"created_at": 1547566278,"utr": "XXXXR7310682908954385XX"}
to configure and receive notifications when a specific occurs. When one of these events is triggered, we send an HTTP POST in JSON to the webhook's configured URL.
Was this page helpful?