VA Information Parsing

In the BaaS business, a Virtual Account (VA) typically supports multiple underlying clearing networks. To ensure end-users can successfully fund their accounts, your front-end application must clearly display the corresponding routing and account information for each clearing network.

📊 Clearing Networks Comparison

Before displaying receiving information, we recommend guiding users through the differences between clearing channels in your front-end UI. This helps them select the most appropriate transfer method based on their fund size and time constraints. Below is a comparison of mainstream US domestic and cross-border clearing networks:

DimensionSWIFT (International Wire)ACH (Automated Clearing House)WIRE (Fedwire)
ScopeGlobal cross-borderUS DomesticUS Domestic
Speed1-5 business days1-3 daysWithin minutes
Amount SizeLarge amountsSmall/Medium amountsLarge urgent amounts
Real-timeNoNoYes

📦 Full Payload Example

When a VA application is successfully provisioned, you can retrieve the account details by listening to the va.update Webhook event, or by actively calling the Get VA details endpoint.

When the status in the response is active, the account is fully activated. For your understanding, below is a complete JSON payload example of a successful account creation (data is mocked). You need to pay close attention to the bankInfoList array, where each object represents a specific receiving channel:

{
    "vaId": "123e4567-e89b-12d3-a456-426614174000",
    "vaName": "JOHN DOE",
    "currency": "USD",
    "status": "active",
    "statusMessage": "zenus account activated successfully",
    "available": "0.00",
    "createAt": "2026-07-18 00:00:00",
    "updateAt": "2026-07-20 00:00:00",
    "country": "PR",
    "bankName": "JP_MORGAN",
    "payeeType": "global_multi",
    "payeeCurrencies": [
        "USD"
    ],
    "bankInfoList": [
        {
            "accountId": "123e4567-e89b-12d3-a456-426614174001",
            "accountName": "JOHN DOE",
            "bankName": "JP Morgan Chase NA",
            "bankAccountNo": "30000000001",
            "bankAccountType": "alias",
            "bankAddress": {
                "line1": "New York NY, US",
                "postCode": "",
                "city": "",
                "state": "",
                "country": ""
            },
            "bankCode": "",
            "branchCode": "",
            "accountHolderAddress": {
                "line1": "123 Main St, New York, NY, US",
                "postCode": "10001",
                "city": "New York",
                "state": "NY",
                "country": "US"
            },
            "bicSwift": null,
            "routingType": "wire_routing_number",
            "routingNumber": "021000000",
            "middleBankName": "",
            "middleBankBicSwift": "",
            "middleBankRoutingNumber": "",
            "referenceNumber": "",
            "achReferenceNumber": "",
            "achDepositBankAccountNo": "",
            "payeeCurrencies": [
                "USD"
            ],
            "bankCountry": "US",
            "vrnType": "WIRE"
        },
        {
            "accountId": "123e4567-e89b-12d3-a456-426614174001",
            "accountName": "JOHN DOE",
            "bankName": "JP Morgan Chase NA",
            "bankAccountNo": "30000000001",
            "bankAccountType": "alias",
            "bankAddress": {
                "line1": "New York NY, US",
                "postCode": "",
                "city": "",
                "state": "",
                "country": ""
            },
            "bankCode": "",
            "branchCode": "",
            "accountHolderAddress": {
                "line1": "123 Main St, New York, NY, US",
                "postCode": "10001",
                "city": "New York",
                "state": "NY",
                "country": "US"
            },
            "bicSwift": null,
            "routingType": "ach_routing_number",
            "routingNumber": "028000000",
            "middleBankName": "",
            "middleBankBicSwift": "",
            "middleBankRoutingNumber": "",
            "referenceNumber": "30000000001",
            "achReferenceNumber": "30000000001",
            "achDepositBankAccountNo": "866500000",
            "payeeCurrencies": [
                "USD"
            ],
            "bankCountry": "US",
            "vrnType": "ACH"
        },
        {
            "accountId": "123e4567-e89b-12d3-a456-426614174001",
            "accountName": "JOHN DOE",
            "bankName": "Zenus Bank International Inc",
            "bankAccountNo": "40000000002",
            "bankAccountType": "bban",
            "bankAddress": {
                "line1": "Zenus Tower, 19th Floor, 252 Ponce de Leon, San Juan, PR, 00918",
                "postCode": "00918",
                "city": "San Juan",
                "state": "San Juan",
                "country": "PR"
            },
            "bankCode": "",
            "branchCode": "",
            "accountHolderAddress": {
                "line1": "123 Main St, New York, NY, US",
                "postCode": "10001",
                "city": "New York",
                "state": "NY",
                "country": "US"
            },
            "bicSwift": "ZEITPRSJXXX",
            "routingType": "swift_bic",
            "routingNumber": null,
            "middleBankName": "JPMORGAN CHASE BANK, N.A.",
            "middleBankBicSwift": "CHASUS33",
            "middleBankRoutingNumber": "021000021",
            "referenceNumber": "",
            "achReferenceNumber": "",
            "achDepositBankAccountNo": "",
            "payeeCurrencies": [
                "USD"
            ],
            "bankCountry": "US",
            "vrnType": null
        }
    ]
}

📱 UI Field Mapping Examples

To prevent deposit failures for end-users, we strongly recommend implementing a UI flow where the user selects the channel first, and then views the specific account details. Based on the JSON example above, extract and render the corresponding fields on your front-end page:

1. Account Overview

Extract generic top-level fields to display the basic account status:

  • Account Name: JOHN DOE (from vaName)
  • Currency: USD
  • Status: active
  • Bank: JP_Morgan (from bankName)
  • Balance: 0.00 (from available)

2. Method 1: WIRE

Suitable for large, urgent USD deposits; arrives in minutes. Extract the object from the bankInfoList array where routingType is wire_routing_number:

  • Bank Name: JP Morgan Chase NA (from the object's bankName)
  • Bank Address: New York NY, US (from the object's bankAddress.line1)
  • Account No: 30000000001 (from the object's bankAccountNo)
  • Routing Number (Wire): 021000000 (from the object's routingNumber)

3. Method 2: ACH

Suitable for small, batch USD deposits; takes 1-3 days with low fees. Extract the object from the bankInfoList array where routingType is ach_routing_number:

  • Bank Name: JP Morgan Chase NA (from the object's bankName)
  • Account No: 30000000001 (from the object's bankAccountNo)
  • Routing Number (ACH): 028000000 (from the object's routingNumber)
  • ACH Deposit Account No: 866500000 (from the object's achDepositBankAccountNo)

4. Method 3: SWIFT

Suitable for international transfers into this account (Non-US domestic). Extract the object from the bankInfoList array where routingType is swift_bic:

  • Bank Name: Zenus Bank International Inc (from the object's bankName)
  • Bank Address: "line1": "Zenus Tower, 19th Floor, 252 Ponce de Leon, San Juan, PR, 00918","postCode": "00918","city": "San Juan","state": "San Juan","country": "PR" (from the object's bankAddress)
  • Account No (BBAN): 40000000002 (from the object's bankAccountNo)
  • SWIFT BIC: ZEITPRSJXXX (from the object's bicSwift)
  • Intermediary Bank: JPMorgan Chase Bank, N.A. (from the object's middleBankName)
  • Intermediary SWIFT: CHASUS33 (from the object's middleBankBicSwift)

📘

Why do ACH and Wire share the same Account Number?

The account numbers are identical because the funds ultimately land in the exact same physical money pool (the same account). However, the different Routing Numbers indicate that the funds travel through entirely different underlying clearing channels. For analogy:

  • Account Number acts as your Home Address.
  • ACH Routing Number acts like the standard postal service, delivering funds like regular mail to your address (slow but cheap).
  • Wire Routing Number acts like an express courier, delivering funds immediately to the same address (fast but expensive).

❗ Strict Warning: Many major banks (e.g., JPMorgan) use distinct routing numbers for ACH and Wire networks. If a user selects a Wire transfer but inputs the ACH Routing Number, the transaction will directly fail or be returned. The front-end UI must explicitly distinguish between these two routing numbers.


Did this page help you?