Skip to main content
List endpoints return one page at a time with an opaque cursor. There is no offset pagination: offsets skip and repeat rows under concurrent writes.

Paginated endpoints

A limit outside the allowed range is refused with 400 VALIDATION_FAILED; it is not clamped. GET /v1/portfolio/positions is not paginated: it returns every active position in one { data, _meta } response, optionally filtered with ?marketId=.

Wire shape

No total count is returned.

Walking pages

Stop when hasMore is false. With the TypeScript SDK, a list call returns a page you can iterate across every page:

Rules for cursors

  • Opaque. Don’t decode or build cursors; the format can change.
  • Per list. A cursor only works on the list that issued it. Passing a cursor from another endpoint returns 400 VALIDATION_FAILED.
  • Keep your filters. A cursor marks a position, not your filters. Send the same filters (status, marketId, …) on every page of one walk; to change filters, start again from the first page.
  • Stable under inserts. Cursors are anchored to the last row you saw, so rows created during a walk never shift it. You won’t see an item twice. Items created after you started appear when you start a new walk from the first page.

Filtering

Each endpoint’s filters are listed on its reference page.

Next

ETags

Conditional requests for cheap polling.

Endpoint reference

Every endpoint, its filters and its limits.