The fixture list: one coherent game per row, so an agent never has to assemble a game from market searches and team-name matching. Each row carries both sides with their provider ids and live scores, the UTC kickoff, the provider's own status, the esports series format, a tennis game's tournament edition (tier, place, venue time zone, draw and dates), and the game's winner markets (the moneyline, or a soccer game's three 1X2 legs) with their condition_id, outcome token ids and provider moneyline prices. A game's spreads, totals and player props are not on the row: list_game_markets lists every market of one event_slug. Ordered by kickoff, then event_slug; games whose kickoff the provider has not published sort last. For what is on now, pass window=now: without it the list is the whole catalog and starts at the oldest game still open, which can be weeks old.
Args:
- sport (string, optional): canonical bucket, case-insensitive, with - and _ read as a space (table-tennis and Table Tennis are one bucket). Omitted means every covered sport
- league (string, optional): league tag as this list's coverage.leagues spells it (nfl, epl, cs2), case-insensitive
- status (string, optional): scheduled, live, paused, ended, postponed, cancelled, suspended, delayed, or unknown. ended, cancelled and postponed also list finished games that have left the live board (freshness.source stored) for kickoffs in starts_after..starts_before, by default the 7 days before now; such a page can be short, or empty, while has_more is true, so follow next_cursor until has_more is false
- starts_after / starts_before (string, optional): RFC 3339 kickoff bounds; a game with no published kickoff is excluded whenever either bound is set
- window (string, optional): all (default, the whole catalog) or now: games the provider reports in play, plus any other game whose kickoff was at most 3 hours ago or is still to come, without ended, postponed or cancelled games
- limit (number, 1-100, default 20)
- cursor (string, optional): opaque gms_v1_ cursor from next_cursor. It pins the page position, not a snapshot: the catalog is live, so a game added or removed between pages moves with it
- expand (string or string[], optional): sharp_money adds each game's sharp_money, the object get_game_sharp_money returns, read from the sport board's cached aggregate (one board read per sport, so a page stays fast). A game the board did not evaluate reads status not_computed: call get_game_sharp_money for it. A sport whose aggregate could not be read reads status unavailable while the rest of the page is served. Pro and Max. settlement adds each winner market's settlement, the block list_game_markets serves (status observed, not_posed or unavailable; oracle_status, payouts, result outcome or split, the 50-50; resolved_at), from the same store: it never waits for Polymarket, so a game not read lately reads unavailable while its read starts. Every plan. Pass both, as an array, for both blocks: the costs add
Returns: data, has_more, next_cursor, as_of, coverage and meta. Read coverage before reading an empty page: it names the sports and leagues this deployment serves and any scope whose source was unavailable for this read, so an unserved sport is never confused with a quiet night. A sport or status this deployment does not serve returns an empty page, not an error. status.state keeps postponed, cancelled, suspended and delayed distinct from a plain 'not live', and a kickoff in the past is never read as live on its own. Scores are the provider's own strings, because a set score and a run total are not both integers. Carries no sharp-money split unless expand is sharp_money, and no holder identity; holders stay on get_market_holders.