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
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
Next
ETags
Conditional requests for cheap polling.
Endpoint reference
Every endpoint, its filters and its limits.