Les cotes sportives
dans une seule API
Des cotes normalisées de dizaines de bookmakers — y compris les italiens que les API globales n'ont pas — dans un format JSON stable. Pour vos modèles, bots et outils.
# une requête, toutes les cotes d'un événement 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" } ]}]}
Les bookmakers du flux
Trois étapes pour intégrer les cotes
Créez la clé
Inscrivez-vous et générez une clé odss_live en une minute. Le plan Free est permanent, sans carte.
Appelez /odds
Un endpoint, toutes les cotes cross-book par événement et marché. Filtres par sport, ligue, marché et bookmaker.
Intégrez et synchronisez
event_id stable pour reconnaître les événements, last_update pour la fraîcheur, offset pour lire tout le programme.
L'atout : les books italiens.
Les bookmakers ADM que les API globales n'ont pas
Sisal, SNAI, Eurobet, GoldBet, Planetwin365, Betflag et des dizaines d'autres books italiens, lus directement. Plus bet365, Betfair Exchange et Pinnacle comme référence sharp.
Schéma stable
Un format JSON public et versionné : la forme interne du moteur n'atteint jamais votre code.
Intégration fiable
event_id déterministe pendant toute la fenêtre prématch, last_update ISO par book, pagination par offset : des syncs sans surprises.
Fraîcheur honnête
Les books italiens sont relus en cycle continu — fraîcheur réelle mesurée sur la status page ; bet365 et Betfair arrivent via des flux partenaires avec une cadence de quelques minutes. Chaque cote déclare son last_update : pas de chiffres périmés déguisés en live.
La comparaison honnête.
Où nous nous situons face aux API globales et à la moyenne du marché. Sans noms, sans promesses.
Comparaison avec la moyenne des fournisseurs globaux/enterprise évalués (juil. 2026). Notre côté est vérifiable depuis les endpoints publics et la documentation.
Bookmakers & ligues
Des chiffres live, comptés depuis le flux à l'instant — pas un inventaire de catalogue.
—
bookmakers actifs dans le flux
—
sports cotés en ce moment
—
ligues au programme
Les ligues au programme maintenant
Données live du flux (endpoint public /api/v1/leagues) : pour chaque sport, les ligues cotées en ce moment. Les noms sont les valeurs du filtre league.
Chargement du programme…
Le programme suit la saison : en été, le football de clubs est naturellement réduit.
Documentation
Base URL https://odss-api.com. Authentification via l'en-tête x-api-key: odss_live_… ou Authorization: Bearer. Réponses JSON, cotes décimales européennes.
Premier appel en 3 étapes
Créez la clé
Inscrivez-vous et générez une clé dans le tableau de bord. Le plan Free est permanent.
Listez les sports
Vérifiez la clé avec un appel à /sports.
Demandez les cotes
Appelez /odds avec sport et marché : vous obtenez les cotes cross-book.
GET /api/v1/odds exemple
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
Les cotes cross-book actuelles, regroupées par événement, marché et ligne. Chaque enregistrement liste les bookmakers avec leurs issues et l'horodatage de leur dernière mise à jour.
Paramètres
| Paramètre | Description |
|---|---|
| sport | Filtre exact sur le sport (ex. calcio, tennis, basket). Valeurs : voir /api/v1/sports. |
| market | Marché canonique : 1x2, ou, btts, dc, handicap, moneyline… |
| bookmakers | Liste CSV de clés book (ex. snai,bet365). Valeurs : voir /api/v1/bookmakers. |
| league | Filtre par sous-chaîne, insensible à la casse (ex. serie a). Valeurs : voir /api/v1/leagues. |
| event_id | Un seul événement, par id exact. |
| state | prematch (par défaut), live (in-play, avec score et minute actuels) ou all (les deux). Avec live, si le moteur in-play est éteint la liste est vide et live_enabled=false. Si la clé a un périmètre de flux (prématch seul ou live seul), un state hors périmètre renvoie 403 et all se replie sur l'état autorisé. |
| limit | Enregistrements par page. Défaut 500, max 2000. |
| offset | Index de départ pour la pagination. Défaut 0. |
Champs de la réponse
| Champ | Description |
|---|---|
| count | Total des enregistrements correspondant aux filtres (toutes pages). |
| offset · returned | Écho de l'offset demandé et enregistrements renvoyés dans cette page. |
| odds[].event_id | Id déterministe de l'événement : identique pour tous les marchés du même match et stable pendant toute la fenêtre prématch. |
| odds[].event | Nom normalisé de l'événement (Domicile - Extérieur). |
| odds[].sport · league | Sport et ligue/compétition de l'événement. |
| odds[].home_team · away_team | Les deux équipes, quand disponibles. |
| odds[].commence_time | Début de l'événement, ISO 8601 UTC. |
| odds[].market · line · scope · period | Marché canonique, ligne éventuelle (ex. 2.5), portée (ex. équipe) et période (ex. 1re mi-temps). |
| odds[].state · score · minute | state = prematch ou live. Pour le live : score (ex. « 1-0 ») et minute (ex. « 63' ») actuels. Même event_id que le prématch → corrèle le même match dans les deux états. |
| …bookmakers[].key | Clé du bookmaker, avec country, playable_it et is_exchange. |
| …bookmakers[].outcomes | Carte issue → cote décimale (ex. HOME: 2.10). |
| …bookmakers[].last_update | Horodatage ISO de la dernière mise à jour réussie de ce book. |
Pagination
Répétez l'appel en augmentant offset de returned, tant que offset + returned < count. Le programme est vivant : count peut varier légèrement entre les pages.
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
Les sports disponibles en ce moment dans le flux (les valeurs du paramètre sport).
GET /api/v1/bookmakers
Les bookmakers actifs dans le flux, avec country, playable_it (false pour les références sharp comme Pinnacle) et is_exchange (commission sur les gains).
GET /api/v1/leagues public, sans clé
Le programme actuel agrégé : pour chaque sport, les ligues cotées, avec nombre d'événements et de bookmakers. Utile pour découvrir les valeurs du filtre league.
GET /api/v1/stream Enterprise
Server-Sent Events : un événement hello à la connexion, puis des événements odds avec les enregistrements MODIFIÉS (même schéma que /odds, chacun avec son state) et les supprimés, sous ~10 secondes après leur détection par le moteur — pas de polling. Paramètres optionnels sport et state (prematch|live|all) ; snapshot initial via GET /odds?state=…. La cadence des données reste celle du moteur (fraîcheur par book mesurée sur la status page ; bet365/Betfair via feeds partenaires) : le stream supprime la latence de polling, last_update fait foi. Max 3 streams concurrents ; la connexion compte pour 1 requête de quota.
GET /api/v1/coverage public, sans clé
Inventaire du catalogue de bookmakers par région. C'est un décompte de catalogue, pas la liste des books actifs dans le flux : pour cela, utilisez /api/v1/bookmakers ou /api/v1/leagues.
POST /api/mcp MCP
Serveur MCP (JSON-RPC 2.0) pour agents IA et connecteurs (Claude, ChatGPT…). Auth avec la même clé (Authorization: Bearer odss_live_… ou x-api-key). Outils : get_odds (avec state=live), list_sports, list_bookmakers, list_leagues. Seul tools/call consomme du quota ; le handshake est gratuit. Stateless.
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
Enregistrez une URL (https) depuis le tableau de bord ou via l'API — POST /api/account/webhooks avec la session compte (body {url, sport?, state?} ; le secret n'est montré qu'une fois, max 20 par compte) — et recevez les changements de cotes par POST — même payload {changed, removed} que le flux. Chaque livraison est signée : X-Odss-Signature: t=<unix>,v1=<hex> = HMAC-SHA256 de «{timestamp}.{body}» avec le secret (vérifiez-la, rejetez les vieux timestamps). https uniquement, pas de redirections ; les endpoints en échec se désactivent. Répondez 2xx.
Limites, en-têtes et erreurs
Chaque réponse authentifiée inclut X-RateLimit-Limit (quota mensuel du plan) et X-RateLimit-Remaining. Le quota est une fenêtre glissante de 30 jours.
| Status | Description |
|---|---|
| 401 | Clé absente, invalide ou révoquée. |
| 403 | Hors périmètre : compte suspendu, flux hors du périmètre de la clé (ex. live avec une clé prématch seul) ou fonction réservée à l'Enterprise (stream, webhooks). |
| 429 | Burst : requêtes par minute du plan dépassées. En-tête Retry-After: 60. |
| 429 | Quota mensuel épuisé : passez au plan supérieur ou attendez la fenêtre. |
| 502 | Flux temporairement indisponible : réessayez avec backoff. |
Machine-readable · contrat & agents
Pour générer des clients, SDK ou utiliser l'API depuis un agent IA : le contrat OpenAPI 3.1 et un guide concis pour LLM sont publics et toujours synchronisés.
| Champ | Description |
|---|---|
| /openapi.json | Contrat OpenAPI 3.1 (endpoints, paramètres, schémas, auth x-api-key). |
| /llms.txt | Guide markdown pour LLM (llmstxt.org) : résumé et liens vers les ressources. |
| /postman_collection.json | Collection Postman : importez-la et définissez la variable x-api-key pour tester les endpoints tout de suite. |
| /sdk/odss_api.py | SDK Python officiel (fichier unique, sans dépendances) : client typé avec pagination automatique et support live. |
| /sdk/odss-api.ts | SDK TypeScript officiel (fichier unique, sans dépendances) : types, itérateur async et helper pour le flux SSE. |
| /.well-known/api-catalog | Catalogue d'API (RFC 9727, linkset JSON). |
Licence d'utilisation
L'usage interne (modèles, bots, analyses, backtests) est inclus dans tous les plans. Redistribuer les données — p. ex. les montrer aux utilisateurs finaux de votre produit — exige une autorisation écrite : écrivez à [email protected] et nous définirons une licence adaptée à votre cas.
Le bon plan pour votre volume.
Même couverture sur tous les plans : vous ne payez que le volume. Commencez gratuitement, résiliez quand vous voulez.
Free
Pour explorer l'API. Pour toujours, sans carte.
- 500 requêtes / mois
- 30 requêtes / min
- Couverture complète : tous les sports et tous les books du flux
Starter
Pour bots et intégrations en production.
- 50 000 requêtes / mois
- 120 requêtes / min
- Couverture complète : tous les sports et tous les books du flux
Pro
Pour plateformes et gros volumes.
- 500 000 requêtes / mois
- 600 requêtes / min
- Priorité d'assistance
Enterprise
Pour plateformes, entreprises et revendeurs : configurez volume, débit et licence — le prix se met à jour tout seul et vous activez au checkout, sans négociation.
Vous autorise à montrer les données aux utilisateurs finaux de votre produit (sans elle, l'usage reste interne). Lire la licence →
- Streaming SSE inclus (/api/v1/stream)
- Quota et débit configurés sur votre compte
- Activation automatique au paiement, résiliez quand vous voulez
En continuant vous acceptez la Licence Enterprise et de Redistribution (lisible via le lien ci-dessus) en plus des Conditions du service.
Paiements via Stripe · résiliation en un clic depuis le portail · le quota est une fenêtre glissante de 30 jours
Questions fréquentes.
Puis-je utiliser les données dans un produit commercial (SaaS) ?
L'usage interne — vos modèles, bots, analyses, outils — est inclus dans tous les plans. Montrer les données aux utilisateurs finaux de votre produit exige une autorisation écrite : écrivez à [email protected] et nous définirons une licence adaptée à votre volume.
À quelle fréquence les cotes sont-elles mises à jour ?
Les books italiens en cycle continu — la fraîcheur RÉELLE, mesurée book par book (p50/p95), est publique sur la status page ; bet365 et Betfair arrivent via des flux partenaires avec une cadence de quelques minutes. Pas besoin de nous croire sur parole : chaque cote de la réponse porte son last_update.
Y a-t-il un essai des plans payants ?
Le plan Free est permanent et a la même couverture que les plans payants : c'est le meilleur moyen de vérifier les données. S'il vous faut plus de volume pour une évaluation, écrivez à [email protected].
Quelle différence avec surebett.app ?
Même moteur, deux produits : odss-api vend les cotes brutes normalisées pour construire dessus ; surebett.app est le produit fini, avec les arbitrages déjà calculés et des mises équilibrées.