OddsPapi aggregates bookmaker prices; it is not an official or licensed league-data provider. Settlement is derived from resolved cross-source facts, and futures settlement is rolling out — the endpoint exists but does not yet serve results.
One request, every grade
GET /fixtures/settlement takes a fixtureId (plus optional outcomeId / playerId to narrow) and returns the fixture’s final state with one row per outcome:
team1Score / team2Score are the scores the grade was computed from, periods names the period rows used, and margin is the winning margin where one applies — enough to audit any grade without re-deriving it.
Call it once the fixture reaches statusId 2 (finished). Rows that cannot be graded yet come back as UNDECIDED rather than being omitted — see below.
Grade on the selection, pay on the grade
Bets grade on the bookmaker-independent selection key —{fixtureId}:{outcomeId}:{playerId} — because a selection resolves identically regardless of who quoted it. Drop the bookmaker segment from the oddsId you stored at bet time and the join is done.
What each grade pays, for a 100 stake at 2.00:
The vocabulary is defined in Enumerations → settlementStatus; new enum values are appended, never repurposed, so treat unknown grades as “hold”, not as errors.
Quarter lines: where the half-stake grades come from
An Asian quarter line is two bets in one — Over 2.25 is half your stake on Over 2.0 and half on Over 2.5. The settlement endpoint grades the composite directly instead of making you split it:- Over 2.25, match ends with 2 goals — the Over 2.0 half pushes, the Over 2.5 half loses →
HALFLOSS. A 100 stake gets 50 back. - Under 2.25, match ends with 2 goals — the Under 2.0 half pushes, the Under 2.5 half wins →
HALFWIN. A 100 stake at 1.90 returns 50 + 50 × 1.90 = 145.
marketId like every other line value, so Over 2.25 and Over 2.5 never mix in one market. See sharp-line trading for pricing these markets and Market coverage for where they appear.
Period markets grade on period rows
Period markets — first-half totals, first-set winner, race to a score — grade against the per-period score rows (p1, p2, …), not against the full-time result. The periods array on each settlement row names which rows were used.
Interpret periods against the sport’s structure: p1 is a half in soccer, a quarter in NBA basketball, a set in tennis — expectedPeriods and periodLength on the fixture tell you which, and the full key vocabulary (including combined segments like fulltime+overtime and tennis sub-period keys) is in Enumerations → period.
UNDECIDED and CANCELLED are states, not errors
Both carry a human-readable reason explaining why, and they mean different things operationally:
UNDECIDED— the result data is insufficient or pending. Keep the bet in your settlement queue and re-check later; do not retry in a tight loop — re-poll on a schedule or when the fixture updates.CANCELLED— the market is void and the stake is returned. This is terminal: pay out the refund and close the bet. A fixture moving tostatusId3(cancelled) is the common cause, but individual markets can cancel on their own.
reason — it is the audit trail for why a bet paid the way it did.
Futures
GET /futures/settlement exists but returns 501 — futures settlement is rolling out and not yet serving results. Fixture settlement is unaffected. Until it lands, outright markets need grading from your own result source.
What you can rely on
- Grades land on frozen IDs. The
marketId/outcomeIdyou priced is the one that comes back graded — no name matching, no per-book translation, no remapping when a book renames a market. - Quarter lines settle exactly.
HALFWIN/HALFLOSSare explicit grades with the split-stake math above — never rounded to the nearest full grade. - Nothing disappears silently. Ungradable rows come back
UNDECIDEDwith areason; voids come backCANCELLEDwith areason. Every bet in your queue reaches a terminal, explained state. - The pipeline closes on one key. The same
oddsIdaddresses the live price, its history and closing line, and — minus the bookmaker segment — its grade.