Foreline/Products/Fair-Price Surface

Product 1 · Fair-Price Surface

Every rung of the ladder, priced with a band

The reference market quotes a handful of prices per match. The surface returns the whole ladder — the rungs it quotes and the rungs it doesn't — de-vigged by one documented methodology, with an 80% uncertainty band on every price. Data refreshes about once a minute in the last day before kick-off.

Documented de-vig Full ladder 80% bands As-of history
Request trial Every figure below is a validation act we can open with you, row by row.
What you get

A de-vigged ladder, not a handful of quotes

One snapshot per event, refreshed on a stated cadence: the main line, the fair price of the market, the measured margin, and every rung of the handicap and totals ladders with its own uncertainty band.

  • De-vig by a documented methodology. Margin removal is a written procedure with a stated model, not a tuning knob we adjust per market. The measured margin comes back in the response (vig) so you can see what was removed.
  • The whole ladder, quoted or not. Rungs the reference quotes and rungs it has never quoted arrive in the same array. Each one is tagged src: quote or src: table, so you always know whether you are reading a market price or a modelled one — no silent mixing.
  • An 80% band on every rung (band_pp, in percentage points). The band widens where the ladder is being extended and narrows where it is being measured, which makes it an honest map of where our confidence actually is.
  • Internal consistency. Rungs are read off one ladder, so a price never contradicts its neighbour — validated at zero monotonicity violations (below).
  • As-of-time history for backtests: the surface as it stood at a past timestamp, not as it was later revised.

Per-rung published uncertainty bands are the part we did not find at any of the 30+ vendors covered by our July 2026 market survey. Model internals and data sources stay proprietary — what we publish is the output and the proof.

Validation

What the acts say

Four independent checks: against the full archive, against the realised outcomes, against the live market as it moves, and against time itself.

6.4M
ladder rungs of the full archive re-priced in the offline validation act
78–80%
realised coverage of the 80% bands — at or just under nominal, never above
0
monotonicity violations across the validated archive
  • Bias across the full archive: −0.024 to +0.002 pp. Measured over 6.4M rungs, the surface has no systematic tilt worth a decimal point in either direction — it is not quietly shading one side of the ladder.
  • Band calibration: 78–80% coverage at a nominal 80%. The bands are honest to slightly conservative. A band that covered 60% of outcomes would be marketing; one that covers 78–80% is a usable risk input.
  • Live reconciliation: 8,859 line changes over 13 days. Reconciled against the market as it actually moved, the bias stays balanced at 0.02–0.04 pp — the offline result holds up in production, not only in the archive.
  • Consistency: 0 monotonicity violations. Across the validated archive, no rung is priced in contradiction with the rung next to it. This is what makes the ladder safe to read as a whole rather than one price at a time.
  • Seasonal drift: 40+ months, 2023 through 2026, all inside 0.10 pp. No single season, competition cycle or rule change is carrying the aggregate result.

Each act is reproducible from rows committed in the public ledger — the validation is a document you can audit, not a claim you have to accept.

Coverage & refresh

What is covered, and how fresh it is

Football

Full coverage: every league the reference market quotes, complete handicap and totals ladders, 1X2 and computed derivatives.

Basketball — coming

In final validation (surface already checked against 118,000+ settled games); joins the coverage at the start of the NBA season. Not sold until then — we do not ship half-finished coverage.

Refresh cadence

Every 60 s in the last 24 h before kick-off, every 5 min from 24 to 96 h out, every 15 min beyond that. Each response carries data_cadence_s so your poller can match it.

  • As-of history: football from 2022. Any past timestamp can be read back with ?asof=.
  • Tamper-evident from 23 July 2026. Everything published from that date is hash-chained and Merkle-committed as it is produced. Archive rows that predate the ledger are served as archive — we label the difference instead of blurring it.
  • Licence excludes bettor-facing use; the surface is a B2B pricing input.
Delivery

Four ways to read the same surface

One endpoint, four modes — a summary, one event in full, a historical point, or a bulk delta of everything that changed since your last cursor.

ModeCallUse it forRate class
SummaryGET /v1/surfaceWhat is live right nowpoint · 60/min
Full ladderGET /v1/surface?event_id=One event, every rung with bandspoint · 60/min
Historical pointGET /v1/surface?asof=Backtests, dispute resolutionpoint · 60/min
Bulk deltaGET /v1/surface?since=Keeping a local mirror in syncbulk · 4/min
# one event, full ladder
curl -s "https://api.foreline.io/v1/surface?event_id=EVT_8F3A21" \
  -H "X-Foreline-Key: $FORELINE_KEY"

{
  "event_id": "EVT_8F3A21",
  "market": "handicap",
  "main_line": -0.5,
  "fair_market": 0.5312,
  "vig": 0.0214,
  "data_cadence_s": 60,
  "updated_ts": "2026-07-24T18:41:07Z",
  "rungs": [
    { "line": -1.0,  "p_home": 0.3874, "band_pp": 1.6, "src": "quote" },
    { "line": -0.75, "p_home": 0.4593, "band_pp": 1.9, "src": "table" },
    { "line": -0.5,  "p_home": 0.5312, "band_pp": 1.4, "src": "quote" }
  ]
}

Values in the example are illustrative. Field-by-field semantics are in the API reference; polling limits are explained in Cadence & polling.

Read the API docs →

Proof

You verify it; we don't narrate it

  • Cryptographic ledger. Every published row is hash-chained, every pass is Merkle-committed, and the daily roots are anchored in Bitcoin via OpenTimestamps. Selective disclosure and edits after the fact are not available to us.
  • Public verifier. The proofs and an independent checker live at github.com/foreline-io/foreline-proofs — one command, python3 verify.py, checks the daily roots, the commitment chain and the Bitcoin stamps. No NDA, no integration, no account.
  • A trial on your own reference data is the practical next step: our ladder against the prices you already hold, on your events, for your period.
Get started

Request a trial of the surface

Tell us the sports, the leagues and the period you care about. We reply with a trial key and the validation acts behind the numbers on this page.

Email us

We usually reply within one business day. Pricing is quoted per scope — ask and we will send terms.

Request trial