> ## Documentation Index
> Fetch the complete documentation index at: https://doc-test-my.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate Bank Account (VPA) via Reverse Penny Drop

> Validate your contact's bank account instantly via Reverse Penny Drop.

Use this endpoint to validate the bank account details via Reverse Penny Drop.

<Warning>
  **Watch Out!**

  This API is not supported in test mode. Ensure you switch to live mode before proceeding.
</Warning>

<RequestExample>
  ```bash Curl theme={null}
  curl -u [YOUR_KEY]:[YOUR_SECRET] \
  -X POST https://api.razorpay.com/v1/fund_accounts/validations \
  -H "Content-Type: application/json" \
  -d '{
    "source_account_number": "7878780080316316",
    "validation_type": "upi_intent",
    "reference_id": "112233",
    "notes": {
      "random_key_1": "Make it so",
      "random_key_2": "Tea. Earl Grey. Hot."
    }
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response - Initial theme={null}
  {
    "id": "fav_00000000000001",
    "entity": "fund_account.validation",
    "status": "created",
    "utr": "123456789012",
    "upi_intent": {
      "intent_url": "upi://pay?pa=razorpayx@citibank&pn=RZPX%20PRIVATE%20LTD&mc=7413&cu=INR&am=1.00&tn=BAV&ver=01&mode=04&qrMedium=02&tr=RjY7anDJFuKQOB",
      "phonepe_url": "phonepe://upi/pay?pa=razorpayx@citibank&pn=RZPX%20PRIVATE%20LTD&mc=7413&cu=INR&am=1.00&tn=BAV&ver=01&mode=04&qrMedium=02&tr=RjY7anDJFuKQOB",
      "gpay_url": "tez://upi/pay?pa=razorpayx@citibank&pn=RZPX%20PRIVATE%20LTD&mc=7413&cu=INR&am=1.00&tn=BAV&ver=01&mode=04&qrMedium=02&tr=RjY7anDJFuKQOB",
      "paytm_url": "paytmmp://upi/pay?pa=razorpayx@citibank&pn=RZPX%20PRIVATE%20LTD&mc=7413&cu=INR&am=1.00&tn=BAV&ver=01&mode=04&qrMedium=02&tr=RjY7anDJFuKQOB",
      "bhim_url": "bhim://upi/pay?pa=razorpayx@citibank&pn=RZPX%20PRIVATE%20LTD&mc=7413&cu=INR&am=1.00&tn=BAV&ver=01&mode=04&qrMedium=02&tr=RjY7anDJFuKQOB",
      "encoded_qr_code": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAQMAAABmvDolAAAABlBMVEX///8AAABVwtN+AAACWUlEQVR42uyYy3E7LRDEe4sDR0IglM1sH+"
    },
    "validation_results": {
      "account_status": null,
      "registered_name": null,
      "details": null,
      "name_match_score": null,
      "validated_account_type": null,
      "bank_account": {
        "bank_routing_code": null,
        "account_number": null,
        "bank_name": null,
        "account_type": null
      }
    },
    "status_details": {
      "description": "Validation request is created",
      "source": "internal",
      "reason": "validation_request_created"
    },
    "reference_id": "112233",
    "notes": {
      "random_key_1": "Make it so.",
      "random_key_2": "Tea. Earl Grey. Hot."
    }
  }
  ```

  ```json Response - After Payment theme={null}
  {
    "id": "fav_00000000000001",
    "entity": "fund_account.validation",
    "status": "completed",
    "utr": "123456789012",
    "validation_results": {
      "account_status": "active",
      "registered_name": "GAURAV KUMAR",
      "validated_account_type": "Bank_Account",
      "name_match_score": "00",
      "bank_account": {
        "bank_routing_code": "HDFC0000053",
        "account_number": "765432123456789",
        "bank_name": "HDFC Bank",
        "account_type": "SAVINGS"
      },
      "upi_intent": {
        "vpa": "example@upi"
      }
    }
  }
  ```
</ResponseExample>

## Request Parameters

<ParamField body="source_account_number" type="string" required>
  Bank account number being validated. For example, `765432123456789`.
</ParamField>

<ParamField body="validation_type" type="string" required>
  The method used for validating the bank account. Here, it is `upi_intent`.
</ParamField>

<ParamField body="reference_id" type="string">
  Unique reference id of the fund account being validated.
</ParamField>

<ParamField body="notes" type="object">
  Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each.
</ParamField>

## Response Parameters

<ResponseField name="id" type="string">
  The unique identifier linked to the fund account. For example, `fa_00000000000001`.
</ResponseField>

<ResponseField name="entity" type="string">
  Here it will be `fund_account.validation`.
</ResponseField>

<ResponseField name="status" type="string">
  The status of the fund account validation. For example, in the initial response, it could be `created` and in the after payment response, `completed`.
</ResponseField>

<ResponseField name="utr" type="string">
  The Unique Transaction Reference number assigned to the ₹1 UPI payment made by the end user. Use this to track or reconcile the transaction.
</ResponseField>

<ResponseField name="upi_intent" type="object">
  Contains deep links to launch specific UPI apps directly on the user's device, allowing them to complete the ₹1 payment without manually entering details.
</ResponseField>

<ResponseField name="intent_url" type="string">
  A generic UPI deep link that opens the user's default or available UPI app to initiate the payment.
</ResponseField>

<ResponseField name="phonepe_url" type="string">
  A deep link that launches the PhonePe app directly to complete the payment.
</ResponseField>

<ResponseField name="gpay_url" type="string">
  A deep link that launches Google Pay directly to complete the payment.
</ResponseField>

<ResponseField name="paytm_url" type="string">
  A deep link that launches the Paytm app directly to complete the payment.
</ResponseField>

<ResponseField name="bhim_url" type="string">
  A deep link that launches the BHIM app directly to complete the payment.
</ResponseField>

<ResponseField name="encoded_qr_code" type="string">
  A Base64-encoded QR code image. Display this on your interface so users can scan it using any UPI app to complete the ₹1 payment.
</ResponseField>

<ResponseField name="validation_results" type="object">
  Contains the verified account details extracted from the payer's bank after the ₹1 payment is received.
</ResponseField>

<ResponseField name="account_status" type="string">
  Indicates whether the bank account is active and valid. Possible values: `active`, `inactive`.
</ResponseField>

<ResponseField name="registered_name" type="string">
  The account holder's full name as registered with their bank.
</ResponseField>

<ResponseField name="validated_account_type" type="string">
  The type of account validated during the transaction. Possible values: `bank_account`, `vpa`.
</ResponseField>

<ResponseField name="name_match_score" type="integer">
  A numeric score indicating how closely the account holder's registered name matches the name provided during the request.
</ResponseField>

<ResponseField name="bank_account" type="object">
  Contains the verified bank account details of the payer.
</ResponseField>

<ResponseField name="bank_routing_code" type="string">
  The IFSC code of the payer's bank branch, used to identify and route transactions to the correct bank.
</ResponseField>

<ResponseField name="account_number" type="string">
  The payer's bank account number, as retrieved from the bank.
</ResponseField>

<ResponseField name="bank_name" type="string">
  The name of the payer's bank.
</ResponseField>

<ResponseField name="account_type" type="string">
  The type of bank account held by the payer. Possible values: `Savings`, `Current`.
</ResponseField>

<ResponseField name="status_details" type="object">
  Contains details about the status of the validation.
</ResponseField>

<ResponseField name="description" type="string">
  A short note about the validation status.
</ResponseField>

<ResponseField name="source" type="string">
  The source from which the validation was done.
</ResponseField>

<ResponseField name="reason" type="string">
  Reason for the validation.
</ResponseField>

<ResponseField name="reference_id" type="string">
  Unique reference id generated for the validation.
</ResponseField>

<ResponseField name="notes" type="object">
  Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each.
</ResponseField>
