> For the complete documentation index, see [llms.txt](https://ivorypay.gitbook.io/ivorypay-on-off-ramp-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ivorypay.gitbook.io/ivorypay-on-off-ramp-documentation/api-reference-virtual-accounts/list.md).

# List Virtual Accounts

List all virtual accounts for your business.

Returns all virtual accounts created under your business.

## Endpoint

```
GET /v1/virtual-accounts
```

## Authentication

**API key only (JWT not accepted).** This route uses the API-key guard exclusively.

| Header          | Value       |
| --------------- | ----------- |
| `Authorization` | `<api_key>` |

## Example request

{% tabs %}
{% tab title="cURL" %}

```bash
curl -X GET https://ramp-api.ivorypay.io/api/v1/virtual-accounts \
  -H "Authorization: your_api_key"
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const response = await fetch("https://ramp-api.ivorypay.io/api/v1/virtual-accounts", {
  method: "GET",
  headers: {
    "Authorization": "your_api_key",
  },
});

const data = await response.json();
console.log(data);
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

response = requests.get(
    "https://ramp-api.ivorypay.io/api/v1/virtual-accounts",
    headers={
        "Authorization": "your_api_key",
    },
)

print(response.json())
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://ramp-api.ivorypay.io/api/v1/virtual-accounts", nil)
	req.Header.Set("Authorization", "your_api_key")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
```

{% endtab %}
{% endtabs %}

## Example response

```json
{
  "success": true,
  "message": "Virtual accounts retrieved",
  "data": [
    {
      "id": "9b1a3e6f-7c2d-4e5a-8f12-1234567890ab",
      "businessId": "1c2b3a4d-5e6f-7081-9203-abcdef012345",
      "customerIdentifier": "8e8b6f5a-1234-4abc-9def-0fedcba98765",
      "email": "user-one@example.com",
      "customerName": "User One",
      "identityType": "bvn",
      "identityNumber": "22222222222",
      "accountNumber": "9900123456",
      "accountName": "IvoryPay - User One",
      "bankCode": "101",
      "bankName": "Providus Bank",
      "currency": "NGN",
      "processor": "providus",
      "status": "ACTIVE",
      "context": "LIVE",
      "createdAt": "2026-03-26T12:00:00.000Z",
      "updatedAt": "2026-03-26T12:00:00.000Z"
    },
    {
      "id": "a2b1c0d9-e8f7-6543-2109-fedcba987654",
      "businessId": "1c2b3a4d-5e6f-7081-9203-abcdef012345",
      "customerIdentifier": "7d7a5e49-2345-4bcd-aef0-1edcba987654",
      "email": "user-two@example.com",
      "customerName": "User Two",
      "identityType": "nin",
      "identityNumber": "11111111111",
      "accountNumber": "9900654321",
      "accountName": "IvoryPay - User Two",
      "bankCode": "101",
      "bankName": "Providus Bank",
      "currency": "NGN",
      "processor": "providus",
      "status": "ACTIVE",
      "context": "LIVE",
      "createdAt": "2026-03-25T10:00:00.000Z",
      "updatedAt": "2026-03-25T10:00:00.000Z"
    }
  ]
}
```

## Pagination

This endpoint accepts the standard `page` and `limit` query parameters (default `limit=10`, max `100`), but currently returns a plain array under `data` with **no `meta` pagination wrapper**. Only `ACTIVE` virtual accounts scoped to the current business and request context are returned.
