400 (for example, /api/events rejects
offset, cursor, skip, start and pageSize, and
/api/orders/open / /api/orders/history reject any parameter they
don’t define), so only send the parameters listed below.
This page inventories both integration-facing endpoints and first-party
retail endpoints. Rows marked Retail belong to the web app’s
signed-in user session. They are included for completeness, but they
are not part of the API-key integration surface.
General rules
- Treat every
cursoras opaque. PassnextCursorback unchanged; do not parse or construct cursors. - Keep filters and
limitunchanged when following a cursor. beforeis a legacy time cursor on endpoints that also exposecursor; prefercursorfor new integrations.- A page shorter than its requested
limitis the final page when the response does not exposenextCursor— except on/api/events, which has nonextCursororhasMore: keep paging it until a response holds no events. - Limit overflow is endpoint-specific: some endpoints return HTTP
400, while others clamp to their maximum (/api/eventsserves anylimitabove100as100). Follow the endpoint’s own reference when a maximum is listed.
Offset and page-number endpoints
For offset pagination, request the next page with
offset = offset + limit. For /api/events, increment page — see
Events list pages.
Events list pages
Positions are 0-based over the sorted result list.pageandlimittake digits only,1or more; anything else is400 invalid_page/400 invalid_limit.- Beside
page/limit, afrom/tomust be an ISO-8601 date that startsYYYY-MM-DD(2026-10-01, read as 00:00 UTC, or2026-10-01T00:00:00Z). Any other value there is400 ambiguous_pagination: a digits-only position would set the position twice, and a value not written as a date could be read either way. - A response whose request asked for more than 100 events — a
limitabove100, or a digits-onlytomore than 100 pastfrom(fromdefaults to0) — or for no window at all (nopage/limitand no digits-onlyto, which used to mean up to 500 events) carries the headerX-Events-Window-Capped: 100, also on a304. Alimit, or a digits-only span, of 100 or less never carries it. The header describes the request, not the list: it does not mean more events follow, so keep paging until a page comes back empty. Browsers can read it cross-origin; it is in the CORSAccess-Control-Expose-Headersallowlist. - Positions stop at 1,000,000: a page starting deeper is
400 invalid_page, a larger numericfrom/tois400 invalid_from/invalid_to(error.details.maxis1000000). - A digits-only value is always a position.
from=2026means position 2026, not the year 2026, and an epoch-millisecond timestamp is rejected withinvalid_from. Send dates as full ISO-8601 withZor an explicit offset, for example2026-10-01T00:00:00Z. offset,cursor,skip,startandpageSizeare rejected with400(invalid_offset,invalid_cursor,invalid_skip,invalid_start,invalid_page_size;error.details.paramnames the parameter).- There is no
hasMoreor cursor. The first page —page=1,from=0, or nopageand no digits-onlyfrom— also carriestotal, the number of events matching every filter, independent of paging, andopenMarketCount/totalMarketCount, their market counts summed. Later pages carry none of them, except withq, where every page does (withfacets). Treat them as optional: when they cannot be computed in time, the first page comes without them. They are as old as the page they come on (see Events).totalis not a stop signal — keep paging until a page comes back empty.
Walking the whole list
Requestpage=1, 2, 3, … with limit=100 and every other parameter
unchanged. Stop at the first empty page ("events": []). A page
with fewer than 100 events is usually the last one, but not always: an
event can take a slot in a page and then be left out of it (for
example when its markets change status while the page is built), so a
short page can appear mid-list.
-f stops the walk on a 429 or 5xx instead of reading the error
body as an empty page (retry after Retry-After); --compressed cuts a
full page from megabytes to a few hundred KB.
- Do not stop on “shorter than
limit” with alimitabove 100:limit=500returns 100 events per page, so every page is shorter than 500. - If you page with a numeric
from/to, step by 100 (from=0&to=100,from=100&to=200, …). A step of 500 now skips events:from=500&to=1000returns positions 500–599, and positions 100–499 are never read. - Pages are built and cached one by one, not from one snapshot. When
the catalogue changes during a walk, an event can show up on two pages
or be missed. De-duplicate by
id. - To fetch fewer pages, narrow the query instead:
vertical,competition,tag,status=closedor an ISO-8601from/torange all combine withpage/limit.