before_balance / after_balance and a typed entry_type describing why the balance moved. Use it for cash reconciliation, audit trails, and regulatory reporting.
For real-time push of these same entries, see the Balance Ledger Stream.
Endpoints
Balance ledger endpoints are scoped under
read:positions (not read:funding) to stay consistent with the existing balance-query endpoints (GetAccountBalance, ListAccountBalances). Calls without read:positions fail with 403 Forbidden (REST) / PERMISSION_DENIED (gRPC).Historical Floor
The ledger has a hard historical floor of May 1, 2026 (UTC). Enforcement is defense-in-depth:
start_timeis clamped upstream to the floor when the caller asks for earlier data.- Entries with
update_timebefore the floor are post-filtered from JSON responses.
Cross-Firm Access
The account inaccount=firms/{firm}/accounts/{id} must belong to the caller’s firm (extracted from the JWT firm_id claim).
LedgerEntryType
The balance ledger uses a strict allowlist of entry types. Internal exchange types are suppressed and never reach clients.Allowed Types
Suppressed Types
These Internal types are blocked at the gateway and are never returned to clients.Enforcement
Get Balance Ledger
Query Parameters
Sample Response
BalanceLedgerEntry Fields
Download Balance Ledger
Rate Limits (per firm)
Exceeding these limits returns
ResourceExhausted (429 Too Many Requests).
Error Codes
See Also
Balance Ledger Stream
Real-time gRPC subscription for balance ledger entries
Position Ledger
Position changes (quantity, cost, realized P&L)
Funding Transactions
Deposit / withdrawal state changes
Authentication
Required scopes and OAuth flow