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

# List virtual accounts

> GET /v1/virtual-accounts - every account on your key, filterable and paginated.

<Warning>
  **Not available yet.** This endpoint answers `501 not_implemented`. The banking
  partner integration can open an account and report when it is funded, but cannot
  read one back or amend it, and we will not invent data or pretend the account never
  existed. Keep the details returned by
  [creation](/api-reference/virtual-account-create) until this lands.
</Warning>

Lists the virtual accounts created with your key, newest first. Filter by what an
account accepts, and page through with a cursor.

Needs the virtual-accounts permission on your key - see
[Authentication](/api-reference/authentication).

## Request

<ParamField query="currency" type="string">
  Only accounts accepting this incoming currency, e.g. `EUR`.
</ParamField>

<ParamField query="rail" type="string">
  Only accounts on this incoming rail, e.g. `sepa`.
</ParamField>

<ParamField query="active" type="boolean">
  Only active (`true`) or deactivated (`false`) accounts.
</ParamField>

<ParamField query="limit" type="number">
  How many accounts to return, 1 to 100. Defaults to 20.
</ParamField>

<ParamField query="startingAfter" type="string">
  A virtual account id. Returns the page after it - pass the last id of the
  previous page to get the next one.
</ParamField>

## Response

<ResponseField name="accounts" type="array">
  Account objects, each in the same shape
  [create](/api-reference/virtual-account-create) returns.
</ResponseField>

<ResponseField name="hasMore" type="boolean">
  Whether another page exists. When `true`, call again with `startingAfter` set to
  the last id in `accounts`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl "$RHEON_API/v1/virtual-accounts?currency=EUR&limit=2" \
    -H "Authorization: Bearer $RHEON_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "accounts": [
      {
        "id": "va_8f2c91d0a4",
        "wallet": "0x2222222222222222222222222222222222222222",
        "chain": "arbitrum",
        "asset": "USDC",
        "rail": "sepa",
        "currency": "EUR",
        "reference": "user-84921",
        "details": {
          "iban": "IE25XXXX99035504017602",
          "bankName": "Example Bank",
          "swiftCode": "EXAMPIE2XXX",
          "accountName": "Rheon Payments"
        },
        "feeBps": 25,
        "active": true,
        "createdAt": "2026-08-31T10:00:00Z"
      },
      {
        "id": "va_5d0a17e8b3",
        "wallet": "0x4444444444444444444444444444444444444444",
        "chain": "base",
        "asset": "USDC",
        "rail": "sepa",
        "currency": "EUR",
        "reference": "user-84900",
        "details": {
          "iban": "IE91XXXX99035504012345",
          "bankName": "Example Bank",
          "swiftCode": "EXAMPIE2XXX",
          "accountName": "Rheon Payments"
        },
        "feeBps": 25,
        "active": true,
        "createdAt": "2026-08-30T16:12:00Z"
      }
    ],
    "hasMore": true
  }
  ```
</ResponseExample>

## Errors

| HTTP | `code`              | When                                                     |
| ---- | ------------------- | -------------------------------------------------------- |
| 400  | `invalid_request`   | A filter or pagination parameter is malformed.           |
| 401  | `unauthorized`      | Missing, malformed, or unknown API key.                  |
| 403  | `permission_denied` | Your key does not carry the virtual-accounts permission. |
| 429  | `rate_limited`      | Over your key's rate limit.                              |
| 500  | `internal`          | Unexpected server error.                                 |
