All GET collection endpoints are paginated. We support two modes side-by-side: cursor pagination (recommended) and offset pagination (deprecated; sunset 2026-11-04).
Cursor pagination (recommended)
Cursor pagination uses an opaque token to walk forward through results. It is significantly faster than offset pagination on large collections because it does not need to count total records.
To opt in, send page[cursor]= (an empty cursor returns the first page). The response includes meta.page.next_cursor — pass that value back as page[cursor] to fetch the next page.
| Parameter | Default | Description |
|---|---|---|
page[cursor] |
empty | Opaque cursor token returned by the previous request. Send empty (page[cursor]=) for the first page. |
page[size] |
10 |
How many records to return per page. Maximum 100 (or per-resource limit). |
Sample cursor request
curl -X GET \
'https://app.guestmanager.com/api/public/v2/events?page[cursor]=&page[size]=25' \
-H 'Authorization: Token abcdefg' \
-H 'Content-Type: application/json'
Sample cursor response
{
"data": [...],
"meta": {
"count": 25,
"page": {
"size": 25,
"next_cursor": "WyIyMDI2LTA1LTAxVDEyOjMwOjAwWiIsNDIxXQ",
"last": false,
"first": true
},
"links": {
"self": "https://app.guestmanager.com/api/public/v2/events?page[cursor]=&page[size]=25",
"next": "https://app.guestmanager.com/api/public/v2/events?page[cursor]=WyIyMDI2LTA1LTAxVDEyOjMwOjAwWiIsNDIxXQ&page[size]=25"
}
}
}
Cursor response meta
| Field | Type | Description |
|---|---|---|
meta.count |
integer | Number of records returned in this response. |
meta.page.size |
integer | The page size. |
meta.page.next_cursor |
string | Opaque token for the next page. null when there are no more pages. |
meta.page.last |
boolean | true when this is the last page (next_cursor is null). |
meta.page.first |
boolean | true when this is the first page (no cursor was sent in the request). |
meta.links.self |
URL | The original request URL. |
meta.links.next |
URL | URL to fetch the next page. null when there are no more pages. |
Sort behavior under cursor pagination
Cursor pagination orders by (updated_at DESC, id DESC) for SQL-backed endpoints, or your provided sort= parameter with id always appended as a tiebreaker. For Elasticsearch-backed endpoints (search), the cursor encodes the search_after sort values returned by Elasticsearch.
The cursor token is opaque — do not parse, modify, or persist it across API versions. Treat it as a black box that the API gives you and you give back unchanged.
Offset pagination (deprecated)
Deprecation: this mode emits
Deprecation: true,Sunset: Wed, 04 Nov 2026 00:00:00 GMT, and aLink rel="deprecation"header on every response. Migrate to cursor pagination before the sunset date.
| Parameter | Default | Description |
|---|---|---|
page[number] |
1 |
The page to return records for. |
page[size] |
10 |
How many records to return per page. Maximum 100 (or per-resource limit). |
Sample offset response
{
"data": [...],
"meta": {
"count": 10,
"total": 14633,
"page": {
"number": 1,
"size": 10,
"next": 2,
"prev": null,
"total": 1464,
"last": false,
"first": true,
"out_of_range": false
},
"links": {
"self": ".../api/public/v2/events?page[number]=1",
"next": ".../api/public/v2/events?page[number]=2",
"prev": null,
"last": ".../api/public/v2/events?page[number]=1464",
"first": ".../api/public/v2/events?page[number]=1"
}
}
}