Skip to main content
GET
Get user balances

Authorizations

X-Monaco-Signature
string
header
required

Ed25519 session-key request signing. Every authenticated request carries three headers: X-Monaco-PublicKey (64-char lowercase-hex session public key), X-Monaco-Timestamp (Unix milliseconds, within 30s of server time), and X-Monaco-Signature (hex ed25519 signature). The signature is over METHOD\npath?query\ntimestamp_ms\nSHA256_hex(body), where the body hash is the SHA-256 of the empty byte string when there is no body. Obtain the session keypair from POST /api/v1/auth/challenge followed by POST /api/v1/auth/verify.

Query Parameters

pageSize
integer<uint32>
default:20

Items per page (max 1000)

Required range: 1 <= x <= 1000
pageToken
string

Pagination cursor with two states:

  • Omitted or empty string (""): start a cursor walk with no prior position, from the lowest token address.
  • Non-empty: an opaque cursor from a previous response's nextPageToken; results resume immediately after that position.

This listing has no database page to walk: it reads every balance row, overlays the matching engine's authoritative amounts (which can add rows the projection has not written yet and drop rows the engine has zeroed), and pages that in-memory set. The walk therefore seeks by KEY on (token, asset_id) — immutable, present on every row including a live-only one — rather than by index, so a balance that appears or vanishes mid-walk no longer shifts the rows behind it across the resume point and duplicate or skipped rows. total and totalPages are exact: the set is bounded by the asset universe, so there is nothing to cap.

Response

OK

balances
object[] | null
total
integer<uint32> | null

Total number of balances

Example:

5

pageSize
integer<uint32> | null

Items per page

Example:

20

totalPages
integer<uint32> | null

Total number of pages

Example:

1

nextPageToken
string | null

Cursor for the next page, minted from the last row of an over-fetched page. The whole set is already in memory, so over-fetching is free and an empty token is the definitive end of the walk.