Paging through raw odds
Page through raw odds with a cursor, handle expiry, and fetch only what changed.
Pages and the cursor
GET /v2/odds/raw returns one page of up to 250 events (limit sets fewer), ordered by kick-off then event id. Follow meta.next_cursor until it is null. meta.total is the events matching the query across all pages. Raw is served gzip only.
When a cursor expires
A cursor expires 300 s after it was issued. An expired cursor is 400 with the message cursor expired: start again from the first page.
Duplicates and misses
A cursor resumes strictly after the last event it saw, so an event that leaves the feed between pages never restarts the walk. An event whose kick-off moves across the cursor during a walk can appear twice or be missed: dedupe by event id, and take a missed event on the next walk.
Following changes
Walk again with updatedSince set to the start of your previous walk, as YYYY-MM-DDTHH:MM:SSZ. It keeps the bookmakers whose last_ is at or after it. Each page costs its share of the query's price, so a full walk costs the price once, and a recent updatedSince costs less (the recent rule in /v2/pricing).
Each-way terms on winner markets
Since 4 November 2026, a raw winner market sold each-way, in golf, horse racing or greyhound racing, carries the venue's each-way terms in three fields. They come only with those terms: a win-only market, and every other market, has none of them.
places: the places paidplace_: the place terms as a fraction of the win odds (1/5 is 0.2)fraction extra_:place truewhen the venue pays more places on the market than its standard terms for the event
One market per set of terms
A bookmaker's other each-way terms for the same event are a market of their own, outright_: outright_ pays ten places. outright_ is an exchange's own each-way market. These markets and the three fields are raw only: the each-way and extra-place boards are unchanged, and stay horse racing only.
Keyless GET /v2/coverage lists every raw market key in markets.raw, these included.
From the blog
- The anatomy of an odds API responseEvery field in a /v2 odds response, from the meta envelope down to each back and lay offer.
- How to build an odds screen in PythonCeltic arrives under two spellings and Ferencváros under three, so a screen keyed on names splits rows.
- How to store and version odds dataKeep your own odds history: an append-only table, the feed's timestamps and fixture keys you own.
Every parameter: API reference.