Skip to Content
API-ReferenzQuoten-Snapshot

Quoten-Momentaufnahme

Eine Momentaufnahme aktueller Quoten von Sportwettenanbietern abrufen.

GET /api/v1/odds

AuthentifizierungPermalink for this section

Erfordert einen API key. Verfügbar für alle Tarife.

Welche Sportwettenanbieter in Ihren Ergebnissen zurückgegeben werden, hängt von Ihrem Abonnement-Tarif ab. Nutzer des Free-Tarifs erhalten ausschließlich Quoten von DraftKings und FanDuel. Siehe Anbieterzugang nach Tarif weiter unten.

Geändert in v3.0.0: Die Quotenantwort führt jetzt ein einziges timestamp-Feld (Auslieferung / Feed-Aktualität). Die früheren Felder odds_changed_at, last_seen_at und wire_received_at wurden entfernt — lesen Sie stattdessen timestamp. Es gibt kein Feld mehr dafür, wann sich der Preis zuletzt bewegt hat.

Query-ParameterPermalink for this section

ParameterTypStandardBeschreibung
sportsbookstringtarifabhängigKommagetrennte Sportwettenanbieter-IDs (z. B. draftkings,fanduel). Tarif-Limits werden durchgesetzt.
sportstringalleFilter nach Sportart(en), kommagetrennt (z. B. basketball, football). Unterstützt Kategorie-Aliase.
leaguestringalleFilter nach Liga(en), kommagetrennt (z. B. nba, nfl, nhl)
marketstringalleFilter nach Markttyp(en), kommagetrennt. Unterstützt Kategorie-Aliase (main, spread, total, props) oder exakte Typen (point_spread, player_points).
event_idstring—Filter nach Event-ID(s), kommagetrennt
is_liveboolean—true = nur live, false = nur Prematch, weglassen = beides
min_oddsnumber—Filter für minimale American Odds (z. B. -110)
max_oddsnumber—Filter für maximale American Odds (z. B. +200)
group_bystring—Ergebnisse nach Feld gruppieren (z. B. event)
statestring—US-Bundesstaatencode nur für das Deep-Link-Ziel; filtert keine Quoten und liefert keine bundesstaatsspezifischen Preise. Akzeptiert die 50 US-Bundesstaatencodes sowie dc; nicht unterstützte, nicht leere Codes (einschließlich on) liefern 400 invalid_filter. Wenn gesetzt, enthalten deep_link-URLs ?state=XX; fehlende oder leere Werte erzeugen kein ?state=, und die Weiterleitung wendet dann ihren eigenen Standardwert pa an. Betrifft nur Anbieter mit bundesstaatsabhängigen URLs (BetMGM, Caesars, BetRivers).
limitinteger50Maximale Ergebnisse pro Seite (max. 200)
offsetinteger0Paginierungs-Offset. Muss ≤ 500 sein. Werte über 500 geben 400 offset_too_large zurück — verwenden Sie cursor für tiefere Paginierung. Kann doppelte Zeilen erzeugen, wenn sich Live-Daten zwischen Anfragen aktualisieren.
cursorstring—Undurchsichtiger Cursor aus next_cursor einer vorherigen Antwort. Erforderlich für tiefe Paginierung (über Offset 500 hinaus) und empfohlen für jeden mehrseitigen Scan — stabil gegenüber Live-Datenänderungen. Hat Vorrang vor offset, wenn beide angegeben sind.

Verwenden Sie kommagetrennte Werte, um nach mehreren Sportwettenanbietern zu filtern: sportsbook=draftkings,fanduel,betmgm

Markt-Kategorie-AliasePermalink for this section

Anstatt einzelne Markttypen aufzulisten, können Sie einen Kategorie-Alias verwenden, um eine Gruppe verwandter Märkte abzugleichen. Aliase und exakte Typen können in einer kommagetrennten Liste beliebig kombiniert werden.

AliasErweitert zu
mainmoneyline, point_spread, total_points
spreadpoint_spread, puck_line, run_line, set_handicap
totaltotal_points, total_goals, total_runs, total_games, total_rounds, team_total
propsAlle player_*-Markttypen (Präfix-Match)
# Alle "main"-Märkte abrufen (moneyline + spreads + totals) curl "https://api.sharpapi.io/api/v1/odds?league=nba&market=main" \ -H "X-API-Key: YOUR_API_KEY" # Alias mit exaktem Typ kombinieren curl "https://api.sharpapi.io/api/v1/odds?league=nfl&market=spread,moneyline" \ -H "X-API-Key: YOUR_API_KEY" # Alle Player-Prop-Märkte curl "https://api.sharpapi.io/api/v1/odds?league=nba&market=props" \ -H "X-API-Key: YOUR_API_KEY"

Der props-Alias verwendet einen Präfix-Match, sodass automatisch alle Markttypen einbezogen werden, die mit player_ beginnen (z. B. player_points, player_rebounds, player_assists, player_strikeouts usw.).

BeispielanfragenPermalink for this section

curl -X GET "https://api.sharpapi.io/api/v1/odds?league=nba&sportsbook=draftkings&market=moneyline" \ -H "X-API-Key: YOUR_API_KEY"

PaginierungPermalink for this section

Verwenden Sie cursorbasierte Paginierung für mehrseitige Scans. Der /odds-Endpoint liefert Live-Daten, die etwa alle 15 Sekunden aktualisiert werden. Bei offsetbasierter Paginierung können Zeilen zwischen Anfragen ihre Position ändern, was an Seitengrenzen zu Duplikaten führt. Cursorbasierte Paginierung verankert jede Seite am zuletzt gesehenen Element — keine Drift.

Jede Antwort enthält sowohl next_cursor (stabil) als auch next_offset (Legacy) im pagination-Objekt. Verwenden Sie für sequenzielle Vollscans des Datensatzes immer next_cursor.

# Erste Seite — kein Cursor erforderlich curl "https://api.sharpapi.io/api/v1/odds?league=nfl&limit=200" \ -H "X-API-Key: YOUR_API_KEY" # Folgeseiten — next_cursor aus der vorherigen Antwort übergeben curl "https://api.sharpapi.io/api/v1/odds?league=nfl&limit=200&cursor=eyJlIjoiMzM0ODMxNTMiLCJiIjoiZHJhZnRraW5ncyIsIm0iOiJtb25leWxpbmUiLCJpIjoiZHJhZnRraW5nc18zMzQ4MzE1M19tb25leWxpbmVfUEhJIn0" \ -H "X-API-Key: YOUR_API_KEY"

ErgebnisreihenfolgePermalink for this section

Ergebnisse werden in chronologischer Reihenfolge nach Event-Startzeit zurückgegeben — bereits laufende und die als Nächstes beginnenden Events zuerst, spätere danach. Events ohne Startzeit im Feed werden zuletzt einsortiert.

Eine einzelne Seite ist daher ein Ausschnitt des Spielplans, keine Stichprobe über die gesamte Ergebnismenge. Ein Sportsbook ohne Spiele, die innerhalb des von dieser Seite abgedeckten Spielplanabschnitts beginnen, erscheint nicht darauf — auch dann nicht, wenn es später am selben Tag viele passende Zeilen hat. Das ist das erwartete Verhalten und keine Lücke in der Abdeckung. Um zu prüfen, ob ein Buch einen Markt führt, filtern Sie mit ?sportsbook= oder grenzen Sie mit ?league= ein, statt eine ungefilterte erste Seite zu lesen.

Auf einer Seite mit Zeilen zeigt meta.books genau das: Ein in in_scope gelistetes Buch ohne Eintrag in in_page hat auf dieser Seite keine Zeilen geliefert — meist, weil seine Spiele außerhalb des Spielplanabschnitts liegen, den diese Seite abdeckt, und nicht, weil es den Markt nicht führt.

Cursor sind undurchsichtig — parsen oder konstruieren Sie sie nicht. Sie kodieren die Sortierposition des letzten Elements der aktuellen Seite und sind nur für dieselben Filterparameter gültig.

?offset=N funktioniert weiterhin für flache Paginierung (bis Offset 500) und ist für Einzelseitenanfragen oder direkten Positionszugriff geeignet. Über 500 hinaus gibt die API 400 offset_too_large zurück — der Server müsste sonst bei jeder Seite das gesamte gefilterte Ergebnis sortieren, was sich viel günstiger vermeiden als pro Anfrage optimieren lässt. Verwenden Sie für tiefere Zugriffe cursor.

{ "error": { "code": "offset_too_large", "message": "offset must be <= 500; use `cursor=` from the previous response for deeper pagination", "max_offset": 500 } }

AntwortPermalink for this section

Erfolg (200)Permalink for this section

{ "success": true, "data": [ { "id": "draftkings_33483153_moneyline_PHO", "sportsbook": "draftkings", "event_id": "33483153", "sport": "basketball", "league": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "market_type": "moneyline", "selection": "PHO Suns", "selection_type": "away", "odds_american": -150, "odds_decimal": 1.667, "odds_probability": 0.60, "line": null, "event_start_time": "2026-01-26T19:00:00Z", "timestamp": "2026-01-26T02:10:24.125Z", "is_live": false }, { "id": "draftkings_33483153_moneyline_PHI", "sportsbook": "draftkings", "event_id": "33483153", "sport": "basketball", "league": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "market_type": "moneyline", "selection": "PHI 76ers", "selection_type": "home", "odds_american": 130, "odds_decimal": 2.30, "odds_probability": 0.4348, "line": null, "event_start_time": "2026-01-26T19:00:00Z", "timestamp": "2026-01-26T02:10:24.125Z", "is_live": false } ], "meta": { "count": 2, "total": 3095, "books_available": ["draftkings", "fanduel", "betmgm", "caesars", "pinnacle"], "books_returned": ["draftkings"], "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50, "next_cursor": "eyJlIjoiMzM0ODMxNTMiLCJiIjoiZHJhZnRraW5ncyIsIm0iOiJtb25leWxpbmUiLCJpIjoiZHJhZnRraW5nc18zMzQ4MzE1M19tb25leWxpbmVfUEhJIn0" }, "updated_at": "2026-01-26T02:10:37.846Z", "filters": { "league": "nba", "sportsbook": "draftkings", "market": "moneyline" } } }

Leere Ergebnisse (200): meta.storePermalink for this section

Eine leere Seite — 200 mit "data": [] und "count": 0 — kann zwei verschiedene Dinge bedeuten: Ihre Filter haben nichts getroffen, oder die antwortende Instanz hatte im Moment der Antwort nichts geladen (zum Beispiel während eines Store-Wechsels). Seit September 2026 sagt die Antwort, welcher Fall vorliegt. Immer wenn /odds null Zeilen zurückgibt, wird ein meta.store-Block angehängt, und reason ist das Feld, auf dem Sie verzweigen:

{ "data": [], "pagination": { "limit": 50, "offset": 0, "count": 0, "has_more": false, "next_offset": null }, "updated_at": "2026-09-07T02:41:18.552Z", "meta": { "store": { "generation": 5019, "ready": true, "books": 39, "rows": 810137, "reason": "no_match" } } }
reasonBedeutungWas zu tun ist
warmingDie antwortende Instanz hat seit ihrem letzten Moduswechsel keinen Aktualisierungszyklus abgeschlossen — es ist noch nichts geladenErneut versuchen
store_emptyDie Instanz ist bereit, hält aber null Quotenzeilen, zum Beispiel mitten in einem Store-WechselErneut versuchen — die leere Seite nicht als maßgeblich behandeln
no_matchDie Instanz ist bereit und befüllt; Ihre Filter haben nichts getroffenMaßgeblich — ein erneuter Versuch ändert die Antwort nicht
FeldTypBedeutung
generationintegerSnapshot-Generation, aus der diese Antwort bedient wurde. 0 bedeutet, dass seit dem Prozessstart nichts geladen wurde.
readybooleanSeit dem letzten Moduswechsel der Instanz wurde mindestens ein Aktualisierungszyklus abgeschlossen.
booksintegerIm Snapshot dieser Antwort vorhandene Sportsbooks, unabhängig von Ihren Filtern.
rowsintegerVon diesem Snapshot gehaltene Quotenzeilen, unabhängig von Ihren Filtern.
reasonstringwarming, store_empty oder no_match — siehe oben.
event_statusstringNur vorhanden, wenn die Seite leer ist, weil das einzelne Event, auf das Sie mit event_id gefiltert haben, beendet ist: final (ein abgeschlossenes Ergebnis ist gespeichert — derselbe Datensatz, den /events/{eventId} als status: "final" liefert) oder gone (das Event hat den Spielplan innerhalb etwa der letzten Stunde ohne gespeichertes Ergebnis verlassen — dieselbe Bedingung, unter der /events/{eventId} mit 410 Gone antwortet). Andernfalls weggelassen. Siehe Beendete Events unten.
completed_atstringBegleitet ausschließlich event_status: "final" — der RFC-3339-Zeitpunkt, zu dem der Abschluss erkannt wurde, identisch mit completed_at in /events/{eventId}. Wird bei gone nie gesendet.
  • Nur bei leeren Ergebnissen vorhanden. Eine Antwort mit Zeilen ist Byte für Byte unverändert und trägt kein meta.store; Parser, die data + pagination + updated_at lesen, funktionieren weiterhin.
  • books und rows beschreiben den gesamten Snapshot, nicht Ihre Abfrage — rows: 810137 belegt, dass der Store befüllt war, und ist keine Anzahl dessen, was Sie getroffen hätten.
  • Abfragen, die auf zwei oder mehr Sportsbooks aufgelöst werden, tragen zusätzlich meta.books (den aufgelösten Buchumfang: in_scope und die in_page-Zählungen pro Buch); meta.store wird daneben hinzugefügt. Dasselbe gilt für die leere Seite einer Dashboard-Buchauswahl, die auf gar kein Buch aufgelöst wurde — siehe Leere Sportsbook-Auswahl unten.
  • Ein unbekannter Wert für league oder sportsbook wird mit 400 invalid_filter abgewiesen und nicht mit einer leeren Seite beantwortet. Andere Filter werden nicht gegen den Katalog geprüft: ein market_type oder eine event_id, die nirgends existiert, liefert eine gewöhnliche leere Seite mit reason: "no_match".

Beendete Events: event_status und completed_atPermalink for this section

Ein Client, der /odds?event_id=<id> nach Spielende weiter abfragt, erhält eine maßgebliche leere Seite — reason: "no_match" stimmt, sagt aber nicht, warum nichts getroffen wurde. Ist die Seite leer, weil das eine Event, auf das Sie gefiltert haben, beendet ist, sagt meta.store auch das. Dies ist die echte Antwort für ein MLB-Spiel, das in derselben Nacht zuvor zu Ende gegangen war (eine Ein-Buch-Abfrage, damit der Body kurz bleibt — eine Mehr-Buch-Abfrage trägt wie oben zusätzlich meta.books):

GET /api/v1/odds?event_id=mlb_twins_whitesox_2026-09-06_b3&sportsbook=pinnacle&limit=1
{ "data": [], "pagination": { "limit": 1, "offset": 0, "count": 0, "has_more": false, "next_offset": null }, "updated_at": "2026-09-07T10:04:34.951684418Z", "meta": { "store": { "generation": 13456, "ready": true, "books": 39, "rows": 947879, "reason": "no_match", "event_status": "final", "completed_at": "2026-09-07T02:09:37Z" } } }

/events/mlb_twins_whitesox_2026-09-06_b3 lieferte im selben Moment status: "final" mit demselben completed_at — beide Endpoints lesen denselben Datensatz und können sich daher nicht widersprechen.

event_statusBedeutungWas zu tun ist
finalFür das Event ist ein abgeschlossenes Ergebnis gespeichert; completed_at ist der Zeitpunkt, zu dem es erkannt wurde.Abfragen einstellen — das Event ist vorbei; das Ergebnis über /events/{eventId} abrufen
goneDas Event hat den Spielplan innerhalb etwa der letzten Stunde ohne gespeichertes Ergebnis verlassen — verschoben, abgesagt oder so kurz zuvor beendet, dass noch kein Ergebnis festgestellt wurde. Es ist dieselbe Bedingung, unter der /events/{eventId} mit 410 Gone antwortet, und keine Aussage, dass das Event beendet ist.Quotenabfragen einstellen; /events/{eventId} später auf ein Ergebnis prüfen

Das Signal wird nur angehängt, wenn alle folgenden Bedingungen erfüllt sind — andernfalls behält der Block seine gewöhnliche Form, und keiner der beiden Schlüssel ist vorhanden:

  • Die Anfrage hat auf genau eine event_id gefiltert (eine kommagetrennte Liste erhält kein Signal — das Feld ist singulär).
  • Die Seite ist leer mit reason: "no_match" (eine Seite mit warming oder store_empty trägt es nie — die Leere geht vom Store aus, und reason sagt bereits, dass Sie es erneut versuchen sollen).
  • Das Event ist bekanntermaßen beendet. Ein Event, das noch live oder bevorstehend ist, oder eine ID, die nirgends existiert, erhält ein gewöhnliches no_match ohne event_status — eine Ein-ID-Abfrage, die ohne dieses Feld beantwortet wird, bedeutet also entweder eine falsche ID oder ein Event, das noch nicht beendet ist.

Ein beendetes Event, dessen Quoten noch im Cache liegen, liefert diese Zeilen wie gewohnt; das Signal erscheint, sobald die Seite leer wird. completed_at ist der Zeitpunkt, zu dem der Abschluss erkannt wurde — typischerweise einige Minuten, nachdem das Event den Live-Feed verlassen hat — und nicht der Schlusspfiff; derselbe Vorbehalt wie bei completed_at in /events. Der Statuscode ändert sich nie: Ein Client, der ein Event über seine gesamte Laufzeit abfragt, erhält weiterhin 200.

Leere Sportsbook-Auswahl: meta.books.reasonPermalink for this section

Wenn die in Ihrem Dashboard gespeicherte Sportsbook-Auswahl auf nichts aufgelöst wird — jedes ausgewählte Buch fehlt im aktuellen Snapshot oder ist in Ihrem Tarif nicht enthalten —, wird eine ungefilterte /odds-Anfrage mit einer leeren Seite beantwortet. Der Store ist in Ordnung; die Auswahl ist der Grund, und die Antwort nennt ihn. meta.books — normalerweise nur bei Abfragen vorhanden, die auf zwei oder mehr Sportsbooks aufgelöst werden — wird mit leerem Umfang, reason: "selection_disjoint" und selected ausgegeben, der Auswahl, die auf nichts aufgelöst wurde (kanonische Sportsbook-IDs, sortiert):

{ "data": [], "pagination": { "limit": 50, "offset": 0, "count": 0, "has_more": false, "next_offset": null }, "updated_at": "2026-09-07T10:04:34.951684418Z", "meta": { "books": { "in_scope": [], "in_page": {}, "reason": "selection_disjoint", "selected": ["betano", "bwin"] }, "store": { "generation": 13454, "ready": true, "books": 39, "rows": 947919, "reason": "no_match" } } }
  • meta.books.reason hat Vorrang. meta.store wird weiterhin daneben ausgegeben, mit reason: "no_match" — zutreffend für den Store (er ist befüllt), aber nicht die Ursache. Ist meta.books.reason vorhanden, ist das der Grund für die leere Seite; ein erneuter Versuch ändert die Antwort nicht. Korrigieren Sie die Auswahl in Ihrem Dashboard, oder führen Sie ein Upgrade durch, wenn die ausgewählten Bücher einen höheren Tarif erfordern.
  • in_scope und in_page sind vorhanden und leer ([] / {}, nie null). Der einzige reason-Wert ist derzeit selection_disjoint.
  • Wird nur ausgegeben, wenn die Auswahl tatsächlich die Ursache ist: Die Anfrage trug keinen expliziten sportsbook=-Filter, Sie haben eine Dashboard-Auswahl, und Ihr Tarif allein hätte mindestens ein Buch ergeben. Es erscheint nie im Free-Tarif (der unabhängig von der Auswahl immer DraftKings und FanDuel liefert) und nie bei einem leeren oder aufwärmenden Store — diese Seiten erklärt meta.store.
  • Mit einem expliziten sportsbook=-Filter wird dieselbe Diskrepanz abgewiesen statt mit einer leeren Seite beantwortet: 403 tier_restricted, 403 book_not_selected oder 503 book_unavailable.
  • Seiten, die auf ein oder mehr Bücher aufgelöst werden, sind unverändert: Der Block für zwei oder mehr Bücher trägt weder reason noch selected, und ein Ein-Buch-Umfang trägt gar kein meta.books.

Antwort-HeaderPermalink for this section

X-RateLimit-Limit: 300 X-RateLimit-Remaining: 299 X-RateLimit-Reset: 1737853200 X-Data-Delay: 0 X-Request-Id: req_abc123def456
HeaderBeschreibung
X-RateLimit-LimitMaximale Anfragen pro Minute für Ihren Tarif
X-RateLimit-RemainingVerbleibende Anfragen im aktuellen Zeitfenster
X-RateLimit-ResetUnix-Zeitstempel, wann das Rate Limit zurückgesetzt wird
X-Data-DelayDatenverzögerung in Sekunden (0 für Echtzeit, 60 für Free-Tarif)
X-Request-IdEindeutige Anfrage-Kennung zur Fehlersuche

FehlerantwortenPermalink for this section

401 Unauthorized

Ohne Schlüssel wird missing_api_key zurückgegeben; ein ungültiger Schlüssel ergibt invalid_api_key.

{ "error": { "code": "missing_api_key", "message": "API key required. Pass via X-API-Key header, api_key query parameter, or Bearer token.", "docs": "https://docs.sharpapi.io/en/authentication" } }

403 Tier Restricted

{ "error": { "code": "tier_restricted", "message": "Sportsbook 'pinnacle' requires Sharp tier or higher", "docs": "https://docs.sharpapi.io/en/pricing" } }

429 Rate Limited

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Retry after 45 seconds.", "docs": "https://docs.sharpapi.io/en/authentication#rate-limits" } }

Schema des Quoten-ObjektsPermalink for this section

FeldTypBeschreibung
idstringEindeutige Quoten-Kennung
sportsbookstringSportwettenanbieter-ID (z. B. draftkings)
event_idstringEvent-Kennung
sportstringSportart-Slug (z. B. basketball, football)
leaguestringLiga-Slug (z. B. nba, nfl)
home_teamstringName der Heimmannschaft
away_teamstringName der Auswärtsmannschaft
market_typestringmoneyline, spread, total, player_prop usw.
selectionstringDie Auswahl (Mannschaftsname, Over/Under, Spielername)
selection_typestringKanonische Seiten-Kennung. Siehe Selektionstypen unten für die vollständige Aufzählung, einschließlich zusammengesetzter Formen (z. B. home_over), die auf Mehrachsen-Märkten emittiert werden.
team_sidestring|undefinedRoher Team-Seiten-Hinweis aus dem Adapter — einer aus home, away, draw. Nützlich, wenn selection_type einen zusammengesetzten Wert (z. B. home_over) trägt und Sie nur die Team-Achse ohne Parsing möchten. Fehlt, wenn der Adapter ihn nicht gesetzt hat.
odds_americannumberAmerican Odds (z. B. -110, +150)
odds_decimalnumberDezimalquoten (z. B. 1.909)
odds_probabilitynumberImplizite Wahrscheinlichkeit (z. B. 0.5238)
linenumber | nullSpread- oder Total-Linienwert (null bei Moneyline)
is_alternate_lineboolean|undefinedtrue, wenn das line dieser Zeile nach bestem Bemühen von der Hauptlinie ihrer Kohorte abweicht — die Kohorte ist (event, market_type, Auswahlachse), je Buchmacher aufgelöst. Immer false für Märkte ohne Linie (Moneyline, Outright). Stabil auf /opportunities/ev heute; Rollout auf /odds-Zeilen läuft. Verwenden Sie es, um Haupt- und Alternativlinien-Snapshots zu trennen.
event_start_timestringISO 8601 Event-Startzeit
timestampstringISO-8601-Zeitpunkt, zu dem SharpAPI diese Quote zuletzt durch seine Pipeline aktualisiert hat — wird in jedem Ingest-Zyklus weitergeschaltet. Ein Feed-Aktualitäts- / Liveness-Signal; es ist NICHT der Zeitpunkt, zu dem sich der Preis zuletzt geändert hat.
is_livebooleanOb das Event derzeit live läuft
event_uuidstring|undefinedStabile kanonische Event-UUID aus dem SharpAPI-Atlas, sofern das Event gemappt ist. Während event_id die primäre Event-Kennung des Adapters trägt (oft die des ursprünglichen Sportwettenanbieters), ist event_uuid ein feed-stabiler Hash für Cross-Feed-Joins. Fehlt bei nicht gemappten Events.
external_event_idstring|undefinedDie native Event-ID des Sportwettenanbieters, sofern sie sich von event_id unterscheidet. Nützlich, um Zeilen in die UI oder API des Sportwettenanbieters zurückzuverknüpfen.
deep_linkstring|undefinedAuflösungs-URL, die auf die Event- oder Wettschein-Seite des Sportwettenanbieters zeigt. Übergeben Sie state= (z. B. state=nj) in der Anfrage, um über staatsspezifische Subdomains zu routen, sofern die Buchmacher diese benötigen (BetMGM, Caesars, BetRivers).
market_idstring|undefinedNative Markt-Kennung des Sportwettenanbieters. Einige Buchmacher legen keine offen — fehlt, wenn unbekannt.
selection_idstring|undefinedNative Selektions-/Outcome-Kennung des Sportwettenanbieters. Einige Buchmacher legen keine offen — fehlt, wenn unbekannt.
player_namestring|undefinedSpielername (nur bei Player-Prop-Märkten)
stat_categorystring|undefinedStatistikkategorie, z. B. points, rebounds (nur bei Player-Prop-Märkten)
home_pitcherstring|undefinedNur MLB. Heim-Starter-Pitcher, sofern vom Buchmacher veröffentlicht.
away_pitcherstring|undefinedNur MLB. Auswärts-Starter-Pitcher, sofern vom Buchmacher veröffentlicht.
max_betnumber|undefinedDie größte auf dieser Zeile verfügbare Größe. Bei einem traditionellen Buchmacher (Pinnacle, Circa Sports, SBOBET) der maximale Einsatz, den er akzeptiert, in USD. Bei einem börsenbasierten Buchmacher das zum besten Preis liegende Geld, in size_currency. Abwesenheit bedeutet, dass der Veranstalter für die Zeile keine Größe veröffentlicht; eine Zahl — auch 0.0 — ist ein echter Wert. Bei einem börsenbasierten Buchmacher erscheint das Feld nur, solange Geld zum besten Preis liegt, sodass ein best_bid_liquidity von 0.0 ohne max_bet ankommt — dieselbe Tatsache, kein Widerspruch. Siehe Liquidität und Limits.
size_currencystring|undefinedISO-4217-Code, in dem die Geldbeträge dieser Zeile angegeben sind — max_bet, best_bid_liquidity und total_liquidity. GBP bei Betfair und Smarkets, USD bei jedem anderen Buchmacher, der eine Größe veröffentlicht, und nie umgerechnet: der eigene Wert des Veranstalters wird in dessen eigener Währung durchgereicht. Fehlt bei Zeilen ohne Größe und bei traditionellen Buchmachern, deren max_bet eine Einsatzobergrenze in USD ist und keine im Orderbuch liegende Größe. Siehe Liquidität und Limits.
best_bid_liquiditynumber|undefinedNur börsenbasierte Buchmacher. Geld, das zum veröffentlichten Preis liegt — der Betrag, den ein Taker matchen kann, ohne den Preis zu bewegen. Angegeben in size_currency. 0.0 bedeutet, dass dort nichts liegt; Abwesenheit bedeutet, dass der Veranstalter den Wert nicht veröffentlicht.
total_liquiditynumber|undefinedNur börsenbasierte Buchmacher. Über das gesamte Orderbuch dieser Auswahl summierte risikofähige Größe, nicht nur zum besten Preis. Angegeben in size_currency. 0.0 bedeutet ein leeres Orderbuch; Abwesenheit bedeutet, dass der Veranstalter den Wert nicht veröffentlicht. Nicht aus best_bid_liquidity ableitbar, und manche Buchmacher veröffentlichen das eine ohne das andere.
volumenumber|undefinedKumuliertes gehandeltes Volumen auf dieser Selektion, in den nativen Einheiten der Wettbörse. Nur Wettbörsen — derzeit Kalshi. Siehe Liquidität und Limits.
volume_24hnumber|undefinedGehandeltes Volumen der letzten 24 Stunden, in den nativen Einheiten der Wettbörse. Nur Wettbörsen — derzeit Polymarket und Kalshi.
open_interestnumber|undefinedAusstehende offene Kontrakte auf dieser Selektion. Nur Wettbörsen — derzeit Kalshi.
polymarket_resolutionstring|undefinedNur Polymarket. UMA Optimistic-Oracle-Resolutionsstatus, sobald der Markt beendet ist — einer aus settled_normal, voided, disputed, proposed, unknown. Fehlt bei laufenden Polymarket-Märkten und bei allen Nicht-Polymarket-Buchmachern.

SelektionstypenPermalink for this section

selection_type trägt die kanonische Seiten-Kennung für jede selection. Die meisten Märkte sind zweiseitig (z. B. Moneyline, Point Spread, Total) und emittieren einen der einfachen Werte unten. Eine kleine Menge an Mehrachsen-Märkten (Fußball Doppelchance, BTTS-kombiniert, Ergebnis × O/U, MMA Round Betting, Tennis Set Betting, korrekter Endstand usw.) kodiert zwei Outcomes pro Selektion und emittiert zusammengesetzte Werte, die mit _ verbunden sind.

FamilieWerteWo sie erscheinen
Zweiseitig (Team-Seite)home, awaymoneyline, point_spread, puck_line, run_line, set_handicap, die meisten Periodenmärkte
Zweiseitig (Linien-Richtung)over, undertotal_points, total_goals, total_runs, total_games, total_rounds, alle player_*_o_u-Props
Zweiseitig (Ja/Nein)yes, nobinary, Prop-artige Ja/Nein-Märkte, Börsen-”Back/Lay”-Ausgänge, Polymarket-Vorhersagemärkte
Zweiseitig (Parität)even, oddTotal-Paritätsmärkte (z. B. Total-Punkte gerade/ungerade)
DreiseitigdrawDreiseitige Moneyline (Fußball 1X2), komplementäre Seite des Draw-No-Bet, “Kein Tor” bei next_goal
Zusammengesetzt (Team × O/U)home_over, home_under, away_over, away_underFußball match_result_total_goals (“Team A und Über N.5”) und analoge Ergebnis-plus-Total-Märkte. Ebenso team_total (“Team A Über N.5”), das ein Team und eine Richtung trägt und daher nie ein blosses home/over ist.
Zusammengesetzt (Team × BTTS)home_yes, home_no, away_yes, away_no, draw_yes, draw_noFußball match_result_both_teams_to_score
Zusammengesetzt (Doppelchance)home_draw, away_draw, home_awayFußball double_chance (1X / X2 / 12) und MMA-Doppelchance
Zusammengesetzt (Runde / Methode)home_r1, home_r2, home_decision, away_r1 usw.MMA round_betting und Method-of-Victory-Märkte
Auffangwertothergame_prop, “Kein Tor” bei next_goal und jede Selektion, bei der der kanonische Seiten-Mapper das Outcome nicht sauber zerlegen kann. Immer in geringem Volumen vorhanden; behandeln Sie ihn als opak.

Parsing zusammengesetzter Werte. Zusammengesetzte selection_type-Strings verbinden die Team-Achse (home / away / draw) stets mit einem einzelnen Unterstrich mit der sekundären Achse. Um nur die Team-Achse ohne Parsing zu erhalten, lesen Sie team_side — es ist die rohe vom Adapter gesetzte Seite für dieselbe Zeile.

Long-Tail-Märkte emittieren zusätzliche Formen. Märkte wie correct_score (z. B. "2_1"), set_betting (z. B. "0_2"), winning_margin, halftime_fulltime, first_goal und anytime_goal kodieren Score-Level- oder zusammengesetzte Outcomes direkt in selection_type. Wenn Sie auf ein geschlossenes Enum angewiesen sind, filtern Sie auf die Familien oben und behandeln Sie jeden unbekannten Wert als opak — werfen Sie keinen Fehler.

Filterung nach QuotenbereichPermalink for this section

Verwenden Sie min_odds und max_odds, um nach American-Odds-Wert zu filtern.

# Nur Plus-Money-Quoten zurückgeben (+100 und höher) curl "https://api.sharpapi.io/api/v1/odds?league=nba&min_odds=100" \ -H "X-API-Key: YOUR_API_KEY" # Nur Quoten zwischen -200 und +200 zurückgeben curl "https://api.sharpapi.io/api/v1/odds?league=nba&min_odds=-200&max_odds=200" \ -H "X-API-Key: YOUR_API_KEY"

Nach Event gruppierte AntwortPermalink for this section

Verwenden Sie group_by=event, um Quoten nach Event statt als flache Liste zu gruppieren. Dies ist nützlich für den Aufbau eventzentrischer UIs.

curl "https://api.sharpapi.io/api/v1/odds?league=nba&group_by=event" \ -H "X-API-Key: YOUR_API_KEY"
{ "data": [ { "event_id": "33483153", "event_name": "PHI 76ers vs PHO Suns", "sport": "basketball", "league": "nba", "start_time": "2026-01-26T19:00:00Z", "is_live": false, "odds": [ { "id": "draftkings_33483153_moneyline_PHO", "sportsbook": "draftkings", "market_type": "moneyline", "selection": "PHO Suns", "selection_type": "away", "odds_american": -150, "odds_decimal": 1.667, "odds_probability": 0.60, "line": null, "timestamp": "2026-01-26T02:10:24.125Z" } ] } ], "meta": { "group_by": "event", "books_available": 5, "filters": { "league": "nba" }, "updated_at": "2026-01-26T02:10:37.846Z" } }

Anbieterzugang nach TarifPermalink for this section

Welche Sportwettenanbieter in Ihren Quotenergebnissen enthalten sind, hängt von Ihrem Abonnement-Tarif ab:

TarifVerfügbare AnbieterEnthaltene Sportwettenanbieter
Free2DraftKings, FanDuel
Hobby5+ BetMGM, Caesars, theScore Bet
Pro15+ Bet365, BetRivers und weitere
Sharp25 (von 43)Beliebige 25 der 43 verfügbaren Anbieter
EnterpriseAlleAlle verfügbaren Sportwettenanbieter

Pinnacle (Sharp Book) erfordert Sharp-Tarif oder höher. Die Anfrage sportsbook=pinnacle in einem Free-, Hobby- oder Pro-Tarif gibt einen 403 tier_restricted-Fehler zurück.

FilterbeispielePermalink for this section

# Live-NBA-Quoten von allen verfügbaren Anbietern abrufen curl "https://api.sharpapi.io/api/v1/odds?league=nba&is_live=true" \ -H "X-API-Key: YOUR_API_KEY" # Moneyline- und Spread-Quoten für ein bestimmtes Event abrufen curl "https://api.sharpapi.io/api/v1/odds?event_id=nba_76ers_suns_2026-01-26_b3&market=moneyline,spread" \ -H "X-API-Key: YOUR_API_KEY" # Durch alle NFL-Spread-Quoten paginieren (verwenden Sie next_cursor aus jeder Antwort) curl "https://api.sharpapi.io/api/v1/odds?league=nfl&market=spread&limit=200" \ -H "X-API-Key: YOUR_API_KEY"

Verwandte EndpointsPermalink for this section

  • Odds Delta - Nur Quoten abrufen, die sich seit einem bestimmten Zeitstempel geändert haben
  • Best Odds - Die besten Quoten über alle Anbieter hinweg für jede Auswahl abrufen
  • Odds Comparison - Quoten anbieterübergreifend nebeneinander vergleichen
  • Batch Odds - Quoten für mehrere Events in einer Anfrage abrufen
  • Markets - Verfügbare Markttypen auflisten
  • Sportsbooks - Verfügbare Sportwettenanbieter und ihren Status auflisten
Last updated on