Every list endpoint is paginated the same way.
| Parameter | Default | Max | Description |
|---|---|---|---|
page | 1 | — | Page number, 1-based. |
per_page | 25 | 100 | Items per page. |
curl "https://<host>/api/public/v1/users?page=2&per_page=50" \
-H "X-Api-Key: $ONWORK_API_KEY"
{
"data": [ ... ],
"pagination": {
"page": 2,
"per_page": 50,
"total": 137,
"total_pages": 3
}
}
Lists are ordered by id ascending. Ids are monotonically increasing, so
new records always append at the end: iterating page by page never skips
or duplicates rows created while you paginate.
For periodic synchronization, avoid re-reading everything: filter with
updated_since (ISO 8601) and keep a high-water mark on your side.
curl "https://<host>/api/public/v1/users?updated_since=2026-07-01T00:00:00Z" \
-H "X-Api-Key: $ONWORK_API_KEY"
Store the timestamp you started the sync at, and pass it as updated_since
on the next run. Overlapping windows are safe — process records
idempotently by id.