The odds board as it stood at an instant
The board as it was actually observed at as_of, one row per market, sportsbook and participant, each carrying the observed_at instant it was recorded and whether that was before kickoff.
NEVER AN EMPTY 200 FOR A PERIOD WE DID NOT OBSERVE. An as_of outside the observed windows is a 422 naming the floor, the ceiling and any gaps, because an empty list cannot be told apart from "no market was offered" and would let a backtest run across a window we have no record of. An in-coverage read that finds nothing IS a 200 with an empty list, and that is a different claim: it means no market was observed at that instant.
COVERAGE IS SHALLOW ON THIS RELATION AND IS NOT THE SAME AS THE PROP ARCHIVE'S. Call /v1/as-of/coverage?relation=odds before relying on a period. Depth differs per relation and per sport, and the two are never blended into one number.
Request
- Base URL: https://api.bigballsdata.com
- URL: https://api.bigballsdata.com/v1/as-of/odds
- Auth: one of:
- API key in header x-api-key
- HTTP bearer
Query parameters
The instant to read the board as of, RFC3339 (e.g. 2026-10-05T23:00:00Z). REQUIRED and has no default: a default of now would make this indistinguishable from a live read.
The match to read, as a bbs_id from /v1/matches. Retired ids are resolved to their canonical match.
Response
ok. { data, meta }. meta.as_of_floor and meta.as_of_ceiling bound what was observed; meta.empty_means states what an empty data means on an in-coverage read.
Changes
No recorded changes to this operation across all 3 revisions of this API.