Skip to main content
GET
cURL
Use this endpoint to list games and their markets without matching team names across separate searches. Each row includes both competitors, kickoff, provider status, and available moneyline prices. The catalog changes as Polymarket updates games. To refresh one game after a webhook event, use Game.

Parameters

When either kickoff bound is present, games without a published kickoff are excluded.

Key response fields

Identity

event_slug identifies a game, for example nfl-buf-nyj-2026-09-22. Use it with Game to read one game. The live_sports_updated webhook also includes this ID. game_id is Polymarket’s gameId for the event and its related markets. It is omitted when the source data does not establish a single ID for the slug.

Both sides

competitors is the two sides in the provider’s own order. For a team league the provider lists the home side first. score is a string because the provider sends one. A set score, a map score and a run total are not all integers. Read coverage.competitors before matching competitors with other data. provider_ids means both have provider IDs; labels means only names are available, which can make matching ambiguous. unavailable means neither competitor could be identified.

Status

status.state is one of scheduled, live, paused, ended, postponed, cancelled, suspended, delayed or unknown. Keep postponed, cancelled, and suspended distinct in your client. Each status has a different consequence for when or whether play can resume. A passed kickoff does not make a game live. status.state stays scheduled until Polymarket reports a change. status.match_status uses a shared status vocabulary across leagues. status.provider_status preserves Polymarket’s original string, including when match_status is unknown.

Markets

markets is every market this read linked to the game, ordered by condition_id. draw_offered says whether the game has a draw leg at all. Do not assume a two-outcome moneyline: a soccer 1X2 game has three.

Market prices

Read markets[].prices.provider.state before using moneyline prices: binding_provenance explains how prices were matched to competitors. Use those competitor identities instead of inferring them from YES and NO. prices.observed_at dates the cached market data when prices come from Polymarket’s market API (Gamma). For a pair from its order-book API (CLOB), it is the older of the 2 price timestamps. prices.observation_source identifies which basis was used. A null timestamp means the observation time is unknown; Gamma supplies no source timestamp for this data. The game’s freshness block describes the source used. Markets without a classified moneyline price pair omit prices.

Coverage

Every page carries a top-level coverage with sports, leagues and sources_unavailable. An empty data with a full coverage means no games matched; an empty data with your sport missing from coverage.sports means the sport is not served. A sport or status outside the published vocabulary returns an empty page, never a 400. sources_unavailable names any scope whose source half did not answer this read, as <sport>:<half>.

Ordering and paging

Ordered by kickoff, then by event_slug. Games the provider has published no kickoff for sort last. The gms_v1_ cursor records a page position. Since the catalog can change between requests, games may be added or removed while you fetch pages.

Example

Caching

Send the response’s weak ETag in If-None-Match on your next request. If the catalog has not changed, the server returns 304 with no body. request_id, cost, and as_of do not affect the validator.

What it does not return

  • Order books, midpoints or a market-specific price history. Use GET /api/v1/market/{condition_id}/snapshot for its fuller market card.
  • Sharp money splits or holder identity. Those stay on GET /api/v1/markets/sharp-money-flows and GET /api/v1/market/{condition_id}/holders under their own access rules.
  • Every Polymarket sports event. coverage.sports and coverage.leagues name what this deployment serves; a game outside them is not in this catalog.
  • A derived or normalized score. Scores are the provider’s strings, and a game with no live-score frame reads coverage.scores: "unavailable" rather than zero.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

X-Query-Validation
enum<string>

Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.

Available options:
strict
If-None-Match
string

Conditional GET using a weak semantic ETag from an earlier response. A matching payload returns 304 with an empty body; request_id, cost and as_of are excluded from the validator, so a rebuilt but unchanged catalog still revalidates.

Query Parameters

sport
string

Canonical sport bucket, case-insensitive, with - and _ read as a space: table-tennis and Table Tennis are the same bucket. Omit for every covered sport. A bucket this deployment does not serve returns an empty page.

league
string

League tag, case-insensitive, as coverage.leagues spells it: nfl, epl, cs2. Omit for every league inside the selected sports.

status
enum<string>

Keep only games in this state. A value outside the enum returns an empty page.

Available options:
scheduled,
live,
paused,
ended,
postponed,
cancelled,
suspended,
delayed,
unknown
starts_after
string<date-time>

RFC 3339 instant. Keep only games whose kickoff is at or after it. Games with no published kickoff are excluded whenever either bound is set.

starts_before
string<date-time>

RFC 3339 instant. Keep only games whose kickoff is at or before it. Must be at or after starts_after.

limit
integer
default:20

Page size. Out-of-range values are clamped to 1..100.

Required range: 1 <= x <= 100
cursor
string

Opaque gms_v1_ cursor from next_cursor. It pins the page position (kickoff and event_slug), not a snapshot: the catalog is live, so a game added or removed between pages moves with it. A cursor this endpoint did not issue returns 400 with error.param=cursor.

Response

A page of covered games with the deployment's published coverage

object
string
required
Allowed value: "list"
data
object[]
required
has_more
boolean
required
as_of
string<date-time>
required

When this read assembled the catalog. Per-source vintage is on each game's freshness.

coverage
object
required

What this deployment covers, published with every page so a client never has to guess whether an empty list means no games or no coverage.

meta
object
required
next_cursor
string

Pass as cursor for the next page. Present only when has_more is true.