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

# Create Virtual Account

> Create a virtual account (VBAN / IBAN) for an account in a supported currency

Collect fiat by creating a virtual account (VBAN / IBAN) per currency. Create Virtual Account returns a virtual-account resource immediately, but bank details can take time to become ready. While details are being prepared, the virtual account is returned with `status = pending` and nullable bank-detail fields. Use the `virtual_account.updated` webhook or Get Virtual Account to detect when it becomes `active`.

Once `active`, the virtual account contains full bank details — IBAN, SWIFT/BIC, routing number, and account number where applicable — so your end customers can be paid into named, attributable accounts. Each virtual account also carries its own balance, returned on the object.

| Enum              | Values                                                              |
| ----------------- | ------------------------------------------------------------------- |
| `supported_rails` | `ach`, `fedwire`, `swift`, `sepa`, `spei`, `pix`, `faster_payments` |
| `status`          | `pending`, `active`, `revoked`, `unavailable`                       |

| Status        | Meaning                                                                  | Client action                                                                                            |
| ------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
| `pending`     | The virtual-account resource exists, but bank details are not ready yet. | Do not display deposit instructions yet. Wait for `virtual_account.updated` or poll Get Virtual Account. |
| `active`      | Bank details are available and the virtual account can receive deposits. | Display the returned bank details to the end customer.                                                   |
| `revoked`     | The virtual account was disabled.                                        | Stop accepting future deposits to these details.                                                         |
| `unavailable` | A virtual account cannot be issued for the requested currency or rail.   | Use a different currency, rail, or collection method.                                                    |

Creates a virtual-account resource for the given account in a supported currency. The resource is created synchronously, but bank details may be prepared asynchronously after creation.

<Note>
  Some virtual accounts become `active` during the create request. In that case, the create response already includes the full bank-detail fields shown in Get Virtual Account.
</Note>

## Path Parameters

<ParamField path="id" type="string" required>
  Account id (`acct_…`) that will own the virtual account.
</ParamField>

## Headers

<ParamField header="Idempotency-Key" type="string" required>
  Unique key for this virtual-account create. Re-using a key for the same account returns the previously created virtual account instead of creating a duplicate.
</ParamField>

## Request Body

<ParamField body="currency" type="string" required>
  Currency to collect in (ISO 4217, e.g. `EUR`, `USD`, `GBP`). One virtual account is issued per currency.
</ParamField>

<ParamField body="label" type="string">
  Free-text label for your own reference (e.g. `"EUR Collections"`).
</ParamField>

## Response

Returns `201` with the new virtual-account object. If bank details are still being prepared, the response has `status = pending` and nullable bank-detail fields. Subscribe to `virtual_account.updated` or call Get Virtual Account until the status becomes `active`. See Get Virtual Account for the full field reference.

<RequestExample>
  ```json Request theme={null}
  {
    "currency": "EUR",
    "label": "EUR Collections"
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Response (pending) theme={null}
  {
    "id": "va_7yq2m9p4q1w8e5r3t6y0u2i4",
    "object": "virtual_account",
    "account_id": "acct_3mnq7c1e6a2b4f3c9b8d2e5a",
    "currency": "EUR",
    "status": "pending",
    "beneficiary_name": "Acme GmbH",
    "beneficiary_address": null,
    "bank_name": null,
    "bank_address": null,
    "account_name": null,
    "account_number": null,
    "iban": null,
    "swift_bic": null,
    "routing_number": null,
    "sort_code": null,
    "intermediary_bank_name": null,
    "intermediary_swift_bic": null,
    "supported_rails": [],
    "balance": "0.00",
    "pending_deposit": "0.00",
    "held_for_payment": "0.00",
    "total_balance": "0.00",
    "created": "2026-05-01T10:05:00Z",
    "updated": null
  }
  ```
</ResponseExample>
