Skip to main content
Every list endpoint returns at most 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

When 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 accept from_ts and to_ts Unix-millisecond filters. Combine them with cursor pagination to backfill long ranges:
  • The range is inclusive on both ends.
  • to_ts must be greater than from_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.