PlatformPagination and filters

Pagination and filters

How to page through lists with keyset pagination (cursor/nextCursor) and which filters are shared across list endpoints.

Lists in V3 Custody use cursor-based keyset pagination: you page through results by passing the cursor from the previous page. Unlike offset pagination, keyset pagination is stable under inserts, so rows are never skipped or duplicated between pages.

Keyset pagination

A list returns its items along with the cursor for the next page:

{
  "items": [ ... ],
  "nextCursor": "eyJpZCI6..."
}
  • cursor: pass the previous page's nextCursor here to get the next page.
  • limit: the page size.
  • When nextCursor is empty or missing, there are no more pages.

Sorting

By default, lists are sorted newest first: descending by a time key, with id as a tiebreaker. The cursor follows the same order:

ListSort key (descending)
ledgerpostedAt, id
operations feedcreatedAt, id
counterpartiescreatedAt

Common filters

The available set depends on the endpoint, but the same filters come up repeatedly:

FilterMeaningWhere it's used
from / totime window (by createdAt / postedAt)ledger, feed, counterparties
directionin / outoperations feed
tokenlimit to a tokenbalances, addresses, ledger
statusstatusapproval requests, operations
searchsubstringaddresses, counterparties
access=sharedonly what's shared with youaddresses
mine / pendingMinemine / awaiting my voteapproval requests
userIdadmin: whose activity to showlists with activity

Available filters vary by endpoint. See the page for the specific list in the API Reference for the exact set.

Example: iterate through all pages

# a single page; for the next one, pass nextCursor as ?cursor=
curl "[BASE_URL]/api/v1/vaults/acme-otc/history?direction=in&limit=100" \
  -H "Authorization: Bearer $V3_TOKEN"

Common mistakes

SymptomCause
duplicates or gaps between pagesyou expected offset pagination; this is keyset, so page with the cursor
infinite loopcursor isn't updated from nextCursor
cursor "doesn't work"the cursor came from a different list or sort order; cursors aren't portable
filter is ignoredthis endpoint doesn't support the filter (see the API Reference)
unexpected orderlists are sorted newest first (descending) by default

Next steps