case "$FIXTURE_ID" in ""|*[!A-Za-z0-9_-]*) echo "Set a valid FIXTURE_ID" >&2; exit 1;; esac
curl --get --max-time 10 \
--url "https://api.oddswire.io/v1/fixtures/$FIXTURE_ID" \
--data-urlencode "namespace=$ODDSWIRE_NAMESPACE" \
--header "X-API-Key: $ODDSWIRE_API_KEY"import re
import os
from urllib.parse import urlencode
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
fixture_id=os.environ["FIXTURE_ID"]
if not re.fullmatch(r"[A-Za-z0-9_-]{1,100}",fixture_id):
raise ValueError("Invalid fixture ID")
query = {"namespace": os.environ["ODDSWIRE_NAMESPACE"]}
url = "https://api.oddswire.io/v1/fixtures/{fixture_id}".replace("{fixture_id}", fixture_id) + ("?" + urlencode(query) if query else "")
request = Request(url, headers={"X-API-Key": os.environ["ODDSWIRE_API_KEY"]})
with build_opener(NoRedirect).open(request, timeout=10) as response:
print(response.read().decode())const required = (name: string) => {
const value = process.env[name];
if (!value) throw new Error(`Set ${name}`);
return value;
};
const fixtureID=required("FIXTURE_ID");
if (!/^[A-Za-z0-9_-]{1,100}$/.test(fixtureID)) throw new Error("Invalid fixture ID");
const url = new URL("https://api.oddswire.io/v1/fixtures/__FIXTURE__".replace("__FIXTURE__",fixtureID));
url.searchParams.set("namespace", required("ODDSWIRE_NAMESPACE"));
const response = await fetch(url, {
headers: {"X-API-Key": required("ODDSWIRE_API_KEY")},
redirect: "error", signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());{
"data": [
{
"competition": "<string>",
"competition_id": 4503599627370496,
"evidence": {
"confirmed_at": "2023-11-07T05:31:56Z",
"delay_seconds": 123,
"fresh_for_live_use": true,
"mode": "<string>",
"received_at": "2023-11-07T05:31:56Z",
"source_at": "2023-11-07T05:31:56Z",
"capture_id": "<string>"
},
"id": "<string>",
"identity_scope": "<string>",
"original": {},
"participants": [
{
"fixture_id": "<string>",
"id": "<string>",
"identity_scope": "<string>",
"identity_verified": true,
"kind": "team",
"name": "<string>",
"original": {},
"role": "<string>",
"source_id": 4503599627370496
}
],
"source_id": 4503599627370496,
"sport": "<string>",
"sport_id": 4503599627370496,
"starts_at": "2023-11-07T05:31:56Z",
"status": "<string>"
}
],
"meta": {
"consistency": "<string>",
"count": 123,
"next_cursor": "<string>",
"request_id": "<string>",
"sent_ts": "2023-11-07T05:31:56Z",
"snapshot_ts": "2023-11-07T05:31:56Z",
"version": "<string>",
"dataset": "<string>",
"namespace": "<string>"
},
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
]
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}Fixture details
Fixture details: request contract, authentication, parameters and response behavior for the Oddswire private pilot.
case "$FIXTURE_ID" in ""|*[!A-Za-z0-9_-]*) echo "Set a valid FIXTURE_ID" >&2; exit 1;; esac
curl --get --max-time 10 \
--url "https://api.oddswire.io/v1/fixtures/$FIXTURE_ID" \
--data-urlencode "namespace=$ODDSWIRE_NAMESPACE" \
--header "X-API-Key: $ODDSWIRE_API_KEY"import re
import os
from urllib.parse import urlencode
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
fixture_id=os.environ["FIXTURE_ID"]
if not re.fullmatch(r"[A-Za-z0-9_-]{1,100}",fixture_id):
raise ValueError("Invalid fixture ID")
query = {"namespace": os.environ["ODDSWIRE_NAMESPACE"]}
url = "https://api.oddswire.io/v1/fixtures/{fixture_id}".replace("{fixture_id}", fixture_id) + ("?" + urlencode(query) if query else "")
request = Request(url, headers={"X-API-Key": os.environ["ODDSWIRE_API_KEY"]})
with build_opener(NoRedirect).open(request, timeout=10) as response:
print(response.read().decode())const required = (name: string) => {
const value = process.env[name];
if (!value) throw new Error(`Set ${name}`);
return value;
};
const fixtureID=required("FIXTURE_ID");
if (!/^[A-Za-z0-9_-]{1,100}$/.test(fixtureID)) throw new Error("Invalid fixture ID");
const url = new URL("https://api.oddswire.io/v1/fixtures/__FIXTURE__".replace("__FIXTURE__",fixtureID));
url.searchParams.set("namespace", required("ODDSWIRE_NAMESPACE"));
const response = await fetch(url, {
headers: {"X-API-Key": required("ODDSWIRE_API_KEY")},
redirect: "error", signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());{
"data": [
{
"competition": "<string>",
"competition_id": 4503599627370496,
"evidence": {
"confirmed_at": "2023-11-07T05:31:56Z",
"delay_seconds": 123,
"fresh_for_live_use": true,
"mode": "<string>",
"received_at": "2023-11-07T05:31:56Z",
"source_at": "2023-11-07T05:31:56Z",
"capture_id": "<string>"
},
"id": "<string>",
"identity_scope": "<string>",
"original": {},
"participants": [
{
"fixture_id": "<string>",
"id": "<string>",
"identity_scope": "<string>",
"identity_verified": true,
"kind": "team",
"name": "<string>",
"original": {},
"role": "<string>",
"source_id": 4503599627370496
}
],
"source_id": 4503599627370496,
"sport": "<string>",
"sport_id": 4503599627370496,
"starts_at": "2023-11-07T05:31:56Z",
"status": "<string>"
}
],
"meta": {
"consistency": "<string>",
"count": 123,
"next_cursor": "<string>",
"request_id": "<string>",
"sent_ts": "2023-11-07T05:31:56Z",
"snapshot_ts": "2023-11-07T05:31:56Z",
"version": "<string>",
"dataset": "<string>",
"namespace": "<string>"
},
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
]
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}{
"code": "<string>",
"detail": "<string>",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
],
"missing": [
{
"detail": "<string>",
"reason": "<string>",
"family": "1x2",
"fixture_id": 4503599627370496,
"quote_key": "<string>",
"source_id": 4503599627370496
}
],
"request_id": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>"
}GET /v1/fixtures/{fixture_id}
Authentication · Requests, quota and errors · Coverage and units.Authorizations
Headers
Weak semantic ETag; freshness and access are revalidated before 304.
Path Parameters
Exact dataset-local fixture ID; native IDs remain strings and require source_id.
Query Parameters
The standard response view; new resources always use it.
standard Explicit dataset namespace or compatible alias: kambi, pilot, sportsbooks.
sportsbooks only: exact reviewed source5/11/12/13/14/15.
Kambi native only: retained (default) or separately approved live.
retained, live Exact Kambi capture from fixture discovery; required for player subjects.
Native source11/12/13 only: delay0..3600.
Response
A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.