Get Account Balances
curl --request GET \
--url https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances', 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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances"
req, _ := http.NewRequest("GET", url, nil)
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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"as_of": "<string>",
"balances": [
{
"currency": "<string>",
"currency_type": "<string>",
"available_balance": "<string>",
"available_in_usd": "<string>",
"pending_payout": "<string>",
"pending_payin": "<string>",
"total_balance": "<string>",
"updated_at": "<string>"
}
],
"virtual_accounts": [
{
"virtual_account_id": "<string>",
"currency": "<string>",
"available": "<string>",
"available_in_usd": "<string>",
"pending_payin": "<string>",
"held_for_payout": "<string>",
"total": "<string>"
}
]
}Accounts
Get Account Balances
Retrieve balance information for a specific account
GET
/
v1
/
customers
/
{customer_id}
/
accounts
/
{account_id}
/
balances
Get Account Balances
curl --request GET \
--url https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances', 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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances"
req, _ := http.NewRequest("GET", url, nil)
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.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/customers/{customer_id}/accounts/{account_id}/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"as_of": "<string>",
"balances": [
{
"currency": "<string>",
"currency_type": "<string>",
"available_balance": "<string>",
"available_in_usd": "<string>",
"pending_payout": "<string>",
"pending_payin": "<string>",
"total_balance": "<string>",
"updated_at": "<string>"
}
],
"virtual_accounts": [
{
"virtual_account_id": "<string>",
"currency": "<string>",
"available": "<string>",
"available_in_usd": "<string>",
"pending_payin": "<string>",
"held_for_payout": "<string>",
"total": "<string>"
}
]
}Returns the account’s money in two places:
balances holds the trading account’s balances, one entry per currency, and virtual_accounts holds the balance of each named virtual account the account owns.
Every figure is valued at as_of.
Requires an API key with read access on the accounts scope.
Path Parameters
string
required
The customer’s external ID (starts with
cus_)string
required
The account’s external ID (starts with
acct_)Response
string
Account identifier (starts with
acct_)string
Always returns
"account_balances"string
ISO 8601 timestamp every figure in the response is valued at. Always present.
array
Trading account balances, one entry per currency. Limited to the currencies the account is configured for: a currency enabled for payin, enabled for payout, or on one side of an active FX instrument. Sorted by
updated_at, most recently updated first.Show Balance Fields
Show Balance Fields
string
Currency code from the accepted list, or a crypto currency code such as
USDCstring
Type of currency:
fiat or cryptostring
Amount available for immediate use (decimal string)
string
Available balance valued in USD at
as_of; null when no rate is available for a non-zero balance.string
Amount tied up in outgoing payments (decimal string)
string
Amount expected from incoming payments (decimal string)
string
Total balance including pending amounts (decimal string)
string
ISO 8601 timestamp of the last balance movement
array
Balance of each active virtual account on this account, one entry per virtual account, oldest first. Money here sits on the virtual account, not in the trading account, and the two are never added together in this response: move funds between them with a transfer.An account with no active virtual accounts gets an empty array, not a missing field.
Show Virtual Account Balance Fields
Show Virtual Account Balance Fields
string
Virtual account identifier (starts with
va_)string
Currency the virtual account is denominated in
string
Amount available for immediate use (decimal string)
string
Available balance valued in USD at
as_of; null when no rate is available for a non-zero balance.string
Deposits received but not yet settled (decimal string)
string
Amount held against in-flight payouts (decimal string)
string
Total across all three buckets (decimal string)
Response Example
{
"id": "acct_9f2a7c1e6a2b4f3c9b8d2e5a",
"object": "account_balances",
"as_of": "2026-01-15T12:34:56Z",
"balances": [
{
"currency": "USD",
"currency_type": "fiat",
"available_balance": "10000.50",
"available_in_usd": "10000.50",
"pending_payout": "250.00",
"pending_payin": "500.00",
"total_balance": "10750.50",
"updated_at": "2026-01-15T12:30:00Z"
},
{
"currency": "EUR",
"currency_type": "fiat",
"available_balance": "5000.25",
"available_in_usd": null,
"pending_payout": "0.00",
"pending_payin": "100.00",
"total_balance": "5100.25",
"updated_at": "2026-01-14T08:00:00Z"
}
],
"virtual_accounts": [
{
"virtual_account_id": "va_7c3e9a1d5b2f8e4a6c0d3b7f",
"currency": "USD",
"available": "2500.00",
"available_in_usd": "2500.00",
"pending_payin": "0.00",
"held_for_payout": "150.00",
"total": "2650.00"
},
{
"virtual_account_id": "va_1b6d4f0a8c2e5739b1d4a7c0",
"currency": "EUR",
"available": "980.00",
"available_in_usd": null,
"pending_payin": "20.00",
"held_for_payout": "0.00",
"total": "1000.00"
}
]
}