Documentazione API
Feed quote white-label. Tutte le richieste dati si autenticano con la tua API key nel parametro apiKey. La key te la forniamo noi insieme alle credenziali della dashboard.
Introduzione
Il feed espone gli eventi con le quote dei bookmaker a cui il tuo piano dà accesso, in un modello normalizzato e stabile. Gli identificatori sono nostri: non dipendi dalla numerazione di nessuna fonte a monte.
https://api.tuodominio.com // in locale: http://localhost:8080
{
"id": "evt_83fd5327…", // id NOSTRO, opaco
"sport_id": 1, "home": "Inter", "away": "Milan",
"start_time": "2025-10-09T08:53:20Z",
"markets": [
{ "id": "mkt_7e19…", "bet_type_id": 1, "period_id": 1,
"outcomes": [
{ "id": 1, "handicap": null,
"odds": [ {"bookmaker": 1, "value": 2.10}, {"bookmaker": 2, "value": 2.05} ] }
] }
]
}
POST/v1/auth/login
Scambia username e password (le credenziali fornite) con la tua API key e il tuo piano. Usato dalla dashboard; in produzione l'accesso passa da Firebase Auth.
Body
| Campo | Tipo | Descrizione |
|---|---|---|
| username | string | L'username fornito obbl. |
| password | string | La password fornita obbl. |
curl -X POST $BASE/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"premium@demo","password":"premium123"}'
{ "api_key": "demo_premium", "plan": "premium" }
GET/v4/odds_comparison/events
L'endpoint principale: eventi e quote, già filtrati sul tuo scope (book, sport, mercati, freschezza). Quello che il tuo piano non include semplicemente non compare.
Query
| Param | Tipo | Descrizione |
|---|---|---|
| apiKey | string | La tua API key obbl. |
Header di risposta
| Header | Descrizione |
|---|---|
| X-Data-Age | Secondi dall'ultimo aggiornamento della cache. Utile per rilevare dati fermi. |
curl "$BASE/v4/odds_comparison/events?apiKey=$KEY"
GET/v1/account/usage
Stato del pacchetto e consumi in tempo reale: tier, prezzo stimato, book attivi, rate e quota usati, freschezza.
Query
| Param | Tipo | Descrizione |
|---|---|---|
| apiKey | string | La tua API key obbl. |
{
"tier": "premium", "price_eur": 239,
"books_named": ["Sisal","Eurobet","Goldbet","Eplay24","Stanleybet"],
"ws_addon": true,
"rate_per_min": 1200, "used_this_minute": 3,
"quota_month": 5000000, "used_this_month": 184,
"freshness_seconds": 0, "data_age_seconds": 0.4
}
WS/v4/odds_ws
Feed push (piani con add-on WebSocket). Alla connessione ricevi uno snapshot dello stato, poi solo i delta (upsert/removed). I piani senza WS vengono chiusi con codice 4403.
Query
| Param | Tipo | Descrizione |
|---|---|---|
| apiKey | string | API key di un piano con WS obbl. |
// alla connessione
{ "type": "snapshot", "events": [ … ] }
// in continuo
{ "type": "delta", "upserts": [ {evento…} ], "removed": ["evt_…"] }
import asyncio, json, websockets
async def main():
async with websockets.connect("wss://api.tuodominio.com/v4/odds_ws?apiKey=KEY") as ws:
async for raw in ws:
print(json.loads(raw)["type"])
asyncio.run(main())
GET/v1/plans
Listino pubblico: tier, prezzi, book disponibili. Nessuna autenticazione.
Codici di errore
| Codice | Significato |
|---|---|
| 401 | API key mancante o non valida |
| 402 | Quota mensile esaurita |
| 429 | Rate limit superato (vedi Retry-After) |
| 4401 / 4403 | WebSocket: non autenticato / WS non incluso nel piano |