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.

● book IT a ciclo continuo · freschezza misurata event_id stabile · last_update per quota self-serve · senza carta

GET /api/v1/odds feed live
# 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

01

Crea la chiave

Registrati e genera una chiave odss_live in un minuto. Il piano Free è per sempre, senza carta.

02

Chiama /odds

Un endpoint, tutte le quote cross-book per evento e mercato. Filtri per sport, lega, mercato e bookmaker.

03

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.

sisalsnaieurobetgoldbetplanetwin365+ decine

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.

Caratteristica
odss-api
Media del mercato
Book ADM italiani
Copertura diretta e verificabile (endpoint /coverage e /bookmakers pubblici), freschezza misurata e pubblica (p50/p95 su /status).
Assenti: coprono book esteri (US/UK/offshore), nessun book ADM.
Come si paga
Per account: quota mensile + rate/min. Più book o mercati per evento non aumentano il costo.
Per book simultaneo, o a crediti mercati×regioni: il costo esplode sul multi-book.
Cross-book
event_id deterministico condiviso da tutti i mercati dell'incontro: confronto nativo, matching non euristico.
Spesso quote proprietarie o matching non deterministico.
Freschezza
last_update ISO in chiaro, book per book: sai quanto è recente ogni gamba.
Spesso non esposta per singolo book.
Pronta per gli agenti
OpenAPI 3.1, llms.txt, JSON-LD, /.well-known/api-catalog: un agente la trova e la legge da solo.
Docs dietro login o crawler bloccati, nessuno standard agentico.
Prezzo e avvio
Listino pubblico con Free tier; Enterprise self-serve configurabile. Chiave in un minuto.
Enterprise sales-gated e opachi, oppure self-serve senza book italiani.
Chiavi mirate
Scopabili per sport/lega (es. una chiave "solo calcio"), senza limite di numero.
Non documentato.

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.

Non escludiamo nessuna lega. Seguiamo tutti i bookmaker ADM e mostriamo tutto ciò che quotano: se un book quota una partita, la vedi anche qui — dalle grandi leghe europee alle serie minori e alle competizioni internazionali. Quello che compare dipende dalla stagione e dal periodo: se non ci sono partite, i bookmaker non le quotano, quindi non appaiono. La lista qui sotto è il palinsesto di questo momento.

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

01

Crea la chiave

Registrati e genera una chiave nella dashboard. Il piano Free è per sempre.

02

Elenca gli sport

Verifica la chiave con una chiamata a /sports.

03

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

ParametroDescrizione
sportFiltro esatto sullo sport (es. calcio, tennis, basket). Valori: vedi /api/v1/sports.
marketMercato canonico: 1x2, ou, btts, dc, handicap, moneyline…
bookmakersLista CSV di chiavi book (es. snai,bet365). Valori: vedi /api/v1/bookmakers.
leagueFiltro per sottostringa, case-insensitive (es. serie a). Valori: vedi /api/v1/leagues.
event_idUn solo evento, per id esatto.
stateprematch (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.
limitRecord per pagina. Default 500, max 2000.
offsetIndice di partenza per la paginazione. Default 0.

Campi della risposta

CampoDescrizione
countTotale record che soddisfano i filtri (su tutte le pagine).
offset · returnedEco dell'offset richiesto e record effettivamente restituiti in questa pagina.
odds[].event_idId deterministico dell'evento: identico per tutti i mercati dello stesso incontro e stabile per l'intera finestra prematch.
odds[].eventNome normalizzato dell'evento (Casa - Ospite).
odds[].sport · leagueSport e lega/competizione dell'evento.
odds[].home_team · away_teamLe due squadre, quando disponibili.
odds[].commence_timeInizio dell'evento, ISO 8601 UTC.
odds[].market · line · scope · periodMercato canonico, eventuale linea (es. 2.5), ambito (es. squadra) e periodo (es. 1° tempo).
odds[].state · score · minutestate = 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[].keyChiave del bookmaker, con country, playable_it e is_exchange.
…bookmakers[].outcomesMappa esito → quota decimale (es. HOME: 2.10).
…bookmakers[].last_updateTimestamp 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.

StatusDescrizione
401Chiave mancante, non valida o revocata.
403Fuori ambito: account sospeso, feed fuori dallo scope della chiave (es. live con chiave solo-prematch) o funzione riservata all'Enterprise (stream, webhook).
429Burst: superate le richieste al minuto del piano. Header Retry-After: 60.
429Quota mensile esaurita: passa a un piano superiore o attendi la finestra.
502Feed 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.

RisorsaDescrizione
/openapi.jsonContratto OpenAPI 3.1 (endpoint, parametri, schemi, auth x-api-key).
/llms.txtGuida markdown per LLM (llmstxt.org): riassunto e link alle risorse.
/postman_collection.jsonCollezione Postman: importala e imposta la variabile x-api-key per provare subito gli endpoint.
/sdk/odss_api.pySDK Python ufficiale (single-file, zero dipendenze): client tipizzato con paginazione automatica e supporto live.
/sdk/odss-api.tsSDK TypeScript ufficiale (single-file, zero dipendenze): tipi, iteratore async e helper per lo stream SSE.
/.well-known/api-catalogCatalogo 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.

0per sempre
Inizia gratis
  • 500 richieste / mese
  • 30 richieste / min
  • Copertura completa: tutti gli sport e tutti i book del feed
★ Più scelto

Starter

Per bot e integrazioni in produzione.

79/mese
Scegli Starter
  • 50.000 richieste / mese
  • 120 richieste / min
  • Copertura completa: tutti gli sport e tutti i book del feed

Pro

Per piattaforme e volumi alti.

159/mese
Scegli Pro
  • 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.

199/mese
+€120

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.

Dashboard

Piano attuale
free
Cambia piano
Consumo del mese (account)

La quota è dell'account: vale per tutte le tue chiavi insieme, non per singola chiave.

Genera una chiave

Puoi crearne quante vuoi — condividono la quota dell'account. Restringile a sport o leghe se ti servono chiavi dedicate.

Feed

Le mie chiavi API