List virtual accounts
List the virtual accounts under your account.
The rows arrive in data. Alongside them, pagination reports the total number of accounts matching your filters, plus the limit and offset applied to this page.
Use the query parameters to narrow the list — by status, user_id, type, mode, free text, or metadata — and limit and offset to page through it.
curl --request GET \
--url https://api.balampay.com/sandbox/v1/virtual-accounts \
--header 'Authorization: Bearer <token>' \
--header 'x-api-key: <api-key>'import requests
url = "https://api.balampay.com/sandbox/v1/virtual-accounts"
headers = {
"Authorization": "Bearer <token>",
"x-api-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'x-api-key': '<api-key>'}
};
fetch('https://api.balampay.com/sandbox/v1/virtual-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.balampay.com/sandbox/v1/virtual-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.balampay.com/sandbox/v1/virtual-accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.balampay.com/sandbox/v1/virtual-accounts")
.header("Authorization", "Bearer <token>")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.balampay.com/sandbox/v1/virtual-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "11111111-2222-3333-4444-555555555555",
"user_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"status": "approved",
"type": "US_BANK",
"bank": "austin_capital_trust",
"mode": "fiat",
"destination": null,
"source_deposit_instructions": {
"currency": "usd",
"bank_name": "Example Bank National Association",
"bank_address": "1 Second Street South, St. Cloud, MN, 56301",
"bank_account_number": "1000000001",
"bank_routing_number": "000000001",
"bank_beneficiary_name": "Northwind Trading LLC",
"bank_beneficiary_address": "1 Market Street, San Francisco, CA, 94105"
},
"payment_methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
]
},
"methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
]
},
"account_holder_name": "Northwind Trading LLC",
"account_number": "1000000001",
"routing_number": "000000001",
"bank_name": "Example Bank National Association",
"bank_address": "1 Second Street South, St. Cloud, MN, 56301",
"account_holder_address": "1 Market Street, San Francisco, CA, 94105",
"description": "Operating account",
"created_at": "2026-09-01T12:00:00.000Z",
"updated_at": "2026-09-01T12:04:00.000Z",
"metadata": {}
},
{
"id": "66666666-7777-8888-9999-aaaaaaaaaaaa",
"user_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"status": "approved",
"type": "US_BANK",
"bank": null,
"mode": "crypto",
"destination": {
"currency": "USDC",
"network": "polygon",
"address": "0x0000000000000000000000000000000000000001"
},
"source_deposit_instructions": null,
"payment_methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "disabled"
}
]
},
"methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "disabled"
}
]
},
"created_at": "2026-09-02T09:30:00.000Z",
"updated_at": "2026-09-02T09:30:00.000Z",
"metadata": {
"ledger_ref": "op-4471"
}
}
],
"pagination": {
"total": 53,
"limit": 10,
"offset": 0,
"has_more": true
}
}{
"code": "validation_error",
"message": "Invalid query parameters",
"errors": [
{
"field": "limit",
"message": "Number must be less than or equal to 100"
}
]
}{
"code": "invalid_request",
"message": "The request could not be matched to a valid route, or was malformed. Verify the path and HTTP method against the API reference. This is a routing or request error, not a credentials or signature problem."
}Headers
Version applied to this request. It wins over your account's pinned version — see Versioning.
"2026-04-14"
Query Parameters
How many accounts to return. Between 1 and 100, and 10 when you omit it.
A value outside that range is rejected with a 400.
1 <= x <= 100How many accounts to skip before the first row returned. Use it with limit to walk the list: offset=0, then offset=10, and so on. 0 when you omit it.
x >= 0Filter by account status.
Available options: pending, activating, active, failed, deactivated.
These are not the values you get back on each row — see status in the response.
See Virtual account values for what each one means.
Return only the accounts owned by this user.
Filter by account type.
Available options: US_BANK.
Filter by what happens to a deposit.
Available options: fiat, crypto.
See Virtual account values for what each one means.
Free-text search over the account. Between 1 and 255 characters.
1 - 255Return only the accounts carrying the metadata you name, in the ?metadata[key]=value form. Pass more than one key to require all of them.
Each key is 1 to 40 characters and cannot contain [ or ].
curl --request GET \
--url https://api.balampay.com/sandbox/v1/virtual-accounts \
--header 'Authorization: Bearer <token>' \
--header 'x-api-key: <api-key>'import requests
url = "https://api.balampay.com/sandbox/v1/virtual-accounts"
headers = {
"Authorization": "Bearer <token>",
"x-api-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'x-api-key': '<api-key>'}
};
fetch('https://api.balampay.com/sandbox/v1/virtual-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.balampay.com/sandbox/v1/virtual-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.balampay.com/sandbox/v1/virtual-accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.balampay.com/sandbox/v1/virtual-accounts")
.header("Authorization", "Bearer <token>")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.balampay.com/sandbox/v1/virtual-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "11111111-2222-3333-4444-555555555555",
"user_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"status": "approved",
"type": "US_BANK",
"bank": "austin_capital_trust",
"mode": "fiat",
"destination": null,
"source_deposit_instructions": {
"currency": "usd",
"bank_name": "Example Bank National Association",
"bank_address": "1 Second Street South, St. Cloud, MN, 56301",
"bank_account_number": "1000000001",
"bank_routing_number": "000000001",
"bank_beneficiary_name": "Northwind Trading LLC",
"bank_beneficiary_address": "1 Market Street, San Francisco, CA, 94105"
},
"payment_methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
]
},
"methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
]
},
"account_holder_name": "Northwind Trading LLC",
"account_number": "1000000001",
"routing_number": "000000001",
"bank_name": "Example Bank National Association",
"bank_address": "1 Second Street South, St. Cloud, MN, 56301",
"account_holder_address": "1 Market Street, San Francisco, CA, 94105",
"description": "Operating account",
"created_at": "2026-09-01T12:00:00.000Z",
"updated_at": "2026-09-01T12:04:00.000Z",
"metadata": {}
},
{
"id": "66666666-7777-8888-9999-aaaaaaaaaaaa",
"user_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"status": "approved",
"type": "US_BANK",
"bank": null,
"mode": "crypto",
"destination": {
"currency": "USDC",
"network": "polygon",
"address": "0x0000000000000000000000000000000000000001"
},
"source_deposit_instructions": null,
"payment_methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "disabled"
}
]
},
"methods": {
"inbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "active"
}
],
"outbound": [
{
"name": "WIRE",
"status": "active"
},
{
"name": "ACH",
"status": "disabled"
}
]
},
"created_at": "2026-09-02T09:30:00.000Z",
"updated_at": "2026-09-02T09:30:00.000Z",
"metadata": {
"ledger_ref": "op-4471"
}
}
],
"pagination": {
"total": 53,
"limit": 10,
"offset": 0,
"has_more": true
}
}{
"code": "validation_error",
"message": "Invalid query parameters",
"errors": [
{
"field": "limit",
"message": "Number must be less than or equal to 100"
}
]
}{
"code": "invalid_request",
"message": "The request could not be matched to a valid route, or was malformed. Verify the path and HTTP method against the API reference. This is a routing or request error, not a credentials or signature problem."
}