Service health (incl. DB reachability)
Unauthenticated liveness/readiness probe. 200 when the DB is reachable, 503 otherwise.
Unauthenticated liveness/readiness probe. 200 when the DB is reachable, 503 otherwise.
Response Body
application/json
application/json
curl -X GET "https://example.com/health"{ "status": "ok"}{ "status": "unavailable"}Model transparency metrics (Brier, calibration) GET
Published accuracy of the model — Brier, Brier skill score vs the 0.25 no-skill baseline, and the settled-match sample, per market. A trust surface no competitor publishes. Empty until the validation gate clears (`odds-methodology.md`).
Odds lines (market + model) GET
Time-series odds lines, newest first — the derived market line (`source: "eo_market"`) and the proprietary model line (`source: "eo_model"`; ADR 0009). With `?match={id}` the response is that match's line history, and `?cursor=` pages through it. **Without `?match=` the default is a bulk snapshot** — the latest line per source per open market across the game, the product's headline endpoint for pulling a whole slate in one call; the snapshot is a single page, so it **ignores `?cursor=`** (its `next_cursor` is always null). The movement fields (`open_price`, `delta_since_open`) are computed per response from the line's own series. Market rows appear once the multi-book scrape runs (`EXPOSE_MARKET_ODDS`; at least 2 contributing books per line); model rows only after the model's validation gate clears (`EXPOSE_MODEL_ODDS`) — before then model rows are simply absent, never faked. Raw per-book bookmaker rows are never returned (see the top-level description). **Markets & the `line` field.** Beyond match winner, the endpoint serves the derived line for additional markets as multi-book coverage arrives: `total_maps` (`outcome_key` `over`/`under`, `line` = the games threshold, e.g. `2.5`), `map_handicap` (`outcome_key` `home`/`away`, `line` = the **home team's signed handicap**, e.g. `-1.5`, carried by both complementary legs), and per-map `map_winner`. Because markets are distinguished by `line` as well as market and outcome, the **bulk snapshot may return more than one row per `market_id`** — one per distinct `line`. Each row is still the latest per `(market, outcome, line, source)`.