Odds & Player Props
Fair game probabilities
Computes per-book fair probabilities and a cross-book median consensus
from the current fixture odds snapshot. Fair probabilities are emitted
only for a complete mutually exclusive selection set. In particular,
soccer 1X2 requires home, draw, and away prices from the same bookmaker;
a partial board retains quoted/implied prices but has no fair_prob,
overround, or consensus.
Requires the odds entitlement (a paid plan). See Responses & Errors for the success envelope and availability rules.
https://api.sportquanta.com/v1/{league}/games/{id}/odds/fairReference context: WKBL.
Overview · Response conventions
Authorizations
AuthorizationstringheaderrequiredSend a workspace API token in the Authorization: Bearer <token> header.
Path Parameters
leagueenum<string>default:wkblrequiredLeague for this reference section: wkbl.
Available options: wkbl
idstringrequiredQuery Parameters
bookmakerstringComma-separated bookmaker ids to include.
formatenum<string>default:americanAccepted format hint (american by default, or decimal). Current responses retain both explicitly named price fields when available; this parameter does not strip or synthesize prices. Closing consensus_price_decimal remains decimal.
Available options: decimal, american
Response
application/jsonPer-book fair probabilities and selection consensus.
Query validation failed. Depending on the handler, invalid_query_parameter is returned with HTTP 400 or 422. Pre-read validation is non-billable.
Missing or invalid bearer API token.
Access is forbidden: the token lacks api.read scope, the plan lacks an endpoint/bookmaker capability, or configured billing access is inactive. Inspect error.code and details.feature when present.
The id is well-formed but no document has been ingested for it yet.
Query validation failed. Depending on the handler, invalid_query_parameter is returned with HTTP 400 or 422. Pre-read validation is non-billable.
Hourly rate ceiling or monthly quota exceeded. The error code disambiguates
which limit was hit. X-RateLimit-* and X-Requests-*-Month response headers
carry the current state of both counters.
Token validation or an internal handler failed. Token-store failures use api_token_lookup_failed; unsupported internal sport dispatch can use data_layer_unavailable.
The data layer (Mongo / ClickHouse / Redis cache) is temporarily unreachable. The server attempted the lookup; it failed. Retry with backoff. Per the spec's order of evaluation, this DOES consume monthly quota — the request reached step 6.
The configured billing provider could not verify API access. The request is refused before the data handler and does not consume monthly quota.
dataobjectrequireddata.dataobjectrequireddata.data.game_idstringrequireddata.data.snapshot_atstring<date-time>requireddata.data.marketsobject | nullrequiredMap keyed by the exact returned market key. Each value is an array of bookmaker/period entries, each with its selections. Keys can include market variants; discover them from the market catalog and returned data. MARKET_KEY below is a placeholder. An empty map means no matching quotes were returned.
data.data.markets.{key}object[] | nulldata.data.markets.{key}.bookmakerstringrequireddata.data.markets.{key}.participant_idstringdata.data.markets.{key}.player_idstringdata.data.markets.{key}.player_namestringdata.data.markets.{key}.periodstringdata.data.markets.{key}.overroundnumberdata.data.markets.{key}.vig_pctnumberdata.data.markets.{key}.updated_atstring<date-time>requireddata.data.markets.{key}.selectionsobject[] | nullrequireddata.data.markets.{key}.selections.selectionstringrequireddata.data.markets.{key}.selections.linenumberdata.data.markets.{key}.selections.price_decimalnumberDecimal quoted odds, when available. Responses can retain both decimal and American prices; format is a hint and does not guarantee conversion or removal of the other field.
data.data.markets.{key}.selections.price_americanintegerAmerican quoted odds, when available (for example -110 or +150). Responses can retain both price formats; format is a hint and does not guarantee conversion or removal of the other field.
data.data.markets.{key}.selections.implied_probnumberProbability implied by the quoted price, before removing margin.
data.data.markets.{key}.selections.fair_probnumberMargin-normalized probability. Omitted when a complete usable selection set is unavailable.
data.data.consensusobject[] | nullrequireddata.data.consensus.marketstringrequireddata.data.consensus.participant_idstringdata.data.consensus.player_idstringdata.data.consensus.player_namestringdata.data.consensus.periodstringdata.data.consensus.selectionstringrequireddata.data.consensus.linenumberdata.data.consensus.median_fair_probnumberrequiredMedian fair probability across eligible quotes for this selection/line.
data.data.consensus.book_countintegerrequiredNumber of books contributing to this consensus.
_metaobjectResponse request/cache metadata. Optional evidence fields are specific to this handler; cache TTL does not measure source-data freshness.
_meta.request_idstring_meta.served_fromenum<string>Available options: live, cache
_meta.cache_ttl_secondsintegerResponse cache TTL; independent of source freshness. Omitted when zero.
errorobjectrequirederror.codestringrequiredStable machine-readable error code.
error.messagestringrequiredUser-facing error summary.
error.detailsanyOptional error details.