# Get a game

Source: https://langbot.ai/docs/api/sports/get-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.

**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

| Name | Type | Required | Description |
|---|---|---|---|
| `game` | string | yes | The game's `id` (`nhl_2026020276`) or `event_id` (`ev_sports_nhl_2026020276`). |

### Query parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `since` | integer | no | Events with `t_spoken` from this ms epoch (default a day before the start); `next_since` pages. |
| `types` | string | no | Comma-separated: `score_changed`, `game_status`. |
| `limit` | integer | no | Page size. 1 to 2000. Default `500`. |

## Request

**curl**

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

**Python**

```python
from langbot import LangbotClient

async with LangbotClient() as lb:
    g = await lb.sports_game("nhl_2026020276", types=["score_changed"])
    for e in g.events:
        print(e.t_detected, e.facts["scoring_team"], e.facts["away_score"], e.facts["home_score"])
```

**TypeScript**

```ts
import { LangbotClient } from "@langbotai/sdk";

const lb = new LangbotClient();
const g = await lb.sportsGame("nhl_2026020276", { types: ["score_changed"] });
for (const e of g.events) console.log(e.t_detected, e.facts.scoring_team);
```

## 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](https://langbot.ai/docs/api/receipts/get-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](https://langbot.ai/docs/api/sim/get-timeline); the [event study](https://langbot.ai/docs/api/sim/get-study) takes `score <team>` (or `score`) as trigger words. The leagues' play-by-play text is not served.

## Errors

| Status | `code` | When |
|---|---|---|
| 404 | `not_found` | No game with that id. |
| 422 | `validation_error` | An unknown type. |
| 401 | `token_invalid` | A token was sent and not recognised. Send a valid one, or none to call anonymously. |
| 429 | `rate_limited` | Over your request budget; wait `Retry-After` seconds. |

Every error body is `{"detail": …, "code": "…"}`; branch on `code`. All codes: [Errors](https://langbot.ai/docs/api#errors).
