GET /users?page=2&limit=25Offset pagination is easy to understand, but performance can degrade on large datasets and results may shift during concurrent writes.
Common collection query patterns including offset pagination, cursor pagination, filtering, sorting, and search.
Use stable collection pagination contracts.
GET /users?page=2&limit=25Offset pagination is easy to understand, but performance can degrade on large datasets and results may shift during concurrent writes.
GET /events?limit=100&cursor=eyJpZCI6IjEwMDAifQ==Cursor pagination is often more stable and efficient than offset pagination for append-heavy lists.
{
"data": [/* ... */],
"page": 2,
"limit": 25,
"total": 140,
"next_cursor": null
}Pagination metadata helps clients build pagers and infinite-scroll experiences without guessing.
GET /events?sort=created_at:desc&cursor=...Cursor pagination works best when the ordering is explicit and stable.
Shape collection queries without inventing custom endpoints.
GET /tickets?status=open&priority=highSimple query filtering is easy for clients and caches to understand.
GET /tickets?sort=created_at:descA consistent sort syntax helps consumers avoid one-off endpoint conventions.
GET /users?sort=last_name:asc,first_name:ascSecondary sort keys reduce unstable ordering when many rows share the same primary value.
GET /articles?q=rate%20limitingA simple `q` or `search` parameter is common for free-text search over selected fields.
GET /invoices?created_gte=2026-01-01T00:00:00Z&created_lt=2026-02-01T00:00:00ZExplicit lower and upper bounds are easier to reason about than vague relative date strings.