Matched-board filters
The four filters and the kick-off window on the six matched boards: caps, the trimming rule and dutching.
Also as Markdown.
One route per board
GET /v2/odds/{board} serves standard, 2up, dutching, each-way, extra-place and bog. There is one route per board and no event-id filter on them: per-event reads use GET /v2/odds/event/{id}.
The filters and their caps
Values are comma-separated and lowercased. /v2/sports and /v2/bookmakers list the values.
- sports, at most 20: a sport key or a prefix of one (
soccer,soccer_epl). - bookmakers, at most 40: keeps back offers from those bookmakers.
- exchanges, at most 4: keeps lay offers from those exchanges, each-way win and place included.
- markets, at most 20: keeps those markets.
- commenceTimeFrom and commenceTimeTo: the kick-off window, ISO-8601 UTC. The window is never priced.
The trimming rule
A filtered reply is the whole board filtered by hand. Events are cut by sport and kick-off, then markets, then back offers by bookmaker and lay offers by exchange. An outcome left without a back offer, or without a lay offer, goes; then empty markets, then empty events. Event order stays kick-off, then id.
On dutching a dutch is kept only when every one of its legs is a named venue. A call that leaves nothing is an empty reply, and free.
Unknown and absent values
A value the catalogue doesn't know is a 400 (unknown_sport, unknown_market, unknown_bookmaker, unknown_exchange) listing the valid ones in valid. A known value with nothing on the board today is an empty 200, free. A bookmaker outside the call's region is 403 bookmaker_not_in_region.
No per-price time stamp
Matched offers carry no time of their own. The board's time is meta.processed_at, and meta.last_seen gives each venue and sport's last read. The freshness guide covers both.
Every statement here follows the published contract. The API reference has the full detail.