Skip to Content
API-ReferenzLive-Spielstand

Live-Spielstatus

Aggregierter Live-Spielstatus — Punktestände, Perioden, Uhren, Ballbesitz und sportartspezifische situative Daten — aus Sportsbooks zusammengeführt zu einer einzigen autoritativen Ansicht pro Event. Eine Zeile pro Live-Spiel, konsensbasiert ausgewählt aus den Büchern, die es abdecken.

GET /api/v1/gamestate GET /api/v1/gamestate/{sport}

Authentifizierung

Erfordert API-Schlüssel. Verfügbar mit dem Game State Add-on (79 $/Monat) oder der Enterprise-Stufe. Schlüssel ohne eines von beiden erhalten 403 tier_restricted mit addon: "game_state" im Fehler-Body. Fügen Sie das Add-on über die Abrechnungsseite  bei jedem kostenpflichtigen Plan hinzu (Hobby / Pro / Sharp); Enterprise-Schlüssel haben es bereits enthalten.

Live-Spielstatus wird auch über den Kanal gamestate per SSE und WebSocket gestreamt — siehe Streaming unten. (Streaming-Zugriff erfordert das WebSocket Add-on oder Enterprise, zusätzlich zur oben genannten Game State- Anforderung.)

Pfadparameter

ParameterTypBeschreibung
sportstring(optional) Einzelne zurückzugebende Sportart. Entspricht einer bekannten Atlas-Sportart (baseball, basketball, football, hockey, soccer, tennis, table_tennis, cricket, esports, snooker, other). Groß-/Kleinschreibung wird ignoriert. Unbekannte Sportarten geben ein leeres data-Objekt zurück.

Ohne den Pfadparameter werden alle Sportarten mit Live-Events zurückgegeben.

Antwort-Hülle

{ "data": { "<sport>": { "<event_id>": { ...event state... } } }, "updated_at": "2026-04-23T23:55:01.234Z" }

Jeder Event-Status ist über seine kanonische event_id innerhalb seines Sportart- Buckets indiziert. updated_at ist die Serverzeit, zu der diese Antwort erstellt wurde — verwenden Sie sie, um die Aktualität bei Polling abzuschätzen.

Event-Status-Felder

Jedes Feld ist optional, sofern nicht anders angegeben. Das Vorhandensein variiert je nach Sportart — Tennis-Events enthalten sets_home / server; Hockey-Events enthalten power_play; Soccer-Events enthalten corners_* / yellow_cards_*; usw.

Immer vorhanden

FeldTypHinweise
home_teamstringNormalisierter Name des Heimteams
away_teamstringNormalisierter Name des Auswärtsteams
sportstringSportart-Bucket (baseball, soccer, …)
leaguestringAtlas-Liga-ID (z. B. mlb, england_-_premier_league)
home_scoreintegerAktueller Heim-Punktestand in der natürlichen Einheit für die Sportart (Runs, Punkte, Tore, Sätze — Tennis verwendet summierte Satzpunkte)
away_scoreintegerAktueller Auswärts-Punktestand
is_livebooleanIn diesem Endpoint immer true (Nicht-Live-Events sind nicht enthalten)
primary_bookstringDas Buch, aus dem die zusammengeführten Punktestände ausgewählt wurden. Konsensbasiert — höherwertige Bücher gewinnen bei Gleichstand
book_countintegerAnzahl der Sportsbooks, die zum Zeitpunkt des Mergens Live-Status für dieses Event beigetragen haben

Zeitlich (die meisten Mannschaftssportarten)

FeldTypBeispiel
game_periodstring"T5" (MLB Anfang des 5.), "Q3" (NBA Q3), "2H" (Soccer 2. Halbzeit), "P2" (NHL), "S2" (Tennis 2. Satz), "FT" (Spielende)
game_clockstring"49:06" für hochzählende Sportarten (Soccer), "5:42" für herunterzählende Sportarten (Basketball, Hockey)

Situativ

FeldTypHinweise
possession"home" | "away"Welches Team in Ballbesitz ist (Mannschaftssportarten) oder aufschlägt (Tennis)
server"home" | "away"Nur Tennis — aktueller Aufschläger
last_playstringSportartspezifische Beschreibung des letzten Spielzugs, sofern verfügbar
is_timeoutbooleantrue während eines Timeouts

Sportartspezifisch

FeldSportartTyp
fouls_home, fouls_awaybasketball, soccerinteger
corners_home, corners_awaysoccerinteger
yellow_cards_home, yellow_cards_awaysoccerinteger
red_cards_home, red_cards_awaysoccerinteger
power_playhockey"home" | "away"
sets_home, sets_awaytennisinteger (gewonnene Sätze)
hits_home, hits_awaybaseballinteger
home_pitcher, away_pitcherbaseballstring — Anzeigename des Starting Pitchers
wickets_home, wickets_awaycricketinteger
overscricketfloat
batting_teamcricket"home" | "away"

Aktualität

FeldTypBedeutung
staletrue (sonst weggelassen)Die TTL des Livestate-Schlüssels von primary_book ist zum Zeitpunkt des Mergens unter den Aktualitätsschwellenwert des Aggregators (~10s) gefallen. Punktestände sind die zuletzt bekannten Werte; das Buch ist verstummt. Behandeln Sie Punktestände und Periode des Events als möglicherweise hinter dem tatsächlichen Spielstatus zurückbleibend.
aggregator_staletrue (sonst weggelassen)Der SharpAPI-Aggregator selbst hat seit über ~30s keinen neuen gamestate:{sport}-Shard für diese Sportart geschrieben. Breiteres Signal als stale — weist auf eine Pipeline-Störung hin, nicht auf ein Problem mit einem einzelnen Buch. Wenn Sie dies anhaltend sehen, kontaktieren Sie den Support.

Abwesenheit = aktuell. Sowohl stale als auch aggregator_stale werden nur geschrieben, wenn sie zutreffen, was die Payload kompakt hält. Wenn Sie sie nicht bei einem Event sehen, gelten die Daten als aktuell.

Beispielanfragen

# Alle Live-Events über alle Sportarten curl "https://api.sharpapi.io/api/v1/gamestate" \ -H "X-API-Key: YOUR_API_KEY" # Eine Sportart curl "https://api.sharpapi.io/api/v1/gamestate/soccer" \ -H "X-API-Key: YOUR_API_KEY"

Beispielantwort

{ "data": { "soccer": { "argentina_-_primera_division_bocajuniors_defensayjusticia_2026-04-23": { "home_team": "Defensa y Justicia", "away_team": "Boca Juniors", "sport": "soccer", "league": "argentina_-_primera_division", "home_score": 0, "away_score": 1, "game_period": "2H", "game_clock": "49:06", "is_live": true, "possession": "away", "corners_home": 1, "corners_away": 0, "fouls_home": 0, "fouls_away": 0, "yellow_cards_home": 0, "yellow_cards_away": 0, "red_cards_home": 0, "red_cards_away": 0, "primary_book": "draftkings", "book_count": 6 }, "chile_-_primera_division_concepcion_palestino_2026-04-24": { "home_team": "Palestino", "away_team": "Concepción", "sport": "soccer", "league": "chile_-_primera_division", "home_score": 0, "away_score": 0, "is_live": true, "primary_book": "unibet", "book_count": 1, "stale": true } } }, "updated_at": "2026-04-23T23:55:01.234Z" }

Cross-Book-Merge-Modell

Die Felder jedes Events werden aus dem Livestate-Snapshot jedes Sportsbooks über einen dreiklassigen Algorithmus zusammengeführt:

  • Klasse A — Punktestände werden per Konsens ausgewählt: Unter den Büchern mit dem am weitesten fortgeschrittenen Periodenrang gewinnt der höchste Gesamtpunktestand mit ≥2 Unterstützern. Ein einzelnes Buch, das einen Ausreißer-Score meldet (häufig in den ersten Sekunden einer Punkteänderung oder von einem fehlerhaften Adapter), wird abgelehnt.
  • Klasse B — Zeitliche Felder (game_period, game_clock) werden basierend auf der sportartabhängigen Uhrenrichtung — herunterzählend vs. hochzählend — und dem Periodenrang ausgewählt.
  • Klasse C — Situative Felder (possession, corners_*, etc.) werden prioritätsbasiert aus einem festen Buchranking gefüllt.

primary_book gibt an, aus welchem Buch die siegreichen Punktestände stammten. book_count ist die Gesamtzahl der Bücher, die zum Zeitpunkt des Mergens irgendeinen Status zum Event beigetragen haben.

Streaming

Jede Aktualisierung, die der REST-Endpoint beim nächsten Poll anzeigen würde, löst auch ein gamestate:update-Event auf den Streaming-Kanälen aus:

Streaming-Clients erhalten einen initialen gamestate:snapshot mit dem vollständigen aktuellen Status (eine flache Liste von Event-Zeilen), dann gamestate:update- Events mit geänderten Zeilen während des Mergens und gamestate:removed- Events, wenn Events aus der Live-Menge fallen.

Rate Limits & Kontingente

Rate Limits richten sich nach Ihrer Basisstufe, nicht nach dem Add-on — Hobby-Schlüssel behalten ihre 120 req/min, Pro behalten 300, Sharp behalten 1.000, Enterprise individuell. Siehe Pricing . /gamestate zählt genauso wie andere REST-Aufrufe zum Pro-Minute-Kontingent.

Fehlerbehebung

  • 403 tier_restricted mit addon: "game_state" — Ihr Schlüssel hat das Game State Add-on nicht. Fügen Sie es über Billing  für 79 $/Monat hinzu oder upgraden Sie auf Enterprise.
  • Leeres data-Objekt — keine Live-Events im Bereich. Dies ist häufig zwischen Events bei kleineren Sportplänen. Pollen Sie erneut.
  • Events mit stale: true — das primäre Buch ist verstummt. Punktestände können hinterherhinken; erwägen Sie, sie herauszufiltern oder einen UI- Indikator anzuzeigen.
  • Events mit aggregator_stale: true — der SharpAPI-Aggregator hat diese Sportart seit >30s nicht aktualisiert. Wenn anhaltend, kontaktieren Sie den Support; ein kurzer Anstieg kann während Redeploys auftreten.
  • Dieselbe Partie erscheint zweimal unter verschiedenen event_ids — bekannte Einschränkung bei einigen regionalen Ligen, in denen Sportsbooks inkonsistente Liganamen verwenden. Verwenden Sie (home_team, away_team) als sekundären Dedup-Schlüssel auf dem Client, bis die verbleibenden Alias-Lücken geschlossen sind.
Last updated on