# games-and-markets

Read a game's state, and a market's consensus prices and no-vig probabilities, each with its source and time.

| Method | Path | Title | Access | Price | MCP tool |
| --- | --- | --- | --- | --- | --- |
| GET | [`/v1/games`](#list-games) | List games | public | 1 | none |
| GET | [`/v1/slate`](#get-slate) | Get the slate for a day | public | 1 | `get_slate` |
| GET | [`/v1/games/{game_id}`](#get-game) | Get a game | public | 1 | `get_game` |
| GET | [`/v1/markets`](#list-markets) | List a game's markets | public | 1 | none |
| GET | [`/v1/markets/{market_id}`](#get-market) | Get a market | public | 1 | `get_market` |

`GET /v1/games`

## List games
public, no key needed · 1 credit, not charged during the beta · status live

Games by competition, season, week or date, with their state. Never sorted or filtered by a betting measure. Items carry each game's state and teams; get_game adds its markets and box scores. Filter by date with `from` and `to` (kickoff times, RFC 3339).

### Parameters
- `competition` string · query  
  Only this competition's games, by slug (nfl) or ID (cmp_).  
  min length 1 · max length 40
- `season` string · query  
  Only this season's games, by label (2026).  
  pattern ^[0-9]{4}(-[0-9]{2})?$
- `week` integer · query  
  Only this week's games.  
  min 0 · max 30
- `status` string · query  
  Only games in this state.  
  One of: `scheduled`, `live`, `final`, `postponed`, `cancelled`, `suspended` (open: new values may be added).
- `from` string · query  
  Only games kicking off at or after this time.  
  format date-time
- `to` string · query  
  Only games kicking off before this time.  
  format date-time
- `limit` integer · query  
  Items per page, 1 to 50; default 20.  
  min 1 · max 50 · default 20
- `cursor` string · query  
  The next_cursor of the previous page. Send the same filters with it; changed filters are refused with invalid_request.  
  min length 1 · max length 512

### Response
`200` A page of games, in kickoff order.

- `object` const · required  
  Always list.  
  Always `"list"`.
- `data` array of object · required  
  The page's games, in the list's documented order.
  - `object` const · required  
    Always game.  
    Always `"game"`.
  - `id` string · required  
    The game's Kelly ID (gm_).  
    pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `name` string · required  
    The game's name, such as Kansas City Chiefs at Las Vegas Raiders.
  - `competition` string · nullable  
    The competition's slug, such as nfl.
  - `sport` string · nullable  
    The sport's slug, such as american_football.
  - `season` string · nullable  
    The season's label, such as 2026 or 2026-27.
  - `week` integer · nullable  
    The week, in sports that have weeks.
  - `season_type` string · nullable  
    The season type as the source names it (REG, POST, ...).
  - `kickoff_at` string · nullable  
    Scheduled start.  
    format date-time
  - `kickoff_date` string · nullable  
    The date, for a source that gives no time (kickoff_at is then null).  
    format date
  - `venue` string · nullable  
    The venue.
  - `status` string · required  
    scheduled, live, final, postponed, cancelled or suspended.  
    One of: `scheduled`, `live`, `final`, `postponed`, `cancelled`, `suspended` (open: new values may be added).
  - `score` object · nullable  
    The score, once the game has one.
    - `home` integer · nullable  
      Home points.
    - `away` integer · nullable  
      Away points.
  - `period` string · nullable  
    The period while it is live.
  - `clock` string · nullable  
    The game clock while it is live.
  - `possession` string · nullable  
    The team with the ball (tm_), while it is live.
  - `last_play` string · nullable  
    The last play, written by Kelly's template.
  - `state_provenance` any  
    Where the latest state change came from, and when.
  - `home_team` any  
    The home team.
  - `away_team` any  
    The away team.
  - `markets` array of object  
    The game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
    - `id` string  
      The market's Kelly ID (mkt_).  
      pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `kind` string  
      game, prop, future or exchange.
    - `type` string  
      The market type: h2h, spreads, totals or a prop.
    - `period` string  
      The period: full, h1, q1, ...
    - `participant_id` string · nullable  
      A prop's player or team (plr_ or tm_).
    - `name` string · nullable  
      The market's name.
    - `provenance` any  
      Where it came from, and when.
  - `player_stats` array of object  
    Each player's box score, once the source has one. Absent from list items.
    - `subject_id` string  
      The player's ID.  
      pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `game_id` string · nullable  
      The game's ID.  
      pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `season` string · nullable  
      The season's label.
    - `season_type` string · nullable  
      regular, postseason or preseason.
    - `basis` string · nullable  
      total or per_game.
    - `stats` object  
      Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
    - `provenance` any  
      Where it came from, and when.
  - `team_stats` array of object  
    Each team's box score. Absent from list items.
    - `subject_id` string  
      The team's ID.  
      pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `game_id` string · nullable  
      The game's ID.  
      pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `season` string · nullable  
      The season's label.
    - `season_type` string · nullable  
      regular, postseason or preseason.
    - `basis` string · nullable  
      total or per_game.
    - `stats` object  
      Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
    - `provenance` any  
      Where it came from, and when.
  - `provenance` any  
    Where the game's identity came from.
  - `as_of` string · required  
    When the value was true; for a derived value, its newest input's time.  
    format date-time
  - `source` string · required  
    Who produced the value, as shown to readers.  
    min length 1
  - `stale_after_ms` integer · nullable  
    On live data: milliseconds it stays current.  
    min 0
  - `attribution` string · nullable  
    Attribution the source's terms require.
  - `request_id` string · nullable  
    The request that produced this response.
  - `live_topics` array of string  
    Kelly Wire topics that update this resource (API and cards only).
  - `rg_line` string · nullable  
    The cost line (COMP-1, D19) on every resource and result that touches wagering: one engine-computed cost fact, or the short form, plus 21+ and the helpline. Show it with the value. Null on resources that don't touch wagering.
- `has_more` boolean · required  
  Whether another page follows.
- `next_cursor` string · nullable  
  Opaque cursor for the next page; send it with the same filters.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled)

### Example
```http
GET https://api.askkelly.ai/v1/games?week=4
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "type": "https://docs.askkelly.ai/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This needs the read:odds scope.",
  "param": "read:odds",
  "doc_url": "https://docs.askkelly.ai/problems/insufficient_scope",
  "request_id": "req_c30917dfb63afc8fb046ccff",
  "retryable": false,
  "display_message": "This app needs one more permission to do that."
}
```

```http
GET https://api.askkelly.ai/v1/games?competition=nfl&week=4&limit=2
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "list",
  "data": [
    {
      "object": "game",
      "id": "gm_hwxy9tewzag7fee8hb01",
      "name": "Indianapolis Colts at Washington Commanders",
      "competition": "nfl",
      "sport": "american_football",
      "season": "2026",
      "week": 4,
      "season_type": "REG",
      "kickoff_at": "2026-10-04T13:30:00Z",
      "kickoff_date": null,
      "venue": null,
      "status": "final",
      "score": {
        "home": 13,
        "away": 30
      },
      "period": null,
      "clock": null,
      "possession": null,
      "last_play": null,
      "state_provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T16:40:03Z",
        "ingest_ts": "2026-10-05T04:00:00Z"
      },
      "home_team": {
        "id": "tm_djajaghvddks6vyzqqd7",
        "name": "Washington Commanders",
        "abbreviation": "WAS",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "WAS"
            }
          ]
        }
      },
      "away_team": {
        "id": "tm_sk506ccpxwra4vkkdqch",
        "name": "Indianapolis Colts",
        "abbreviation": "IND",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "IND"
            }
          ]
        }
      },
      "provenance": {
        "source": "nflverse",
        "source_ts": "2026-10-04T16:40:03Z",
        "ingest_ts": "2026-10-05T04:00:00Z",
        "known_by": [
          {
            "source": "nflverse",
            "source_id": "2026_04_IND_WAS"
          },
          {
            "source": "the_odds_api",
            "source_id": "e10fd48054b3ef2e1a30f68baf9913a1"
          }
        ]
      },
      "as_of": "2026-10-04T16:40:03Z",
      "source": "the_odds_api",
      "attribution": "Odds data via The Odds API; nflverse data (CC BY 4.0)",
      "request_id": "req_bddaee6668375cd1f6d01934",
      "live_topics": [],
      "rg_line": null
    },
    {
      "object": "game",
      "id": "gm_5t1kg2twycs4tymwyvgd",
      "name": "New England Patriots at Buffalo Bills",
      "competition": "nfl",
      "sport": "american_football",
      "season": "2026",
      "week": 4,
      "season_type": "REG",
      "kickoff_at": "2026-10-04T17:00:00Z",
      "kickoff_date": null,
      "venue": null,
      "status": "final",
      "score": {
        "home": 26,
        "away": 29
      },
      "period": null,
      "clock": null,
      "possession": null,
      "last_play": null,
      "state_provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T20:11:48Z",
        "ingest_ts": "2026-10-05T04:00:00Z"
      },
      "home_team": {
        "id": "tm_xxq34syya7a322s20xqm",
        "name": "Buffalo Bills",
        "abbreviation": "BUF",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "BUF"
            }
          ]
        }
      },
      "away_team": {
        "id": "tm_bd0kys7yd28x4t2dva2j",
        "name": "New England Patriots",
        "abbreviation": "NE",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "NE"
            }
          ]
        }
      },
      "provenance": {
        "source": "nflverse",
        "source_ts": "2026-10-04T20:11:48Z",
        "ingest_ts": "2026-10-05T04:00:00Z",
        "known_by": [
          {
            "source": "nflverse",
            "source_id": "2026_04_NE_BUF"
          },
          {
            "source": "the_odds_api",
            "source_id": "d35abed649bd63e347ec213dbfb85066"
          }
        ]
      },
      "as_of": "2026-10-04T20:11:48Z",
      "source": "the_odds_api",
      "attribution": "Odds data via The Odds API; nflverse data (CC BY 4.0)",
      "request_id": "req_bddaee6668375cd1f6d01934",
      "live_topics": [],
      "rg_line": null
    }
  ],
  "has_more": true,
  "next_cursor": "eyJ2IjoxLCJvIjoyLCJmIjoiN2JjYjEwMWNkZmVhZGJmZCJ9"
}
```

Where each value comes from:

1. the_odds_api · as of 2026-10-04T16:40:03Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
2. the_odds_api · happened at 2026-10-04T16:40:03Z
3. nflverse · happened at 2026-10-04T12:00:00Z
4. nflverse · happened at 2026-10-04T12:00:00Z
5. nflverse · happened at 2026-10-04T16:40:03Z
6. the_odds_api · as of 2026-10-04T20:11:48Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
7. the_odds_api · happened at 2026-10-04T20:11:48Z
8. nflverse · happened at 2026-10-04T12:00:00Z
9. nflverse · happened at 2026-10-04T12:00:00Z
10. nflverse · happened at 2026-10-04T20:11:48Z

`GET /v1/slate`

## Get the slate for a day
public, no key needed · 1 credit, not charged during the beta · MCP tool `get_slate` · status live

Every sport's games kicking off on one day (today unless you name a date), local to the time zone you name (US Eastern by default), in kickoff order, with their state and markets. Never sorted or filtered by a betting measure. Every sport's games kicking off on one local day, with their markets by identity: get_market has a market's prices. Test-mode keys read the sandbox (the recorded Sunday, 2026-10-04).

### Parameters
- `date` string · query  
  The local day, YYYY-MM-DD. Default: today in tz.  
  format date
- `tz` string · query  
  The IANA time zone the day is local to, such as Europe/London or UTC. Default: America/New_York, so a US evening kickoff stays on its own day.  
  pattern ^[A-Za-z][A-Za-z0-9_+\-]*(/[A-Za-z0-9_+\-]+){0,2}$ · min length 1 · max length 64 · default "America/New_York"
- `sport` string · query  
  Only this sport's games, by sport slug (american_football) or competition slug (nfl).  
  pattern ^[a-z0-9][a-z0-9_]{0,40}$
- `competition` string · query  
  Only this competition's games, by slug (nfl).  
  pattern ^[a-z0-9][a-z0-9_]{0,40}$
- `status` string · query  
  Only games in this state: scheduled (still to come), live (suspended included) or final.  
  One of: `scheduled`, `live`, `final` (open: new values may be added).
- `limit` integer · query  
  Items per page, 1 to 50; default 25.  
  min 1 · max 50 · default 25
- `cursor` string · query  
  The next_cursor of the previous page. Send the same filters with it; changed filters are refused with invalid_request.  
  min length 1 · max length 512

### Response
`200` A page of the day's games, in kickoff order.

- `object` const · required  
  Always slate.  
  Always `"slate"`.
- `date` string · required  
  The local day, YYYY-MM-DD: the date asked for, else today in tz.  
  format date
- `timezone` string · required  
  The IANA time zone the day is local to (the tz asked for).
- `starts_at` string · required  
  The day's start in UTC (inclusive).  
  format date-time
- `ends_at` string · required  
  The day's end in UTC (exclusive); 23 or 25 hours after starts_at on a clock-change day.  
  format date-time
- `game_count` integer · required  
  How many games match, on every page.
- `data` array of object · required  
  The page's games, each with its teams, state and markets by identity (no box scores).
  - `object` const · required  
    Always game.  
    Always `"game"`.
  - `id` string · required  
    The game's Kelly ID (gm_).  
    pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `name` string · required  
    The game's name, such as Kansas City Chiefs at Las Vegas Raiders.
  - `competition` string · nullable  
    The competition's slug, such as nfl.
  - `sport` string · nullable  
    The sport's slug, such as american_football.
  - `season` string · nullable  
    The season's label, such as 2026 or 2026-27.
  - `week` integer · nullable  
    The week, in sports that have weeks.
  - `season_type` string · nullable  
    The season type as the source names it (REG, POST, ...).
  - `kickoff_at` string · nullable  
    Scheduled start.  
    format date-time
  - `kickoff_date` string · nullable  
    The date, for a source that gives no time (kickoff_at is then null).  
    format date
  - `venue` string · nullable  
    The venue.
  - `status` string · required  
    scheduled, live, final, postponed, cancelled or suspended.  
    One of: `scheduled`, `live`, `final`, `postponed`, `cancelled`, `suspended` (open: new values may be added).
  - `score` object · nullable  
    The score, once the game has one.
    - `home` integer · nullable  
      Home points.
    - `away` integer · nullable  
      Away points.
  - `period` string · nullable  
    The period while it is live.
  - `clock` string · nullable  
    The game clock while it is live.
  - `possession` string · nullable  
    The team with the ball (tm_), while it is live.
  - `last_play` string · nullable  
    The last play, written by Kelly's template.
  - `state_provenance` any  
    Where the latest state change came from, and when.
  - `home_team` any  
    The home team.
  - `away_team` any  
    The away team.
  - `markets` array of object  
    The game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
    - `id` string  
      The market's Kelly ID (mkt_).  
      pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `kind` string  
      game, prop, future or exchange.
    - `type` string  
      The market type: h2h, spreads, totals or a prop.
    - `period` string  
      The period: full, h1, q1, ...
    - `participant_id` string · nullable  
      A prop's player or team (plr_ or tm_).
    - `name` string · nullable  
      The market's name.
    - `provenance` any  
      Where it came from, and when.
  - `player_stats` array of object  
    Each player's box score, once the source has one. Absent from list items.
    - `subject_id` string  
      The player's ID.  
      pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `game_id` string · nullable  
      The game's ID.  
      pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `season` string · nullable  
      The season's label.
    - `season_type` string · nullable  
      regular, postseason or preseason.
    - `basis` string · nullable  
      total or per_game.
    - `stats` object  
      Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
    - `provenance` any  
      Where it came from, and when.
  - `team_stats` array of object  
    Each team's box score. Absent from list items.
    - `subject_id` string  
      The team's ID.  
      pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `game_id` string · nullable  
      The game's ID.  
      pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
    - `season` string · nullable  
      The season's label.
    - `season_type` string · nullable  
      regular, postseason or preseason.
    - `basis` string · nullable  
      total or per_game.
    - `stats` object  
      Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
    - `provenance` any  
      Where it came from, and when.
  - `provenance` any  
    Where the game's identity came from.
  - `as_of` string · required  
    When the value was true; for a derived value, its newest input's time.  
    format date-time
  - `source` string · required  
    Who produced the value, as shown to readers.  
    min length 1
  - `stale_after_ms` integer · nullable  
    On live data: milliseconds it stays current.  
    min 0
  - `attribution` string · nullable  
    Attribution the source's terms require.
  - `request_id` string · nullable  
    The request that produced this response.
  - `live_topics` array of string  
    Kelly Wire topics that update this resource (API and cards only).
  - `rg_line` string · nullable  
    The cost line (COMP-1, D19) on every resource and result that touches wagering: one engine-computed cost fact, or the short form, plus 21+ and the helpline. Show it with the value. Null on resources that don't touch wagering.
- `has_more` boolean · required  
  Whether another page follows.
- `next_cursor` string · nullable  
  Opaque cursor for the next page; send it with the same date, tz and filters.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled)

### Example
```http
GET https://api.askkelly.ai/v1/slate?date=2026-10-04&tz=America/New_York&limit=2
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "slate",
  "date": "2026-10-04",
  "timezone": "America/New_York",
  "starts_at": "2026-10-04T04:00:00Z",
  "ends_at": "2026-10-05T04:00:00Z",
  "game_count": 14,
  "data": [
    {
      "object": "game",
      "id": "gm_hwxy9tewzag7fee8hb01",
      "name": "Indianapolis Colts at Washington Commanders",
      "competition": "nfl",
      "sport": "american_football",
      "season": "2026",
      "week": 4,
      "season_type": "REG",
      "kickoff_at": "2026-10-04T13:30:00Z",
      "kickoff_date": null,
      "venue": null,
      "status": "final",
      "score": {
        "home": 13,
        "away": 30
      },
      "period": null,
      "clock": null,
      "possession": null,
      "last_play": null,
      "state_provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T16:40:03Z",
        "ingest_ts": "2026-10-05T04:00:00Z"
      },
      "home_team": {
        "id": "tm_djajaghvddks6vyzqqd7",
        "name": "Washington Commanders",
        "abbreviation": "WAS",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "WAS"
            }
          ]
        }
      },
      "away_team": {
        "id": "tm_sk506ccpxwra4vkkdqch",
        "name": "Indianapolis Colts",
        "abbreviation": "IND",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "IND"
            }
          ]
        }
      },
      "markets": [
        {
          "id": "mkt_v9pbqvqz1m7vcxt0adyq",
          "kind": "game",
          "type": "h2h",
          "period": "full",
          "participant_id": null,
          "name": "h2h",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        },
        {
          "id": "mkt_g4jv3z10p5y7bj1ep3th",
          "kind": "game",
          "type": "spreads",
          "period": "full",
          "participant_id": null,
          "name": "spreads",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        },
        {
          "id": "mkt_ywr7g8xgdtdda2rkd6mx",
          "kind": "game",
          "type": "totals",
          "period": "full",
          "participant_id": null,
          "name": "totals",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        }
      ],
      "provenance": {
        "source": "nflverse",
        "source_ts": "2026-10-04T16:40:03Z",
        "ingest_ts": "2026-10-05T04:00:00Z",
        "known_by": [
          {
            "source": "nflverse",
            "source_id": "2026_04_IND_WAS"
          },
          {
            "source": "the_odds_api",
            "source_id": "e10fd48054b3ef2e1a30f68baf9913a1"
          }
        ]
      },
      "as_of": "2026-10-04T16:40:03Z",
      "source": "the_odds_api",
      "attribution": "Odds data via The Odds API; nflverse data (CC BY 4.0)",
      "request_id": "req_a46f72a315ef3ad52ba4c94a",
      "live_topics": [],
      "rg_line": null
    },
    {
      "object": "game",
      "id": "gm_5t1kg2twycs4tymwyvgd",
      "name": "New England Patriots at Buffalo Bills",
      "competition": "nfl",
      "sport": "american_football",
      "season": "2026",
      "week": 4,
      "season_type": "REG",
      "kickoff_at": "2026-10-04T17:00:00Z",
      "kickoff_date": null,
      "venue": null,
      "status": "final",
      "score": {
        "home": 26,
        "away": 29
      },
      "period": null,
      "clock": null,
      "possession": null,
      "last_play": null,
      "state_provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T20:11:48Z",
        "ingest_ts": "2026-10-05T04:00:00Z"
      },
      "home_team": {
        "id": "tm_xxq34syya7a322s20xqm",
        "name": "Buffalo Bills",
        "abbreviation": "BUF",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "BUF"
            }
          ]
        }
      },
      "away_team": {
        "id": "tm_bd0kys7yd28x4t2dva2j",
        "name": "New England Patriots",
        "abbreviation": "NE",
        "competition": "nfl",
        "provenance": {
          "source": "nflverse",
          "source_ts": "2026-10-04T12:00:00Z",
          "ingest_ts": "2026-10-04T12:00:00Z",
          "known_by": [
            {
              "source": "nflverse",
              "source_id": "NE"
            }
          ]
        }
      },
      "markets": [
        {
          "id": "mkt_zby9shdxyzgts9pfzphk",
          "kind": "game",
          "type": "h2h",
          "period": "full",
          "participant_id": null,
          "name": "h2h",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        },
        {
          "id": "mkt_h9kj8bwj5hj3b24zetpm",
          "kind": "game",
          "type": "spreads",
          "period": "full",
          "participant_id": null,
          "name": "spreads",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        },
        {
          "id": "mkt_b8rrratwk5r4qd5q6zg5",
          "kind": "game",
          "type": "totals",
          "period": "full",
          "participant_id": null,
          "name": "totals",
          "provenance": {
            "source": "the_odds_api",
            "source_ts": "2026-10-04T13:00:00Z",
            "ingest_ts": "2026-10-04T13:00:00Z"
          }
        }
      ],
      "provenance": {
        "source": "nflverse",
        "source_ts": "2026-10-04T20:11:48Z",
        "ingest_ts": "2026-10-05T04:00:00Z",
        "known_by": [
          {
            "source": "nflverse",
            "source_id": "2026_04_NE_BUF"
          },
          {
            "source": "the_odds_api",
            "source_id": "d35abed649bd63e347ec213dbfb85066"
          }
        ]
      },
      "as_of": "2026-10-04T20:11:48Z",
      "source": "the_odds_api",
      "attribution": "Odds data via The Odds API; nflverse data (CC BY 4.0)",
      "request_id": "req_a46f72a315ef3ad52ba4c94a",
      "live_topics": [],
      "rg_line": null
    }
  ],
  "has_more": true,
  "next_cursor": "eyJ2IjoxLCJvIjoyLCJmIjoiN2I4MWFkYjI1OWUwNTBiNCJ9"
}
```

Where each value comes from:

1. the_odds_api · as of 2026-10-04T16:40:03Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
2. the_odds_api · happened at 2026-10-04T16:40:03Z
3. nflverse · happened at 2026-10-04T12:00:00Z
4. nflverse · happened at 2026-10-04T12:00:00Z
5. the_odds_api · happened at 2026-10-04T13:00:00Z
6. the_odds_api · happened at 2026-10-04T13:00:00Z
7. the_odds_api · happened at 2026-10-04T13:00:00Z
8. nflverse · happened at 2026-10-04T16:40:03Z
9. the_odds_api · as of 2026-10-04T20:11:48Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
10. the_odds_api · happened at 2026-10-04T20:11:48Z
11. nflverse · happened at 2026-10-04T12:00:00Z
12. nflverse · happened at 2026-10-04T12:00:00Z
13. the_odds_api · happened at 2026-10-04T13:00:00Z
14. the_odds_api · happened at 2026-10-04T13:00:00Z
15. the_odds_api · happened at 2026-10-04T13:00:00Z
16. nflverse · happened at 2026-10-04T20:11:48Z

```http
GET https://api.askkelly.ai/v1/slate?tz=Mars/Olympus_Mons
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "type": "https://docs.askkelly.ai/problems/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "tz: Value error, tz needs an IANA time zone, such as America/New_York or UTC",
  "param": "tz",
  "doc_url": "https://docs.askkelly.ai/problems/invalid_request",
  "request_id": "req_7ff1023de08ad5bcf968d6d1",
  "retryable": false,
  "display_message": "Something in that request was not understood."
}
```

`GET /v1/games/{game_id}`

## Get a game
public, no key needed · 1 credit, not charged during the beta · MCP tool `get_game` · status live

One game's schedule, live or final state, teams, markets and box scores, with `live_topics` while it is live. While the game is live, `live_topics` names its Kelly Wire topic and `stale_after_ms` how long its state stays current.

### Parameters
- `game_id` string · path · required  
  The game's Kelly ID (gm_), from search or list_games.  
  pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$

### Response
`200` The game.

- `object` const · required  
  Always game.  
  Always `"game"`.
- `id` string · required  
  The game's Kelly ID (gm_).  
  pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
- `name` string · required  
  The game's name, such as Kansas City Chiefs at Las Vegas Raiders.
- `competition` string · nullable  
  The competition's slug, such as nfl.
- `sport` string · nullable  
  The sport's slug, such as american_football.
- `season` string · nullable  
  The season's label, such as 2026 or 2026-27.
- `week` integer · nullable  
  The week, in sports that have weeks.
- `season_type` string · nullable  
  The season type as the source names it (REG, POST, ...).
- `kickoff_at` string · nullable  
  Scheduled start.  
  format date-time
- `kickoff_date` string · nullable  
  The date, for a source that gives no time (kickoff_at is then null).  
  format date
- `venue` string · nullable  
  The venue.
- `status` string · required  
  scheduled, live, final, postponed, cancelled or suspended.  
  One of: `scheduled`, `live`, `final`, `postponed`, `cancelled`, `suspended` (open: new values may be added).
- `score` object · nullable  
  The score, once the game has one.
  - `home` integer · nullable  
    Home points.
  - `away` integer · nullable  
    Away points.
- `period` string · nullable  
  The period while it is live.
- `clock` string · nullable  
  The game clock while it is live.
- `possession` string · nullable  
  The team with the ball (tm_), while it is live.
- `last_play` string · nullable  
  The last play, written by Kelly's template.
- `state_provenance` any  
  Where the latest state change came from, and when.
- `home_team` any  
  The home team.
- `away_team` any  
  The away team.
- `markets` array of object  
  The game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
  - `id` string  
    The market's Kelly ID (mkt_).  
    pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `kind` string  
    game, prop, future or exchange.
  - `type` string  
    The market type: h2h, spreads, totals or a prop.
  - `period` string  
    The period: full, h1, q1, ...
  - `participant_id` string · nullable  
    A prop's player or team (plr_ or tm_).
  - `name` string · nullable  
    The market's name.
  - `provenance` any  
    Where it came from, and when.
- `player_stats` array of object  
  Each player's box score, once the source has one. Absent from list items.
  - `subject_id` string  
    The player's ID.  
    pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `game_id` string · nullable  
    The game's ID.  
    pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `season` string · nullable  
    The season's label.
  - `season_type` string · nullable  
    regular, postseason or preseason.
  - `basis` string · nullable  
    total or per_game.
  - `stats` object  
    Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
  - `provenance` any  
    Where it came from, and when.
- `team_stats` array of object  
  Each team's box score. Absent from list items.
  - `subject_id` string  
    The team's ID.  
    pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `game_id` string · nullable  
    The game's ID.  
    pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
  - `season` string · nullable  
    The season's label.
  - `season_type` string · nullable  
    regular, postseason or preseason.
  - `basis` string · nullable  
    total or per_game.
  - `stats` object  
    Stat values by Kelly's stat key, as the source gave them: an integer, or a decimal as a string of its exact digits. Only stats the register serves on the API appear.
  - `provenance` any  
    Where it came from, and when.
- `provenance` any  
  Where the game's identity came from.
- `as_of` string · required  
  When the value was true; for a derived value, its newest input's time.  
  format date-time
- `source` string · required  
  Who produced the value, as shown to readers.  
  min length 1
- `stale_after_ms` integer · nullable  
  On live data: milliseconds it stays current.  
  min 0
- `attribution` string · nullable  
  Attribution the source's terms require.
- `request_id` string · nullable  
  The request that produced this response.
- `live_topics` array of string  
  Kelly Wire topics that update this resource (API and cards only).
- `rg_line` string · nullable  
  The cost line (COMP-1, D19) on every resource and result that touches wagering: one engine-computed cost fact, or the short form, plus 21+ and the helpline. Show it with the value. Null on resources that don't touch wagering.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled) · [`not_found`](/problems/not_found)

### Example
```http
GET https://api.askkelly.ai/v1/games/gm_55zc8ywp3mzwg79py6mv
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "game",
  "id": "gm_55zc8ywp3mzwg79py6mv",
  "name": "Kansas City Chiefs at Las Vegas Raiders",
  "competition": "nfl",
  "sport": "american_football",
  "season": "2026",
  "week": 4,
  "season_type": "REG",
  "kickoff_at": "2026-10-04T20:25:00Z",
  "kickoff_date": null,
  "venue": null,
  "status": "final",
  "score": {
    "home": 27,
    "away": 30
  },
  "period": null,
  "clock": null,
  "possession": null,
  "last_play": null,
  "state_provenance": {
    "source": "the_odds_api",
    "source_ts": "2026-10-04T23:44:18Z",
    "ingest_ts": "2026-10-05T04:00:00Z"
  },
  "home_team": {
    "id": "tm_mp49sdajkwdncngf5twg",
    "name": "Las Vegas Raiders",
    "abbreviation": "LV",
    "competition": "nfl",
    "provenance": {
      "source": "nflverse",
      "source_ts": "2026-10-04T12:00:00Z",
      "ingest_ts": "2026-10-04T12:00:00Z",
      "known_by": [
        {
          "source": "nflverse",
          "source_id": "LV"
        }
      ]
    }
  },
  "away_team": {
    "id": "tm_0xcwddhkbjaqggrxg4xg",
    "name": "Kansas City Chiefs",
    "abbreviation": "KC",
    "competition": "nfl",
    "provenance": {
      "source": "nflverse",
      "source_ts": "2026-10-04T12:00:00Z",
      "ingest_ts": "2026-10-04T12:00:00Z",
      "known_by": [
        {
          "source": "nflverse",
          "source_id": "KC"
        }
      ]
    }
  },
  "markets": [
    {
      "id": "mkt_f1sgktw2wqexfkatnd75",
      "kind": "game",
      "type": "h2h",
      "period": "full",
      "participant_id": null,
      "name": "h2h",
      "provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T13:00:00Z",
        "ingest_ts": "2026-10-04T13:00:00Z"
      }
    },
    {
      "id": "mkt_n481aesj0qg3sdm752gh",
      "kind": "game",
      "type": "spreads",
      "period": "full",
      "participant_id": null,
      "name": "spreads",
      "provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T13:00:00Z",
        "ingest_ts": "2026-10-04T13:00:00Z"
      }
    },
    {
      "id": "mkt_2qnaqfq9bvfhh1djyb53",
      "kind": "game",
      "type": "totals",
      "period": "full",
      "participant_id": null,
      "name": "totals",
      "provenance": {
        "source": "the_odds_api",
        "source_ts": "2026-10-04T13:00:00Z",
        "ingest_ts": "2026-10-04T13:00:00Z"
      }
    }
  ],
  "provenance": {
    "source": "nflverse",
    "source_ts": "2026-10-04T23:44:18Z",
    "ingest_ts": "2026-10-05T04:00:00Z",
    "known_by": [
      {
        "source": "nflverse",
        "source_id": "2026_04_KC_LV"
      },
      {
        "source": "the_odds_api",
        "source_id": "50d275b6c21abf3f19590e616ef1e742"
      }
    ]
  },
  "as_of": "2026-10-04T23:44:18Z",
  "source": "the_odds_api",
  "attribution": "Odds data via The Odds API; nflverse data (CC BY 4.0)",
  "request_id": "req_27e3a6703d4514aa34688947",
  "live_topics": [],
  "rg_line": null
}
```

Where each value comes from:

1. the_odds_api · as of 2026-10-04T23:44:18Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
2. the_odds_api · happened at 2026-10-04T23:44:18Z
3. nflverse · happened at 2026-10-04T12:00:00Z
4. nflverse · happened at 2026-10-04T12:00:00Z
5. the_odds_api · happened at 2026-10-04T13:00:00Z
6. the_odds_api · happened at 2026-10-04T13:00:00Z
7. the_odds_api · happened at 2026-10-04T13:00:00Z
8. nflverse · happened at 2026-10-04T23:44:18Z

```http
GET https://api.askkelly.ai/v1/games/gm_00000000000000000000
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "type": "https://docs.askkelly.ai/problems/not_found",
  "title": "Not found",
  "status": 404,
  "code": "not_found",
  "detail": "No game with that game_id is served.",
  "param": "game_id",
  "doc_url": "https://docs.askkelly.ai/problems/not_found",
  "request_id": "req_ef4f04ad0cdf665aceded762",
  "retryable": false,
  "display_message": "That could not be found."
}
```

`GET /v1/markets`

## List a game's markets
public, no key needed · 1 credit, not charged during the beta · status live

The markets of a game, each with its consensus line. Lists carry no edge (D21). Each item is the market as get_market returns it with no side named.

### Parameters
- `game_id` string · query · required  
  The game whose markets to list (gm_).  
  pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
- `kind` string · query  
  Only markets of this kind.  
  One of: `game`, `prop`, `future`, `exchange` (open: new values may be added).
- `limit` integer · query  
  Items per page, 1 to 50; default 20.  
  min 1 · max 50 · default 20
- `cursor` string · query  
  The next_cursor of the previous page. Send the same filters with it; changed filters are refused with invalid_request.  
  min length 1 · max length 512

### Response
`200` A page of the game's markets.

- `object` const · required  
  Always list.  
  Always `"list"`.
- `data` array of object · required  
  The page's markets, in the list's documented order.
  - `object` const · required  
    Always market.  
    Always `"market"`.
  - `id` string · required  
    Market ID (mkt_).
  - `name` string · nullable  
    Market name.
  - `game_id` string · nullable  
    Game ID (gm_).
  - `kind` string · required  
    Market kind: game, prop, future, exchange.
  - `market_type` string · required  
    Market type: h2h, spreads, totals, a prop.
  - `period` string · required  
    Period: full, h1, q1, …
  - `status` string · required  
    Consensus status: ok, or why there is none.  
    One of: `ok`, `too_few_books`, `no_prices` (open: new values may be added).
  - `consensus_line` number · nullable  
    Consensus line.
  - `hold` number · nullable  
    Books' hold.  
    min 0 · max 1
  - `books_count` integer · required  
    Books in the consensus.  
    min 0
  - `movement` object · nullable  
    Movement since open.
    - `opened_at` string · nullable  
      Opening time.  
      format date-time
    - `open_line` number · nullable  
      Opening consensus line.
    - `line_change` number · nullable  
      Movement since open.
  - `as_of` string · nullable  
    The newest book time behind the consensus.  
    format date-time
  - `source` string  
    Source shown to readers.
  - `attribution` string  
    Required attribution.
  - `selections` array of object · required  
    Every side, in the market's order.
    - `id` string  
      Selection ID (sel_).
    - `name` string · nullable  
      Selection name.
    - `side` string  
      Side: home, away, over, under, draw, yes, no, or a participant.
    - `point` number · nullable  
      The consensus line for this side.
    - `price` number · nullable  
      Consensus decimal price.
    - `implied_prob` number · nullable  
      Implied probability, vig in.  
      min 0 · max 1
    - `no_vig_prob` number · nullable  
      No-vig probability.  
      min 0 · max 1
    - `break_even` number · nullable  
      Break-even at the offered or consensus price.  
      min 0 · max 1
    - `price_basis` string  
      Which price the break-even is at (D27).  
      One of: `user`, `consensus` (open: new values may be added).
    - `edge_status_price_basis` string  
      Which price edge_status is read at: off askkelly.ai always the consensus price (D34).  
      One of: `user`, `consensus` (open: new values may be added).
    - `offered_price` object · nullable  
      The offered price.
      - `american` number  
        American odds.
      - `decimal` number  
        Decimal odds.
      - `fractional` string  
        Fractional odds.
      - `cents` number  
        Cents per $1.
      - `implied_prob` number  
        Implied probability.
    - `edge_status` string · nullable  
      D18's edge status, on named selections only.  
      One of: `edge`, `no_edge`, `not_validated`, `market_only` (open: new values may be added).
    - `edge_status_label` string  
      The brand label key for the edge status.
    - `edge_status_reason` string  
      Why this status (a stable code).
  - `request_id` string · nullable  
    The request that produced this response.
  - `live_topics` array of string  
    Kelly Wire topics that update this resource (API and cards only).
  - `rg_line` string · nullable  
    The cost line (COMP-1, D19) on every resource and result that touches wagering: one engine-computed cost fact, or the short form, plus 21+ and the helpline. Show it with the value. Null on resources that don't touch wagering.
- `has_more` boolean · required  
  Whether another page follows.
- `next_cursor` string · nullable  
  Opaque cursor for the next page; send it with the same filters.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled) · [`not_found`](/problems/not_found)

### Example
```http
GET https://api.askkelly.ai/v1/markets?game_id=gm_55zc8ywp3mzwg79py6mv&limit=1
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "list",
  "data": [
    {
      "object": "market",
      "id": "mkt_f1sgktw2wqexfkatnd75",
      "name": "Las Vegas Raiders / Kansas City Chiefs",
      "game_id": "gm_55zc8ywp3mzwg79py6mv",
      "kind": "game",
      "market_type": "h2h",
      "period": "full",
      "status": "ok",
      "consensus_line": null,
      "hold": 0.043357,
      "books_count": 2,
      "movement": {
        "opened_at": "2026-10-04T12:59:00Z",
        "open_line": null,
        "line_change": null
      },
      "as_of": "2026-10-04T12:59:00Z",
      "source": "Kelly consensus of 2 books",
      "attribution": "Odds data via The Odds API",
      "selections": [
        {
          "id": "sel_m0h3mmt73xpb6hgz8p0b",
          "name": "Las Vegas Raiders",
          "side": "home",
          "point": null,
          "price": 2.85,
          "implied_prob": 0.350877,
          "no_vig_prob": 0.324324,
          "break_even": 0.350877,
          "edge_status": null
        },
        {
          "id": "sel_prpdvg0dqppc6mqc4wns",
          "name": "Kansas City Chiefs",
          "side": "away",
          "point": null,
          "price": 1.44,
          "implied_prob": 0.694444,
          "no_vig_prob": 0.675676,
          "break_even": 0.694444,
          "edge_status": null
        }
      ],
      "request_id": "req_07f70a7c08c41f5bda9d2d04",
      "live_topics": [
        "market:mkt_f1sgktw2wqexfkatnd75"
      ],
      "rg_line": "21+ · Help: 1-800-MY-RESET"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJ2IjoxLCJvIjoxLCJmIjoiNjNiZDU2YTEyMTVhYTkxNyJ9"
}
```

Where each value comes from:

1. Kelly consensus of 2 books · as of 2026-10-04T12:59:00Z · Odds data via The Odds API

`GET /v1/markets/{market_id}`

## Get a market
public, no key needed · 1 credit, not charged during the beta · MCP tool `get_market` · status live

One market's consensus, no-vig probabilities and movement, with its source and as-of time, and its edge status read at the consensus price. Kelly's own probability and the numeric edge stay on askkelly.ai (D34). Name up to five sides in `selections` to read their edge status; give your own price for a named side in `prices` to read its break-even at that price.

### Parameters
- `market_id` string · path · required  
  The market's Kelly ID (mkt_), from get_game or list_markets.  
  pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$

- `selections` string · query  
  Up to 5 sides, comma-separated: selection IDs (sel_) or sides (home, away, over, under, draw, yes, no).  
  min length 1 · max length 200
- `prices` string · query  
  Your own price for named sides, comma-separated as side:format:price, such as home:american:-105,away:decimal:2.15. The format is one of american, decimal, fractional (5/2) or cents; Kelly never guesses one. Encode `+` as %2B.  
  min length 1 · max length 200

### Response
`200` The market.

- `object` const · required  
  Always market.  
  Always `"market"`.
- `id` string · required  
  Market ID (mkt_).
- `name` string · nullable  
  Market name.
- `game_id` string · nullable  
  Game ID (gm_).
- `kind` string · required  
  Market kind: game, prop, future, exchange.
- `market_type` string · required  
  Market type: h2h, spreads, totals, a prop.
- `period` string · required  
  Period: full, h1, q1, …
- `status` string · required  
  Consensus status: ok, or why there is none.  
  One of: `ok`, `too_few_books`, `no_prices` (open: new values may be added).
- `consensus_line` number · nullable  
  Consensus line.
- `hold` number · nullable  
  Books' hold.  
  min 0 · max 1
- `books_count` integer · required  
  Books in the consensus.  
  min 0
- `movement` object · nullable  
  Movement since open.
  - `opened_at` string · nullable  
    Opening time.  
    format date-time
  - `open_line` number · nullable  
    Opening consensus line.
  - `line_change` number · nullable  
    Movement since open.
- `as_of` string · nullable  
  The newest book time behind the consensus.  
  format date-time
- `source` string  
  Source shown to readers.
- `attribution` string  
  Required attribution.
- `selections` array of object · required  
  Every side, in the market's order.
  - `id` string  
    Selection ID (sel_).
  - `name` string · nullable  
    Selection name.
  - `side` string  
    Side: home, away, over, under, draw, yes, no, or a participant.
  - `point` number · nullable  
    The consensus line for this side.
  - `price` number · nullable  
    Consensus decimal price.
  - `implied_prob` number · nullable  
    Implied probability, vig in.  
    min 0 · max 1
  - `no_vig_prob` number · nullable  
    No-vig probability.  
    min 0 · max 1
  - `break_even` number · nullable  
    Break-even at the offered or consensus price.  
    min 0 · max 1
  - `price_basis` string  
    Which price the break-even is at (D27).  
    One of: `user`, `consensus` (open: new values may be added).
  - `edge_status_price_basis` string  
    Which price edge_status is read at: off askkelly.ai always the consensus price (D34).  
    One of: `user`, `consensus` (open: new values may be added).
  - `offered_price` object · nullable  
    The offered price.
    - `american` number  
      American odds.
    - `decimal` number  
      Decimal odds.
    - `fractional` string  
      Fractional odds.
    - `cents` number  
      Cents per $1.
    - `implied_prob` number  
      Implied probability.
  - `edge_status` string · nullable  
    D18's edge status, on named selections only.  
    One of: `edge`, `no_edge`, `not_validated`, `market_only` (open: new values may be added).
  - `edge_status_label` string  
    The brand label key for the edge status.
  - `edge_status_reason` string  
    Why this status (a stable code).
- `request_id` string · nullable  
  The request that produced this response.
- `live_topics` array of string  
  Kelly Wire topics that update this resource (API and cards only).
- `rg_line` string · nullable  
  The cost line (COMP-1, D19) on every resource and result that touches wagering: one engine-computed cost fact, or the short form, plus 21+ and the helpline. Show it with the value. Null on resources that don't touch wagering.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled) · [`not_found`](/problems/not_found)

### Example
```http
GET https://api.askkelly.ai/v1/markets/mkt_f1sgktw2wqexfkatnd75?selections=over
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "type": "https://docs.askkelly.ai/problems/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "'over' is neither a selection of this market nor one of its sides (home, away)",
  "param": "selections",
  "doc_url": "https://docs.askkelly.ai/problems/invalid_request",
  "request_id": "req_c165e69d28e6518473542d4f",
  "retryable": false,
  "display_message": "Something in that request was not understood."
}
```

```http
GET https://api.askkelly.ai/v1/markets/mkt_f1sgktw2wqexfkatnd75?selections=home
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "market",
  "id": "mkt_f1sgktw2wqexfkatnd75",
  "name": "Las Vegas Raiders / Kansas City Chiefs",
  "game_id": "gm_55zc8ywp3mzwg79py6mv",
  "kind": "game",
  "market_type": "h2h",
  "period": "full",
  "status": "ok",
  "consensus_line": null,
  "hold": 0.043357,
  "books_count": 2,
  "movement": {
    "opened_at": "2026-10-04T12:59:00Z",
    "open_line": null,
    "line_change": null
  },
  "as_of": "2026-10-04T12:59:00Z",
  "source": "Kelly consensus of 2 books",
  "attribution": "Odds data via The Odds API",
  "selections": [
    {
      "id": "sel_m0h3mmt73xpb6hgz8p0b",
      "name": "Las Vegas Raiders",
      "side": "home",
      "point": null,
      "price": 2.85,
      "implied_prob": 0.350877,
      "no_vig_prob": 0.324324,
      "break_even": 0.350877,
      "edge_status": "not_validated",
      "price_basis": "consensus",
      "edge_status_price_basis": "consensus",
      "offered_price": null,
      "edge_status_label": "voice.edge_status.not_validated",
      "edge_status_reason": "no_candidates_closing_only"
    },
    {
      "id": "sel_prpdvg0dqppc6mqc4wns",
      "name": "Kansas City Chiefs",
      "side": "away",
      "point": null,
      "price": 1.44,
      "implied_prob": 0.694444,
      "no_vig_prob": 0.675676,
      "break_even": 0.694444,
      "edge_status": null
    }
  ],
  "request_id": "req_a254cd9c215c975927901b5c",
  "live_topics": [
    "market:mkt_f1sgktw2wqexfkatnd75"
  ],
  "rg_line": "21+ · Help: 1-800-MY-RESET"
}
```

Where each value comes from:

1. Kelly consensus of 2 books · as of 2026-10-04T12:59:00Z · Odds data via The Odds API

Generated from Kelly API 2026-10-05.

---

Generated from Kelly API 2026-10-05

Support: support@askkelly.ai · Security and disclosure: https://docs.askkelly.ai/security

Information is the edge. Odds are information, not advice · 21+ · Get help
