Account Validation

Overview of Account Validation for RazorpayX, APIs and webhook payload. Validate customer's bank account before you make payouts.


validates your Contact's Fund Account details (such as bank account or virtual payment address (VPA) details) to verify the account number where the user wants to receive the amount.

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.

Fund/Bank Account Validation workflow from creating a contact to adding funds and validating it.

After you validate a Fund Account, it moves to the following statuses in its life cycle.

Fund/Bank Account Validation workflow states can be created, and then either be completed or failed.

Created

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.

Completed

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.

Failed

This state indicates that the account validation transaction has failed due to a technical error.

Before you make an account validation transaction, you must:

Before you fire APIs, keep your Key id and Key Secret available. You can

in Live Mode or in on the .

API EndpointDescription
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.

Validate a Bank Account

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.

Validate a VPA

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: active
  • false: 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?