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

# Validate a VPA

> Validate Fund Account of type VPA via API.

<div style={{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"0.35rem 0.9rem",border:"1px solid rgba(128,128,128,0.28)",borderRadius:"0.5rem",padding:"0.45rem 0.75rem",margin:"0 0 1.25rem",fontSize:"0.875rem"}}>
  <span style={{fontWeight:600}}>Available in</span>
  <span>🇮🇳 India</span>
  <span>🇸🇬 Singapore</span>
  <span>🇺🇸 United States</span>
</div>

Use this endpoint to create a VPA (UPI) account validation transaction.

<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": "pennydrop",
      "reference_id": "112233",
      "notes": {
        "key_1": "value_1",
        "key_2": "value_2"
      },
      "fund_account": {
        "account_type": "vpa",
        "vpa": {
          "address": "gaurav.kumar@exampleupi"
        },
        "contact": {
          "name": "Gaurav Kumar",
          "email": "gaurav.kumar@example.com",
          "contact": "9123456789",
          "type": "employee",
          "reference_id": "Contact_12345"
        }
      }
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "id": "fav_00000000000001",
    "entity": "fund_account.validation",
    "status": "completed",
    "validation_results": {
      "account_status": "active",
      "registered_name": "Gaurav Kumar",
      "details": "The beneficiary account is valid",
      "name_match_score": 100,
      "validated_account_type": "bank_account",
      "bank_account": {
        "bank_routing_code": "ICIC0000047",
        "account_number": "XXXXXXXX5599",
        "bank_name": "ICICI Bank",
        "account_type": "savings"
      }
    },
    "status_details": {
      "description": "Validation request is completed",
      "source": "beneficiary_bank",
      "reason": "validation_completed"
    },
    "reference_id": "112233",
    "fund_account": {
      "id": "fa_00000000000001",
      "entity": "fund_account",
      "account_type": "vpa",
      "vpa": {
        "address": "gaurav.kumar@exampleupi"
      },
      "active": true,
      "created_at": 1567064019,
      "contact": {
        "id": "cont_00000000000001",
        "entity": "contact",
        "name": "Gaurav Kumar",
        "email": "gaurav.kumar@example.com",
        "contact": "9123456789",
        "type": "employee",
        "reference_id": "Contact_12345",
        "active": true
      }
    }
  }
  ```

  ```json Failure theme={null}
  {
    "id": "fav_00000000000002",
    "entity": "fund_account.validation",
    "status": "failed",
    "validation_results": {
      "account_status": "",
      "registered_name": "",
      "details": "The beneficiary account is valid",
      "name_match_score": 100,
      "validated_account_type":
      "bank_account": {
        "bank_routing_code": null,
        "account_number": null,
        "bank_name": null,
        "account_type": null
      }
    },
    "fund_account": {
      "id": "fa_00000000000002",
      "entity": "fund_account",
      "contact_id": "cont_00000000000001",
      "account_type": "vpa",
      "vpa": {
        "username": "gaurav.kumar",
        "handle": "exampleupi",
        "address": "gaurav.kumar@exampleupi"
      },
      "batch_id": null,
      "active": true,
      "created_at": 1573110860
    },
    "amount": null,
    "currency": null,
    "notes": {
      "random_key_1": "Make it so.",
      "random_key_2": "Tea. Earl Grey. Hot."
    },
    },
    "created_at": 1574244676,
    "utr": null
  }
  ```
</ResponseExample>

## Request Parameters

<ParamField body="source_account_number" type="string" required>
  The account from which money should be deducted for the account validation transaction.

  * Pass your customer identifier if you want money to be deducted from RazorpayX Lite.

  <Warning>
    **Watch Out!**

    * This is **not** your contact's bank account number. Log in to your [**RazorpayX Dashboard**](https://x.razorpay.com/auth/?intent=current_account) and go to **My Account & Settings → Banking → Customer Identifier**.
    * This value is different for Test Mode and Live Mode.
    * RazorpayX Lite is currently not available for new merchants. To set up a new RazorpayX account, refer to [Current Account](/docs/sg/x/account-types/current-account).
  </Warning>
</ParamField>

<ParamField body="validation_type" type="string" required>
  The method used for validating the bank account. In this case, `pennydrop`.
</ParamField>

<ParamField body="reference_id" type="string">
  Maximum 40 characters. A user-entered reference for the contact. For example, `Acme Contact ID 12345`.
</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. For example, `"note_key": "Beam me up Scotty”`.
</ParamField>

<ParamField body="fund_account" type="object" required>
  The fund account id you want to validate.
</ParamField>

<ParamField body="account_type" type="string">
  Customer's bank account type. Possible values:

  * `savings` (default)
  * `current`
</ParamField>

<ParamField body="vpa" type="string" required>
  Target recipient's VPA address.
</ParamField>

<ParamField body="contact" type="object" required>
  The details of the contact.
</ParamField>

<ParamField body="name" type="string">
  The customer’s name. For example, Gaurav Kumar.
</ParamField>

<ParamField body="email" type="string">
  The customer’s email address. For example, [gaurav.kumar@example.com](mailto:gaurav.kumar@example.com).
</ParamField>

<ParamField body="contact" type="string">
  The customer's phone number. A maximum length of 15 characters, including country code. For example, `+919000090000`.
</ParamField>

<ParamField body="type" type="string">
  Defines the contact type . For example, `employee`
</ParamField>

## Response Parameters

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

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

<ResponseField name="status" type="string">
  The status of the account validation transaction.
  Possible values:

  * `created`
  * `completed`
  * `failed`
</ResponseField>

<ResponseField name="validation_results" type="object">
  Details extracted from the results of the fund account validation.
</ResponseField>

<ResponseField name="account_status" type="string">
  Displays if the account is valid or not.
  Possible values:

  * `active`
  * `invalid`
</ResponseField>

<ResponseField name="registered_name" type="string">
  The name linked to the account. For example,`Gaurav Kumar` or `null`.
</ResponseField>

<ResponseField name="details" type="string">
  Brief description of the validation.
</ResponseField>

<ResponseField name="name_match_score" type="string">
  The percentage score indicating how closely the account holder's name matches the records.
</ResponseField>

<ResponseField name="validated_account_type" type="string">
  Here it is `bank_account`.
</ResponseField>

<ResponseField name="bank_account" type="object">
  The contact's bank account details.
</ResponseField>

<ResponseField name="bank_routing_code" type="string">
  Beneficiary bank IFSC. For example, `HDFC0000053`.
</ResponseField>

<ResponseField name="account_number" type="string">
  Beneficiary account number. For example, `765432123456789`.
</ResponseField>

<ResponseField name="bank_name" type="string">
  The contact's bank name. For example, `HDFC`.
</ResponseField>

<ResponseField name="account_type" type="string">
  The account type being validated. For example `savings`, `current`.
</ResponseField>

<ResponseField name="status_details" type="object">
  Status of the fund account validation.
</ResponseField>

<ResponseField name="description" type="string">
  A brief description stating if the validation is complete or not.
</ResponseField>

<ResponseField name="source" type="string">
  The source from which validation was done. For example, `beneficiary_bank`
</ResponseField>

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

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

<ResponseField name="fund_account" type="object">
  The details of the fund account which was validated.
</ResponseField>

<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 is `fund_account`.
</ResponseField>

<ResponseField name="account_type" type="string">
  Fund account type.
</ResponseField>

<ResponseField name="vpa" type="object">
  The details associated with the account holder's virtual payment address.
</ResponseField>

<ResponseField name="address" type="string">
  The virtual payment address of the contact whose account is validated. For example, `gaurav.kumar@exampleupi`
</ResponseField>

<ResponseField name="active" type="boolean">
  Possible values of fund account status:

  * `true`: active
  * `false`: inactive
</ResponseField>

<ResponseField name="created_at" type="integer">
  Timestamp, in unix, when the fund account was created. For example, `1543650891`.
</ResponseField>

<ResponseField name="contact" type="object">
  The contact's details.
</ResponseField>

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

<ResponseField name="entity" type="string">
  Here it is `contact`
</ResponseField>

<ResponseField name="name" type="string">
  Account holder's name. For example,`Gaurav Kumar`.
</ResponseField>

<ResponseField name="email" type="string">
  Email address of the contact.
</ResponseField>

<ResponseField name="contact" type="string">
  Phone number of the contact.
</ResponseField>

<ResponseField name="type" type="string">
  Contact Type. For example, `employee`, `contractor`.
</ResponseField>

<ResponseField name="reference_id" type="string">
  Reference id associated with the contact.
</ResponseField>

<ResponseField name="active" type="boolean">
  Possible values of contact status:

  * `true`: active
  * `false`: inactive
</ResponseField>
