games-and-markets
Copy page
Read a game's state, and a market's consensus prices and no-vig probabilities, each with its source and time.
On this page
| Method | Path | Title | Access | Price | MCP tool |
|---|---|---|---|---|---|
| GET | /v1/games | List games | public | 1 | none |
| GET | /v1/slate | Get the slate for a day | public | 1 | get_slate |
| GET | /v1/games/{game_id} | Get a game | public | 1 | get_game |
| GET | /v1/markets | List a game's markets | public | 1 | none |
| GET | /v1/markets/{market_id} | Get a market | public | 1 | get_market |
GET /v1/games
List gamesLink to this section
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).
ParametersLink to this section
competitionstring · queryOnly this competition's games, by slug (nfl) or ID (cmp_).
min length 1 · max length 40
seasonstring · queryOnly this season's games, by label (2026).
pattern ^[0-9]{4}(-[0-9]{2})?$
weekinteger · queryOnly this week's games.
min 0 · max 30
statusstring · queryOnly games in this state.
One of: scheduled, live, final, postponed, cancelled, suspended (open: new values may be added).
fromstring · queryOnly games kicking off at or after this time.
format date-time
tostring · queryOnly games kicking off before this time.
format date-time
limitinteger · queryItems per page, 1 to 50; default 20.
min 1 · max 50 · default 20
cursorstring · queryThe 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
ResponseLink to this section
200 A page of games, in kickoff order.
objectconstrequiredAlways list.
Always "list".
dataarray of objectrequiredThe page's games, in the list's documented order.
Show 31 fields
objectconstrequiredAlways game.
Always "game".
idstringrequiredThe game's Kelly ID (gm_).
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
namestringrequiredThe game's name, such as Kansas City Chiefs at Las Vegas Raiders.
competitionstringnullableThe competition's slug, such as nfl.
sportstringnullableThe sport's slug, such as american_football.
seasonstringnullableThe season's label, such as 2026 or 2026-27.
weekintegernullableThe week, in sports that have weeks.
season_typestringnullableThe season type as the source names it (REG, POST, ...).
kickoff_atstringnullableScheduled start.
format date-time
kickoff_datestringnullableThe date, for a source that gives no time (kickoff_at is then null).
format date
venuestringnullableThe venue.
statusstringrequiredscheduled, live, final, postponed, cancelled or suspended.
One of: scheduled, live, final, postponed, cancelled, suspended (open: new values may be added).
scoreobjectnullableThe score, once the game has one.
Show 2 fields
homeintegernullableHome points.
awayintegernullableAway points.
periodstringnullableThe period while it is live.
clockstringnullableThe game clock while it is live.
possessionstringnullableThe team with the ball (tm_), while it is live.
last_playstringnullableThe last play, written by Kelly's template.
state_provenanceanyWhere the latest state change came from, and when.
home_teamanyThe home team.
away_teamanyThe away team.
marketsarray of objectThe game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
Show 7 fields
idstringThe market's Kelly ID (mkt_).
pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
kindstringgame, prop, future or exchange.
typestringThe market type: h2h, spreads, totals or a prop.
periodstringThe period: full, h1, q1, ...
participant_idstringnullableA prop's player or team (plr_ or tm_).
namestringnullableThe market's name.
provenanceanyWhere it came from, and when.
player_statsarray of objectEach player's box score, once the source has one. Absent from list items.
Show 7 fields
subject_idstringThe player's ID.
pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
team_statsarray of objectEach team's box score. Absent from list items.
Show 7 fields
subject_idstringThe team's ID.
pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
provenanceanyWhere the game's identity came from.
as_ofstringrequiredWhen the value was true; for a derived value, its newest input's time.
format date-time
sourcestringrequiredWho produced the value, as shown to readers.
min length 1
stale_after_msintegernullableOn live data: milliseconds it stays current.
min 0
attributionstringnullableAttribution the source's terms require.
request_idstringnullableThe request that produced this response.
live_topicsarray of stringKelly Wire topics that update this resource (API and cards only).
rg_linestringnullableThe 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_morebooleanrequiredWhether another page follows.
next_cursorstringnullableOpaque cursor for the next page; send it with the same filters.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled
ExampleLink to this section
GET https://api.askkelly.ai/v1/games?week=4
Authorization: Bearer $KELLY_API_KEY{
"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."
}GET https://api.askkelly.ai/v1/games?competition=nfl&week=4&limit=2
Authorization: Bearer $KELLY_API_KEY{
"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"
}- the_odds_api · as of 2026-10-04T16:40:03Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
- the_odds_api · happened at 2026-10-04T16:40:03Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T16:40:03Z
- the_odds_api · as of 2026-10-04T20:11:48Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
- the_odds_api · happened at 2026-10-04T20:11:48Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T20:11:48Z
GET /v1/slate
Get the slate for a dayLink to this section
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).
ParametersLink to this section
datestring · queryThe local day, YYYY-MM-DD. Default: today in tz.
format date
tzstring · queryThe 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"
sportstring · queryOnly this sport's games, by sport slug (american_football) or competition slug (nfl).
pattern ^[a-z0-9][a-z0-9_]{0,40}$
competitionstring · queryOnly this competition's games, by slug (nfl).
pattern ^[a-z0-9][a-z0-9_]{0,40}$
statusstring · queryOnly games in this state: scheduled (still to come), live (suspended included) or final.
One of: scheduled, live, final (open: new values may be added).
limitinteger · queryItems per page, 1 to 50; default 25.
min 1 · max 50 · default 25
cursorstring · queryThe 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
ResponseLink to this section
200 A page of the day's games, in kickoff order.
objectconstrequiredAlways slate.
Always "slate".
datestringrequiredThe local day, YYYY-MM-DD: the date asked for, else today in tz.
format date
timezonestringrequiredThe IANA time zone the day is local to (the tz asked for).
starts_atstringrequiredThe day's start in UTC (inclusive).
format date-time
ends_atstringrequiredThe day's end in UTC (exclusive); 23 or 25 hours after starts_at on a clock-change day.
format date-time
game_countintegerrequiredHow many games match, on every page.
dataarray of objectrequiredThe page's games, each with its teams, state and markets by identity (no box scores).
Show 31 fields
objectconstrequiredAlways game.
Always "game".
idstringrequiredThe game's Kelly ID (gm_).
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
namestringrequiredThe game's name, such as Kansas City Chiefs at Las Vegas Raiders.
competitionstringnullableThe competition's slug, such as nfl.
sportstringnullableThe sport's slug, such as american_football.
seasonstringnullableThe season's label, such as 2026 or 2026-27.
weekintegernullableThe week, in sports that have weeks.
season_typestringnullableThe season type as the source names it (REG, POST, ...).
kickoff_atstringnullableScheduled start.
format date-time
kickoff_datestringnullableThe date, for a source that gives no time (kickoff_at is then null).
format date
venuestringnullableThe venue.
statusstringrequiredscheduled, live, final, postponed, cancelled or suspended.
One of: scheduled, live, final, postponed, cancelled, suspended (open: new values may be added).
scoreobjectnullableThe score, once the game has one.
Show 2 fields
homeintegernullableHome points.
awayintegernullableAway points.
periodstringnullableThe period while it is live.
clockstringnullableThe game clock while it is live.
possessionstringnullableThe team with the ball (tm_), while it is live.
last_playstringnullableThe last play, written by Kelly's template.
state_provenanceanyWhere the latest state change came from, and when.
home_teamanyThe home team.
away_teamanyThe away team.
marketsarray of objectThe game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
Show 7 fields
idstringThe market's Kelly ID (mkt_).
pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
kindstringgame, prop, future or exchange.
typestringThe market type: h2h, spreads, totals or a prop.
periodstringThe period: full, h1, q1, ...
participant_idstringnullableA prop's player or team (plr_ or tm_).
namestringnullableThe market's name.
provenanceanyWhere it came from, and when.
player_statsarray of objectEach player's box score, once the source has one. Absent from list items.
Show 7 fields
subject_idstringThe player's ID.
pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
team_statsarray of objectEach team's box score. Absent from list items.
Show 7 fields
subject_idstringThe team's ID.
pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
provenanceanyWhere the game's identity came from.
as_ofstringrequiredWhen the value was true; for a derived value, its newest input's time.
format date-time
sourcestringrequiredWho produced the value, as shown to readers.
min length 1
stale_after_msintegernullableOn live data: milliseconds it stays current.
min 0
attributionstringnullableAttribution the source's terms require.
request_idstringnullableThe request that produced this response.
live_topicsarray of stringKelly Wire topics that update this resource (API and cards only).
rg_linestringnullableThe 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_morebooleanrequiredWhether another page follows.
next_cursorstringnullableOpaque cursor for the next page; send it with the same date, tz and filters.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled
ExampleLink to this section
GET https://api.askkelly.ai/v1/slate?date=2026-10-04&tz=America/New_York&limit=2
Authorization: Bearer $KELLY_API_KEY{
"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"
}- the_odds_api · as of 2026-10-04T16:40:03Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
- the_odds_api · happened at 2026-10-04T16:40:03Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T12:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- nflverse · happened at 2026-10-04T16:40:03Z
- the_odds_api · as of 2026-10-04T20:11:48Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
- the_odds_api · happened at 2026-10-04T20:11:48Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T12:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- nflverse · happened at 2026-10-04T20:11:48Z
GET https://api.askkelly.ai/v1/slate?tz=Mars/Olympus_Mons
Authorization: Bearer $KELLY_API_KEY{
"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 gameLink to this section
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.
ParametersLink to this section
game_idstring · pathrequiredThe game's Kelly ID (gm_), from search or list_games.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
ResponseLink to this section
200 The game.
objectconstrequiredAlways game.
Always "game".
idstringrequiredThe game's Kelly ID (gm_).
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
namestringrequiredThe game's name, such as Kansas City Chiefs at Las Vegas Raiders.
competitionstringnullableThe competition's slug, such as nfl.
sportstringnullableThe sport's slug, such as american_football.
seasonstringnullableThe season's label, such as 2026 or 2026-27.
weekintegernullableThe week, in sports that have weeks.
season_typestringnullableThe season type as the source names it (REG, POST, ...).
kickoff_atstringnullableScheduled start.
format date-time
kickoff_datestringnullableThe date, for a source that gives no time (kickoff_at is then null).
format date
venuestringnullableThe venue.
statusstringrequiredscheduled, live, final, postponed, cancelled or suspended.
One of: scheduled, live, final, postponed, cancelled, suspended (open: new values may be added).
scoreobjectnullableThe score, once the game has one.
Show 2 fields
homeintegernullableHome points.
awayintegernullableAway points.
periodstringnullableThe period while it is live.
clockstringnullableThe game clock while it is live.
possessionstringnullableThe team with the ball (tm_), while it is live.
last_playstringnullableThe last play, written by Kelly's template.
state_provenanceanyWhere the latest state change came from, and when.
home_teamanyThe home team.
away_teamanyThe away team.
marketsarray of objectThe game's markets, by identity (get_market has their numbers). Absent from list_games items; the slate's items carry them.
Show 7 fields
idstringThe market's Kelly ID (mkt_).
pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
kindstringgame, prop, future or exchange.
typestringThe market type: h2h, spreads, totals or a prop.
periodstringThe period: full, h1, q1, ...
participant_idstringnullableA prop's player or team (plr_ or tm_).
namestringnullableThe market's name.
provenanceanyWhere it came from, and when.
player_statsarray of objectEach player's box score, once the source has one. Absent from list items.
Show 7 fields
subject_idstringThe player's ID.
pattern ^plr_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
team_statsarray of objectEach team's box score. Absent from list items.
Show 7 fields
subject_idstringThe team's ID.
pattern ^tm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
game_idstringnullableThe game's ID.
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
seasonstringnullableThe season's label.
season_typestringnullableregular, postseason or preseason.
basisstringnullabletotal or per_game.
statsobjectStat 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.
provenanceanyWhere it came from, and when.
provenanceanyWhere the game's identity came from.
as_ofstringrequiredWhen the value was true; for a derived value, its newest input's time.
format date-time
sourcestringrequiredWho produced the value, as shown to readers.
min length 1
stale_after_msintegernullableOn live data: milliseconds it stays current.
min 0
attributionstringnullableAttribution the source's terms require.
request_idstringnullableThe request that produced this response.
live_topicsarray of stringKelly Wire topics that update this resource (API and cards only).
rg_linestringnullableThe 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.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled · not_found
ExampleLink to this section
GET https://api.askkelly.ai/v1/games/gm_55zc8ywp3mzwg79py6mv
Authorization: Bearer $KELLY_API_KEY{
"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
}- the_odds_api · as of 2026-10-04T23:44:18Z · Odds data via The Odds API; nflverse data (CC BY 4.0)
- the_odds_api · happened at 2026-10-04T23:44:18Z
- nflverse · happened at 2026-10-04T12:00:00Z
- nflverse · happened at 2026-10-04T12:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- the_odds_api · happened at 2026-10-04T13:00:00Z
- nflverse · happened at 2026-10-04T23:44:18Z
GET https://api.askkelly.ai/v1/games/gm_00000000000000000000
Authorization: Bearer $KELLY_API_KEY{
"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 marketsLink to this section
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.
ParametersLink to this section
game_idstring · queryrequiredThe game whose markets to list (gm_).
pattern ^gm_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
kindstring · queryOnly markets of this kind.
One of: game, prop, future, exchange (open: new values may be added).
limitinteger · queryItems per page, 1 to 50; default 20.
min 1 · max 50 · default 20
cursorstring · queryThe 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
ResponseLink to this section
200 A page of the game's markets.
objectconstrequiredAlways list.
Always "list".
dataarray of objectrequiredThe page's markets, in the list's documented order.
Show 19 fields
objectconstrequiredAlways market.
Always "market".
idstringrequiredMarket ID (mkt_).
namestringnullableMarket name.
game_idstringnullableGame ID (gm_).
kindstringrequiredMarket kind: game, prop, future, exchange.
market_typestringrequiredMarket type: h2h, spreads, totals, a prop.
periodstringrequiredPeriod: full, h1, q1, …
statusstringrequiredConsensus status: ok, or why there is none.
One of: ok, too_few_books, no_prices (open: new values may be added).
consensus_linenumbernullableConsensus line.
holdnumbernullableBooks' hold.
min 0 · max 1
books_countintegerrequiredBooks in the consensus.
min 0
movementobjectnullableMovement since open.
Show 3 fields
opened_atstringnullableOpening time.
format date-time
open_linenumbernullableOpening consensus line.
line_changenumbernullableMovement since open.
as_ofstringnullableThe newest book time behind the consensus.
format date-time
sourcestringSource shown to readers.
attributionstringRequired attribution.
selectionsarray of objectrequiredEvery side, in the market's order.
Show 14 fields
idstringSelection ID (sel_).
namestringnullableSelection name.
sidestringSide: home, away, over, under, draw, yes, no, or a participant.
pointnumbernullableThe consensus line for this side.
pricenumbernullableConsensus decimal price.
implied_probnumbernullableImplied probability, vig in.
min 0 · max 1
no_vig_probnumbernullableNo-vig probability.
min 0 · max 1
break_evennumbernullableBreak-even at the offered or consensus price.
min 0 · max 1
price_basisstringWhich price the break-even is at (D27).
One of: user, consensus (open: new values may be added).
edge_status_price_basisstringWhich 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_priceobjectnullableThe offered price.
Show 5 fields
americannumberAmerican odds.
decimalnumberDecimal odds.
fractionalstringFractional odds.
centsnumberCents per $1.
implied_probnumberImplied probability.
edge_statusstringnullableD18's edge status, on named selections only.
One of: edge, no_edge, not_validated, market_only (open: new values may be added).
edge_status_labelstringThe brand label key for the edge status.
edge_status_reasonstringWhy this status (a stable code).
request_idstringnullableThe request that produced this response.
live_topicsarray of stringKelly Wire topics that update this resource (API and cards only).
rg_linestringnullableThe 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_morebooleanrequiredWhether another page follows.
next_cursorstringnullableOpaque cursor for the next page; send it with the same filters.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled · not_found
ExampleLink to this section
GET https://api.askkelly.ai/v1/markets?game_id=gm_55zc8ywp3mzwg79py6mv&limit=1
Authorization: Bearer $KELLY_API_KEY{
"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"
}- 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 marketLink to this section
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.
ParametersLink to this section
market_idstring · pathrequiredThe market's Kelly ID (mkt_), from get_game or list_markets.
pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
selectionsstring · queryUp to 5 sides, comma-separated: selection IDs (sel_) or sides (home, away, over, under, draw, yes, no).
min length 1 · max length 200
pricesstring · queryYour 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
ResponseLink to this section
200 The market.
objectconstrequiredAlways market.
Always "market".
idstringrequiredMarket ID (mkt_).
namestringnullableMarket name.
game_idstringnullableGame ID (gm_).
kindstringrequiredMarket kind: game, prop, future, exchange.
market_typestringrequiredMarket type: h2h, spreads, totals, a prop.
periodstringrequiredPeriod: full, h1, q1, …
statusstringrequiredConsensus status: ok, or why there is none.
One of: ok, too_few_books, no_prices (open: new values may be added).
consensus_linenumbernullableConsensus line.
holdnumbernullableBooks' hold.
min 0 · max 1
books_countintegerrequiredBooks in the consensus.
min 0
movementobjectnullableMovement since open.
Show 3 fields
opened_atstringnullableOpening time.
format date-time
open_linenumbernullableOpening consensus line.
line_changenumbernullableMovement since open.
as_ofstringnullableThe newest book time behind the consensus.
format date-time
sourcestringSource shown to readers.
attributionstringRequired attribution.
selectionsarray of objectrequiredEvery side, in the market's order.
Show 14 fields
idstringSelection ID (sel_).
namestringnullableSelection name.
sidestringSide: home, away, over, under, draw, yes, no, or a participant.
pointnumbernullableThe consensus line for this side.
pricenumbernullableConsensus decimal price.
implied_probnumbernullableImplied probability, vig in.
min 0 · max 1
no_vig_probnumbernullableNo-vig probability.
min 0 · max 1
break_evennumbernullableBreak-even at the offered or consensus price.
min 0 · max 1
price_basisstringWhich price the break-even is at (D27).
One of: user, consensus (open: new values may be added).
edge_status_price_basisstringWhich 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_priceobjectnullableThe offered price.
Show 5 fields
americannumberAmerican odds.
decimalnumberDecimal odds.
fractionalstringFractional odds.
centsnumberCents per $1.
implied_probnumberImplied probability.
edge_statusstringnullableD18's edge status, on named selections only.
One of: edge, no_edge, not_validated, market_only (open: new values may be added).
edge_status_labelstringThe brand label key for the edge status.
edge_status_reasonstringWhy this status (a stable code).
request_idstringnullableThe request that produced this response.
live_topicsarray of stringKelly Wire topics that update this resource (API and cards only).
rg_linestringnullableThe 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.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled · not_found
ExampleLink to this section
GET https://api.askkelly.ai/v1/markets/mkt_f1sgktw2wqexfkatnd75?selections=over
Authorization: Bearer $KELLY_API_KEY{
"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."
}GET https://api.askkelly.ai/v1/markets/mkt_f1sgktw2wqexfkatnd75?selections=home
Authorization: Bearer $KELLY_API_KEY{
"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"
}- 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.