List Accounts
curl --request GET \
--url https://api.hopnow.io/v1/customers/{customer_id}/accounts \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/customers/{customer_id}/accounts"
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', 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",
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"
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")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/customers/{customer_id}/accounts")
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{
"items": [
{
"id": "<string>",
"object": "<string>",
"customer_id": "<string>",
"name": "<string>",
"status": "<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>"
}
],
"created": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}Accounts
List Accounts
Retrieve all accounts for a customer
GET
/
v1
/
customers
/
{customer_id}
/
accounts
List Accounts
curl --request GET \
--url https://api.hopnow.io/v1/customers/{customer_id}/accounts \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/customers/{customer_id}/accounts"
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', 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",
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"
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")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/customers/{customer_id}/accounts")
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{
"items": [
{
"id": "<string>",
"object": "<string>",
"customer_id": "<string>",
"name": "<string>",
"status": "<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>"
}
],
"created": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}Returns the accounts belonging to a customer, newest first. Deleted accounts are never listed.
Each item is a summary: it carries a balance snapshot but not the account’s identity details. Use Get Account for the full object.
Requires an API key with
read access on the accounts scope.
Path Parameters
string
required
The customer’s external ID (starts with
cus_)Query Parameters
integer
default:"1"
Page number (minimum 1)
integer
default:"10"
Items per page (1-100)
array
Filter by account status. Repeat the key once per value:
?statuses=active&statuses=suspended. Allowed values are active, suspended and deactivated, lowercase; anything else returns 422.string
Return accounts created on or after this timestamp, inclusive (ISO 8601)
string
Return accounts created before this timestamp, exclusive (ISO 8601)
Response
Items are ordered by creation time, newest first.array
Account summary objects, newest first
Show Account Fields
Show Account Fields
string
Account identifier (starts with
acct_)string
Always returns
"account"string
The customer’s external ID
string
The account name
string
Account status:
active, suspended, or deactivatedarray
Balances for the currencies the account is configured for: a currency enabled for payin, enabled for payout, or on one side of an active FX instrument. A currency the account holds no configuration for is not returned even when its balance is zero, and an account with no configured currencies returns
[]. 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
Available balance for transactions (decimal string)
string
Available balance valued in USD at the latest stored rate;
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
string
ISO 8601 timestamp when created. The summary carries no
updated timestamp.integer
Current page number
integer
Items per page
integer
Total number of items
integer
Total number of pages
Errors
| Status | code | When |
|---|---|---|
422 | VALIDATION_ERROR | page or size is out of range, or start_date / end_date is not a valid timestamp |
422 | VALIDATION_ERROR | statuses carries a value that is not active, suspended or deactivated |
Response Example
{
"items": [
{
"id": "acct_9f2a7c1e6a2b4f3c9b8d2e5a",
"object": "account",
"customer_id": "cus_4b1d8e3f7a6c2d9e5f0a1b3c",
"name": "Primary Account",
"status": "active",
"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": "5450.27",
"pending_payout": "0.00",
"pending_payin": "100.00",
"total_balance": "5100.25",
"updated_at": "2026-01-14T08:00:00Z"
}
],
"created": "2026-01-01T00:00:00Z"
},
{
"id": "acct_3c7f1b9e5d2a8406c1e7b3d9",
"object": "account",
"customer_id": "cus_4b1d8e3f7a6c2d9e5f0a1b3c",
"name": "Settlement Account",
"status": "suspended",
"balances": [],
"created": "2025-12-02T00:00:00Z"
}
],
"page": 1,
"size": 10,
"total": 2,
"pages": 1
}