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.

● books IT en cycle continu · fraîcheur mesurée event_id stable · last_update par cote self-serve · sans carte

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

01

Créez la clé

Inscrivez-vous et générez une clé odss_live en une minute. Le plan Free est permanent, sans carte.

02

Appelez /odds

Un endpoint, toutes les cotes cross-book par événement et marché. Filtres par sport, ligue, marché et bookmaker.

03

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.

sisalsnaieurobetgoldbetplanetwin365+ decine

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.

Caractéristique
odss-api
Moyenne du marché
Books ADM italiens
Couverture directe et vérifiable (/coverage et /bookmakers publics), fraîcheur mesurée et publique (p50/p95 sur /status).
Absents : ils couvrent des books étrangers (US/UK/offshore), aucun book ADM.
Comment on paie
Par compte : quota mensuel + débit/min. Plus de books ou marchés par événement n'augmentent pas le coût.
Par book simultané, ou crédits marchés×régions : le coût explose en multi-book.
Cross-book
event_id déterministe partagé par tous les marchés du match : comparaison native, pas de matching heuristique.
Souvent des cotes propriétaires ou un matching non déterministe.
Fraîcheur
last_update ISO en clair, book par book : vous savez à quel point chaque jambe est récente.
Souvent non exposée par book individuel.
Prête pour les agents
OpenAPI 3.1, llms.txt, JSON-LD, /.well-known/api-catalog : un agent la trouve et la lit tout seul.
Docs derrière login ou crawlers bloqués, aucun standard agentique.
Prix & démarrage
Tarifs publics avec Free tier ; Enterprise self-serve configurable. Une clé en une minute.
Enterprise opaque et commercial, ou self-serve sans books italiens.
Clés ciblées
Restreignables par sport/ligue (ex. une clé « foot uniquement »), sans limite de nombre.
Non documenté.

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.

Nous n'excluons aucune ligue. Nous suivons tous les bookmakers ADM et montrons tout ce qu'ils cotent : si un book cote un match, vous le voyez ici aussi — des grandes ligues européennes aux divisions mineures et compétitions internationales. Ce qui apparaît dépend de la saison et de la période : pas de matchs, les bookmakers ne cotent pas, donc rien ne s'affiche. La liste ci-dessous est le programme à cet instant.

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

01

Créez la clé

Inscrivez-vous et générez une clé dans le tableau de bord. Le plan Free est permanent.

02

Listez les sports

Vérifiez la clé avec un appel à /sports.

03

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ètreDescription
sportFiltre exact sur le sport (ex. calcio, tennis, basket). Valeurs : voir /api/v1/sports.
marketMarché canonique : 1x2, ou, btts, dc, handicap, moneyline…
bookmakersListe CSV de clés book (ex. snai,bet365). Valeurs : voir /api/v1/bookmakers.
leagueFiltre par sous-chaîne, insensible à la casse (ex. serie a). Valeurs : voir /api/v1/leagues.
event_idUn seul événement, par id exact.
stateprematch (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é.
limitEnregistrements par page. Défaut 500, max 2000.
offsetIndex de départ pour la pagination. Défaut 0.

Champs de la réponse

ChampDescription
countTotal des enregistrements correspondant aux filtres (toutes pages).
offset · returnedÉcho de l'offset demandé et enregistrements renvoyés dans cette page.
odds[].event_idId 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[].eventNom normalisé de l'événement (Domicile - Extérieur).
odds[].sport · leagueSport et ligue/compétition de l'événement.
odds[].home_team · away_teamLes deux équipes, quand disponibles.
odds[].commence_timeDébut de l'événement, ISO 8601 UTC.
odds[].market · line · scope · periodMarché canonique, ligne éventuelle (ex. 2.5), portée (ex. équipe) et période (ex. 1re mi-temps).
odds[].state · score · minutestate = 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[].keyClé du bookmaker, avec country, playable_it et is_exchange.
…bookmakers[].outcomesCarte issue → cote décimale (ex. HOME: 2.10).
…bookmakers[].last_updateHorodatage 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.

StatusDescription
401Clé absente, invalide ou révoquée.
403Hors 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).
429Burst : requêtes par minute du plan dépassées. En-tête Retry-After: 60.
429Quota mensuel épuisé : passez au plan supérieur ou attendez la fenêtre.
502Flux 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.

ChampDescription
/openapi.jsonContrat OpenAPI 3.1 (endpoints, paramètres, schémas, auth x-api-key).
/llms.txtGuide markdown pour LLM (llmstxt.org) : résumé et liens vers les ressources.
/postman_collection.jsonCollection Postman : importez-la et définissez la variable x-api-key pour tester les endpoints tout de suite.
/sdk/odss_api.pySDK Python officiel (fichier unique, sans dépendances) : client typé avec pagination automatique et support live.
/sdk/odss-api.tsSDK TypeScript officiel (fichier unique, sans dépendances) : types, itérateur async et helper pour le flux SSE.
/.well-known/api-catalogCatalogue 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.

0pour toujours
Commencer
  • 500 requêtes / mois
  • 30 requêtes / min
  • Couverture complète : tous les sports et tous les books du flux
★ Le plus choisi

Starter

Pour bots et intégrations en production.

79/mois
Choisir Starter
  • 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.

159/mois
Choisir Pro
  • 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.

199/mois
+€120

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.

Tableau de bord

Plan actuel
free
Changer de plan
Ce mois (compte)

Le quota est au compte : partagé entre toutes vos clés, pas par clé.

Générer une clé

Créez-en autant que vous voulez — elles partagent le quota du compte. Restreignez-les à des sports ou ligues pour des clés dédiées.

Flux

Mes clés API