Get account balances (bulk, reconciliation-friendly)
Returns the current balance of every trading account in your organization in one compact list — one row per account, balance fields only, no plan/rule/trader/purchase detail.
Use this to reconcile the balances you hold against ours. It is the authoritative post-fill balance, the same value GET /organization/trading-accounts/{id} reports as currentBalance; it just comes back for hundreds of accounts per call instead of one.
Each row:
| Field | Meaning |
|---|---|
currentBalance | Balance after the last booked fill (realized P&L, fees and commissions applied). Open positions are not marked in. |
realizedPnl | currentBalance − initialBalance — what you get by summing pnl − fee − commission over every fill on the account. |
highWaterMark | Highest balance the account has reached (drawdown reference for trailing rules). |
dailyStartingBalance | Balance at the start of the current trading day. |
updatedAt | When the account last changed (fill, status change, day roll). |
Incremental sync:
Store the asOf value from a response and pass it back as ?updatedSince= on the next call; you get only the accounts that changed in between, ordered most-recently-changed first.
Example queries:
# Every account, 500 per page
GET /organization/balances?limit=500
# Just the accounts that changed since your last pass
GET /organization/balances?updatedSince=2026-09-08T13:00:00Z
# A specific set of accounts
GET /organization/balances?accountId=7c9e6679-...,9d1e6679-...
# One customer's accounts
GET /organization/balances?customerId=mffu-cust-4471
Pagination: offset/limit, or follow pagination.nextCursor for stable paging while balances keep moving.
Authorizations
JWT Bearer token for user session auth. Format: "Bearer {token}". Used by User and Organization endpoints.
Query Parameters
Scope to specific accounts: one account UUID or a comma-separated list (max 200). Every ID must belong to your organization, otherwise 404 ACCOUNT_NOT_FOUND.
Exact match on the customerId you set at account creation — all balances for one of your customers.
255Filter by account status
not_started, in_progress, passed, failed, expired Only accounts whose balance or state changed at or after this instant (ISO 8601). Use the asOf value from your previous response to fetch just what moved since then.
Results per page (default: 100, max: 500)
1 <= x <= 500Skip this many results (for pagination)
x >= 0Cursor for pagination. Pass the nextCursor value from the previous response to get the next page. When using cursor, do not send offset — it will be ignored.
How it works: The cursor is an opaque string that points to the last item you received. The server uses it to efficiently fetch the next set of results without scanning previous pages.
Backwards compatible: If you don't send a cursor, offset/limit pagination works as before.
Related topics
Bulk update trading accountsChangelogPayout queue — bulk payout eligibilityIntroductionReconcile a trading day in one call