API reference · Live games

Get a game

GET/v1/sports/games/{game}

One game with its Kalshi and Polymarket links and its score and status changes, oldest first, each with the league's own time and Langbot's detection time.

On this page

Auth. None. Without a token the call is served as Free (the Free delay and request budget, shared per IP); send Authorization: Bearer lb_… for your plan's.

Limits. Counts against your plan's API requests (60, 600 or 3,000 a minute on Free, Builder and Standard). Served at your plan's delay (+60 s Free, +10 s Builder, +2 s Standard).

Parameters

Path parameters

NameTypeRequiredDescription
gamestringyesThe game's id (nhl_2026020276) or event_id (ev_sports_nhl_2026020276).

Query parameters

NameTypeRequiredDescription
sinceintegernoEvents with t_spoken from this ms epoch (default a day before the start); next_since pages.
typesstringnoComma-separated: score_changed, game_status.
limitintegernoPage size. 1 to 2000. Default 500.

Request

Terminal
curl "https://api.langbot.ai/v1/sports/games/nhl_2026020276?types=score_changed"

Response

200 OK

JSON
{
  "ts": 1794113400000,
  "delay_ms": 0,
  "rights": "restricted",
  "game": {"id": "nhl_2026020276", "league": "nhl", "game_id": "2026020276", "event_id": "ev_sports_nhl_2026020276", "date": "2026-11-07", "start_time": 1794106800000, "title": "VAN @ EDM", "away": {"code": "VAN", "name": "Vancouver Canucks", "score": 1}, "home": {"code": "EDM", "name": "Edmonton Oilers", "score": 1}, "status": "live", "status_detail": null, "period": 3, "period_type": "REG", "clock": "14:21", "score_at": 1794110943512, "markets": {"kalshi": 9, "polymarket": 1}, "linked": null},
  "links": [
    {"venue": "kalshi", "venue_event": "KXNHLGAME-26NOV07VANEDM", "series": "KXNHLGAME", "kind": "game", "title": "Vancouver vs Edmonton", "market_tickers": ["KXNHLGAME-26NOV07VANEDM-EDM", "KXNHLGAME-26NOV07VANEDM-VAN"], "method": "ticker", "linked_at": 1794112003000}
  ],
  "events": [
    {
      "id": "evt_1V2C8QK8YJ8B0D8R1N3W6XH0ZM",
      "type": "score_changed",
      "t_spoken": 1794110943512,
      "t_detected": 1794110943512,
      "t_emitted": 1794110943540,
      "hash": "9a41c0e2d7…",
      "chain_seq": 18,
      "market_refs": ["KXNHLGAME-26NOV07VANEDM-EDM", "KXNHLGAME-26NOV07VANEDM-VAN"],
      "facts": {"league": "nhl", "game": "nhl_2026020276", "away": "VAN", "home": "EDM", "away_score": 1, "home_score": 1, "prev_away_score": 1, "prev_home_score": 0, "scoring_team": "VAN", "points": 1, "correction": false, "period": 2, "period_type": "REG", "clock": "8:03", "play_id": "512", "play_kind": "goal", "league_time": null, "via": "pbp"}
    }
  ],
  "next_since": null,
  "timeline": "/v1/sim/events/ev_sports_nhl_2026020276/timeline",
  "plays": null
}

Each event is a feed event on the same clock as the venues' trades and books: t_detected is when Langbot saw the change, t_spoken the league's own time of the play when its feed publishes one (NBA, MLB; for NHL it equals t_detected), t_emitted when the feed sent it; id is the event id, so Get a receipt verifies it. facts.correction is true when a score was taken back on review. links are the venue events Langbot linked to the game: Kalshi per-game event tickers (<SERIES>-<YYMONDD><AWAY><HOME>) with their market tickers, and the game's Polymarket event. timeline replays the game with those markets' recorded order books in Sim; the event study takes score <team> (or score) as trigger words. The leagues' play-by-play text is not served.

Errors

StatuscodeWhen
404not_foundNo game with that id.
422validation_errorAn unknown type.
401token_invalidA token was sent and not recognised. Send a valid one, or none to call anonymously.
429rate_limitedOver your request budget; wait Retry-After seconds.

Every error body is {"detail": …, "code": "…"}; branch on code. All codes: Errors.