⚡ Odds Aggregator — API v2

API REST + WebSocket temps réel. Multi-sports, multi-sources. B2B Ready

🔑 Authentification

Ajouter le header X-API-Key: votre_cle à chaque requête.

Clé de test: demo_key_001

curl -H "X-API-Key: demo_key_001" \
  https://VOTRE-SERVEUR/api/v1/matches

📡 REST Endpoints

GET/api/v1/health

GET/api/v1/info — Stats provider, versions

GET/api/v1/matches — Tous les matchs

GET/api/v1/matches?source=espn — Filtrer par source

GET/api/v1/matches/{id} — Détail d'un match

GET/api/v1/matches/{id}/odds — Cotes 1X2

GET/api/v1/competitions — Compétitions

GET/api/v1/competitions/{id}/matches — Matchs d'une compétition

GET/api/v1/live/now — En direct

GET/api/v1/history?source=espn&limit=50 — Historique PostgreSQL

🔌 WebSocket

ws://VOTRE-SERVEUR/ws?key=demo_key_001

Connectez-vous avec la clef en paramètre query. Réception des données en temps réel au format JSON :

{
  "type": "update",
  "source": "espn",
  "sport": "NFL",
  "timestamp": "2026-06-29T...",
  "matches": [...]
}

Types d'événements : update (nouvelles données scrappées), heartbeat (toutes les 15s)

📊 Sources de données

SourceSportsCotesFréquence
ESPN APIFoot, NFL, MLB, NHL, NBA, WNBADraftKings ✅30s
BetExplorerFoot, Basket, Hockey, Tennis, Baseball, Volley, Handball1X2 ✅30s
FlashscoreFootball— (scores)60s
UnibetTennis— (scores)150s

📦 Exemple intégration WebSocket

const ws = new WebSocket("wss://VOTRE-SERVEUR/ws?key=demo_key_001");
ws.onmessage = (e) => {
  const data = JSON.parse(e.data);
  if (data.type === "update") {
    console.log(data.matches.length + " matchs mis à jour");
    data.matches.forEach(m => {
      console.log(m.homeTeam, m.odds1, m.oddsX, m.odds2);
    });
  }
};