> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.hopnow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Virtual Account

> Retrieve a single virtual account by its ID

Returns one virtual account with its current status, bank details and balances. This is the endpoint to poll after [Create Virtual Account](/fx/api-reference/virtual-accounts/create-virtual-account): a new virtual account is `pending` with no bank details until the provider issues them.

Requires an API key with `read` access on the `virtual_accounts` scope.

## Path Parameters

<ParamField path="account_id" type="string" required>
  The account's external ID (starts with `acct_`)
</ParamField>

<ParamField path="group_id" type="string" required>
  The [virtual account group](/fx/api-reference/virtual-account-groups/create-group)'s external ID (starts with `vag_`). A group belonging to another account returns `404`.
</ParamField>

<ParamField path="virtual_account_id" type="string" required>
  The virtual account's external ID (starts with `va_`). It must sit in this group on this account: a virtual account in another group of the same account returns `404`.
</ParamField>

## Response

<ResponseField name="id" type="string">
  Virtual account identifier (starts with `va_`)
</ResponseField>

<ResponseField name="object" type="string">
  Always returns `"virtual_account"`
</ResponseField>

<ResponseField name="account_id" type="string">
  Account ID (starts with `acct_`). The response does not repeat `group_id`.
</ResponseField>

<ResponseField name="currency" type="string">
  Currency code of the virtual account
</ResponseField>

<ResponseField name="status" type="string">
  Virtual account status:

  * `pending`: created, bank details not yet issued. Not payable, and not usable as a payout funding source or transfer leg.
  * `active`: bank details issued and `provisioned_at` set. Payable, and usable for [payouts](/fx/api-reference/payouts/create-payout) and [transfers](/fx/api-reference/transfers/create-transfer). Share the bank details in this response with the payer to receive deposits into the virtual account's own balance.
  * `frozen`: balance movements blocked by Hop.
  * `disabled`: closed by Hop; terminal.
</ResponseField>

<ResponseField name="label" type="string">
  Label, or `null`
</ResponseField>

<ResponseField name="balances" type="object">
  Balance buckets, each a decimal string formatted for the currency

  <Expandable title="Balance Fields">
    <ResponseField name="available" type="string">
      Balance free to spend on a payout or transfer
    </ResponseField>

    <ResponseField name="pending_payin" type="string">
      Deposits received but not yet settled
    </ResponseField>

    <ResponseField name="held_for_payout" type="string">
      Amount held for in-flight payouts
    </ResponseField>

    <ResponseField name="total" type="string">
      Total across all buckets
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="beneficiary_name" type="string">
  Account holder a payer should address the deposit to, or `null` while `pending`
</ResponseField>

<ResponseField name="bank_name" type="string">
  Bank holding the account, or `null` while `pending`
</ResponseField>

<ResponseField name="account_number" type="string">
  Full account number, or `null` while `pending` and on accounts identified by IBAN
</ResponseField>

<ResponseField name="account_number_last4" type="string">
  Account number masked as `****` + last 4. The IBAN is masked instead when there is no account number. `null` while `pending`.
</ResponseField>

<ResponseField name="iban" type="string">
  Full IBAN, or `null` while `pending` and on accounts identified by account number
</ResponseField>

<ResponseField name="swift_bic" type="string">
  SWIFT/BIC code, or `null`
</ResponseField>

<ResponseField name="routing_number" type="string">
  Routing number or sort code, or `null`
</ResponseField>

<ResponseField name="routing_number_type" type="string">
  What `routing_number` holds, for example `ROUTING_NUMBER` or `SORT_CODE`; `null` when there is no routing number
</ResponseField>

<ResponseField name="bank_address" type="object">
  Bank address for wire instructions (`address_line`, `city`, `region`, `postal_code`, `country`), or `null`
</ResponseField>

<ResponseField name="beneficiary_address" type="object">
  Account holder address for wire instructions, same shape as `bank_address`, or `null`
</ResponseField>

<ResponseField name="provisioned_at" type="string">
  ISO 8601 timestamp when the bank details became available, or `null` while `pending`. Treat `status` being `active` together with a non-null `provisioned_at` as the signal that the virtual account is ready to receive money.
</ResponseField>

<ResponseField name="created" type="string">
  ISO 8601 timestamp when created
</ResponseField>

<ResponseField name="updated" type="string">
  ISO 8601 timestamp when last updated
</ResponseField>

<ResponseField name="created_by" type="string">
  Actor that created the virtual account: the API key id (starts with `ak_`) when opened through this API, otherwise the actor Hop recorded
</ResponseField>

<ResponseField name="updated_by" type="string">
  Actor that last updated the virtual account, or `null`
</ResponseField>

## Errors

| Status | `code` | When |
| - | - | - |
| `404` | `RESOURCE_NOT_FOUND` | `group_id` is unknown or belongs to another account, or `virtual_account_id` is unknown or sits outside that group |

## Request Example

```bash theme={null}
curl "https://api.hopnow.io/v1/accounts/acct_ka44qsvpo8q3wtzuwfqf0h6u/virtual-account-groups/vag_8p2m5k9t3w6b1r4n7z0c5v3h/virtual-accounts/va_6b3n9k1q4t7w2z5m8p0r3d6f" \
  -H "X-API-Key: your_api_key" \
  -H "X-Signature: hmac_signature" \
  -H "X-Timestamp: 1234567890" \
  -H "X-Nonce: abc123"
```

## Response Example

```json theme={null}
{
  "id": "va_6b3n9k1q4t7w2z5m8p0r3d6f",
  "object": "virtual_account",
  "account_id": "acct_ka44qsvpo8q3wtzuwfqf0h6u",
  "currency": "EUR",
  "status": "active",
  "label": "EU Collections",
  "balances": {
    "available": "250.00",
    "pending_payin": "0.00",
    "held_for_payout": "0.00",
    "total": "250.00"
  },
  "beneficiary_name": "Acme GmbH",
  "bank_name": "Example Bank",
  "account_number": null,
  "account_number_last4": "****3000",
  "iban": "DE89370400440532013000",
  "swift_bic": "DEUTDEFFXXX",
  "routing_number": null,
  "routing_number_type": null,
  "bank_address": {
    "address_line": "1 Bank Street",
    "city": "Frankfurt",
    "region": null,
    "postal_code": "60311",
    "country": "DE"
  },
  "beneficiary_address": {
    "address_line": "22 Hauptstrasse",
    "city": "Berlin",
    "region": null,
    "postal_code": "10115",
    "country": "DE"
  },
  "provisioned_at": "2026-01-15T10:12:00Z",
  "created": "2026-01-15T10:00:00Z",
  "updated": "2026-01-15T10:12:00Z",
  "created_by": "ak_3f7k9m2p5r8t1v4x6z0b3n5q",
  "updated_by": null
}
```
