limit rows plus a next_cursor field. Use that cursor to fetch the next page; stop when it is null or absent.
Request shape
Cursors are opaque — do not parse them, decode them, or store them long-term. They embed both the position and any active filters; replaying a cursor with different filters returns
400.
Response shape
next_cursor is null or missing, you have reached the end of the result set.
Iterating a list
Time-range filters
Fills, trades, and balance snapshots acceptfrom_ts and to_ts Unix-millisecond filters. Combine them with cursor pagination to backfill long ranges:
- The range is inclusive on both ends.
to_tsmust be greater thanfrom_ts.- Without a range, list endpoints default to the most recent rows (typically last 24 hours).
Ordering
Within a single result set, rows are ordered by their primary timestamp descending (newest first) unless an endpoint documents otherwise. Daily history endpoints (e.g.GET /v1/accounts/{id}/positions/daily) order ascending by date.
Per-endpoint defaults
Requesting
limit above the maximum returns 400.
Offset pagination (legacy)
A small number of administrative read endpoints under/v1/admin/query/* accept page and page_size instead of cursor. Where both are supported, prefer cursor pagination — offset queries become expensive on long histories and are not guaranteed to be stable across writes.
