Pagination
All list endpoints use opaque cursor-based pagination. No more offset-skipping, no risk of items shifting underneath you as data updates.
Cursor-based pagination
Each list response includes a meta.page object. When has_more is true, pass the cursor to the next request.
{
"games": [ ... ],
"meta": {
"count": 50,
"page": {
"cursor": "eyJpZCI6IjAwMjI1MDA0MTIifQ==",
"has_more": true
}
}
}Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Items per page. Max 100 on most endpoints, 500 on bulk endpoints. |
cursor | string | — | Opaque cursor from previous response. Omit on first call. |
order | string | resource default | Sort direction. Cursors are tied to order — don't change mid-walk. |
Walking through a list
async function fetchAll(client, params) {
const out = [];
let cursor = undefined;
do {
const page = await client.news.list({ ...params, cursor, limit: 100 });
out.push(...page.results);
cursor = page.meta.page.has_more ? page.meta.page.cursor : null;
} while (cursor);
return out;
}Limits and defaults
Cursors expire after 24 hours. If you need to resume a walk later, persist the underlying timestamp filter rather than the cursor.