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

# Create a VPA and Link to Payment Source

> Create a VPA and link it to the payment source using the Razorpay TPAP Pro 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>
</div>

If not already linked, create a VPA and link it with a list of payment sources. The expansion in the request URL returns the expanded payment source if it is passed in the query parameters. Use this endpoint to create a VPA and link it to a payment source.

<RequestExample>
  ```bash Curl theme={null}
  curl -X POST 'api.rzp.<bank>.com/v1/upi/tpap/vpa/link?expand[]=fundsources' \
  -u [YOUR_KEY_ID]:[YOUR_SECRET] \
  -H "Content-type: application/json" \
  -H "x-device-fingerprint: <device_fingerprint>" \
  -H "x-device-fingerprint-timestamp: 1496918882000" \
  -H "x-customer-reference: customer-id-from-customer" \
  -d '{
    "vpa":"customer@handle",
    "fundsources":[
      {
      "fundsource_id":"fs_1234",
      "primary":true
      }
    ]
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "entity":"upi.vpa",
    "customer_reference":"cust_1234",
    "mobile":"999999999",
    "address":"kunal-1@rzpa",
    "status":"active",
    "fundsources":{
      "entity":"collection",
      "count":2,
      "items":[
        {
          "id":"fs_1234",
          "customer_name":"kunal1",
          "masked_account_number":"xxxxxx8990",
          "account_reference_number":"999988126236990",
          "type":"savings",
          "ifsc":"SBI00001",
          "upi_pin_set":true,
          "upi_pin_length":4,
          "otp_length":4,
          "atm_pin_length":6,
          "fundsource_provider":{
            "name":"HDFC Bank",
            "upi_iin":"600007",
            "upi_enabled":false,
            "mobile_registration_format":"format1",
            "logo_url":"<bank logo url>"
          },
          "primary":true
        },
        {
          "id":"dummyfs1111111",
          "customer_name":"kunal1",
          "masked_account_number":"xxxxxx8990",
          "account_reference_number":"999988126236990",
          "type":"savings",
          "ifsc":"SBI00001",
          "upi_pin_set":true,
          "upi_pin_length":4,
          "otp_length":4,
          "atm_pin_length":6,
          "fundsource_provider":{
            "name":"HDFC Bank",
            "upi_iin":"600007",
            "upi_enabled":false,
            "mobile_registration_format":"format1",
            "logo_url":"<bank logo url>"
          }
        }
      ]
    }
  }
  ```
</ResponseExample>

## Request Parameters

<ParamField body="vpa" type="string" required>
  The VPA that should be linked.
</ParamField>

<ParamField body="fundsources" type="array" required>
  The list of payment sources that should be linked with the requested VPA.
</ParamField>

<ParamField body="fundsource_id" type="string" required>
  The payment source identifier.
</ParamField>

<ParamField body="primary" type="boolean">
  The field to set the given VPA payment source link as primary.

  * `true`: VPA is linked to the payment source.
  * `false`: VPA is not linked to the payment source.
</ParamField>

## Response Parameters

<ResponseField name="entity" type="string">
  The name of the entity. Here, it is `upi.vpa`.
</ResponseField>

<ResponseField name="customer_reference" type="string">
  The customer identifier. You must pass the customer identifier at the TPAP end in this attribute.
</ResponseField>

<ResponseField name="mobile" type="string">
  The mobile number of the VPA linked to the payment source.
</ResponseField>

<ResponseField name="address" type="string">
  The VPA of the customer.
</ResponseField>

<ResponseField name="status" type="string">
  The VPA and payment source linking status. Possible values:

  * `active`
  * `inactive`
</ResponseField>

<ResponseField name="fundsources" type="object">
  Collection of payment sources.
</ResponseField>

<ResponseField name="entity" type="string">
  Indicates the name of the entity.
</ResponseField>

<ResponseField name="count" type="integer">
  Indicates the number of items in the entity type.
</ResponseField>

<ResponseField name="items" type="object">
  Payment source and payment source provider details.
</ResponseField>

<ResponseField name="primary" type="boolean">
  Indicates whether VPA payment source is linked primary.

  * `true`: VPA is linked to the payment source.
  * `false`: VPA is not linked to the payment source.
</ResponseField>

<ResponseField name="id" type="string">
  Unique identifier of the payment source.
</ResponseField>

<ResponseField name="customer_name" type="string">
  Customer name.
</ResponseField>

<ResponseField name="masked_account_number" type="string">
  Masked account number of the payment source.
</ResponseField>

<ResponseField name="account_reference_number" type="string">
  The account reference number.
</ResponseField>

<ResponseField name="type" type="enum">
  Type of the payment source. Possible values:

  * `savings`
  * `current`
  * `non resident ordinary`
  * `non resident ordinary`
  * `secured overdraft`
  * `credit`
  * `ppi`
</ResponseField>

<ResponseField name="ifsc" type="string">
  IFSC of the bank.
</ResponseField>

<ResponseField name="upi_pin_set" type="boolean">
  Indicates whether UPI PIN is set for payment source. Possible values:

  * `true`: UPI PIN is set.
  * `false`: UPI PIN is not set.
</ResponseField>

<ResponseField name="upi_pin_length" type="integer">
  Length of the UPI PIN of the payment source allowed.
</ResponseField>

<ResponseField name="otp_length" type="integer">
  Length of the OTP PIN of the payment source allowed.
</ResponseField>

<ResponseField name="atm_pin_length" type="integer">
  ATM PIN length of the payment source allowed.
</ResponseField>

<ResponseField name="fundsource_provider" type="object">
  Payment source provider details.
</ResponseField>

<ResponseField name="upi_iin" type="string">
  UPI Issuer Identification Numbers (iin) of the payment source provider issued by NPCI.
</ResponseField>

<ResponseField name="name" type="string">
  Name of the payment source (bank account) provider.
</ResponseField>

<ResponseField name="upi_enabled" type="boolean">
  Indicates whether UPI is enabled to the payment source provider. Possible values:

  * `true`: UPI is enabled.
  * `false`: UPI is not enabled.
</ResponseField>

<ResponseField name="mobile_registration_format" type="string">
  Indicates the format as defined by NPCI: `format1`, `format2` and so on.
</ResponseField>

<ResponseField name="logo_url" type="string">
  Indicates the URL of the bank logo.
</ResponseField>
