Foreline/Products/Fair-Price Surface
Product 1 · Fair-Price SurfaceEvery 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.
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: quoteorsrc: 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.
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.
- 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.
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.
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.
| Mode | Call | Use it for | Rate class |
|---|---|---|---|
| Summary | GET /v1/surface | What is live right now | point · 60/min |
| Full ladder | GET /v1/surface?event_id= | One event, every rung with bands | point · 60/min |
| Historical point | GET /v1/surface?asof= | Backtests, dispute resolution | point · 60/min |
| Bulk delta | GET /v1/surface?since= | Keeping a local mirror in sync | bulk · 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.
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.
The other three products
Player Radar
Scores accounts on CLV against our close — including on lines the reference never quoted.
See the product →Line Radar
Main-line changes as a fact-stream, plus warnings when your price drifts from fair.
See the product →Parlay Protection
A coherent score matrix, so joint outcomes are priced consistently with the marginals.
See the product →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.
We usually reply within one business day. Pricing is quoted per scope — ask and we will send terms.
Foreline