List balance changes for a period
Every change to this account’s balance in a window, in the order the money moved, with the opening and closing balances for that window in the same response.
GET /transactions returns one row per transaction. This returns one row per change to the balance, and a transaction that moves the balance more than once produces more than one change: an ACH deposit and its later return are two, and a card purchase that clears in two parts is two. Each change’s transactionId names its transaction, so fetch it from GET /transactions/{transactionId} for its type, counterparty, merchant and rail.
The identity to assert: openingBalance + Σ(data[].amount) == closingBalance, summed over every page. The opening and closing balances describe the window rather than the page, so they are the same on every page. Page until hasMore is false, then assert the identity.
startDate and endDate are instants in any timezone, UTC included, and the window is half-open: a change at exactly endDate belongs to the next window. Consecutive windows therefore tile with no gap and no overlap.
A window whose card settlement has not closed is refused with 409 NOT_YET_AVAILABLE, because its figures could still change. Retry once it has settled.
Fees are inside the changes. A fee Grid charges comes out of the balance, so it is already in amount: inside a send’s change, or a change of its own for a withdrawal’s fee. Each change’s fee says how much of its amount was a fee, negative when charged and positive when refunded. To show a fee separately, split the change into amount - fee and fee. Never add fee on top of amount, or the identity stops holding. Card transactions carry no Grid fee.
Authorizations
API token authentication using format <api token id>:<api client secret>
Path Parameters
The id of the internal account to list balance changes for.
Query Parameters
Start of the window, inclusive, in ISO 8601 format. Must carry a timezone, either Z for UTC or an offset.
End of the window, exclusive, in ISO 8601 format. Must carry a timezone, either Z for UTC or an offset, and must not be in the future.
Maximum number of changes to return per page
1 <= x <= 200Cursor for pagination (returned from previous request)
Response
The balance changes in the window, with the balances that bound it
A window of balance changes with the balances that bound it. The opening and closing balances describe the whole window, not the page, so they are the same on every page, and the identity openingBalance + Σ(data[].amount) == closingBalance holds only once every page's data is summed.
Balance changes on this page, ordered by effectiveAt
Start of the window, inclusive
"2026-08-01T00:00:00-05:00"
End of the window, exclusive
"2026-09-01T00:00:00-05:00"
Indicates if more changes are available beyond this page
false
Cursor to retrieve the next page of results (only present if hasMore is true)
"BalanceChange:019542f5-b3e7-1d02-0000-000000000003"
Number of balance changes in the window, across all pages
42