History & Settlement Signals
Closing lines
Each bookmaker's last price before the fixture started, and the consensus across them.
Distinct from the close side of /odds/clv, which derives its anchor
from the tick history in ClickHouse: that answer drifts as history ages
past the 13-month retention and eventually stops existing. This is a
stored fact that does not move.
consensus_line and consensus_price_decimal are medians, not means:
one book sitting on a stale number drags a mean and leaves a median
alone.
Coverage caveat: "closed at" means the last price we OBSERVED before the start. A book we stopped polling an hour before kickoff contributes its hour-old price, and nothing in the data distinguishes that from a book that genuinely never moved.
Requires the signals entitlement (Max plan). See Responses & Errors for the success envelope and availability rules.
https://api.sportquanta.com/v1/{league}/games/{id}/odds/closingReference 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
bookmakerstringCSV of bookmaker IDs.
marketstringCSV of market keys.
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: american, decimal
Response
application/jsonClosing prices per market and selection.
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 league is unsupported, the endpoint is not available for that sport, or the requested data has not been ingested. Inspect error.code.
Query validation failed. Depending on the handler, invalid_query_parameter is returned with HTTP 400 or 422. Pre-read validation is non-billable.
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.
dataobjectrequireddata.dataobjectrequireddata.data.game_idstringrequireddata.data.leaguestringrequireddata.data.bookmakersstring[] | nullrequireddata.data.marketsobject[] | nullrequireddata.data.markets.marketstringrequireddata.data.markets.periodstringdata.data.markets.selectionstringrequireddata.data.markets.last_bookmakerstringrequireddata.data.markets.last_observed_atstring<date-time>requireddata.data.markets.last_tied_withstring[]data.data.markets.consensus_linenumberdata.data.markets.consensus_price_decimalnumberdata.data.markets.book_countintegerrequireddata.data.markets.booksobject[] | nullrequireddata.data.markets.books.bookmakerstringrequireddata.data.markets.books.observed_atstring<date-time>requireddata.data.markets.books.linenumberdata.data.markets.books.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.books.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.books.source_idstringdata.data.markets.books.originstringdata.data.markets.books.recorded_atstring<date-time>_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.