Le quote sportive
in un'unica API
Quote normalizzate da decine di bookmaker — inclusi gli italiani che le API globali non hanno — in un formato JSON stabile. Per i tuoi modelli, bot e strumenti.
# una richiesta, tutte le quote di un evento curl "https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a" \ -H "x-api-key: odss_live_..." { "count": 118, "offset": 0, "returned": 118, "state": "prematch", "odds": [{ "event_id": "a3f9c1e07b2d4865", "event": "Inter - Milan", "league": "Serie A", "market": "1x2", "commence_time": "2026-08-23T18:45:00Z", "bookmakers": [ { "key":"snai", "outcomes":{"HOME":2.10,"DRAW":3.40,"AWAY":3.60}, "last_update":"2026-07-14T10:32:05Z" }, { "key":"bet365", "outcomes":{"HOME":2.05,"DRAW":3.50,"AWAY":3.70}, "last_update":"2026-07-14T10:28:12Z" } ]}]}
I bookmaker nel feed
Tre mosse per integrare le quote
Crea la chiave
Registrati e genera una chiave odss_live in un minuto. Il piano Free è per sempre, senza carta.
Chiama /odds
Un endpoint, tutte le quote cross-book per evento e mercato. Filtri per sport, lega, mercato e bookmaker.
Integra e sincronizza
event_id stabile per riconoscere gli eventi, last_update per la freschezza, offset per leggere tutto il palinsesto.
Il moat: i book italiani.
I bookmaker ADM che le API globali non hanno
Sisal, SNAI, Eurobet, GoldBet, Planetwin365, Betflag e decine di altri book italiani, letti direttamente. Più bet365, Betfair Exchange e Pinnacle come riferimento sharp.
Schema stabile
Un formato JSON pubblico e versionato: la forma interna del motore non ti arriva mai addosso.
Integrazione affidabile
event_id deterministico per tutta la vita del prematch, last_update ISO per ogni book, paginazione con offset: sync senza sorprese.
Freschezza onesta
I book italiani girano a ciclo continuo e la freschezza reale è misurata e pubblica, book per book, sulla status page; bet365 e Betfair arrivano via feed partner con cadenza di qualche minuto. Ogni quota dichiara il suo last_update: niente numeri stantii spacciati per live.
Il confronto onesto.
Dove ci mettiamo rispetto alle API globali e alla media del mercato. Senza nomi, senza promesse.
Confronto con la media dei provider globali/enterprise valutati (lug 2026). Le voci del nostro lato sono verificabili dagli endpoint pubblici e dalla documentazione.
Bookmaker & leghe
Numeri live, contati dal feed in questo momento — non un inventario di catalogo.
—
bookmaker attivi nel feed
—
sport quotati adesso
—
leghe nel palinsesto
Le leghe nel palinsesto adesso
Dati live dal feed (endpoint pubblico /api/v1/leagues): per ogni sport, le leghe quotate in questo momento. I nomi sono i valori del filtro league.
Carico il palinsesto…
Il palinsesto segue la stagione: d'estate il calcio di club è naturalmente ridotto.
Documentazione
Base URL https://odss-api.com. Autenticazione con header x-api-key: odss_live_… oppure Authorization: Bearer. Risposte JSON, quote decimali europee.
Prima chiamata in 3 passi
Crea la chiave
Registrati e genera una chiave nella dashboard. Il piano Free è per sempre.
Elenca gli sport
Verifica la chiave con una chiamata a /sports.
Chiedi le quote
Chiama /odds con sport e mercato: ricevi le quote cross-book.
GET /api/v1/odds esempio
curl "https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a&limit=5" \ -H "x-api-key: odss_live_..."
const r = await fetch(
"https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a&limit=5",
{ headers: { "x-api-key": "odss_live_..." } }
);
const { count, odds } = await r.json();
import requests
r = requests.get(
"https://odss-api.com/api/v1/odds",
params={"sport": "calcio", "league": "serie a", "limit": 5},
headers={"x-api-key": "odss_live_..."},
)
data = r.json() # { count, offset, returned, state, odds: [...] }
GET /api/v1/odds
Le quote cross-book correnti, raggruppate per evento, mercato e linea. Ogni record elenca i bookmaker con i loro esiti e il timestamp dell'ultimo aggiornamento.
Parametri
| Parametro | Descrizione |
|---|---|
| sport | Filtro esatto sullo sport (es. calcio, tennis, basket). Valori: vedi /api/v1/sports. |
| market | Mercato canonico: 1x2, ou, btts, dc, handicap, moneyline… |
| bookmakers | Lista CSV di chiavi book (es. snai,bet365). Valori: vedi /api/v1/bookmakers. |
| league | Filtro per sottostringa, case-insensitive (es. serie a). Valori: vedi /api/v1/leagues. |
| event_id | Un solo evento, per id esatto. |
| state | prematch (default), live (in-play, con punteggio e minuto) o all (entrambi). Con live, se il motore in-play è spento la lista è vuota e live_enabled=false. |
| limit | Record per pagina. Default 500, max 2000. |
| offset | Indice di partenza per la paginazione. Default 0. |
Campi della risposta
| Campo | Descrizione |
|---|---|
| count | Totale record che soddisfano i filtri (su tutte le pagine). |
| offset · returned | Eco dell'offset richiesto e record effettivamente restituiti in questa pagina. |
| odds[].event_id | Id deterministico dell'evento: identico per tutti i mercati dello stesso incontro e stabile per l'intera finestra prematch. |
| odds[].event | Nome normalizzato dell'evento (Casa - Ospite). |
| odds[].sport · league | Sport e lega/competizione dell'evento. |
| odds[].home_team · away_team | Le due squadre, quando disponibili. |
| odds[].commence_time | Inizio dell'evento, ISO 8601 UTC. |
| odds[].market · line · scope · period | Mercato canonico, eventuale linea (es. 2.5), ambito (es. squadra) e periodo (es. 1° tempo). |
| odds[].state · score · minute | state = prematch o live. Per il live: score (es. "1-0") e minute (es. "63'") correnti. Stesso event_id del prematch → correla la stessa partita nei due stati. |
| …bookmakers[].key | Chiave del bookmaker, con country, playable_it e is_exchange. |
| …bookmakers[].outcomes | Mappa esito → quota decimale (es. HOME: 2.10). |
| …bookmakers[].last_update | Timestamp ISO dell'ultimo aggiornamento riuscito delle quote di quel book. |
Paginazione
Ripeti la chiamata aumentando offset di returned, finché offset + returned < count. Il palinsesto è vivo: count può variare leggermente tra le pagine.
GET /api/v1/odds?sport=calcio&limit=1000&offset=0
GET /api/v1/odds?sport=calcio&limit=1000&offset=1000
# … finché offset + returned < count
GET /api/v1/sports
Gli sport disponibili in questo momento nel feed (i valori del parametro sport).
GET /api/v1/bookmakers
I bookmaker attivi nel feed, con country, playable_it (false per le sharp di riferimento come Pinnacle) e is_exchange (commissione sulla vincita).
GET /api/v1/leagues pubblico, senza chiave
Il palinsesto corrente aggregato: per ogni sport le leghe quotate, con numero di eventi e di bookmaker. Utile per scoprire i valori del filtro league.
GET /api/v1/stream Enterprise
Server-Sent Events: alla connessione un evento hello, poi eventi odds con i record CAMBIATI (stesso schema di /odds) e i rimossi, entro ~10 secondi da quando il motore li rileva — niente polling. Parametro opzionale sport; snapshot iniziale via GET /odds. La cadenza dei dati resta quella del motore (freschezza per book misurata sulla status page; bet365/Betfair via feed partner): lo stream elimina la latenza di polling, fa fede last_update. Max 3 stream concorrenti; la connessione conta 1 richiesta di quota.
GET /api/v1/coverage pubblico, senza chiave
Conteggio dei bookmaker coperti per regione (Italia, USA, UK, mondo).
POST /api/mcp MCP
Server MCP (JSON-RPC 2.0) per agenti AI e connettori (Claude, ChatGPT…). Autenticazione con la stessa chiave (Authorization: Bearer odss_live_… o x-api-key). Tool: get_odds (con state=live), list_sports, list_bookmakers, list_leagues. Solo tools/call consuma quota; l'handshake (initialize/tools/list) è gratis. Stateless: nessuna sessione, ogni richiesta è autosufficiente.
curl -X POST https://odss-api.com/api/mcp \
-H "Authorization: Bearer odss_live_..." -H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_odds","arguments":{"sport":"calcio","state":"live","limit":5}}}'
Webhook Enterprise
Registra una URL (https) dalla dashboard o via API — POST /api/account/webhooks con la sessione account (body {url, sport?, state?}; il secret è mostrato una volta, max 20 per account) — e ricevi le variazioni di quota via POST: stesso payload {changed, removed} dello stream. Ogni consegna è firmata: header X-Odss-Signature: t=<unix>,v1=<hex> = HMAC-SHA256 di "{timestamp}.{body}" col secret del webhook (verifica la firma e rifiuta timestamp vecchi). Solo https, niente redirect seguiti; endpoint che falliscono a ripetizione si auto-disabilitano. Rispondi 2xx per confermare.
Limiti, header ed errori
Ogni risposta autenticata include X-RateLimit-Limit (quota mensile del piano) e X-RateLimit-Remaining. La quota è una finestra mobile di 30 giorni.
| Status | Descrizione |
|---|---|
| 401 | Chiave mancante, non valida o revocata. |
| 403 | Fuori ambito: account sospeso, feed fuori dallo scope della chiave (es. live con chiave solo-prematch) o funzione riservata all'Enterprise (stream, webhook). |
| 429 | Burst: superate le richieste al minuto del piano. Header Retry-After: 60. |
| 429 | Quota mensile esaurita: passa a un piano superiore o attendi la finestra. |
| 502 | Feed momentaneamente non disponibile: riprova con backoff. |
Machine-readable · contratto & agenti
Per generare client, SDK o usare l'API da un agente AI: il contratto OpenAPI 3.1 e una guida sintetica per LLM sono pubblici e sempre allineati.
| Risorsa | Descrizione |
|---|---|
| /openapi.json | Contratto OpenAPI 3.1 (endpoint, parametri, schemi, auth x-api-key). |
| /llms.txt | Guida markdown per LLM (llmstxt.org): riassunto e link alle risorse. |
| /postman_collection.json | Collezione Postman: importala e imposta la variabile x-api-key per provare subito gli endpoint. |
| /sdk/odss_api.py | SDK Python ufficiale (single-file, zero dipendenze): client tipizzato con paginazione automatica e supporto live. |
| /sdk/odss-api.ts | SDK TypeScript ufficiale (single-file, zero dipendenze): tipi, iteratore async e helper per lo stream SSE. |
| /.well-known/api-catalog | Catalogo API (RFC 9727, linkset JSON). |
Licenza d'uso
L'uso interno (modelli, bot, analisi, backtest) è incluso in tutti i piani. La ridistribuzione dei dati — ad esempio mostrarli agli utenti finali di un tuo prodotto — richiede un'autorizzazione scritta: scrivici a [email protected] e definiamo una licenza adatta al tuo caso.
Il piano giusto per il tuo volume.
Stessa copertura per tutti i piani: paghi solo il volume. Inizia gratis, disdici quando vuoi.
Free
Per esplorare l'API. Per sempre, senza carta.
- 500 richieste / mese
- 30 richieste / min
- Copertura completa: tutti gli sport e tutti i book del feed
Starter
Per bot e integrazioni in produzione.
- 50.000 richieste / mese
- 120 richieste / min
- Copertura completa: tutti gli sport e tutti i book del feed
Pro
Per piattaforme e volumi alti.
- 500.000 richieste / mese
- 600 richieste / min
- Priorità di assistenza
Enterprise
Per piattaforme, aziende e rivenditori: configura volume, rate e licenza — il prezzo si aggiorna da solo e attivi in checkout, senza trattative.
Ti autorizza a mostrare i dati agli utenti finali del tuo prodotto (senza, l'uso resta interno). Leggi la licenza →
- Streaming SSE incluso (/api/v1/stream)
- Quota e rate configurati sul tuo account
- Attivazione automatica al pagamento, disdici quando vuoi
Procedendo accetti la Licenza Enterprise e di Redistribuzione (leggibile dal link qui sopra) oltre ai Termini del servizio.
Pagamenti via Stripe · disdetta in un click dal portale · la quota è una finestra mobile di 30 giorni
Domande frequenti.
Posso usare i dati in un prodotto commerciale (SaaS)?
L'uso interno — modelli, bot, analisi, strumenti tuoi — è incluso in tutti i piani. Mostrare i dati agli utenti finali di un tuo prodotto richiede un'autorizzazione scritta: scrivici a [email protected] e definiamo una licenza adatta al tuo volume.
Ogni quanto si aggiornano le quote?
I bookmaker italiani a ciclo continuo — la freschezza REALE, misurata book per book (p50/p95), è pubblica sulla status page; bet365 e Betfair arrivano via feed partner con cadenza di qualche minuto. Non devi fidarti sulla parola: ogni quota nella risposta porta il suo last_update.
C'è un trial dei piani a pagamento?
Il piano Free è per sempre e ha la stessa copertura dei piani a pagamento: è il modo migliore per verificare i dati. Se ti serve più volume per una prova, scrivici a [email protected].
Che differenza c'è con surebett.app?
Stesso motore, due prodotti: odss-api vende le quote grezze normalizzate per costruirci sopra; surebett.app è il prodotto finito, con gli arbitraggi già calcolati e gli stake bilanciati.