curl --request GET \
--url https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"data": {
"game_id": "<string>",
"anchor": "<string>",
"items": [
{
"market": "<string>",
"bookmaker": "<string>",
"selection": "<string>",
"period": "<string>",
"line": 123,
"open_at": "2023-11-07T05:31:56Z",
"close_at": "2023-11-07T05:31:56Z",
"open_price_decimal": 123,
"close_price_decimal": 123,
"open_implied": 123,
"close_implied": 123,
"clv_implied": 123,
"close_anchor": "<string>"
}
]
}
},
"_meta": {
"request_id": "<string>",
"served_from": "live",
"cache_ttl_seconds": 123,
"provenance": {},
"availability": {}
}
}Closing-line value
Open versus close per bookmaker and selection, with the implied probability shift between them.
anchor decides what “close” means:
window(default) — the last tick inside the requested history window. Right for inspecting a window, and it drifts as history ages past the 13-month ClickHouse retention, after which it silently means “the last tick we still have”.closing— the durable closing ledger: each book’s genuine last price before the fixture started. Requires the signals entitlement (Max); without it this parameter returns 403 while the default keeps working.
Each item carries close_anchor under anchor=closing, because a row
the ledger does not cover keeps its window-derived close rather than
disappearing. Dropping it would make the response quietly incomplete.
Needs ClickHouse; returns 502 where odds history is not deployed.
Requires the stats entitlement (a paid plan). See Responses & Errors for the success envelope and availability rules.
curl --request GET \
--url https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportquanta.com/v1/{league}/games/{id}/odds/clv")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"data": {
"game_id": "<string>",
"anchor": "<string>",
"items": [
{
"market": "<string>",
"bookmaker": "<string>",
"selection": "<string>",
"period": "<string>",
"line": 123,
"open_at": "2023-11-07T05:31:56Z",
"close_at": "2023-11-07T05:31:56Z",
"open_price_decimal": 123,
"close_price_decimal": 123,
"open_implied": 123,
"close_implied": 123,
"clv_implied": 123,
"close_anchor": "<string>"
}
]
}
},
"_meta": {
"request_id": "<string>",
"served_from": "live",
"cache_ttl_seconds": 123,
"provenance": {},
"availability": {}
}
}Authorizations
Send a workspace API token in the Authorization: Bearer <token> header.
Path Parameters
League for this reference section: nfl.
nfl Query Parameters
What the close side is taken from.
window, closing Response
Closing-line value per selection.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Difference between closing and opening implied probability.
Source of the closing side, when annotated.
Hide child attributes
Hide child attributes
live, cache Response cache TTL; independent of source freshness. Omitted when zero.
Endpoint-specific availability context, including soccer roster coverage.