curl --get --max-time 10 \
--url "https://api.oddswire.io/v1/native/kambi/fixtures" \
--data-urlencode "namespace=$ODDSWIRE_NAMESPACE" \
--data-urlencode "source_id=$SOURCE_ID" \
--header "X-API-Key: $ODDSWIRE_API_KEY"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
query = {"namespace": os.environ["ODDSWIRE_NAMESPACE"], "source_id": os.environ["SOURCE_ID"]}
url = "https://api.oddswire.io/v1/native/kambi/fixtures" + ("?" + 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 url = new URL("https://api.oddswire.io/v1/native/kambi/fixtures");
url.searchParams.set("namespace", required("ODDSWIRE_NAMESPACE"));
url.searchParams.set("source_id", required("SOURCE_ID"));
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": [
{
"capture_id": "<string>",
"evidence_mode": "<string>",
"fresh_for_live_use": true,
"native_event": {},
"native_event_id": "<string>",
"player_prop_count": 123,
"received_at": "2023-11-07T05:31:56Z",
"record_count": 123,
"review_key": "<string>",
"source_id": 4503599627370496,
"unresolved_offer_count": 123
}
],
"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>"
}Kambi native fixtures
Kambi native fixtures: request contract, authentication, parameters and response behavior for the Oddswire private pilot.
curl --get --max-time 10 \
--url "https://api.oddswire.io/v1/native/kambi/fixtures" \
--data-urlencode "namespace=$ODDSWIRE_NAMESPACE" \
--data-urlencode "source_id=$SOURCE_ID" \
--header "X-API-Key: $ODDSWIRE_API_KEY"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
query = {"namespace": os.environ["ODDSWIRE_NAMESPACE"], "source_id": os.environ["SOURCE_ID"]}
url = "https://api.oddswire.io/v1/native/kambi/fixtures" + ("?" + 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 url = new URL("https://api.oddswire.io/v1/native/kambi/fixtures");
url.searchParams.set("namespace", required("ODDSWIRE_NAMESPACE"));
url.searchParams.set("source_id", required("SOURCE_ID"));
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": [
{
"capture_id": "<string>",
"evidence_mode": "<string>",
"fresh_for_live_use": true,
"native_event": {},
"native_event_id": "<string>",
"player_prop_count": 123,
"received_at": "2023-11-07T05:31:56Z",
"record_count": 123,
"review_key": "<string>",
"source_id": 4503599627370496,
"unresolved_offer_count": 123
}
],
"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/native/kambi/fixtures
Set the required IDs from native fixture discovery. Examples read IDs and namespace from your environment; use only values returned for your approved scope.
Authentication · Requests, quota and errors · Coverage and units.Authorizations
Headers
Weak semantic ETag; freshness and access are revalidated before 304.
Query Parameters
retained (default) or founder-only live for sources14/15.
Native namespace: oddswire_bookmakers. Mode does not change this namespace.
Registered source5 BetRivers PA,14 betPARX PA or15 Four Winds MI. Source5 is retained-only; live mode requires a separate approved source14/15 review.
Page size1..100 within grant.
1 <= x <= 100Query, archive and access-bound cursor.
Exact native event ID returned by fixture discovery in the selected source and mode.
Exact capture ID returned by fixture discovery. Required in both modes; rediscover if a live capture is superseded.
legacy (default) or the consistent standard view.
legacy, standard Response
Typed native page. A nonempty eligible native data page costs one credit. Empty native fixture pages and native odds pages without eligible records are free; inspect Usage for final settlement. Errors and 304 are free. Read all missing[] entries.