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.

// I pulsanti "Prova" qui sotto usano questi valori.

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.

Base URL
https://api.tuodominio.com   // in locale: http://localhost:8080
Forma di un evento
{
  "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

CampoTipoDescrizione
usernamestringL'username fornito obbl.
passwordstringLa password fornita obbl.
Esempio
curl -X POST $BASE/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"premium@demo","password":"premium123"}'
Risposta
{ "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

ParamTipoDescrizione
apiKeystringLa tua API key obbl.

Header di risposta

HeaderDescrizione
X-Data-AgeSecondi dall'ultimo aggiornamento della cache. Utile per rilevare dati fermi.
Esempio
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

ParamTipoDescrizione
apiKeystringLa tua API key obbl.
Risposta
{
  "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

ParamTipoDescrizione
apiKeystringAPI key di un piano con WS obbl.
Messaggi
// alla connessione
{ "type": "snapshot", "events": [ … ] }
// in continuo
{ "type": "delta", "upserts": [ {evento…} ], "removed": ["evt_…"] }
Esempio (Python)
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

CodiceSignificato
401API key mancante o non valida
402Quota mensile esaurita
429Rate limit superato (vedi Retry-After)
4401 / 4403WebSocket: non autenticato / WS non incluso nel piano