Integration Flow - Virtual Accounts used as Transfer Wallets

Learn how you can use ZWITCH to create a virtual account used as a transfer wallet from your application.

Functionally, transfer wallets are similar to physical accounts. These transfer wallets also come with an account number and IFSC.

You can only use these transfer wallets to transfer money. You cannot receive payments in this account. Loading money to your virtual account used as a transfer wallet from your bank account is only allowed through a verified remitter account.

Currently, you can only verify and link three accounts to load money

Integrating your application with ZWITCH lets your customer open a virtual account used as a transfer wallet.

Virtual Account Wallet Integration Flow

Virtual Accounts used as a Transfer Wallets Integration Flow

Follow the below steps to create a virtual account used as a transfer wallet.

  1. PAN Verification
  2. Remitter Bank Account Verification
  3. Name Verification
  4. Create a Virtual Account used as a Transfer Wallet

1. PAN Verification

PAN verification is a mandatory requirement to open any bank account. PAN verification allows the applicant to perform high-value transactions and avoid paying double taxes.

Use the below endpoint to verify the PAN.

POST: https://api.zwitch.io/v1/kycs/pan

Below is a sample request and response for the PAN Verification API.

{
  "pan": "AAAAA0000A",
  "merchant_reference_id": "10101101",
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  }
}
{
  "id": "pan_bd1ldpyyMlg7nywIYpjjiklNS",
  "object": "pan_verification",
  "pan": "AAAAA0000A",
  "name_on_pan": "NAME AS PER PAN RECORDS",
  "status": "success",
  "merchant_reference_id": "10101101",
  "message": "PAN Verified",
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  },
  "created_at": 1654155992,
  "is_sandbox": true
}

Refer to our PAN Verification API documentation to learn more.

2. Remitter Bank Account Verification

Use bank account verification to instantly verify the validity and ownership of the bank account. You can only use the verified remitter bank account to load money to your virtual account.

Use the below endpoint to verify the bank account.

POST: https://api.zwitch.io/v1/verifications/bank-account

Below is a sample request and response for the Bank Account Verification API.

{
  "bank_account_number": "10000000000875",
  "bank_ifsc_code": "HDFC0000123",
  "force_penny_drop": true,
  "force_penny_drop_amount": 1,
  "merchant_reference_id": "1000875",
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  }
}
{
  "id": "accver_BhOM01sUb3tXprWwTGBLlKZVG",
  "object": "bank_account_verification",
  "bank_account_number": "10000000000875",
  "bank_ifsc_code": "HDFC0000123",
  "name_as_per_bank": "Anil Reddy",
  "force_penny_drop": true,
  "force_penny_drop_amount": 1,
  "status": "success",
  "message": "",
  "last_verified_at": "2024-01-23",
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  },
  "merchant_reference_id": "1000875",
  "created_at": 1648030636,
  "is_sandbox": true
}

Refer to our Bank Account Verification API documentation to learn more.

3. Name Verification - PAN vs Account Verification API

Use this API to verify the PAN name with their remitter bank account name.

Use the below endpoint to verify the applicant's name.

POST: https://api.zwitch.io/v1/kycs/name-match

Below is a sample request and sample response for the Name Verification - PAN vs Account Verification API.

{
  "type": "pan_vs_account_verification",
  "pan_verification_id": "pan_vTQ7sBPRAApHORmN5PfT3Uk3N",
  "account_verification_id": "accver_wIEhmszz13go8eiUSbYDZlBKu",
  "minimum_match_score": 60.5,
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  }
}
{
  "id": "nm_BbDMJHOVydaXraXQuSWPPquoZ",
  "type": "pan_vs_account_verification",
  "object": "name_match.pan_vs_account_verification",
  "minimum_match_score": 60.5,
  "status": "success",
  "name_as_per_pan": "Anil Reddy",
  "pan_verification_id": "pan_vTQ7sBPRAApHORmN5PfT3Uk3N",
  "account_verification_id": "accver_wIEhmszz13go8eiUSbYDZlBKu",
  "name_as_per_verification": "Anil Reddy",
  "match_score": 70.83,
  "message": "success",
  "review_needed": false,
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  },
  "created_at": 1704868805,
  "updated_at": 1704868805,
  "is_sandbox": true
}

Refer to our Name Verification -PAN vs Account Verification API documentation to learn more.

4. Create a Virtual Account used as a Transfer Wallet

Use this API to create a virtual account used as a transfer wallet.

Use the below endpoint to create a virtual account used as a transfer wallet.

POST: https://api.zwitch.io/v1/accounts

Below is a sample request and sample response for the Create a Virtual Account used as a Transfer Wallet API.

{
  "type": "virtual",
  "used_as": "wallet",
  "name": "Anil Reddy",
  "mobile_number": "9876543210",
  "email": "[email protected]",
  "bank_name": "axis_bank",
  "create_vpa": false,
  "kyc": {
    "city": "Bangalore",
    "postal_code": "560005",
    "state_code": "KA",
    "pan": "AAAPA0000A",
    "business_type": "partnership",
    "pan_verification_id": "pan_bd1ldpyyMlg7nywIYpjjiklNS",
    "business_category": "garage_owners",
    "contact_person": "Rahul Reddy"
  },
  "verified_remitters": [
    {
      "account_verification_id": "accver_BhOM01sUb3tXprWwTGBLlKZVG",
      "name_match_id": "nm_BbDMJHOVydaXraXQuSWPPquoZ"
    }
  ],
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  }
}
{
  "id": "va_RcochEXjFd4TJunK0soMrmoon",
  "object": "account.virtual",
  "type": "virtual",
  "used_as": "wallet",
  "bank_name": "yes_bank",
  "name": "Anil Reddy",
  "mobile_number": "9876543210",
  "email": "[email protected]",
  "account_number": "95153390141232",
  "ifsc_code": "UTIB0CCH274",
  "vpa": null,
  "additional_vpa": [],
  "whitelisted_remitters": [
    {
      "account_number": "91021021021213",
      "ifsc_code": "ICIC0000001"
    }
  ],
  "verified_remitters": [
    {
      "account_verification_id": "accver_BhOM01sUb3tXprWwTGBLlKZVG",
      "name_match_id": "nm_BbDMJHOVydaXraXQuSWPPquoZ"
    }
  ],
  "whitelisted_beneficiaries": [],
  "verified_beneficiaries": [],
  "kyc": {
    "city": "Bangalore",
    "postal_code": "560005",
    "state_code": "KA",
    "pan": "XXXXXX000A",
    "business_type": "partnership",
    "pan_verification_id": "pan_bd1ldpyyMlg7nywIYpjjiklNS",
    "business_category": "garage_owners",
    "contact_person": "Rahul Reddy"
  },
  "customer": {
    "id": "cus_9AZ0Od3RcJLS3PzEtZyqGyL42",
    "mobile_number": "9876543210"
  },
  "metadata": {
    "key_1": "DD",
    "key_2": "XOF"
  },
  "status": "active",
  "created_at": 1681113234,
  "is_sandbox": true,
  "settlement_account_id": null
}

📘

Note:

While creating a virtual account used as a transfer wallet, set the create_vpa argument to false. This is because virtual account used as a transfer wallet do not allow vpa designations on their account.

Refer to our Create Virtual Account used as Transfer Wallet API documentation to learn more.