Returns the odds snapshots recorded for an archived game, optionally narrowed to a book, market and side, or reduced to opening lines.
Returns the odds snapshots recorded for an archived game, optionally narrowed to a book, market and side, or reduced to opening lines.
Each row is the book main line for that market and side at that moment: one line per book, market and side. Alternate rungs and team totals are not stored; a period market (first_half_h2h, first_half_spreads, first_half_totals) is stored under its own key, never under totals or spreads. Rows recorded before the one-line rule was enforced at capture, and rows from the pinnacle_mqtt source, can carry such lines under totals or spreads for some books; dataQuality.mainLineNote repeats this on every response.
inPlay is true when the game was in play when the row was captured and false when it was pre-game. It is absent when the phase was not recorded: every row captured before it was introduced, every cs2 row, and ps3838 or older pinnacle_mqtt rows.
To keep pre-game rows only, compare recordedAt against commenceTime from /history/games; where inPlay is present it is the same test as the book reported it, and is right on a delayed start where the clock alone is not.
pinnacle_mqtt and ps3838 are the real-time Pinnacle sources; pinnacle is the polled book. They are stored as separate books; pinnacle_mqtt holds tennis pre-game from 2026-09-23, from the real-time feed.
priceDecimal carries the exact upstream decimal price for decimal-native books and is null otherwise.
meta.source is archive when a completed game is served from the archive copy and live when it is read on request; the payload shape is identical either way, and meta.archiveBuiltAt says when the archive copy was built.
pointValue is point as a number (null when the market has no point); point itself keeps the type it always had.
Rows whose price could not be stored accurately are excluded; dataQuality explains the filter on every response.
A plural spelling (books, markets, sides) carrying a comma-separated list or an unknown value is not applied; it is reported in meta.ignored_params with the reason. Each filter takes one value; the singular spelling with an unknown value returns 400.
Query parameters this endpoint does not read are reported in meta.ignored_params rather than rejected; a value the endpoint read but could not apply (an unknown market, a comma list where one value is allowed, a book alias with no valid key) is reported too, with the reason in meta.ignored_reasons.
Historical endpoints share a per-key in-flight limit that is lower than the general concurrent-request limit. A request beyond it returns 429 with a Retry-After header giving the delay in seconds; wait that long and resend.
503 with a Retry-After header means the archive could not serve that request: the query was too expensive to run in one request, or the archive read path was busy. Wait the indicated seconds before resending; if it repeats, narrow the request with the filters this endpoint accepts.
Page one event at a time with limit and offset and stop when a page comes back shorter than limit. Do not fan out one request per book or market in parallel.
Pass the event's eventId field, the {sport}:{away}@{home}-{YYYYMMDD} form. The numeric id field beside it is the sportsbook's own and returns 400 here rather than an empty result. The date in eventId is the UTC start date, except for MLB games starting from 2026-10-11T10:00Z, which carry the US Eastern date; earlier MLB games keep the UTC date. Before that change, an MLB game starting at 8 PM ET or later and the next day's game between the same teams could share one eventId. NBA and NHL stay UTC-dated. NBA has about one pair of games a season sharing an eventId. NHL has about one pair a season of the same teams on one date, home and away swapped: two eventIds, but the /api/v1/history endpoints match both orderings, so each id returns both games' rows.
Request
- Base URL: https://api.owlsinsight.com
- URL: https://api.owlsinsight.com/api/v1/history/odds
- Auth: HTTP bearer
Query parameters
Archived game identifier from /history/games.
Restrict to one sportsbook; also accepted as books, one value.
Restrict to one market; also accepted as markets, one value.
Restrict to one side; also accepted as sides, one value.
Earliest snapshot to include: ISO 8601 date or Unix timestamp in milliseconds.
Latest snapshot to include: ISO 8601 date or Unix timestamp in milliseconds.
Page size. Default 1000, maximum 5000.
Number of rows to skip, for pagination.
Set to true to return only the first recorded snapshot per book, market and side (the opening lines).
Response
OK
Changes
No recorded changes to this operation across all 1 revision of this API.