Use this endpoint to list games and their markets without matching team names across separate searches. Each row includes both competitors, kickoff, provider status, available moneyline prices, traded volume, each winner market’s liquidity, and a tennis game’s tournament.The catalog changes as Polymarket updates games. To refresh one game after a webhook event, use Game.To see what is on now, send window=now. Without it you get the whole catalog in kickoff order, and its first page can hold only games from earlier days that Polymarket still keeps open.
Filter by sport, ignoring case. Hyphens and underscores count as spaces, so table-tennis and Table Tennis match the same sport. A sport we do not cover returns an empty list, and the response names sport in X-Query-Unmatched; coverage.sports lists the sports we cover.
league
Filter by a league listed in coverage.leagues, ignoring case.
status
Filter by 1 of the states described under Status. Any other value returns 400 with error.reasoninvalid_query and error.param set to status. Upcoming games are scheduled.
starts_after
Include kickoffs at or after this RFC 3339 timestamp.
starts_before
Include kickoffs at or before this RFC 3339 timestamp. It must be at or after starts_after.
window
all, the default, returns the whole catalog. now returns what is on now, as described under What is on now. Any other value returns 400 with error.param set to window.
limit
Return 1 to 100 games per page. The default is 20, and out-of-range values are clamped.
cursor
Continue with the previous response’s next_cursor. Treat it as an opaque value.
expand
Send sharp_money to attach each game’s sharp money. Pro and Max only. See Sharp money. Send settlement to attach each winner market’s settlement, on every plan. See Settlement. Repeat expand to send both.
When either kickoff bound is present, games without a published kickoff are excluded.
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.
competitors is the two sides in the provider’s own order. For a team league the provider lists the home side first.
Field
What it is
name
The competitor’s name as the provider gives it
provider_id
The provider’s league-scoped id, as a string
logo
Provider crest or logo URL
score
The provider’s score, verbatim, as a string
record
The provider’s season record, for example 12-4
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.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 the live-score feed’s original string, including when match_status is unknown.status.match_status, status.provider_status, and status.live come only from a live-score feed. A game no feed has reported yet, which is most scheduled games, omits all three, so read status.state to tell a scheduled game from a live one.
status.ended_at is when the game ended, as first observed, in RFC 3339 UTC. status.ended_at_source says who observed it. Both are on every game, and both are null unless status.state is ended and an end was observed.
ended_at_source
Where ended_at comes from
sports_ws
The first Polymarket Sports WebSocket update that reported the game final, at the time we received it.
gamma_finished
Polymarket’s event finish time, for a game no such update ended. It is served only when it is earlier than the market’s resolution, and never for an MMA or boxing card, where the event’s finish time is the last fight’s.
null
No end was observed.
We never infer an end from the kickoff, the game clock, or the market’s resolution. A null on an ended game means the end time is unknown, and games that ended before this field shipped have null. To measure the time from the end to settlement, compare ended_at with markets[].settlement.resolved_at.
markets holds the game’s winner markets, ordered by condition_id: the moneyline, or a soccer game’s three 1X2 legs. Spreads, totals, team totals, period lines and player props are not here. List game markets returns them.
Field
What it is
id
The mkt_-prefixed id every other V1 response uses
condition_id
The raw provider condition id
sports_market_type
The provider’s own type, for example moneyline or spread
side
Which side the YES leg pays: home, away, draw or other
outcome_yes, outcome_no
The provider’s outcome labels
outcome_token_ids
CLOB token ids in the provider’s own index order
prices
Provider moneyline state and observation clock, when this market has a classified projection
liquidity
Polymarket’s reported liquidity for this market, with its source and read time. See Volume and liquidity.
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.
Read markets[].prices.provider.state before using moneyline prices:
State
Meaning
paired
competitor_a and competitor_b each have a price, label, source details, and provider ID when available.
incomplete
The source did not establish a complete price pair. Read reason and the available identity fields.
invalid
The supplied data could not produce a valid price pair. Read reason; no guessed pair is returned.
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.
volume is the game’s traded volume as Polymarket reports it. It is omitted when the provider reports none.
Field
What it is
value
The figure, at full precision
unit
taker_shares: one side of each trade, counted in shares, not dollars
basis
game_lines for the game’s own lines, or event_total for every market in the Polymarket event
source
polymarket_data (Polymarket’s data API) or gamma (its market API)
observed_at
When we read the figure from the provider, not a provider timestamp. Omitted when unknown.
fresh_for_seconds
How long after observed_at the figure is held current
markets[].liquidity is the liquidity Polymarket’s market API reports for that market: value, source (always gamma) and observed_at, when we read it. It describes the market’s resting order book, not traded volume, and Polymarket documents no unit for it. A market whose provider read carried none omits it.Neither field is ever sent as 0 in place of a missing figure. Per-market volume is not included: the catalog holds no sourced, dated figure for each market. A finished game read after it leaves the live board carries neither field.
A tennis game carries tournament: the tournament edition its game page states. The facts come from 0xinsider’s reviewed registry, curated from official ATP, WTA and ITF pages, which source_urls lists. Polymarket supplies only the competition label and the tour.
Field
What it is
label
The provider competition label that selected the edition, verbatim, for example Rolex Paris Masters
tour
atp, wta or itf
draw
qualification when the label carries Polymarket’s qualifying mark (, Qualification), main for an unmarked ATP or WTA label. Omitted for an unmarked ITF label, because Polymarket gives an ITF qualifying match the main draw’s label.
tier
The edition’s category, for example ATP Masters 1000, ATP Challenger 50, WTA 250 or ITF M15
location
city, country and country_code (ISO 3166-1 alpha-2)
timezone
The venue’s IANA time zone, for example Europe/Paris. Format the venue’s local time with it.
edition_year, starts_on, ends_on
The edition’s year and its first and last official days, inclusive (YYYY-MM-DD). A qualifying match can be played before starts_on.
source_urls
The official tournament, tour, federation and time-zone pages the facts were taken from
checked_on
When those pages were checked. It is not a score or price clock.
tier, location and timezone are omitted when no official page states them. tournament itself is omitted outside tennis, when the registry holds no single edition for the game’s label, players’ tour and kickoff, and on a finished game read after it leaves the live board. It is never guessed.
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.EuroLeague games use sport=Basketball and league=euroleague. Filter with ?sport=Basketball&league=euroleague; coverage.leagues includes euroleague even when the provider has no matching games.NCAA men’s college basketball games use sport=Basketball and league=cbb. Filter with ?sport=Basketball&league=cbb; coverage.leagues includes cbb even when the provider has no matching games.NCAA women’s college basketball games use sport=Basketball and league=cwbb. Filter with ?sport=Basketball&league=cwbb; coverage.leagues includes cwbb even when the provider has no matching games. Most of these games are thinly traded.K League 1 games use sport=Soccer and league=kor. Filter with ?sport=Soccer&league=kor; coverage.leagues includes kor even when the provider has no matching games. This scope covers K League 1; K League 2 games are not included.UEFA Europa League games use sport=Soccer and league=uel, and UEFA Conference League games use sport=Soccer and league=uecl. Filter with ?sport=Soccer&league=uel or ?sport=Soccer&league=uecl; coverage.leagues includes both keys even when the provider has no matching games. The Champions League stays league=ucl.sources_unavailable names any scope whose source half did not answer this read, as <sport>:<half>.
Send expand=sharp_money to attach a sharp_money object to every game on the page. It is the same object Game sharp money returns for 1 game, and it needs a Pro or Max key. A key whose account has no active Pro or Max subscription gets 402subscription_required.On the list, a game the current board did not evaluate has statusnot_computed. Read it with Game sharp money, which evaluates that game on request. statusunavailable means its sport’s money could not be read for this request; the rest of the page is still served. A list read does not wait while a sport’s money is computed again, so the first read after a quiet spell can be unavailable, and a read a few seconds later carries the figures. Without expand, rows carry no sharp_money key.
Send expand=settlement to attach settlement to every winner market on the page. It is the same block List game markets returns on each row: status, Polymarket’s oracle_status, payouts, result (outcome or the 50-50 split), winning_outcome_index, was_disputed, resolved_at and observed_at. Any plan can send it, and it adds 2 to the request cost.The list never waits for Polymarket. A winner market we have seen settle carries its settled block. Any other market of a game that no read has asked about lately has statusunavailable, and the game’s read starts at once, so a read a second or two later carries the block. Treat unavailable as “ask again shortly”, never as unsettled. Without expand=settlement, markets carry no settlement key.
Every game Polymarket reports in play, with status.statelive or paused, however long ago it kicked off.
Every other game whose kickoff was at most 3 hours ago or is still to come. A game can start late, and some competitions get no live status from Polymarket, so a recent kickoff stays in the list.
Games with no published kickoff. They sort last.
It leaves out games that are ended, postponed or cancelled. It also leaves out a game that is not in play and kicked off more than 3 hours ago, such as a match suspended weeks ago that Polymarket still keeps open. The window is measured from the time of your request, and it combines with every other filter.
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.
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.
Sharp money, unless you send expand=sharp_money. See Sharp money.
Settlement, unless you send expand=settlement. See Settlement.
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.
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).
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.
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.
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, not an error, and the response names sport in X-Query-Unmatched; coverage.sports lists the served buckets.
League tag, case-insensitive, as this list's coverage.leagues spells it (GET /api/v1/coverage lists no leagues): nfl, epl, cs2, euroleague, cbb, cwbb. EuroLeague games use sport=Basketball and league=euroleague; NCAA men's and women's college basketball games use sport=Basketball with league=cbb and league=cwbb. Omit for every league inside the selected sports.
Keep only games in this state. ended, cancelled and postponed also list finished games that have left the live board, read from their stored records, for kickoffs within starts_after..starts_before (default: the 7 days before now). Without status, or with any other state, the list is the live and upcoming board. A value outside the enum answers 400 invalid_query with error.param=status, and its message lists the accepted values: upcoming games are scheduled.
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. With a finished status, the stored games' look-back starts here; omitted, it starts 7 days before starts_before, and nothing caps an earlier value.
Which games to read. all, the default, lists the whole covered catalog, which can start with games the provider still holds open weeks after kickoff. now lists what is on now: every game the provider reports in play (live or paused), plus any other game whose kickoff was at most 3 hours ago or is still to come; ended, postponed and cancelled games are left out, and a game with no published kickoff stays and sorts last. Combines with every other filter. A value other than all or now returns 400 invalid_query with error.param=window.
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. With a finished status, a page that spent its read budget carries a cursor past everything it read, which may be past the last game it returned. A cursor this endpoint did not issue returns 400 with error.param=cursor.
sharp_money adds each game's sharp_money, the GameSharpMoney object GET /api/v1/games/{event_slug}/sharp-money returns, read from the sport board's cached aggregate: one board read per sport on the page, never a per-game compute. A game the board did not evaluate carries status not_computed (read the per-game route for it); a sport whose aggregate could not be read carries status unavailable while the rest of the page is served. Pro and Max only; adds 3 to the request cost. settlement adds settlement to each winner market, the GameMarketSettlement block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. It never waits for Polymarket: a settled market carries its recorded settlement even on a game not read lately, and any other market of such a game carries status unavailable while its read starts, so a read a moment later may answer. Every plan; adds 2 to the request cost. Repeatable; the two combine.
Available options:
sharp_money,
settlement
Response
A page of covered games with the deployment's published coverage
When this read assembled the catalog; with status ended, cancelled or postponed, when it read the stored records. Per-source vintage is on each game's freshness.
Pass as cursor for the next page. Present only when has_more is true.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"0xinsider API","colors":{"primary":"#000000","light":"#000000","dark":"#ffffff"},"logo":{"light":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/logo/light.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=5a737b3d5f5bace7059eb57500f3c8ef","dark":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/logo/dark.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=2039a645e8826fe146e6cd8e15498ca5"},"favicon":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/favicon.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=06727454da2da854b5cdd4a0b06075fb","api":{"openapi":"api-reference/openapi.json"},"navbar":{"links":[{"href":"mailto:support@0xinsider.com","label":"Support"}],"primary":{"type":"button","label":"Get API key","href":"https://0xinsider.com/developers"}},"footer":{"socials":{"x":"https://x.com/0xinsiderdotcom","github":"https://github.com/0xinsider","linkedin":"https://linkedin.com/company/0xinsider-com"}},"seo":{"metatags":{"msvalidate.01":"46E18D97E322917120999977418630DE"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"markdown":{"schema":false,"instructions":["The Markdown of an API reference page leaves out the OpenAPI schema.","Every object an endpoint returns or a webhook carries, with each field's type, presence and meaning, is on https://docs.0xinsider.com/api-reference/objects.md.","The full OpenAPI 3.1 spec names each operation's and each webhook's exact parameters, request body and response schema: https://docs.0xinsider.com/api-reference/openapi.json."]},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Terminal","icon":"chart-line","href":"https://0xinsider.com"},{"anchor":"Product changelog","icon":"list","href":"https://0xinsider.com/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"0xinsider","hasAudioNarration":false,"actualSubdomain":"0xinsider","customDomains":["docs.0xinsider.com"],"gitSource":{"type":"github","owner":"0xinsider","repo":"docs.0xinsider.com","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{},"buildId":"6aefaa7d3729d361787eee68","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API reference","count":131},{"language":"default","tag":"Traders","count":26},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Webhook events","count":18},{"language":"default","tag":"Changelog","count":18},{"language":"default","tag":"API updates","count":18},{"language":"default","tag":"Older entries","count":17},{"language":"default","tag":"Markets","count":16},{"language":"default","tag":"Webhooks","count":15},{"language":"default","tag":"Whale trades","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"[data-active],[data-active] a,[role=\"tab\"],[class*=\"playground\"] button,[class*=\"try-it\"],.bg-primary-dark,a[class*=\"anchor\"],a[class*=\"group\"],li a,nav a{transition:color 150ms ease, background-color 150ms ease, border-color 150ms ease, opacity 150ms ease, transform 150ms ease}[class*=\"badge\"],[data-testid*=\"badge\"]{--tw-bg-opacity: 1 !important}:root{--primary: 0 0 0;--primary-light: 0 0 0;--primary-dark: 0 0 0;--primary-foreground: 255 255 255}.dark{--primary-light: 255 255 255;--primary-dark: 255 255 255}.dark .bg-primary-dark~* .text-white,.dark .bg-primary-dark~* svg,.dark .bg-primary-dark~svg{color:#000000!important}.dark [data-active=\"true\"],.dark [data-active=\"true\"] a{color:#ffffff!important}[data-active=\"true\"],[data-active=\"true\"] a{color:#000000!important}.dark [class*=\"GET\"],.dark [class*=\"get\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"GET\"],[class*=\"get\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"POST\"],.dark [class*=\"post\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"POST\"],[class*=\"post\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"PUT\"],.dark [class*=\"put\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"PUT\"],[class*=\"put\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"DELETE\"],.dark [class*=\"delete\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"DELETE\"],[class*=\"delete\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"playground\"] button,.dark [class*=\"try-it\"]{background-color:#ffffff!important;color:#000000!important}[class*=\"playground\"] button,[class*=\"try-it\"]{background-color:#000000!important;color:#ffffff!important}.dark [role=\"tab\"][aria-selected=\"true\"],.dark [role=\"tab\"][data-state=\"active\"]{border-color:#ffffff!important;color:#ffffff!important}[role=\"tab\"][aria-selected=\"true\"],[role=\"tab\"][data-state=\"active\"]{border-color:#000000!important;color:#000000!important}"}],"page":{"pagePath":"api-reference/endpoint/list-games","slug":"/api-reference/endpoint/list-games","pageMetadata":{"title":"List games","description":"List games with both competitors, kickoff times, status, and their winner markets.","openapi":"GET /api/v1/games","href":"/api-reference/endpoint/list-games"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"List games with both competitors, kickoff times, status, and their winner markets.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Use this endpoint to list games and their markets without matching team names across separate searches. Each row includes both competitors, kickoff, provider status, available moneyline prices, traded volume, each winner market’s liquidity, and a tennis game’s tournament.`}),`\n`,_jsxs(_components.p,{children:[`The catalog changes as Polymarket updates games. To refresh one game after a webhook event, use `,_jsx(_components.a,{href:`/api-reference/endpoint/get-game`,children:`Game`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`To see what is on now, send `,_jsx(_components.code,{children:`window=now`}),`. Without it you get the whole catalog in kickoff order, and its first page can hold only games from earlier days that Polymarket still keeps open.`]}),`\n`,_jsx(Heading,{level:`2`,id:`parameters`,children:`Parameters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sport`})}),_jsxs(_components.td,{children:[`Filter by sport, ignoring case. Hyphens and underscores count as spaces, so `,_jsx(_components.code,{children:`table-tennis`}),` and `,_jsx(_components.code,{children:`Table Tennis`}),` match the same sport. A sport we do not cover returns an empty list, and the response names `,_jsx(_components.code,{children:`sport`}),` in `,_jsx(_components.code,{children:`X-Query-Unmatched`}),`; `,_jsx(_components.code,{children:`coverage.sports`}),` lists the sports we cover.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`league`})}),_jsxs(_components.td,{children:[`Filter by a league listed in `,_jsx(_components.code,{children:`coverage.leagues`}),`, ignoring case.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status`})}),_jsxs(_components.td,{children:[`Filter by 1 of the states described under `,_jsx(_components.a,{href:`#status`,children:`Status`}),`. Any other value returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.reason`}),` `,_jsx(_components.code,{children:`invalid_query`}),` and `,_jsx(_components.code,{children:`error.param`}),` set to `,_jsx(_components.code,{children:`status`}),`. Upcoming games are `,_jsx(_components.code,{children:`scheduled`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`starts_after`})}),_jsx(_components.td,{children:`Include kickoffs at or after this RFC 3339 timestamp.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`starts_before`})}),_jsxs(_components.td,{children:[`Include kickoffs at or before this RFC 3339 timestamp. It must be at or after `,_jsx(_components.code,{children:`starts_after`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`window`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`all`}),`, the default, returns the whole catalog. `,_jsx(_components.code,{children:`now`}),` returns what is on now, as described under `,_jsx(_components.a,{href:`#what-is-on-now`,children:`What is on now`}),`. Any other value returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` set to `,_jsx(_components.code,{children:`window`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`limit`})}),_jsx(_components.td,{children:`Return 1 to 100 games per page. The default is 20, and out-of-range values are clamped.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cursor`})}),_jsxs(_components.td,{children:[`Continue with the previous response’s `,_jsx(_components.code,{children:`next_cursor`}),`. Treat it as an opaque value.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`expand`})}),_jsxs(_components.td,{children:[`Send `,_jsx(_components.code,{children:`sharp_money`}),` to attach each game’s sharp money. Pro and Max only. See `,_jsx(_components.a,{href:`#sharp-money`,children:`Sharp money`}),`. Send `,_jsx(_components.code,{children:`settlement`}),` to attach each winner market’s settlement, on every plan. See `,_jsx(_components.a,{href:`#settlement`,children:`Settlement`}),`. Repeat `,_jsx(_components.code,{children:`expand`}),` to send both.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`When either kickoff bound is present, games without a published kickoff are excluded.`}),`\n`,_jsx(Heading,{level:`2`,id:`key-response-fields`,children:`Key response fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[]`})}),_jsx(_components.td,{children:`Each row describes 1 game and its winner markets.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`coverage`})}),_jsx(_components.td,{children:`It lists supported sports and leagues, and sources unavailable for this read.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`has_more`}),`, `,_jsx(_components.code,{children:`next_cursor`})]}),_jsx(_components.td,{children:`They tell you whether another page exists and how to request it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`as_of`})}),_jsxs(_components.td,{children:[`It dates this response. Each game’s `,_jsx(_components.code,{children:`freshness`}),` dates its underlying sources.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`identity`,children:`Identity`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`event_slug`}),` identifies a game, for example `,_jsx(_components.code,{children:`nfl-buf-nyj-2026-09-22`}),`. Use it with `,_jsx(_components.a,{href:`/api-reference/endpoint/get-game`,children:`Game`}),` to read one game. The `,_jsx(_components.code,{children:`live_sports_updated`}),` webhook also includes this ID.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`game_id`}),` is Polymarket’s `,_jsx(_components.code,{children:`gameId`}),` for the event and its related markets. It is omitted when the source data does not establish a single ID for the slug.`]}),`\n`,_jsx(Heading,{level:`2`,id:`both-sides`,children:`Both sides`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`competitors`}),` is the two sides in the provider’s own order. For a team league the provider lists the home side first.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it is`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`name`})}),_jsx(_components.td,{children:`The competitor’s name as the provider gives it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`provider_id`})}),_jsx(_components.td,{children:`The provider’s league-scoped id, as a string`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`logo`})}),_jsx(_components.td,{children:`Provider crest or logo URL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`score`})}),_jsx(_components.td,{children:`The provider’s score, verbatim, as a string`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`record`})}),_jsxs(_components.td,{children:[`The provider’s season record, for example `,_jsx(_components.code,{children:`12-4`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`score`}),` is a string because the provider sends one. A set score, a map score and a run total are not all integers.`]}),`\n`,_jsxs(_components.p,{children:[`Read `,_jsx(_components.code,{children:`coverage.competitors`}),` before matching competitors with other data. `,_jsx(_components.code,{children:`provider_ids`}),` means both have provider IDs; `,_jsx(_components.code,{children:`labels`}),` means only names are available, which can make matching ambiguous. `,_jsx(_components.code,{children:`unavailable`}),` means neither competitor could be identified.`]}),`\n`,_jsx(Heading,{level:`2`,id:`status`,children:`Status`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status.state`}),` is one of `,_jsx(_components.code,{children:`scheduled`}),`, `,_jsx(_components.code,{children:`live`}),`, `,_jsx(_components.code,{children:`paused`}),`, `,_jsx(_components.code,{children:`ended`}),`, `,_jsx(_components.code,{children:`postponed`}),`, `,_jsx(_components.code,{children:`cancelled`}),`, `,_jsx(_components.code,{children:`suspended`}),`, `,_jsx(_components.code,{children:`delayed`}),` or `,_jsx(_components.code,{children:`unknown`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Keep `,_jsx(_components.code,{children:`postponed`}),`, `,_jsx(_components.code,{children:`cancelled`}),`, and `,_jsx(_components.code,{children:`suspended`}),` distinct in your client. Each status has a different consequence for when or whether play can resume.`]}),`\n`,_jsxs(_components.p,{children:[`A passed kickoff does not make a game live. `,_jsx(_components.code,{children:`status.state`}),` stays `,_jsx(_components.code,{children:`scheduled`}),` until Polymarket reports a change.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status.match_status`}),` uses a shared status vocabulary across leagues. `,_jsx(_components.code,{children:`status.provider_status`}),` preserves the live-score feed’s original string, including when `,_jsx(_components.code,{children:`match_status`}),` is `,_jsx(_components.code,{children:`unknown`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status.match_status`}),`, `,_jsx(_components.code,{children:`status.provider_status`}),`, and `,_jsx(_components.code,{children:`status.live`}),` come only from a live-score feed. A game no feed has reported yet, which is most scheduled games, omits all three, so read `,_jsx(_components.code,{children:`status.state`}),` to tell a scheduled game from a live one.`]}),`\n`,_jsx(Heading,{level:`3`,id:`when-the-game-ended`,children:`When the game ended`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status.ended_at`}),` is when the game ended, as first observed, in RFC 3339 UTC. `,_jsx(_components.code,{children:`status.ended_at_source`}),` says who observed it. Both are on every game, and both are `,_jsx(_components.code,{children:`null`}),` unless `,_jsx(_components.code,{children:`status.state`}),` is `,_jsx(_components.code,{children:`ended`}),` and an end was observed.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`ended_at_source`})}),_jsxs(_components.th,{children:[`Where `,_jsx(_components.code,{children:`ended_at`}),` comes from`]})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sports_ws`})}),_jsx(_components.td,{children:`The first Polymarket Sports WebSocket update that reported the game final, at the time we received it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`gamma_finished`})}),_jsx(_components.td,{children:`Polymarket’s event finish time, for a game no such update ended. It is served only when it is earlier than the market’s resolution, and never for an MMA or boxing card, where the event’s finish time is the last fight’s.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`null`})}),_jsx(_components.td,{children:`No end was observed.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`We never infer an end from the kickoff, the game clock, or the market’s resolution. A `,_jsx(_components.code,{children:`null`}),` on an ended game means the end time is unknown, and games that ended before this field shipped have `,_jsx(_components.code,{children:`null`}),`. To measure the time from the end to settlement, compare `,_jsx(_components.code,{children:`ended_at`}),` with `,_jsx(_components.code,{children:`markets[].settlement.resolved_at`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`markets`,children:`Markets`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`markets`}),` holds the game’s winner markets, ordered by `,_jsx(_components.code,{children:`condition_id`}),`: the moneyline, or a soccer game’s three 1X2 legs. Spreads, totals, team totals, period lines and player props are not here. `,_jsx(_components.a,{href:`/api-reference/endpoint/list-game-markets`,children:`List game markets`}),` returns them.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it is`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`id`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`mkt_`}),`-prefixed id every other V1 response uses`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`condition_id`})}),_jsx(_components.td,{children:`The raw provider condition id`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sports_market_type`})}),_jsxs(_components.td,{children:[`The provider’s own type, for example `,_jsx(_components.code,{children:`moneyline`}),` or `,_jsx(_components.code,{children:`spread`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`side`})}),_jsxs(_components.td,{children:[`Which side the YES leg pays: `,_jsx(_components.code,{children:`home`}),`, `,_jsx(_components.code,{children:`away`}),`, `,_jsx(_components.code,{children:`draw`}),` or `,_jsx(_components.code,{children:`other`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`outcome_yes`}),`, `,_jsx(_components.code,{children:`outcome_no`})]}),_jsx(_components.td,{children:`The provider’s outcome labels`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`outcome_token_ids`})}),_jsx(_components.td,{children:`CLOB token ids in the provider’s own index order`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`prices`})}),_jsx(_components.td,{children:`Provider moneyline state and observation clock, when this market has a classified projection`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`liquidity`})}),_jsxs(_components.td,{children:[`Polymarket’s reported liquidity for this market, with its source and read time. See `,_jsx(_components.a,{href:`#volume-and-liquidity`,children:`Volume and liquidity`}),`.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`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.`]}),`\n`,_jsx(Heading,{level:`2`,id:`market-prices`,children:`Market prices`}),`\n`,_jsxs(_components.p,{children:[`Read `,_jsx(_components.code,{children:`markets[].prices.provider.state`}),` before using moneyline prices:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`State`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`paired`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`competitor_a`}),` and `,_jsx(_components.code,{children:`competitor_b`}),` each have a price, label, source details, and provider ID when available.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`incomplete`})}),_jsxs(_components.td,{children:[`The source did not establish a complete price pair. Read `,_jsx(_components.code,{children:`reason`}),` and the available identity fields.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid`})}),_jsxs(_components.td,{children:[`The supplied data could not produce a valid price pair. Read `,_jsx(_components.code,{children:`reason`}),`; no guessed pair is returned.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`binding_provenance`}),` explains how prices were matched to competitors. Use those competitor identities instead of inferring them from YES and NO.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`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. `,_jsx(_components.code,{children:`prices.observation_source`}),` identifies which basis was used.`]}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`null`}),` timestamp means the observation time is unknown; Gamma supplies no source timestamp for this data. The game’s `,_jsx(_components.code,{children:`freshness`}),` block describes the source used. Markets without a classified moneyline price pair omit `,_jsx(_components.code,{children:`prices`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`volume-and-liquidity`,children:`Volume and liquidity`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`volume`}),` is the game’s traded volume as Polymarket reports it. It is omitted when the provider reports none.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it is`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`value`})}),_jsx(_components.td,{children:`The figure, at full precision`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unit`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`taker_shares`}),`: one side of each trade, counted in shares, not dollars`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`basis`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`game_lines`}),` for the game’s own lines, or `,_jsx(_components.code,{children:`event_total`}),` for every market in the Polymarket event`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`source`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`polymarket_data`}),` (Polymarket’s data API) or `,_jsx(_components.code,{children:`gamma`}),` (its market API)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`observed_at`})}),_jsx(_components.td,{children:`When we read the figure from the provider, not a provider timestamp. Omitted when unknown.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fresh_for_seconds`})}),_jsxs(_components.td,{children:[`How long after `,_jsx(_components.code,{children:`observed_at`}),` the figure is held current`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`markets[].liquidity`}),` is the liquidity Polymarket’s market API reports for that market: `,_jsx(_components.code,{children:`value`}),`, `,_jsx(_components.code,{children:`source`}),` (always `,_jsx(_components.code,{children:`gamma`}),`) and `,_jsx(_components.code,{children:`observed_at`}),`, when we read it. It describes the market’s resting order book, not traded volume, and Polymarket documents no unit for it. A market whose provider read carried none omits it.`]}),`\n`,_jsxs(_components.p,{children:[`Neither field is ever sent as `,_jsx(_components.code,{children:`0`}),` in place of a missing figure. Per-market volume is not included: the catalog holds no sourced, dated figure for each market. A finished game read after it leaves the live board carries neither field.`]}),`\n`,_jsx(Heading,{level:`2`,id:`tennis-tournament`,children:`Tennis tournament`}),`\n`,_jsxs(_components.p,{children:[`A tennis game carries `,_jsx(_components.code,{children:`tournament`}),`: the tournament edition its game page states. The facts come from 0xinsider’s reviewed registry, curated from official ATP, WTA and ITF pages, which `,_jsx(_components.code,{children:`source_urls`}),` lists. Polymarket supplies only the competition label and the tour.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it is`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`label`})}),_jsxs(_components.td,{children:[`The provider competition label that selected the edition, verbatim, for example `,_jsx(_components.code,{children:`Rolex Paris Masters`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tour`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`atp`}),`, `,_jsx(_components.code,{children:`wta`}),` or `,_jsx(_components.code,{children:`itf`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`draw`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`qualification`}),` when the label carries Polymarket’s qualifying mark (`,_jsx(_components.code,{children:`, Qualification`}),`), `,_jsx(_components.code,{children:`main`}),` for an unmarked ATP or WTA label. Omitted for an unmarked ITF label, because Polymarket gives an ITF qualifying match the main draw’s label.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tier`})}),_jsxs(_components.td,{children:[`The edition’s category, for example `,_jsx(_components.code,{children:`ATP Masters 1000`}),`, `,_jsx(_components.code,{children:`ATP Challenger 50`}),`, `,_jsx(_components.code,{children:`WTA 250`}),` or `,_jsx(_components.code,{children:`ITF M15`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`location`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`city`}),`, `,_jsx(_components.code,{children:`country`}),` and `,_jsx(_components.code,{children:`country_code`}),` (ISO 3166-1 alpha-2)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timezone`})}),_jsxs(_components.td,{children:[`The venue’s IANA time zone, for example `,_jsx(_components.code,{children:`Europe/Paris`}),`. Format the venue’s local time with it.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`edition_year`}),`, `,_jsx(_components.code,{children:`starts_on`}),`, `,_jsx(_components.code,{children:`ends_on`})]}),_jsxs(_components.td,{children:[`The edition’s year and its first and last official days, inclusive (`,_jsx(_components.code,{children:`YYYY-MM-DD`}),`). A qualifying match can be played before `,_jsx(_components.code,{children:`starts_on`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`source_urls`})}),_jsx(_components.td,{children:`The official tournament, tour, federation and time-zone pages the facts were taken from`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checked_on`})}),_jsx(_components.td,{children:`When those pages were checked. It is not a score or price clock.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`tier`}),`, `,_jsx(_components.code,{children:`location`}),` and `,_jsx(_components.code,{children:`timezone`}),` are omitted when no official page states them. `,_jsx(_components.code,{children:`tournament`}),` itself is omitted outside tennis, when the registry holds no single edition for the game’s label, players’ tour and kickoff, and on a finished game read after it leaves the live board. It is never guessed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`coverage`,children:`Coverage`}),`\n`,_jsxs(_components.p,{children:[`Every page carries a top-level `,_jsx(_components.code,{children:`coverage`}),` with `,_jsx(_components.code,{children:`sports`}),`, `,_jsx(_components.code,{children:`leagues`}),` and `,_jsx(_components.code,{children:`sources_unavailable`}),`. An empty `,_jsx(_components.code,{children:`data`}),` with a full `,_jsx(_components.code,{children:`coverage`}),` means no games matched; an empty `,_jsx(_components.code,{children:`data`}),` with your sport missing from `,_jsx(_components.code,{children:`coverage.sports`}),` means the sport is not served. A `,_jsx(_components.code,{children:`sport`}),` or `,_jsx(_components.code,{children:`status`}),` outside the published vocabulary returns an empty page, never a `,_jsx(_components.code,{children:`400`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`EuroLeague games use `,_jsx(_components.code,{children:`sport=Basketball`}),` and `,_jsx(_components.code,{children:`league=euroleague`}),`. Filter with `,_jsx(_components.code,{children:`?sport=Basketball\u0026league=euroleague`}),`; `,_jsx(_components.code,{children:`coverage.leagues`}),` includes `,_jsx(_components.code,{children:`euroleague`}),` even when the provider has no matching games.`]}),`\n`,_jsxs(_components.p,{children:[`NCAA men’s college basketball games use `,_jsx(_components.code,{children:`sport=Basketball`}),` and `,_jsx(_components.code,{children:`league=cbb`}),`. Filter with `,_jsx(_components.code,{children:`?sport=Basketball\u0026league=cbb`}),`; `,_jsx(_components.code,{children:`coverage.leagues`}),` includes `,_jsx(_components.code,{children:`cbb`}),` even when the provider has no matching games.`]}),`\n`,_jsxs(_components.p,{children:[`NCAA women’s college basketball games use `,_jsx(_components.code,{children:`sport=Basketball`}),` and `,_jsx(_components.code,{children:`league=cwbb`}),`. Filter with `,_jsx(_components.code,{children:`?sport=Basketball\u0026league=cwbb`}),`; `,_jsx(_components.code,{children:`coverage.leagues`}),` includes `,_jsx(_components.code,{children:`cwbb`}),` even when the provider has no matching games. Most of these games are thinly traded.`]}),`\n`,_jsxs(_components.p,{children:[`K League 1 games use `,_jsx(_components.code,{children:`sport=Soccer`}),` and `,_jsx(_components.code,{children:`league=kor`}),`. Filter with `,_jsx(_components.code,{children:`?sport=Soccer\u0026league=kor`}),`; `,_jsx(_components.code,{children:`coverage.leagues`}),` includes `,_jsx(_components.code,{children:`kor`}),` even when the provider has no matching games. This scope covers K League 1; K League 2 games are not included.`]}),`\n`,_jsxs(_components.p,{children:[`UEFA Europa League games use `,_jsx(_components.code,{children:`sport=Soccer`}),` and `,_jsx(_components.code,{children:`league=uel`}),`, and UEFA Conference League games use `,_jsx(_components.code,{children:`sport=Soccer`}),` and `,_jsx(_components.code,{children:`league=uecl`}),`. Filter with `,_jsx(_components.code,{children:`?sport=Soccer\u0026league=uel`}),` or `,_jsx(_components.code,{children:`?sport=Soccer\u0026league=uecl`}),`; `,_jsx(_components.code,{children:`coverage.leagues`}),` includes both keys even when the provider has no matching games. The Champions League stays `,_jsx(_components.code,{children:`league=ucl`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`sources_unavailable`}),` names any scope whose source half did not answer this read, as `,_jsx(_components.code,{children:`\u003csport>:\u003chalf>`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sharp-money`,children:`Sharp money`}),`\n`,_jsxs(_components.p,{children:[`Send `,_jsx(_components.code,{children:`expand=sharp_money`}),` to attach a `,_jsx(_components.code,{children:`sharp_money`}),` object to every game on the page. It is the same object `,_jsx(_components.a,{href:`/api-reference/endpoint/get-game-sharp-money`,children:`Game sharp money`}),` returns for 1 game, and it needs a Pro or Max key. A key whose account has no active Pro or Max subscription gets `,_jsx(_components.code,{children:`402`}),` `,_jsx(_components.code,{children:`subscription_required`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`On the list, a game the current board did not evaluate has `,_jsx(_components.code,{children:`status`}),` `,_jsx(_components.code,{children:`not_computed`}),`. Read it with Game sharp money, which evaluates that game on request. `,_jsx(_components.code,{children:`status`}),` `,_jsx(_components.code,{children:`unavailable`}),` means its sport’s money could not be read for this request; the rest of the page is still served. A list read does not wait while a sport’s money is computed again, so the first read after a quiet spell can be `,_jsx(_components.code,{children:`unavailable`}),`, and a read a few seconds later carries the figures. Without `,_jsx(_components.code,{children:`expand`}),`, rows carry no `,_jsx(_components.code,{children:`sharp_money`}),` key.`]}),`\n`,_jsx(Heading,{level:`2`,id:`settlement`,children:`Settlement`}),`\n`,_jsxs(_components.p,{children:[`Send `,_jsx(_components.code,{children:`expand=settlement`}),` to attach `,_jsx(_components.code,{children:`settlement`}),` to every winner market on the page. It is the same block `,_jsx(_components.a,{href:`/api-reference/endpoint/list-game-markets`,children:`List game markets`}),` returns on each row: `,_jsx(_components.code,{children:`status`}),`, Polymarket’s `,_jsx(_components.code,{children:`oracle_status`}),`, `,_jsx(_components.code,{children:`payouts`}),`, `,_jsx(_components.code,{children:`result`}),` (`,_jsx(_components.code,{children:`outcome`}),` or the 50-50 `,_jsx(_components.code,{children:`split`}),`), `,_jsx(_components.code,{children:`winning_outcome_index`}),`, `,_jsx(_components.code,{children:`was_disputed`}),`, `,_jsx(_components.code,{children:`resolved_at`}),` and `,_jsx(_components.code,{children:`observed_at`}),`. Any plan can send it, and it adds 2 to the request cost.`]}),`\n`,_jsxs(_components.p,{children:[`The list never waits for Polymarket. A winner market we have seen settle carries its settled block. Any other market of a game that no read has asked about lately has `,_jsx(_components.code,{children:`status`}),` `,_jsx(_components.code,{children:`unavailable`}),`, and the game’s read starts at once, so a read a second or two later carries the block. Treat `,_jsx(_components.code,{children:`unavailable`}),` as “ask again shortly”, never as unsettled. Without `,_jsx(_components.code,{children:`expand=settlement`}),`, markets carry no `,_jsx(_components.code,{children:`settlement`}),` key.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-on-now`,children:`What is on now`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`window=now`}),` keeps these games:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Every game Polymarket reports in play, with `,_jsx(_components.code,{children:`status.state`}),` `,_jsx(_components.code,{children:`live`}),` or `,_jsx(_components.code,{children:`paused`}),`, however long ago it kicked off.`]}),`\n`,_jsx(_components.li,{children:`Every other game whose kickoff was at most 3 hours ago or is still to come. A game can start late, and some competitions get no live status from Polymarket, so a recent kickoff stays in the list.`}),`\n`,_jsx(_components.li,{children:`Games with no published kickoff. They sort last.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`It leaves out games that are `,_jsx(_components.code,{children:`ended`}),`, `,_jsx(_components.code,{children:`postponed`}),` or `,_jsx(_components.code,{children:`cancelled`}),`. It also leaves out a game that is not in play and kicked off more than 3 hours ago, such as a match suspended weeks ago that Polymarket still keeps open. The window is measured from the time of your request, and it combines with every other filter.`]}),`\n`,_jsx(Heading,{level:`2`,id:`ordering-and-paging`,children:`Ordering and paging`}),`\n`,_jsxs(_components.p,{children:[`Ordered by kickoff, then by `,_jsx(_components.code,{children:`event_slug`}),`. Games the provider has published no kickoff for sort last.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`gms_v1_`}),` cursor records a page position. Since the catalog can change between requests, games may be added or removed while you fetch pages.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsx(_components.p,{children:`To list what is on now:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -sS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OXINSIDER_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.0xinsider.com/api/v1/games?window=now\u0026limit=20'`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`To list live soccer games:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -sS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OXINSIDER_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.0xinsider.com/api/v1/games?sport=Soccer\u0026status=live\u0026limit=20'`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`To list K League 1 games across statuses:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -sS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OXINSIDER_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.0xinsider.com/api/v1/games?sport=Soccer\u0026league=kor\u0026limit=20'`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`caching`,children:`Caching`}),`\n`,_jsxs(_components.p,{children:[`Send the response’s weak `,_jsx(_components.code,{children:`ETag`}),` in `,_jsx(_components.code,{children:`If-None-Match`}),` on your next request. If the catalog has not changed, the server returns `,_jsx(_components.code,{children:`304`}),` with no body. `,_jsx(_components.code,{children:`request_id`}),`, `,_jsx(_components.code,{children:`cost`}),`, and `,_jsx(_components.code,{children:`as_of`}),` do not affect the validator.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-does-not-return`,children:`What it does not return`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Order books, midpoints or a market-specific price history. Use `,_jsx(_components.a,{href:`/api-reference/endpoint/get-market-snapshot`,children:_jsx(_components.code,{children:`GET /api/v1/market/{condition_id}/snapshot`})}),` for its fuller market card.`]}),`\n`,_jsxs(_components.li,{children:[`Holder identity. It stays on `,_jsx(_components.a,{href:`/api-reference/endpoint/get-market-holders`,children:_jsx(_components.code,{children:`GET /api/v1/market/{condition_id}/holders`})}),` under its own access rules.`]}),`\n`,_jsxs(_components.li,{children:[`Sharp money, unless you send `,_jsx(_components.code,{children:`expand=sharp_money`}),`. See `,_jsx(_components.a,{href:`#sharp-money`,children:`Sharp money`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Settlement, unless you send `,_jsx(_components.code,{children:`expand=settlement`}),`. See `,_jsx(_components.a,{href:`#settlement`,children:`Settlement`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Every Polymarket sports event. `,_jsx(_components.code,{children:`coverage.sports`}),` and `,_jsx(_components.code,{children:`coverage.leagues`}),` name what this deployment serves; a game outside them is not in this catalog.`]}),`\n`,_jsxs(_components.li,{children:[`A derived or normalized score. Scores are the provider’s strings, and a game with no live-score frame reads `,_jsx(_components.code,{children:`coverage.scores: \"unavailable\"`}),` rather than zero.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List games","description":"List games with both competitors, kickoff times, status, and their winner markets.","openapi":"GET /api/v1/games","href":"/api-reference/endpoint/list-games"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"Key response fields","slug":"key-response-fields","depth":2,"children":[]},{"title":"Identity","slug":"identity","depth":2,"children":[]},{"title":"Both sides","slug":"both-sides","depth":2,"children":[]},{"title":"Status","slug":"status","depth":2,"children":[{"title":"When the game ended","slug":"when-the-game-ended","depth":3,"children":[]}]},{"title":"Markets","slug":"markets","depth":2,"children":[]},{"title":"Market prices","slug":"market-prices","depth":2,"children":[]},{"title":"Volume and liquidity","slug":"volume-and-liquidity","depth":2,"children":[]},{"title":"Tennis tournament","slug":"tennis-tournament","depth":2,"children":[]},{"title":"Coverage","slug":"coverage","depth":2,"children":[]},{"title":"Sharp money","slug":"sharp-money","depth":2,"children":[]},{"title":"Settlement","slug":"settlement","depth":2,"children":[]},{"title":"What is on now","slug":"what-is-on-now","depth":2,"children":[]},{"title":"Ordering and paging","slug":"ordering-and-paging","depth":2,"children":[]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"Caching","slug":"caching","depth":2,"children":[]},{"title":"What it does not return","slug":"what-it-does-not-return","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/0xinsider/127d3f7931557afe/changelog-anchors.js"],"openApiReferenceData":{"operation":{"operationId":"listGames","summary":"List covered games","description":"List games with both competitors, kickoff times, status, and their winner markets.","tags":["Games"],"parameters":["e272d565-889e-4f05-b550-c26c3c3f8da8","fc096cfc-7513-4d62-883f-bc8c0eb811f2","68f54cca-cd77-490d-a17c-51b01c566bfb","8271f4dd-1769-414f-842a-cec30251fbf0","2d2f02ee-ffa5-4dd8-8433-ba525deedd44","d590c647-c8a4-414f-bb42-948395a1b5a9","87778876-e55a-4129-b11d-ee6dc1e651bc","12b0b364-a751-4f7f-99f0-e029db3e9632","0ca4a905-5e3f-42c1-9ceb-20ceac1a0fdf","32c110ce-db70-4f0c-bc6d-10bbbd8763c8","ec391d8e-6cce-407a-b352-fd56645f8e31","94f9421e-29d0-4539-b16a-2a8cb03cc34a"],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/games?sport=Soccer\u0026status=live\u0026limit=20'"}],"x-latency-budget":{"milliseconds":250,"measurement":"response-ready","requirement":"engineering-budget"},"responses":{"200":"2000d5c7-b2aa-4be0-a8eb-d6469125f630","304":"0d7c7d22-d378-4309-87b1-0f77e3d033a6","400":"13fd917b-c660-4015-b78b-38695a416d53","401":"aee612ad-e72c-41c1-949c-ab622da4cb3e","402":"5927e16d-a990-42c2-814d-2fe46ed57461","403":"6a4ec749-d416-494f-bb9c-f8b2303a907b","408":"a2c21256-62f9-40a2-924e-0d4824bfea26","423":"d39d116f-2fba-45be-81e9-2d11298155db","429":"223a8588-2ee1-4489-ab35-caac3125ef70","500":"9930cbaf-8dfd-4390-8e1c-a10e9b5e2a3e","503":"3df81d30-8966-4721-b606-d1d9f281b175"},"method":"get","type":"path","servers":["2ad484fe-94b7-439b-b221-8af155051f3d","5cd2ef08-5581-43fd-8c8b-afbd9f40fc58"],"security":["492b753b-ea58-4928-9009-99bfe0a64119","0870948c-5b42-42f1-9c39-ec6dc389730e"],"path":"/api/v1/games","baseUrlOptions":["https://api.0xinsider.com","https://0xinsider.com/sandbox"],"title":"List covered games","codeSamples":[{"label":"cURL","lang":"curl","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/games?sport=Soccer\u0026status=live\u0026limit=20'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"e272d565-889e-4f05-b550-c26c3c3f8da8":{"name":"X-Query-Validation","in":"header","required":false,"description":"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.","schema":{"type":"string","enum":["strict"],"isRequired":false,"description":"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.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"fc096cfc-7513-4d62-883f-bc8c0eb811f2":{"name":"sport","in":"query","required":false,"description":"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, not an error, and the response names sport in X-Query-Unmatched; coverage.sports lists the served buckets.","schema":{"type":"string","isRequired":false,"description":"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, not an error, and the response names sport in X-Query-Unmatched; coverage.sports lists the served buckets.","uniqueKey":"","typeLabel":"string"}},"68f54cca-cd77-490d-a17c-51b01c566bfb":{"name":"league","in":"query","required":false,"description":"League tag, case-insensitive, as this list's coverage.leagues spells it (GET /api/v1/coverage lists no leagues): nfl, epl, cs2, euroleague, cbb, cwbb. EuroLeague games use sport=Basketball and league=euroleague; NCAA men's and women's college basketball games use sport=Basketball with league=cbb and league=cwbb. Omit for every league inside the selected sports.","schema":{"type":"string","isRequired":false,"description":"League tag, case-insensitive, as this list's coverage.leagues spells it (GET /api/v1/coverage lists no leagues): nfl, epl, cs2, euroleague, cbb, cwbb. EuroLeague games use sport=Basketball and league=euroleague; NCAA men's and women's college basketball games use sport=Basketball with league=cbb and league=cwbb. Omit for every league inside the selected sports.","uniqueKey":"","typeLabel":"string"}},"8271f4dd-1769-414f-842a-cec30251fbf0":{"name":"status","in":"query","required":false,"description":"Keep only games in this state. ended, cancelled and postponed also list finished games that have left the live board, read from their stored records, for kickoffs within starts_after..starts_before (default: the 7 days before now). Without status, or with any other state, the list is the live and upcoming board. A value outside the enum answers 400 invalid_query with error.param=status, and its message lists the accepted values: upcoming games are scheduled.","schema":{"type":"string","enum":["scheduled","live","paused","ended","postponed","cancelled","suspended","delayed","unknown"],"isRequired":false,"description":"Keep only games in this state. ended, cancelled and postponed also list finished games that have left the live board, read from their stored records, for kickoffs within starts_after..starts_before (default: the 7 days before now). Without status, or with any other state, the list is the live and upcoming board. A value outside the enum answers 400 invalid_query with error.param=status, and its message lists the accepted values: upcoming games are scheduled.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"2d2f02ee-ffa5-4dd8-8433-ba525deedd44":{"name":"starts_after","in":"query","required":false,"description":"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. With a finished status, the stored games' look-back starts here; omitted, it starts 7 days before starts_before, and nothing caps an earlier value.","schema":{"type":"string","format":"date-time","isRequired":false,"description":"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. With a finished status, the stored games' look-back starts here; omitted, it starts 7 days before starts_before, and nothing caps an earlier value.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"d590c647-c8a4-414f-bb42-948395a1b5a9":{"name":"starts_before","in":"query","required":false,"description":"RFC 3339 instant. Keep only games whose kickoff is at or before it. Must be at or after starts_after.","schema":{"type":"string","format":"date-time","isRequired":false,"description":"RFC 3339 instant. Keep only games whose kickoff is at or before it. Must be at or after starts_after.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"87778876-e55a-4129-b11d-ee6dc1e651bc":{"name":"window","in":"query","required":false,"description":"Which games to read. all, the default, lists the whole covered catalog, which can start with games the provider still holds open weeks after kickoff. now lists what is on now: every game the provider reports in play (live or paused), plus any other game whose kickoff was at most 3 hours ago or is still to come; ended, postponed and cancelled games are left out, and a game with no published kickoff stays and sorts last. Combines with every other filter. A value other than all or now returns 400 invalid_query with error.param=window.","schema":{"type":"string","enum":["all","now"],"default":"all","isRequired":false,"description":"Which games to read. all, the default, lists the whole covered catalog, which can start with games the provider still holds open weeks after kickoff. now lists what is on now: every game the provider reports in play (live or paused), plus any other game whose kickoff was at most 3 hours ago or is still to come; ended, postponed and cancelled games are left out, and a game with no published kickoff stays and sorts last. Combines with every other filter. A value other than all or now returns 400 invalid_query with error.param=window.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"12b0b364-a751-4f7f-99f0-e029db3e9632":{"name":"limit","in":"query","required":false,"description":"Page size. Out-of-range values are clamped to 1..100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"isRequired":false,"description":"Page size. Out-of-range values are clamped to 1..100.","uniqueKey":"","typeLabel":"integer"}},"0ca4a905-5e3f-42c1-9ceb-20ceac1a0fdf":{"name":"cursor","in":"query","required":false,"description":"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. With a finished status, a page that spent its read budget carries a cursor past everything it read, which may be past the last game it returned. A cursor this endpoint did not issue returns 400 with error.param=cursor.","schema":{"type":"string","isRequired":false,"description":"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. With a finished status, a page that spent its read budget carries a cursor past everything it read, which may be past the last game it returned. A cursor this endpoint did not issue returns 400 with error.param=cursor.","uniqueKey":"","typeLabel":"string"}},"32c110ce-db70-4f0c-bc6d-10bbbd8763c8":{"name":"expand[]","in":"query","required":false,"description":"Backward-compatible alias for expand. Repeatable: sharp_money, settlement.","schema":{"type":"array","items":{"type":"string","enum":["sharp_money","settlement"],"uniqueKey":"items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":false,"description":"Backward-compatible alias for expand. Repeatable: sharp_money, settlement.","uniqueKey":"","typeLabel":"enum\u003cstring>[]"},"style":"form","explode":true},"ec391d8e-6cce-407a-b352-fd56645f8e31":{"name":"expand","in":"query","required":false,"description":"sharp_money adds each game's sharp_money, the GameSharpMoney object GET /api/v1/games/{event_slug}/sharp-money returns, read from the sport board's cached aggregate: one board read per sport on the page, never a per-game compute. A game the board did not evaluate carries status not_computed (read the per-game route for it); a sport whose aggregate could not be read carries status unavailable while the rest of the page is served. Pro and Max only; adds 3 to the request cost. settlement adds settlement to each winner market, the GameMarketSettlement block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. It never waits for Polymarket: a settled market carries its recorded settlement even on a game not read lately, and any other market of such a game carries status unavailable while its read starts, so a read a moment later may answer. Every plan; adds 2 to the request cost. Repeatable; the two combine.","schema":{"type":"array","items":{"type":"string","enum":["sharp_money","settlement"],"uniqueKey":"items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":false,"description":"sharp_money adds each game's sharp_money, the GameSharpMoney object GET /api/v1/games/{event_slug}/sharp-money returns, read from the sport board's cached aggregate: one board read per sport on the page, never a per-game compute. A game the board did not evaluate carries status not_computed (read the per-game route for it); a sport whose aggregate could not be read carries status unavailable while the rest of the page is served. Pro and Max only; adds 3 to the request cost. settlement adds settlement to each winner market, the GameMarketSettlement block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. It never waits for Polymarket: a settled market carries its recorded settlement even on a game not read lately, and any other market of such a game carries status unavailable while its read starts, so a read a moment later may answer. Every plan; adds 2 to the request cost. Repeatable; the two combine.","uniqueKey":"","typeLabel":"enum\u003cstring>[]"},"style":"form","explode":true},"94f9421e-29d0-4539-b16a-2a8cb03cc34a":{"name":"If-None-Match","in":"header","required":false,"description":"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.","schema":{"type":"string","isRequired":false,"description":"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.","uniqueKey":"","typeLabel":"string"}}},"responses":{"2000d5c7-b2aa-4be0-a8eb-d6469125f630":{"description":"A page of covered games with the deployment's published coverage","headers":{"X-Query-Ignored":{"description":"Comma-separated, percent-encoded query names the operation did not publish and therefore ignored in compatible mode. Names are sorted and de-duplicated.","schema":{"type":"string"}},"X-Effective-Query":{"description":"Normalized, percent-encoded query string containing only the recognized names and values applied by the operation. Query names and values use form-urlencoded decoding, where + is a space. Repeated names are retained and sorted by name. A limit outside the operation's published minimum..maximum is reported as the clamped value the page used, so the header states the page size served rather than the one requested.","schema":{"type":"string"}},"X-Query-Unmatched":{"description":"Comma-separated, percent-encoded names of recognized query parameters whose value the operation applied but which matched nothing it serves, so the empty page reflects that filter, not a quiet catalog. Sent only by an operation that keeps such a parameter lenient on purpose: on GET /api/v1/games it names sport when the bucket is outside the sports this deployment serves (coverage.sports lists them). A value the operation refuses answers 400 instead, and an unknown parameter name is reported in X-Query-Ignored.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call, none of which reaches the per-key limiter. Standard RateLimit header spelling.","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response. Standard RateLimit header spelling.","schema":{"type":"integer","example":84}},"RateLimit-Reset":{"description":"Seconds until that budget's current window resets. Standard RateLimit header spelling.","schema":{"type":"integer","example":42}},"X-RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call.","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response.","schema":{"type":"integer","example":84}},"X-RateLimit-Reset":{"description":"Unix timestamp when that budget's current window resets.","schema":{"type":"integer","example":1710772860}},"X-Request-Id":{"description":"Server-generated request identifier for support and tracing. On every /api/v1 response, including 304, 408, CORS preflights and every error, and always equal to meta.request_id in the body. It is the key of the request's usage accounting row and of every log line the request emitted, so quote either form to support. A client-supplied X-Request-Id request header is ignored: the value is never adopted or echoed.","schema":{"type":"string","example":"req_550e8400"}},"ETag":{"description":"Weak semantic validator for conditional GET. Request-specific response metadata is excluded; send as If-None-Match to receive 304 when the stable payload is unchanged.","schema":{"type":"string","example":"W/\"8f14e45fceea167a5a36dedd4bea2543\""}},"X-Usage-Accounting":{"description":"Usage-record persistence for a protected V1 handler response. persisted: confirmed row; failed: write failed; unknown: completion could not be confirmed. Independent of handler success; do not replay successful mutations to repair accounting. Absent before accounting admission and on public routes. The zero-cost /api/v1/usage route also omits it.","schema":{"type":"string","enum":["persisted","failed","unknown"]}},"Server-Timing":{"description":"Processing time in milliseconds, for example api;dur=12.345. Includes API authentication, quota admission, handler work and response construction. Excludes network transit and streamed body or export-file transfer. The engineering budget is strictly below 250 ms; this header reports observations, not a latency guarantee or a new timeout.","schema":{"type":"string"},"example":"api;dur=12.345"}},"content":{"application/json":{"schema":{"type":"object","required":["object","data","has_more","as_of","coverage","meta"],"properties":{"object":{"type":"string","const":"list","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"data":{"type":"array","items":{"type":"object","description":"One sports or esports game: both sides, its schedule, provider status, its winner markets (the moneyline, or the soccer 1X2 legs) with their available provider moneyline price states and liquidity, and the game's traded volume. The event's other markets are on GET /api/v1/games/{event_slug}/markets. Assembled from the same provider-first live and upcoming projections the site's boards use, with no request-time provider fan-out.","required":["object","event_slug","status","competitors","draw_offered","markets","freshness","coverage","url"],"properties":{"object":{"type":"string","const":"game","isRequired":true,"uniqueKey":"data.items.[INDEX].object","typeLabel":"string"},"event_slug":{"type":"string","description":"The game's identity, for example mlb-mil-cin-2026-06-22. The same key the live_sports_updated webhook pulse carries and the same key /api/v1/games/{event_slug} takes.","isRequired":true,"uniqueKey":"data.items.[INDEX].event_slug","typeLabel":"string"},"status":{"type":"object","description":"Where the game is in its own life, as the provider reports it. A postponement, a cancellation and a suspension each keep their own state, so a client can tell a game that will be played later from one that never will be.","required":["state","ended","ended_at","ended_at_source"],"properties":{"state":{"type":"string","enum":["scheduled","live","paused","ended","postponed","cancelled","suspended","delayed","unknown"],"description":"scheduled: kickoff is ahead, or the provider still lists the game open and neither in play nor ended. With no live-score frame a game stays scheduled past its kickoff until the provider says otherwise. live: the provider reports it in play. paused: halftime or a provider-reported break. ended: the provider reported a final, an award or a forfeit. postponed, cancelled, suspended, delayed: the provider's own verdict, kept distinct. A tennis match that the provider still lists in play, with no live score feed and no change of period or score for 3 hours, also reads suspended. unknown: no provider state reached this read. A kickoff in the past is never read as live on its own.","isRequired":true,"uniqueKey":"data.items.[INDEX].status.state","typeLabel":"enum\u003cstring>"},"ended":{"type":"boolean","description":"Whether the game is over. Always present.","isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended","typeLabel":"boolean"},"ended_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the game ended (RFC 3339 UTC), as first observed. Always present. It is null unless state is ended and an end was observed. It is never inferred from the kickoff, the clock or the market's resolution. Null on an ended game means the end time is unknown, and games that ended before this field shipped carry null. ended_at_source names who observed it.","isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the game ended (RFC 3339 UTC), as first observed. Always present. It is null unless state is ended and an end was observed. It is never inferred from the kickoff, the clock or the market's resolution. Null on an ended game means the end time is unknown, and games that ended before this field shipped carry null. ended_at_source names who observed it.","isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at","typeLabel":"string\u003cdate-time> | null"},"ended_at_source":{"oneOf":[{"type":"string","description":"Who observed ended_at. Always present, and null exactly when ended_at is null. sports_ws: the first Polymarket Sports WebSocket frame that reported the game final, at the time it was received. gamma_finished: for a game no such frame ended, Polymarket's own event finish time, served only when it is earlier than the market's resolution and never for a fight card (MMA, boxing).","enum":["sports_ws","gamma_finished"],"isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at_source.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Who observed ended_at. Always present, and null exactly when ended_at is null. sports_ws: the first Polymarket Sports WebSocket frame that reported the game final, at the time it was received. gamma_finished: for a game no such frame ended, Polymarket's own event finish time, served only when it is earlier than the market's resolution and never for a fight card (MMA, boxing).","isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at_source.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].status.ended_at_source","typeLabel":"enum\u003cstring> | null"},"match_status":{"type":"string","enum":["scheduled","in_progress","halftime","penalty_shootout","delayed","suspended","final","final_overtime","final_shootout","awarded","forfeit","not_necessary","postponed","cancelled","unknown"],"description":"The provider status folded onto one vocabulary across leagues. unknown means the provider sent a value this API has no meaning for; provider_status keeps that value verbatim. Omitted when no live-score frame carries a status, as for a listed game no live-score feed has reported yet.","uniqueKey":"data.items.[INDEX].status.match_status","typeLabel":"enum\u003cstring>"},"provider_status":{"type":"string","description":"The live-score feed's status string, verbatim. Omitted when no live-score frame carries one. This API never puts a label of its own here, such as Scheduled for a listed game.","uniqueKey":"data.items.[INDEX].status.provider_status","typeLabel":"string"},"period":{"type":"string","description":"The provider's period label, for example Q3, End Q2 or T5. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].status.period","typeLabel":"string"},"clock":{"type":"string","description":"The game clock as the provider spells it, never reformatted. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].status.clock","typeLabel":"string"},"live":{"type":"boolean","description":"Whether the game is in play. It is the provider's own in-play flag, except that three cases read false: a game the provider reports suspended (period SUS), a game rescheduled to a later kickoff, and a tennis match that the provider still lists in play with no live score feed and no change of period or score for 3 hours. Omitted when no live-score frame exists, which is not the same as false.","uniqueKey":"data.items.[INDEX].status.live","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"object"},"competitors":{"type":"array","items":{"type":"object","description":"One side of the game.","required":["name"],"properties":{"name":{"type":"string","description":"The team as its moneyline outcome names it, the same before, during and after the game (Jaguars, Penn). Where no outcome names the team, for example a soccer game's Yes/No win markets, the provider's full name (FC Bayern München). To identify a team, prefer provider_id.","isRequired":true,"uniqueKey":"data.items.[INDEX].competitors.items.[INDEX].name","typeLabel":"string"},"provider_id":{"type":"string","description":"The provider's league-scoped competitor id, as a string. Omitted when the provider has not identified this side; coverage.competitors then reads labels.","uniqueKey":"data.items.[INDEX].competitors.items.[INDEX].provider_id","typeLabel":"string"},"logo":{"type":"string","description":"Provider crest or logo URL. Omitted when there is none.","uniqueKey":"data.items.[INDEX].competitors.items.[INDEX].logo","typeLabel":"string"},"score":{"type":"string","description":"The provider's score for this side, verbatim. A string because the provider sends one: a set score, a map score and a run total are not all integers. Omitted when no live-score frame carries a score.","uniqueKey":"data.items.[INDEX].competitors.items.[INDEX].score","typeLabel":"string"},"record":{"type":"string","description":"The provider's season record for this side, for example 12-4. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].competitors.items.[INDEX].record","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].competitors.items.[INDEX]","typeLabel":"object"},"description":"Both sides, in the provider's own order. That order states no home or away: Polymarket lists the away team first in US leagues and the home team first in soccer. Read a market's side for home and away. Empty when the provider identified neither side.","isRequired":true,"uniqueKey":"data.items.[INDEX].competitors","typeLabel":"object[]"},"draw_offered":{"type":"boolean","description":"Whether this read includes a market classified as paying on a draw, including soccer's independent 1X2 draw leg. Read this instead of assuming a two-outcome moneyline.","isRequired":true,"uniqueKey":"data.items.[INDEX].draw_offered","typeLabel":"boolean"},"markets":{"type":"array","items":{"type":"object","description":"One Polymarket market linked to this game.","required":["id","condition_id","platform"],"properties":{"id":{"type":"string","description":"The mkt_-prefixed market id every other V1 response uses.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].id","typeLabel":"string"},"condition_id":{"type":"string","description":"The raw provider condition id.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].condition_id","typeLabel":"string"},"platform":{"type":"string","enum":["polymarket"],"description":"Always polymarket.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].platform","typeLabel":"enum\u003cstring>"},"slug":{"type":"string","description":"The provider's market slug. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].slug","typeLabel":"string"},"sports_market_type":{"type":"string","description":"The provider's own market type, for example moneyline or spread. Omitted when the provider sent none. Not an enum: the provider owns this vocabulary and adds to it.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].sports_market_type","typeLabel":"string"},"side":{"type":"string","enum":["home","away","draw","other"],"description":"Which side of the game this market's YES leg pays. home and away are the provider's own home/away designation of the team the YES leg names (Polymarket's teams[].ordering), never its place in competitors. Soccer 1X2 legs are explicitly classified as home, draw or away by the provider projection. draw is a real value, not a competitor. Omitted when the provider projection cannot classify the leg or the provider designates neither team home or away, which is not the same as other.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].side","typeLabel":"enum\u003cstring>"},"outcome_yes":{"type":"string","description":"The provider's label for the YES outcome. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].outcome_yes","typeLabel":"string"},"outcome_no":{"type":"string","description":"The provider's label for the NO outcome. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].outcome_no","typeLabel":"string"},"outcome_token_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].outcome_token_ids.items.[INDEX]","typeLabel":"string"},"description":"Polymarket CLOB token ids in the provider's own outcome-index order. Omitted when the provider has published none for this market.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].outcome_token_ids","typeLabel":"string[]"},"prices":{"type":"object","description":"Default provider moneyline state. Omitted when this market has no classified moneyline projection; incomplete and invalid projections remain explicit.","required":["provider","observed_at","observation_source"],"properties":{"provider":{"oneOf":[{"type":"object","description":"A validated provider moneyline pair bound to the two competitors.","required":["state","competitor_a","competitor_b","competitor_a_is_yes","binding_provenance"],"properties":{"state":{"type":"string","const":"paired","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.state","typeLabel":"string"},"competitor_a":{"type":"object","description":"One competitor-bound provider moneyline price. No YES/NO inference is required.","required":["label","price","price_provenance"],"properties":{"label":{"type":"string","description":"The provider competitor label.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a.label","typeLabel":"string"},"price":{"type":"number","minimum":0,"maximum":1,"description":"Unrounded provider price in [0, 1].","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a.price","typeLabel":"number"},"price_provenance":{"type":"string","enum":["gamma_outcome_prices","clob_display"],"description":"Which provider price observation supplies this leg.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a.price_provenance","typeLabel":"enum\u003cstring>"},"provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a.provider_id","typeLabel":"integer\u003cint64>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a","typeLabel":"object"},"competitor_b":{"type":"object","description":"One competitor-bound provider moneyline price. No YES/NO inference is required.","required":["label","price","price_provenance"],"properties":{"label":{"type":"string","description":"The provider competitor label.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_b.label","typeLabel":"string"},"price":{"type":"number","minimum":0,"maximum":1,"description":"Unrounded provider price in [0, 1].","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_b.price","typeLabel":"number"},"price_provenance":{"type":"string","enum":["gamma_outcome_prices","clob_display"],"description":"Which provider price observation supplies this leg.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_b.price_provenance","typeLabel":"enum\u003cstring>"},"provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_b.provider_id","typeLabel":"integer\u003cint64>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_b","typeLabel":"object"},"competitor_a_is_yes":{"type":"boolean","description":"Whether competitor A is the provider YES leg.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.competitor_a_is_yes","typeLabel":"boolean"},"binding_provenance":{"type":"string","enum":["provider_ids","exact_labels","containment_labels","elimination"],"description":"How the existing sports-board writer bound prices to competitors.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0.binding_provenance","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.0","typeLabel":"object"},{"type":"object","description":"The provider moneyline pair is incomplete; no numeric pair is invented.","required":["state","reason"],"properties":{"state":{"type":"string","const":"incomplete","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.state","typeLabel":"string"},"reason":{"type":"string","enum":["outcome_prices_missing","outcome_price_leg_missing","zero_price_sentinel","display_price_pair_unavailable","outcome_identity_unavailable","final_score_unavailable"],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.reason","typeLabel":"enum\u003cstring>"},"competitor_a_is_yes":{"type":"boolean","description":"Whether competitor A is the provider YES leg.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.competitor_a_is_yes","typeLabel":"boolean"},"competitor_a_provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.competitor_a_provider_id","typeLabel":"integer\u003cint64>"},"competitor_b_provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.competitor_b_provider_id","typeLabel":"integer\u003cint64>"},"binding_provenance":{"type":"string","enum":["provider_ids","exact_labels","containment_labels","elimination"],"description":"How the existing sports-board writer bound prices to competitors.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1.binding_provenance","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.1","typeLabel":"object"},{"type":"object","description":"The provider moneyline pair is invalid; no numeric pair is invented.","required":["state","reason"],"properties":{"state":{"type":"string","const":"invalid","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.state","typeLabel":"string"},"reason":{"type":"string","enum":["team_cardinality","outcome_cardinality","price_cardinality","non_finite_price","out_of_range_price","non_complementary_prices","ambiguous_identity","final_identity_mismatch"],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.reason","typeLabel":"enum\u003cstring>"},"competitor_a_is_yes":{"type":"boolean","description":"Whether competitor A is the provider YES leg.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.competitor_a_is_yes","typeLabel":"boolean"},"competitor_a_provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.competitor_a_provider_id","typeLabel":"integer\u003cint64>"},"competitor_b_provider_id":{"type":"integer","format":"int64","description":"The provider competitor id when identity is available.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.competitor_b_provider_id","typeLabel":"integer\u003cint64>"},"binding_provenance":{"type":"string","enum":["provider_ids","exact_labels","containment_labels","elimination"],"description":"How the existing sports-board writer bound prices to competitors.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2.binding_provenance","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.provider","typeLabel":"object"},"observed_at":{"oneOf":[{"type":"string","format":"date-time","description":"Board cache vintage for Gamma or the older CLOB leg clock. Null when no reliable clock is available; never a Gamma-authored timestamp.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.observed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Board cache vintage for Gamma or the older CLOB leg clock. Null when no reliable clock is available; never a Gamma-authored timestamp.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.observed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.observed_at","typeLabel":"string\u003cdate-time> | null"},"observation_source":{"type":"string","enum":["board_snapshot","clob_display"],"description":"The clock used for observed_at. board_snapshot is this service’s cache observation, not a provider source timestamp.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices.observation_source","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].prices","typeLabel":"object"},"liquidity":{"type":"object","description":"Polymarket's reported liquidity for this market. Omitted when the provider read carried none, and on a finished game read from its stored record; never 0 in place of a missing figure.","required":["value","source"],"properties":{"value":{"type":"number","description":"The provider's figure at full precision.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].liquidity.value","typeLabel":"number"},"source":{"type":"string","enum":["gamma"],"description":"Always gamma: the Polymarket Gamma API.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].liquidity.source","typeLabel":"enum\u003cstring>"},"observed_at":{"type":"string","format":"date-time","description":"When 0xinsider read the sports board body this figure came from, never a provider-authored timestamp. Omitted when that read has no clock.","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].liquidity.observed_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].liquidity","typeLabel":"object"},"settlement":{"description":"How Polymarket's oracle settled or is settling this market, the block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. Always present on GET /api/v1/games/{event_slug}; on GET /api/v1/games only with expand=settlement. It never waits for Polymarket: a settled market reads its recorded settlement on the first read, and any other market of a game not read lately reads status unavailable while its read starts.","type":"object","required":["status","oracle_status","settled","payouts","result","winning_outcome_index","was_disputed","resolved_at","expected_settlement_time","settlement_time_basis","proposed_answer","observed_at"],"properties":{"expected_settlement_time":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.expected_settlement_time.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.expected_settlement_time.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.expected_settlement_time","typeLabel":"string\u003cdate-time> | null"},"observed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.observed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.observed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.observed_at","typeLabel":"string\u003cdate-time> | null"},"oracle_status":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.oracle_status.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.oracle_status.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.oracle_status","typeLabel":"string | null"},"payouts":{"oneOf":[{"type":"array","items":{"type":"integer","uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.payouts.oneOf.0.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.payouts.oneOf.0","typeLabel":"integer[]"},{"type":"null","items":{"type":"integer"},"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.payouts.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.payouts","typeLabel":"integer[] | null"},"proposed_answer":{"oneOf":[{"type":"string","enum":["outcome_0","outcome_1","split","too_early"],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.proposed_answer.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.proposed_answer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.proposed_answer","typeLabel":"enum\u003cstring> | null"},"resolved_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.resolved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.resolved_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.resolved_at","typeLabel":"string\u003cdate-time> | null"},"result":{"oneOf":[{"type":"string","enum":["outcome","split"],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.result.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.result.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.result","typeLabel":"enum\u003cstring> | null"},"settled":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settled.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settled","typeLabel":"boolean | null"},"settlement_time_basis":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settlement_time_basis.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settlement_time_basis.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.settlement_time_basis","typeLabel":"string | null"},"status":{"type":"string","enum":["observed","not_posed","unavailable"],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.status","typeLabel":"enum\u003cstring>"},"was_disputed":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.was_disputed.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.was_disputed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.was_disputed","typeLabel":"boolean | null"},"winning_outcome_index":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.winning_outcome_index.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.winning_outcome_index.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement.winning_outcome_index","typeLabel":"integer | null"}},"uniqueKey":"data.items.[INDEX].markets.items.[INDEX].settlement","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX].markets.items.[INDEX]","typeLabel":"object"},"description":"The game's winner markets the sports board binds to its sides (the moneyline, or a soccer game's three 1X2 legs), ordered by condition_id. Spreads, totals, period lines and props are on GET /api/v1/games/{event_slug}/markets.","isRequired":true,"uniqueKey":"data.items.[INDEX].markets","typeLabel":"object[]"},"freshness":{"type":"object","description":"How current this game's facts are. Independent per source: the board half that produced the game, and the live-score frame that produced its scores.","required":["source","source_status","source_availability","source_freshness","delayed","scores_freshness"],"properties":{"source":{"type":"string","enum":["live","upcoming","stored"],"description":"What produced this game: live or upcoming, the board half that carried it, or stored, the stored record of a finished game that has left the board (GET /api/v1/games/{event_slug}, and GET /api/v1/games with a finished status).","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.source","typeLabel":"enum\u003cstring>"},"source_status":{"type":"string","enum":["ok","unavailable"],"description":"Whether that half returned a truthful source body for this read.","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.source_status","typeLabel":"enum\u003cstring>"},"source_availability":{"type":"string","enum":["available","unavailable","not_applicable"],"description":"Whether that half had a source body at all. not_applicable means the sport has no configured source for that half.","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.source_availability","typeLabel":"enum\u003cstring>"},"source_freshness":{"type":"string","enum":["fresh","stale","unknown","not_applicable"],"description":"Freshness of the cached source body, never inferred from the response clock or the row count. not_applicable for a stored game, whose record is final.","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.source_freshness","typeLabel":"enum\u003cstring>"},"delayed":{"type":"boolean","description":"Whether a reader should be told these rows are behind. This applies the half's own servable-age bar (15 s live, 120 s upcoming), which is not the same as source_freshness: a live board whose scores are seconds old reads stale for about half of every publish cycle and is not delayed.","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.delayed","typeLabel":"boolean"},"scores_freshness":{"type":"string","enum":["fresh","stale","unknown","not_applicable"],"description":"Whether this game's score and clock are current, judged on how often this league's feed sends a frame, and independent of source_freshness, which dates the board: a board can be seconds old while one game's frame is frozen. not_applicable outside play (scheduled, final, postponed, cancelled), at halftime and in a break between periods (a period of HT or End ...). stale when the last frame is older than the bound measured for its state: 180 seconds for a running soccer half before stoppage time (the provider sends a frame each match minute); 120 seconds for an in-progress cs2 or lol series (the feed resends each running series about every 20 seconds, so fresh means the provider resent it, not that the map score moved); 600 seconds for a running period of men's and women's college basketball (league cbb, cwbb) and NHL hockey (nhl), whose feeds send no frame while the clock is stopped for a timeout or review. fresh within the bound. unknown otherwise: no dated frame, soccer stoppage time, a period clock at 00:00, End OT in women's college basketball (the end of the third quarter, after which the provider sends no frame until the final), tennis (frames land on points and stop for changeovers and breaks), and every league with no measured bound, including the NBA and NFL.","isRequired":true,"uniqueKey":"data.items.[INDEX].freshness.scores_freshness","typeLabel":"enum\u003cstring>"},"source_observed_at":{"type":"string","format":"date-time","description":"The source body's data vintage. Omitted when the read has no vintage anchor, which is not age zero. For a stored game, the later of its last live-score write and its last leg settlement.","uniqueKey":"data.items.[INDEX].freshness.source_observed_at","typeLabel":"string\u003cdate-time>"},"source_age_seconds":{"type":"integer","description":"Age of source_observed_at in seconds, capped at 600. Omitted past the cap or with no anchor.","uniqueKey":"data.items.[INDEX].freshness.source_age_seconds","typeLabel":"integer"},"scores_observed_at":{"type":"string","format":"date-time","description":"When this game's live-score frame was observed. Omitted when there is no frame.","uniqueKey":"data.items.[INDEX].freshness.scores_observed_at","typeLabel":"string\u003cdate-time>"},"scores_source_at":{"type":"string","format":"date-time","description":"The provider's own frame clock. Omitted when the frame carries none.","uniqueKey":"data.items.[INDEX].freshness.scores_source_at","typeLabel":"string\u003cdate-time>"},"scores_age_seconds":{"type":"integer","minimum":0,"description":"Seconds since this game's last Sports WebSocket frame. The esports feed resends an unchanged series about every 20 seconds, so this dates the feed's last frame, not the last score change. Omitted when no Sports WebSocket frame dates the score, which is not age zero: a score read from the provider's event listing is re-read on a cadence whether or not the game moved.","uniqueKey":"data.items.[INDEX].freshness.scores_age_seconds","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].freshness","typeLabel":"object"},"coverage":{"type":"object","description":"What this game's read actually supplied, so a client branches on coverage instead of on a missing key.","required":["scores","competitors","schedule"],"properties":{"scores":{"type":"string","enum":["available","unavailable"],"description":"available when a live-score frame supplied a score for this game. A game no live-score feed has reported yet, as most scheduled games are, reads unavailable.","isRequired":true,"uniqueKey":"data.items.[INDEX].coverage.scores","typeLabel":"enum\u003cstring>"},"competitors":{"type":"string","enum":["provider_ids","labels","unavailable"],"description":"provider_ids when every side carries a provider id, labels when only the provider's names identify them, unavailable when neither exists. Do not join on names when this reads labels.","isRequired":true,"uniqueKey":"data.items.[INDEX].coverage.competitors","typeLabel":"enum\u003cstring>"},"schedule":{"type":"string","enum":["available","unavailable"],"description":"available when the provider supplied a kickoff.","isRequired":true,"uniqueKey":"data.items.[INDEX].coverage.schedule","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].coverage","typeLabel":"object"},"url":{"type":"string","description":"The game's page on 0xinsider.","isRequired":true,"uniqueKey":"data.items.[INDEX].url","typeLabel":"string"},"game_id":{"type":"string","description":"The provider's Gamma gameId, as a string. Omitted when the canonical owner has no single value for this slug: the provider stamps one gameId across an event's derivative siblings, so an ambiguous read is reported as unknown rather than guessed.","uniqueKey":"data.items.[INDEX].game_id","typeLabel":"string"},"sport":{"type":"string","description":"The canonical sport bucket, for example Soccer or Table Tennis. Omitted when neither the board scope nor the provider category names one.","uniqueKey":"data.items.[INDEX].sport","typeLabel":"string"},"league":{"type":"string","description":"The league tag, for example nfl or epl. Omitted for a sport served as one whole bucket with no league scope.","uniqueKey":"data.items.[INDEX].league","typeLabel":"string"},"title":{"type":"string","description":"The provider's event title. Omitted when the provider sent none.","uniqueKey":"data.items.[INDEX].title","typeLabel":"string"},"scheduled_at":{"type":"string","format":"date-time","description":"Kickoff in UTC, as the provider supplied it. Omitted when the provider published none; coverage.schedule then reads unavailable.","uniqueKey":"data.items.[INDEX].scheduled_at","typeLabel":"string\u003cdate-time>"},"series_format":{"type":"string","description":"The esports series length, for example Bo3. Omitted for everything else.","uniqueKey":"data.items.[INDEX].series_format","typeLabel":"string"},"sharp_money":{"type":"object","description":"Event-level sharp money for one game. Every aggregate field is null unless status is computed; null means unknown, never zero.","properties":{"allocation":{"oneOf":[{"type":"string","enum":["exact","degraded"],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.allocation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.allocation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.allocation","typeLabel":"enum\u003cstring> | null"},"computed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.computed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.computed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.computed_at","typeLabel":"string\u003cdate-time> | null"},"event_slug":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.event_slug","typeLabel":"string"},"holders_partial":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.holders_partial.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.holders_partial.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.holders_partial","typeLabel":"boolean | null"},"lifecycle":{"oneOf":[{"type":"string","enum":["live","settled","indeterminate"],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.lifecycle.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.lifecycle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.lifecycle","typeLabel":"enum\u003cstring> | null"},"money_as_of":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.money_as_of.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.money_as_of.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.money_as_of","typeLabel":"string\u003cdate-time> | null"},"object":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.object","typeLabel":"string"},"outcomes":{"type":"array","items":{"type":"object","required":["side","label","usd","pct","is_leader","wallets"],"properties":{"is_leader":{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].is_leader","typeLabel":"boolean"},"label":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].label","typeLabel":"string"},"pct":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].pct","typeLabel":"integer"},"side":{"oneOf":[{"type":"string","enum":["home","draw","away",null],"description":"The side the provider designates this outcome's team: home or away, by Polymarket's own home/away designation (teams[].ordering), never the outcome's place in this list; draw for a 1X2 draw. null when the provider designates neither team home or away; never inferred from order.","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].side.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["home","draw","away",null],"description":"The side the provider designates this outcome's team: home or away, by Polymarket's own home/away designation (teams[].ordering), never the outcome's place in this list; draw for a 1X2 draw. null when the provider designates neither team home or away; never inferred from order.","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].side.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].side","typeLabel":"enum\u003cstring> | null"},"usd":{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].usd","typeLabel":"number"},"wallets":{"type":"object","required":["s","a","b"],"properties":{"s":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].wallets.s","typeLabel":"integer"},"a":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].wallets.a","typeLabel":"integer"},"b":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].wallets.b","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX].wallets","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX].sharp_money.outcomes.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.outcomes","typeLabel":"object[]"},"status":{"type":"string","enum":["computed","not_computed","unavailable"],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.status","typeLabel":"enum\u003cstring>"},"total_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.total_usd.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.total_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.total_usd","typeLabel":"number | null"},"trader_count":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.trader_count.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.trader_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.trader_count","typeLabel":"integer | null"},"unallocated_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.unallocated_usd.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.unallocated_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.unallocated_usd","typeLabel":"number | null"},"verdict":{"oneOf":[{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","const":"no_sharp_money","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.0.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.0","typeLabel":"object"},{"type":"object","required":["kind","label"],"properties":{"kind":{"type":"string","const":"all_on","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.1.kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.1.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.1","typeLabel":"object"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","const":"split","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.2.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.2","typeLabel":"object"},{"type":"object","required":["kind","label","pct"],"properties":{"kind":{"type":"string","const":"leans","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.3.kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.3.label","typeLabel":"string"},"pct":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.3.pct","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.3","typeLabel":"object"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","const":"unavailable","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.4.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.4","typeLabel":"object"},{"type":"object","required":["kind","label","divergence_pts"],"properties":{"divergence_pts":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.5.divergence_pts","typeLabel":"integer"},"kind":{"type":"string","const":"leans_over_price","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.5.kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.5.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.5","typeLabel":"object"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","const":"no_clear_lean","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.6.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.6","typeLabel":"object"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","const":"withheld","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.7.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.7","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict.oneOf.8","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].sharp_money.verdict","typeLabel":"object · object · object · object · object · object · object · object · null"}},"required":["object","event_slug","status","lifecycle","verdict","allocation","total_usd","unallocated_usd","trader_count","holders_partial","outcomes","computed_at","money_as_of"],"uniqueKey":"data.items.[INDEX].sharp_money","typeLabel":"object"},"volume":{"type":"object","description":"The game's traded volume, the figure the sports board carries for it, with its source, basis, unit and observation clock. A client can rank or filter games by volume.value. Omitted when the board carries no volume for the game, and on a finished game read from its stored record (freshness.source stored); never 0 in place of a missing figure.","required":["value","source","fresh_for_seconds"],"properties":{"value":{"type":"number","description":"The volume at full precision, in unit.","isRequired":true,"uniqueKey":"data.items.[INDEX].volume.value","typeLabel":"number"},"source":{"type":"string","enum":["polymarket_data","gamma"],"description":"The Polymarket API the figure was read from: polymarket_data (the Data API's live volume) or gamma (the Gamma API).","isRequired":true,"uniqueKey":"data.items.[INDEX].volume.source","typeLabel":"enum\u003cstring>"},"fresh_for_seconds":{"type":"integer","minimum":0,"description":"How long after observed_at 0xinsider treats the figure as current: 60 or 300 by source and basis, or 3600 for an older figure kept because a later read of the same total was lower or missing (a cumulative volume never falls).","isRequired":true,"uniqueKey":"data.items.[INDEX].volume.fresh_for_seconds","typeLabel":"integer"},"unit":{"type":"string","enum":["taker_shares"],"description":"taker_shares: cumulative one-side taker volume in shares. One share pays $1 at settlement, so this is not cash traded. Omitted only on a figure observed before units were recorded; never assume cash.","uniqueKey":"data.items.[INDEX].volume.unit","typeLabel":"enum\u003cstring>"},"basis":{"type":"string","enum":["game_lines","event_total"],"description":"game_lines: the game volume Polymarket's game page states, summed over the game's own lines. event_total: the whole event's volume, stated when no game volume was readable. The two can differ in either direction. Omitted when the basis is unknown.","uniqueKey":"data.items.[INDEX].volume.basis","typeLabel":"enum\u003cstring>"},"observed_at":{"type":"string","format":"date-time","description":"When 0xinsider read the figure from the provider, never a provider-authored timestamp. Omitted when no read time is held for it.","uniqueKey":"data.items.[INDEX].volume.observed_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.items.[INDEX].volume","typeLabel":"object"},"tournament":{"type":"object","description":"A tennis game's tournament edition: its tier, city and country, venue time zone and official dates, from 0xinsider's reviewed registry, the same facts the game's page states. Omitted outside tennis, on a finished game read from its stored record (freshness.source stored), and when the registry holds no single edition for the game's competition label, players' tour and kickoff; never a guessed value.","required":["label","tour","edition_year","starts_on","ends_on","source_urls","checked_on"],"properties":{"label":{"type":"string","description":"The provider competition label that selected this edition, verbatim, for example \"Erste Bank Open, Qualification\".","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.label","typeLabel":"string"},"tour":{"type":"string","enum":["atp","wta","itf"],"description":"The edition's tour.","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.tour","typeLabel":"enum\u003cstring>"},"edition_year":{"type":"integer","description":"The year of the edition.","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.edition_year","typeLabel":"integer"},"starts_on":{"type":"string","format":"date","description":"The edition's first official day, inclusive (YYYY-MM-DD). A qualifying match can be played up to two days before it.","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.starts_on","typeLabel":"string\u003cdate>"},"ends_on":{"type":"string","format":"date","description":"The edition's last official day, inclusive (YYYY-MM-DD).","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.ends_on","typeLabel":"string\u003cdate>"},"source_urls":{"type":"array","items":{"type":"string","format":"uri","uniqueKey":"data.items.[INDEX].tournament.source_urls.items.[INDEX]","typeLabel":"string\u003curi>"},"description":"The official tournament, tour, federation or time-zone pages the facts were taken from.","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.source_urls","typeLabel":"string\u003curi>[]"},"checked_on":{"type":"string","format":"date","description":"When those pages were checked: a catalogue verification date, not a score or price clock.","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.checked_on","typeLabel":"string\u003cdate>"},"draw":{"type":"string","enum":["main","qualification"],"description":"The match's draw. qualification when the provider competition label carries Polymarket's qualifying mark (\", Qualification\", which 0xinsider also applies when Polymarket flags an ATP Challenger qualifying fixture); main for an unmarked ATP or WTA label. Omitted for an unmarked ITF label: Polymarket gives an ITF qualifying match the main draw's label.","uniqueKey":"data.items.[INDEX].tournament.draw","typeLabel":"enum\u003cstring>"},"tier":{"type":"string","description":"The edition's verified category, for example \"ATP Masters 1000\", \"ATP Challenger 50\", \"WTA 1000\" or \"ITF M25\". Omitted when no official page states it.","uniqueKey":"data.items.[INDEX].tournament.tier","typeLabel":"string"},"location":{"type":"object","description":"The verified venue city and country. Omitted when no official page states it.","required":["city","country","country_code"],"properties":{"city":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.location.city","typeLabel":"string"},"country":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.location.country","typeLabel":"string"},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2, for example \"IT\".","isRequired":true,"uniqueKey":"data.items.[INDEX].tournament.location.country_code","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].tournament.location","typeLabel":"object"},"timezone":{"type":"string","description":"The venue's IANA time zone, for example \"Europe/Rome\". Format the venue's local time with it; it carries the daylight-saving rules. Omitted when the venue is unverified.","uniqueKey":"data.items.[INDEX].tournament.timezone","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].tournament","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data","typeLabel":"object[]"},"has_more":{"type":"boolean","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"},"as_of":{"type":"string","format":"date-time","description":"When this read assembled the catalog; with status ended, cancelled or postponed, when it read the stored records. Per-source vintage is on each game's freshness.","isRequired":true,"uniqueKey":"as_of","typeLabel":"string\u003cdate-time>"},"coverage":{"type":"object","description":"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.","required":["sports","leagues","sources_unavailable"],"properties":{"sports":{"type":"array","items":{"type":"string","uniqueKey":"coverage.sports.items.[INDEX]","typeLabel":"string"},"description":"Canonical sport buckets served, sorted.","isRequired":true,"uniqueKey":"coverage.sports","typeLabel":"string[]"},"leagues":{"type":"array","items":{"type":"string","uniqueKey":"coverage.leagues.items.[INDEX]","typeLabel":"string"},"description":"League tags served, sorted. EuroLeague is euroleague, NCAA men's college basketball cbb and NCAA women's college basketball cwbb, all under the Basketball sport bucket.","isRequired":true,"uniqueKey":"coverage.leagues","typeLabel":"string[]"},"sources_unavailable":{"type":"array","items":{"type":"string","uniqueKey":"coverage.sources_unavailable.items.[INDEX]","typeLabel":"string"},"description":"Scopes whose source half was unavailable for this read, as \u003csport>:\u003chalf>. Empty means every scope answered.","isRequired":true,"uniqueKey":"coverage.sources_unavailable","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"coverage","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"next_cursor":{"type":"string","description":"Pass as cursor for the next page. Present only when has_more is true.","uniqueKey":"next_cursor","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"object":"list","data":[{"object":"game","event_slug":"nfl-buf-nyj-2026-09-22","game_id":"70898594","sport":"Football","league":"nfl","title":"Bills vs. Jets","scheduled_at":"2026-09-23T00:15:00Z","status":{"state":"live","match_status":"in_progress","provider_status":"InProgress","period":"Q3","clock":"7:21","live":true,"ended":false,"ended_at":null,"ended_at_source":null},"competitors":[{"name":"Buffalo Bills","provider_id":"2","logo":"https://polymarket-upload.s3.us-east-2.amazonaws.com/nfl-buf.png","score":"17","record":"2-0"},{"name":"New York Jets","provider_id":"20","logo":"https://polymarket-upload.s3.us-east-2.amazonaws.com/nfl-nyj.png","score":"10","record":"0-2"}],"draw_offered":false,"markets":[{"id":"mkt_0x2f1c0c9d5f3b4a7e8d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a39281706","condition_id":"0x2f1c0c9d5f3b4a7e8d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a39281706","platform":"polymarket","slug":"nfl-buf-nyj-2026-09-22","sports_market_type":"moneyline","side":"home","outcome_yes":"Buffalo Bills","outcome_no":"New York Jets","outcome_token_ids":["21742633143463906290569050155826241533067272736897614950488156847949938836455","48331043336612883890938759509493159234755048973500640148014422747788308965732"],"liquidity":{"value":688004.1279,"source":"gamma","observed_at":"2026-09-23T01:12:04Z"}}],"volume":{"value":2491187.344521,"unit":"taker_shares","basis":"game_lines","source":"polymarket_data","observed_at":"2026-09-23T01:11:41Z","fresh_for_seconds":300},"freshness":{"source":"live","source_status":"ok","source_availability":"available","source_freshness":"fresh","source_observed_at":"2026-09-23T01:12:04Z","source_age_seconds":3,"delayed":false,"scores_observed_at":"2026-09-23T01:12:03Z","scores_source_at":"2026-09-23T01:12:02Z","scores_age_seconds":4,"scores_freshness":"unknown"},"coverage":{"scores":"available","competitors":"provider_ids","schedule":"available"},"url":"https://0xinsider.com/event/nfl-buf-nyj-2026-09-22"}],"has_more":true,"next_cursor":"gms_v1_eyJ2IjoxLCJyYW5rIjowLCJhdF9tcyI6MTc4OTA5NDkwMDAwMCwic2x1ZyI6Im5mbC1idWYtbnlqLTIwMjYtMDktMjIifQ","as_of":"2026-09-23T01:12:07Z","coverage":{"sports":["Baseball","Basketball","Boxing","Cricket","Esports","Football","Hockey","MMA","Pickleball","Soccer","Table Tennis","Tennis"],"leagues":["bel1","brasileirao","bundesliga","cfb","cs2","dota2","epl","eredivisie","laliga","leagueoflegends","ligamx","ligaprofesional","ligue1","mls","nba","nfl","nhl","primeiraliga","scop","seriea","tur","ucl","valorant","wnba"],"sources_unavailable":[]},"meta":{"request_id":"req_2f8c1a4e9b3d47f0","cached":false,"cost":2}},"examples":{"Example":{"title":"Example","value":{"object":"list","data":[{"object":"game","event_slug":"nfl-buf-nyj-2026-09-22","game_id":"70898594","sport":"Football","league":"nfl","title":"Bills vs. Jets","scheduled_at":"2026-09-23T00:15:00Z","status":{"state":"live","match_status":"in_progress","provider_status":"InProgress","period":"Q3","clock":"7:21","live":true,"ended":false,"ended_at":null,"ended_at_source":null},"competitors":[{"name":"Buffalo Bills","provider_id":"2","logo":"https://polymarket-upload.s3.us-east-2.amazonaws.com/nfl-buf.png","score":"17","record":"2-0"},{"name":"New York Jets","provider_id":"20","logo":"https://polymarket-upload.s3.us-east-2.amazonaws.com/nfl-nyj.png","score":"10","record":"0-2"}],"draw_offered":false,"markets":[{"id":"mkt_0x2f1c0c9d5f3b4a7e8d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a39281706","condition_id":"0x2f1c0c9d5f3b4a7e8d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a39281706","platform":"polymarket","slug":"nfl-buf-nyj-2026-09-22","sports_market_type":"moneyline","side":"home","outcome_yes":"Buffalo Bills","outcome_no":"New York Jets","outcome_token_ids":["21742633143463906290569050155826241533067272736897614950488156847949938836455","48331043336612883890938759509493159234755048973500640148014422747788308965732"],"liquidity":{"value":688004.1279,"source":"gamma","observed_at":"2026-09-23T01:12:04Z"}}],"volume":{"value":2491187.344521,"unit":"taker_shares","basis":"game_lines","source":"polymarket_data","observed_at":"2026-09-23T01:11:41Z","fresh_for_seconds":300},"freshness":{"source":"live","source_status":"ok","source_availability":"available","source_freshness":"fresh","source_observed_at":"2026-09-23T01:12:04Z","source_age_seconds":3,"delayed":false,"scores_observed_at":"2026-09-23T01:12:03Z","scores_source_at":"2026-09-23T01:12:02Z","scores_age_seconds":4,"scores_freshness":"unknown"},"coverage":{"scores":"available","competitors":"provider_ids","schedule":"available"},"url":"https://0xinsider.com/event/nfl-buf-nyj-2026-09-22"}],"has_more":true,"next_cursor":"gms_v1_eyJ2IjoxLCJyYW5rIjowLCJhdF9tcyI6MTc4OTA5NDkwMDAwMCwic2x1ZyI6Im5mbC1idWYtbnlqLTIwMjYtMDktMjIifQ","as_of":"2026-09-23T01:12:07Z","coverage":{"sports":["Baseball","Basketball","Boxing","Cricket","Esports","Football","Hockey","MMA","Pickleball","Soccer","Table Tennis","Tennis"],"leagues":["bel1","brasileirao","bundesliga","cfb","cs2","dota2","epl","eredivisie","laliga","leagueoflegends","ligamx","ligaprofesional","ligue1","mls","nba","nfl","nhl","primeiraliga","scop","seriea","tur","ucl","valorant","wnba"],"sources_unavailable":[]},"meta":{"request_id":"req_2f8c1a4e9b3d47f0","cached":false,"cost":2}}}},"exampleType":"examples"}},"exampleType":"examples"},"0d7c7d22-d378-4309-87b1-0f77e3d033a6":{"description":"Not Modified. Returned when If-None-Match matches the current payload.","headers":{"X-Query-Ignored":{"description":"Comma-separated, percent-encoded query names the operation did not publish and therefore ignored in compatible mode. Names are sorted and de-duplicated.","schema":{"type":"string"}},"X-Effective-Query":{"description":"Normalized, percent-encoded query string containing only the recognized names and values applied by the operation. Query names and values use form-urlencoded decoding, where + is a space. Repeated names are retained and sorted by name. A limit outside the operation's published minimum..maximum is reported as the clamped value the page used, so the header states the page size served rather than the one requested.","schema":{"type":"string"}},"X-Query-Unmatched":{"description":"Comma-separated, percent-encoded names of recognized query parameters whose value the operation applied but which matched nothing it serves, so the empty page reflects that filter, not a quiet catalog. Sent only by an operation that keeps such a parameter lenient on purpose: on GET /api/v1/games it names sport when the bucket is outside the sports this deployment serves (coverage.sports lists them). A value the operation refuses answers 400 instead, and an unknown parameter name is reported in X-Query-Ignored.","schema":{"type":"string"}},"ETag":{"description":"Weak semantic validator for conditional GET. Request-specific response metadata is excluded; send as If-None-Match to receive 304 when the stable payload is unchanged.","schema":{"type":"string","example":"W/\"8f14e45fceea167a5a36dedd4bea2543\""}},"RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call, none of which reaches the per-key limiter. Standard RateLimit header spelling.","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response. Standard RateLimit header spelling.","schema":{"type":"integer","example":84}},"RateLimit-Reset":{"description":"Seconds until that budget's current window resets. Standard RateLimit header spelling.","schema":{"type":"integer","example":42}},"X-RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call.","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response.","schema":{"type":"integer","example":84}},"X-RateLimit-Reset":{"description":"Unix timestamp when that budget's current window resets.","schema":{"type":"integer","example":1710772860}},"X-Request-Id":{"description":"Server-generated request identifier for support and tracing. On every /api/v1 response, including 304, 408, CORS preflights and every error, and always equal to meta.request_id in the body. It is the key of the request's usage accounting row and of every log line the request emitted, so quote either form to support. A client-supplied X-Request-Id request header is ignored: the value is never adopted or echoed.","schema":{"type":"string","example":"req_550e8400"}},"X-Usage-Accounting":{"description":"Usage-record persistence for a protected V1 handler response. persisted: confirmed row; failed: write failed; unknown: completion could not be confirmed. Independent of handler success; do not replay successful mutations to repair accounting. Absent before accounting admission and on public routes. The zero-cost /api/v1/usage route also omits it.","schema":{"type":"string","enum":["persisted","failed","unknown"]}},"Server-Timing":{"description":"Processing time in milliseconds, for example api;dur=12.345. Includes API authentication, quota admission, handler work and response construction. Excludes network transit and streamed body or export-file transfer. The engineering budget is strictly below 250 ms; this header reports observations, not a latency guarantee or a new timeout.","schema":{"type":"string"},"example":"api;dur=12.345"}},"x-empty-body":true,"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"13fd917b-c660-4015-b78b-38695a416d53":{"description":"Bad request. error.param names the parameter: limit outside 1-100 or not an integer, starts_after or starts_before that is not an RFC 3339 instant, starts_after later than starts_before, or a cursor this endpoint did not issue. A status outside its enum or a window other than all or now answers invalid_query, with error.param=status or window. An unknown sport is not a 400: it returns an empty page and names sport in X-Query-Unmatched.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"aee612ad-e72c-41c1-949c-ab622da4cb3e":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"5927e16d-a990-42c2-814d-2fe46ed57461":{"description":"Active Pro subscription required. The key is valid but the account has no paid access: error.reason is subscription_inactive when the Pro subscription has lapsed, or payment_overdue when the plan stands but its latest invoice is unpaid (#32592). error.billing_url and error.message name where a person clears it (https://0xinsider.com/billing). Permanent until a person acts: no Retry-After, never retry on a schedule.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"6a4ec749-d416-494f-bb9c-f8b2303a907b":{"description":"Account access denied","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"a2c21256-62f9-40a2-924e-0d4824bfea26":{"description":"The handler did not answer inside the server's 30-second timeout. error.code is request_timeout. On GET and HEAD the response carries Retry-After and error.retry_at; on a mutation it carries neither, because the request may have completed on the server: check its state before repeating it, and reuse its Idempotency-Key.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d39d116f-2fba-45be-81e9-2d11298155db":{"description":"Account is locked","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"223a8588-2ee1-4489-ab35-caac3125ef70":{"description":"Rate limit exceeded. Three independent budgets. (1) 100 requests/minute per user on Pro, 200 on Max (sliding window), on every authenticated route; RateLimit-Limit reports the caller's. On the remote MCP endpoint /api/v1/mcp only tools/call is counted: initialize, ping, tools/list, notifications, and the GET, HEAD and DELETE the endpoint answers 405 spend no per-minute request, no monthly quota and no pay-as-you-go usage, with or without a key. (2) On the BATCH routes only: 2500 batch item units/minute per user on Pro, 5000 on Max, reserved before any item is executed. A batch with N requested items costs N item units, including duplicate and invalid items. 2500 = 100 requests x 25 items per batch on Pro, 5000 = 200 x 25 on Max, which is the most item work a key can buy through the request limiter at all: a caller may spend their plan's entire request minute on full 25-item batches without the item budget being what stops them. The REQUEST budget is the effective ceiling, and batching is never the more expensive choice. The item budget can still deny at a sliding-window boundary (both counters carry the previous window forward with a floor, and the item counter runs 25x the request counter), so honor a 429 from either. Over-quota batches return 429 with Retry-After plus RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset before any item work is done. (3) The monthly quota: Pro includes 500,000 and Max includes 2,000,000 authenticated requests per UTC calendar month. Over the plan's included requests: with pay as you go on, the excess bills at USD 0.20 per 1,000 on a monthly invoice, up to four times the included allowance (2,000,000 requests for Pro); without it, from October 1, 2026, the next request answers 429 rate_limited with error.reason monthly_quota_exceeded and a Retry-After to the month's reset. Pay-as-you-go accounts receive the same refusal at their ceiling. A refused request is not counted. X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining, and X-Monthly-Quota-Reset (unix seconds, the first of next month) are on every response a route answers for a counted request, on the monthly-quota 429, and on GET /api/v1/me and GET /api/v1/usage, which read the month without spending it. Any other refusal or failure before the route runs, such as a per-minute 429 or a 401, carries none, nor does a remote MCP message other than tools/call. (4) The per-address budget: 1200 requests/minute per IP, shared by every caller behind one address and counted before authentication, on every route. A 429 from it carries error.reason ip_rate_limited and describes that bucket in RateLimit-*; a throttled address (sustained over-limit traffic) carries error.reason ip_throttled with a Retry-After of minutes to days, and a request before it does not shorten the cooldown. Every 429 is the standard error envelope with meta.request_id equal to X-Request-Id.","headers":{"Retry-After":{"description":"Seconds until rate limit resets.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call, none of which reaches the per-key limiter. Standard RateLimit header spelling.","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response. Standard RateLimit header spelling.","schema":{"type":"integer","example":84}},"RateLimit-Reset":{"description":"Seconds until that budget's current window resets. Standard RateLimit header spelling.","schema":{"type":"integer","example":42}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"X-Request-Id":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"9930cbaf-8dfd-4390-8e1c-a10e9b5e2a3e":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"3df81d30-8966-4721-b606-d1d9f281b175":{"description":"Temporarily unavailable. error.reason=read_model_warming means the sports board supply did not answer this read; Retry-After is 5 seconds and the next read normally succeeds. The authenticated rate limiter being unavailable answers the same status with its own per-process cooldown.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","fill_history_too_large","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"continued_from_generation":{"type":"integer","description":"GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07).","uniqueKey":"meta.continued_from_generation","typeLabel":"integer"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","continued_from_generation":123,"directional_source":"live","ranking_source":"live","category_skill_source":"live","category_skill_model_version":"\u003cstring>","category_skill_taxonomy_version":"\u003cstring>","category_skill_platform":"polymarket","category_skill_scope":"observed_goldsky_primary_taker_fill","category_skill_source_coverage":"partial_whale_threshold_fills","category_skill_observation_started_at":"2023-11-07T05:31:56Z","category_skill_model_operationally_degraded":true,"category_skill_status_counts":{"live":1,"insufficient":1,"stale":1,"unknown":1,"degraded":1},"category_skill_base_payload_hash":"\u003cstring>","category_skill_enriched_base_payload_hash":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"492b753b-ea58-4928-9009-99bfe0a64119":{"bearerAuth":{"type":"http","scheme":"bearer","description":"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).","scopes":[],"schemeName":"bearerAuth"}},"0870948c-5b42-42f1-9c39-ec6dc389730e":{"oauth2":{"type":"oauth2","description":"OAuth 2.1 authorization code flow with PKCE S256 for apps and MCP clients acting for a user. Public clients only (no client secret): register with RFC 7591 at https://api.0xinsider.com/oauth/register or present an https client ID metadata document URL as client_id. Authorization server metadata: https://api.0xinsider.com/.well-known/oauth-authorization-server. The access token (oxi_at_..., one hour) is sent as `Authorization: Bearer`; refresh tokens rotate on every use. A route outside the token's scopes answers 403 insufficient_scope. Walkthrough: https://0xinsider.com/auth.md.","flows":{"authorizationCode":{"authorizationUrl":"https://0xinsider.com/oauth/authorize","tokenUrl":"https://api.0xinsider.com/oauth/token","refreshUrl":"https://api.0xinsider.com/oauth/token","scopes":{"read":"Read markets, traders, large trades, positions, reports, search, the event stream and every MCP tool","webhooks":"Create, list, verify, rotate and delete webhook endpoints","export":"Start, poll and download trader exports","usage":"Read the caller's API usage counters"}}},"scopes":["read"],"schemeName":"oauth2"}}},"servers":{"2ad484fe-94b7-439b-b221-8af155051f3d":{"url":"https://api.0xinsider.com","description":"Production (live data). Authenticate with a live key (oxi_sk_live_...); requires an active Pro subscription. A sandbox key (oxi_sk_test_...) is answered with 401 invalid_api_key and error.reason sandbox_api_key."},"5cd2ef08-5581-43fd-8c8b-afbd9f40fc58":{"url":"https://0xinsider.com/sandbox","description":"Sandbox. No credential required and no production data: every documented operation answers with its documented example or a deterministic sample of its response schema. GET /api/v1/stream is the one exclusion and answers 400 there, because a Server-Sent Events stream is a live connection rather than a body. Add ?sandbox_status=\u003ccode> to receive one of the error responses the operation documents (for example 429 with Retry-After). Documented query parameters and JSON request bodies are checked against this document, the two context.md routes answer 200 text/markdown, GET /api/v1/trader/{address}/export/download answers its 302 with a Location the sandbox serves itself rather than an object store, and nothing is stored between requests. A sandbox key (oxi_sk_test_..., issued with no account by POST https://api.0xinsider.com/api/v1/agents/register) is optional: on an operation that requires a credential, a well-formed key is answered with X-Oxi-Sandbox-Key: valid and a malformed one with 401 invalid_api_key."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"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).","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"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).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"oauth2","description":"OAuth 2.1 authorization code flow with PKCE S256 for apps and MCP clients acting for a user. Public clients only (no client secret): register with RFC 7591 at https://api.0xinsider.com/oauth/register or present an https client ID metadata document URL as client_id. Authorization server metadata: https://api.0xinsider.com/.well-known/oauth-authorization-server. The access token (oxi_at_..., one hour) is sent as `Authorization: Bearer`; refresh tokens rotate on every use. A route outside the token's scopes answers 403 insufficient_scope. Walkthrough: https://0xinsider.com/auth.md.","flows":{"authorizationCode":{"authorizationUrl":"https://0xinsider.com/oauth/authorize","tokenUrl":"https://api.0xinsider.com/oauth/token","refreshUrl":"https://api.0xinsider.com/oauth/token","scopes":{"read":"Read markets, traders, large trades, positions, reports, search, the event stream and every MCP tool","webhooks":"Create, list, verify, rotate and delete webhook endpoints","export":"Start, poll and download trader exports","usage":"Read the caller's API usage counters"}}},"scopes":["read"],"schemeName":"oauth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"OAuth 2.1 authorization code flow with PKCE S256 for apps and MCP clients acting for a user. Public clients only (no client secret): register with RFC 7591 at https://api.0xinsider.com/oauth/register or present an https client ID metadata document URL as client_id. Authorization server metadata: https://api.0xinsider.com/.well-known/oauth-authorization-server. The access token (oxi_at_..., one hour) is sent as `Authorization: Bearer`; refresh tokens rotate on every use. A route outside the token's scopes answers 403 insufficient_scope. Walkthrough: https://0xinsider.com/auth.md.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"oauth2","name":"Authorization"}],"title":"oauth2"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"0xinsider","siteName":"0xinsider API","title":"List games - 0xinsider API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T16:45:00.323Z","originalFileLocation":"api-reference/endpoint/list-games.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"List games with both competitors, kickoff times, status, and their winner markets.\">\u003cmeta data-mint-head name=\"application-name\" content=\"0xinsider API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List games - 0xinsider API\">\u003cmeta data-mint-head property=\"og:description\" content=\"List games with both competitors, kickoff times, status, and their winner markets.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"0xinsider API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.0xinsider.com/api-reference/endpoint/list-games\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://0xinsider.mintlify.site/_mintlify/api/og/v2?division=Games\u0026amp;title=List+games\u0026amp;description=List+games+with+both+competitors%2C+kickoff+times%2C+status%2C+and+their+winner+markets.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=0a7b0d1f8abb200090af820e9bb298f087cb6b8ff208279991dd3303a08a2fd0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List games - 0xinsider API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"List games with both competitors, kickoff times, status, and their winner markets.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://0xinsider.mintlify.site/_mintlify/api/og/v2?division=Games\u0026amp;title=List+games\u0026amp;description=List+games+with+both+competitors%2C+kickoff+times%2C+status%2C+and+their+winner+markets.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=0a7b0d1f8abb200090af820e9bb298f087cb6b8ff208279991dd3303a08a2fd0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/0xinsider/iPhECHy4zq6L0ogA/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"0xinsider API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"46E18D97E322917120999977418630DE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.0xinsider.com/api-reference/endpoint/list-games\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoint/list-games.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.0xinsider.com/#organization\",\"name\":\"0xinsider API\",\"url\":\"https://docs.0xinsider.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/logo/light.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=5a737b3d5f5bace7059eb57500f3c8ef\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.0xinsider.com#website\",\"name\":\"0xinsider API\",\"url\":\"https://docs.0xinsider.com\",\"publisher\":{\"@id\":\"https://docs.0xinsider.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games#webpage\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games\",\"name\":\"List games\",\"description\":\"List games with both competitors, kickoff times, status, and their winner markets.\",\"dateModified\":\"2026-11-07T16:45:00.323Z\",\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"0xinsider API\",\"item\":\"https://docs.0xinsider.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List games\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games#apireference\",\"headline\":\"List games\",\"name\":\"List games\",\"description\":\"List games with both competitors, kickoff times, status, and their winner markets.\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/list-games#webpage\"},\"dateModified\":\"2026-11-07T16:45:00.323Z\",\"publisher\":{\"@id\":\"https://docs.0xinsider.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"0xinsider API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"0xinsider API","nav":{"global":{"anchors":[{"anchor":"Terminal","icon":"chart-line","href":"https://0xinsider.com"},{"anchor":"Product changelog","icon":"list","href":"https://0xinsider.com/changelog"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"0xinsider API reference","sidebarTitle":"Overview","href":"/api-reference/introduction"}]},{"group":"Edge Hunter","pages":[{"title":"Edge Hunter","sidebarTitle":"Edge Hunter","openapi":"GET /api/v1/edge-hunter","href":"/api-reference/endpoint/get-edge-hunter"}]},{"group":"Objects","pages":[{"title":"Objects","href":"/api-reference/objects"}]},{"group":"Discovery","pages":[{"title":"API discovery","openapi":"GET /api/v1","href":"/api-reference/endpoint/get-api-discovery"},{"title":"Register an agent","openapi":"POST /api/v1/agents/register","href":"/api-reference/endpoint/register-agent"},{"title":"Coverage","openapi":"GET /api/v1/coverage","href":"/api-reference/endpoint/get-coverage"},{"title":"Platforms (deprecated)","openapi":"GET /api/v1/platforms","href":"/api-reference/endpoint/get-platforms"},{"title":"OpenAPI spec","openapi":"GET /api/v1/openapi.json","href":"/api-reference/endpoint/redirect-api-openapi-spec"}]},{"group":"Traders","pages":[{"title":"Trader","openapi":"GET /api/v1/trader/{address}","href":"/api-reference/endpoint/get-trader"},{"title":"Trader context","openapi":"GET /api/v1/trader/{address}/context","href":"/api-reference/endpoint/get-trader-context"},{"title":"Trader context as Markdown","openapi":"GET /api/v1/trader/{address}/context.md","href":"/api-reference/endpoint/get-trader-context-markdown"},{"title":"Trader category records","openapi":"GET /api/v1/trader/{address}/categories","href":"/api-reference/endpoint/get-trader-category-records"},{"title":"Trader grade at a past time","openapi":"GET /api/v1/trader/{address}/grade-at","href":"/api-reference/endpoint/get-trader-grade-at"},{"title":"Trader closing line value","openapi":"GET /api/v1/trader/{address}/clv","href":"/api-reference/endpoint/get-trader-clv"},{"title":"Batch traders","openapi":"POST /api/v1/traders/batch","href":"/api-reference/endpoint/batch-get-traders"},{"title":"Trader P\u0026L","openapi":"GET /api/v1/trader/{address}/pnl","href":"/api-reference/endpoint/get-trader-pnl"},{"title":"Position timeline","openapi":"GET /api/v1/trader/{address}/position-timeline","href":"/api-reference/endpoint/get-position-timeline"},{"title":"Position timeline by trader","openapi":"GET /api/v1/traders/{trader}/position-timeline","href":"/api-reference/endpoint/get-trader-position-timeline"},{"title":"Large positions","openapi":"GET /api/v1/large-positions","href":"/api-reference/endpoint/list-large-positions"},{"title":"Trader export snapshot","openapi":"GET /api/v1/trader/{address}/export","href":"/api-reference/endpoint/get-trader-export-snapshot"},{"title":"Submit a whale dataset","openapi":"POST /api/v1/datasets/whale-trades","href":"/api-reference/endpoint/submit-whale-dataset"},{"title":"Read a whale dataset job","openapi":"GET /api/v1/datasets/whale-trades/{job_id}","href":"/api-reference/endpoint/get-whale-dataset-status"},{"title":"Download a whale dataset","openapi":"GET /api/v1/datasets/whale-trades/{job_id}/download","href":"/api-reference/endpoint/download-whale-dataset"},{"title":"Cancel a whale dataset job","openapi":"POST /api/v1/datasets/whale-trades/{job_id}/cancel","href":"/api-reference/endpoint/cancel-whale-dataset"},{"title":"Submit a trader export","openapi":"POST /api/v1/trader/{address}/export","href":"/api-reference/endpoint/submit-trader-export"},{"title":"Trader export status","openapi":"GET /api/v1/trader/{address}/export/status","href":"/api-reference/endpoint/get-trader-export-status"},{"title":"Download a trader export","openapi":"GET /api/v1/trader/{address}/export/download","href":"/api-reference/endpoint/download-trader-export"},{"title":"Cancel a trader export","openapi":"POST /api/v1/trader/{address}/export/cancel","href":"/api-reference/endpoint/cancel-trader-export"},{"title":"Leaderboard","openapi":"GET /api/v1/leaderboard","href":"/api-reference/endpoint/get-leaderboard"},{"title":"Trending wallets","openapi":"GET /api/v1/leaderboard/trending","href":"/api-reference/endpoint/list-trending-wallets"},{"title":"Leaderboard leagues","openapi":"GET /api/v1/leaderboard/leagues","href":"/api-reference/endpoint/list-leaderboard-leagues"},{"title":"Sport leaderboard","openapi":"GET /api/v1/leaderboard/sports/{sport}","href":"/api-reference/endpoint/get-sport-leaderboard"},{"title":"Category leaderboard","openapi":"GET /api/v1/leaderboard/categories/{slug}","href":"/api-reference/endpoint/get-category-leaderboard"},{"title":"Category leaders","openapi":"GET /api/v1/leaderboard/categories","href":"/api-reference/endpoint/list-category-leaders"}]},{"group":"Positions","pages":[{"title":"Positions","openapi":"GET /api/v1/positions","href":"/api-reference/endpoint/get-positions"}]},{"group":"Combos","pages":[{"title":"Combo fills","openapi":"GET /api/v1/combos/fills","href":"/api-reference/endpoint/list-combo-fills"},{"title":"Combos summary","openapi":"GET /api/v1/combos/summary","href":"/api-reference/endpoint/get-combos-summary"},{"title":"Combo","description":"Get one Polymarket combo's legs, totals, latest fills, and lifecycle activity.","openapi":"GET /api/v1/combos/{condition_id}","href":"/api-reference/endpoint/get-combo"}]},{"group":"Games","pages":[{"title":"List games","openapi":"GET /api/v1/games","href":"/api-reference/endpoint/list-games"},{"title":"Game","description":"Get one game with its competitors, status, and winner markets.","openapi":"GET /api/v1/games/{event_slug}","href":"/api-reference/endpoint/get-game"},{"title":"List game markets","openapi":"GET /api/v1/games/{event_slug}/markets","href":"/api-reference/endpoint/list-game-markets"},{"title":"List props","openapi":"GET /api/v1/props","href":"/api-reference/endpoint/list-props"},{"title":"List settled markets","openapi":"GET /api/v1/markets/settled","href":"/api-reference/endpoint/list-settled-markets"},{"title":"Game sharp money","openapi":"GET /api/v1/games/{event_slug}/sharp-money","href":"/api-reference/endpoint/get-game-sharp-money"},{"title":"Game trades","openapi":"GET /api/v1/games/{event_slug}/trades","href":"/api-reference/endpoint/list-game-trades"},{"title":"Game holders","openapi":"GET /api/v1/games/{event_slug}/holders","href":"/api-reference/endpoint/get-game-holders"}]},{"group":"Markets","pages":[{"title":"Search markets","openapi":"GET /api/v1/markets/search","href":"/api-reference/endpoint/search-markets"},{"title":"Explore markets","openapi":"GET /api/v1/markets/explore","href":"/api-reference/endpoint/explore-markets"},{"title":"Sharp money flows","openapi":"GET /api/v1/markets/sharp-money-flows","href":"/api-reference/endpoint/sharp-money-flows"},{"title":"Smart money flows","openapi":"GET /api/v1/markets/smart-money-flows","href":"/api-reference/endpoint/smart-money-flows"},{"title":"Market flow","openapi":"GET /api/v1/market/{condition_id}/flow","href":"/api-reference/endpoint/get-market-flow"},{"title":"Batch market flow","openapi":"POST /api/v1/markets/flow/batch","href":"/api-reference/endpoint/batch-get-market-flow"},{"title":"Market intel (deprecated)","openapi":"GET /api/v1/market/{condition_id}/intel","href":"/api-reference/endpoint/get-market-intel"},{"title":"Batch market intel (deprecated)","openapi":"POST /api/v1/markets/intel/batch","href":"/api-reference/endpoint/batch-get-market-intel"},{"title":"Market snapshot","openapi":"GET /api/v1/market/{condition_id}/snapshot","href":"/api-reference/endpoint/get-market-snapshot"},{"title":"Market context as Markdown","openapi":"GET /api/v1/market/{condition_id}/context.md","href":"/api-reference/endpoint/get-market-context-markdown"},{"title":"Market holders","openapi":"GET /api/v1/market/{condition_id}/holders","href":"/api-reference/endpoint/get-market-holders"},{"title":"Market top holders","openapi":"GET /api/v1/market/{condition_id}/top-holders","href":"/api-reference/endpoint/get-market-top-holders"},{"title":"Market closing line","openapi":"GET /api/v1/market/{condition_id}/close","href":"/api-reference/endpoint/get-market-close"},{"title":"Batch market closing lines","openapi":"POST /api/v1/markets/close/batch","href":"/api-reference/endpoint/batch-get-market-close"},{"title":"Market candles","openapi":"GET /api/v1/market/{condition_id}/candles","href":"/api-reference/endpoint/get-market-candles"},{"title":"Market wallets in and out","openapi":"GET /api/v1/market/{condition_id}/wallets-in-out","href":"/api-reference/endpoint/get-market-wallets-in-out"}]},{"group":"Content","pages":[{"title":"Search content","openapi":"GET /api/v1/content/search","href":"/api-reference/endpoint/search-content"}]},{"group":"Pick of the Day","pages":[{"title":"Pick of the Day","openapi":"GET /api/v1/pick-of-the-day","href":"/api-reference/endpoint/get-pick-of-the-day"},{"title":"Pick of the Day archive","openapi":"GET /api/v1/pick-of-the-day/archive","href":"/api-reference/endpoint/get-pick-of-the-day-archive"},{"title":"Pick of the Day stats","openapi":"GET /api/v1/pick-of-the-day/stats","href":"/api-reference/endpoint/get-pick-of-the-day-stats"},{"title":"Pick of the Day ledger","openapi":"GET /api/v1/pick-of-the-day/ledger","href":"/api-reference/endpoint/get-pick-of-the-day-ledger"},{"title":"Pick of the Day ledger entry","openapi":"GET /api/v1/pick-of-the-day/ledger/{pick_id}","href":"/api-reference/endpoint/get-pick-of-the-day-ledger-entry"}]},{"group":"Whale trades","pages":[{"title":"Large trades","openapi":"GET /api/v1/large-trades","href":"/api-reference/endpoint/get-large-trades"},{"title":"Large trade","openapi":"GET /api/v1/large-trades/{id}","href":"/api-reference/endpoint/get-large-trade"},{"title":"Large trades history","openapi":"GET /api/v1/large-trades/history","href":"/api-reference/endpoint/get-large-trades-history"},{"title":"Counterparty executions","openapi":"GET /api/v1/large-trades/{id}/counterparties/executions","href":"/api-reference/endpoint/get-large-trade-counterparty-executions"},{"title":"Counterparty makers","openapi":"GET /api/v1/large-trades/{id}/counterparties/executions/{execution_id}/makers","href":"/api-reference/endpoint/get-large-trade-counterparty-makers"},{"title":"Whale trades (deprecated)","openapi":"GET /api/v1/whale-trades","href":"/api-reference/endpoint/get-whale-trades"},{"title":"Whale trade (deprecated)","openapi":"GET /api/v1/whale-trades/{id}","href":"/api-reference/endpoint/get-whale-trade"},{"title":"Whale trades history (deprecated)","openapi":"GET /api/v1/whale-trades/history","href":"/api-reference/endpoint/get-whale-trades-history"},{"title":"Counterparty executions (deprecated)","openapi":"GET /api/v1/whale-trades/{id}/counterparties/executions","href":"/api-reference/endpoint/get-whale-trade-counterparty-executions"},{"title":"Counterparty makers (deprecated)","openapi":"GET /api/v1/whale-trades/{id}/counterparties/executions/{execution_id}/makers","href":"/api-reference/endpoint/get-whale-trade-counterparty-makers"}]},{"group":"Suspicious trades","pages":[{"title":"Suspicious trades","openapi":"GET /api/v1/suspicious-trades","href":"/api-reference/endpoint/get-suspicious-trades"},{"title":"Suspicious trade","openapi":"GET /api/v1/suspicious-trades/{id}","href":"/api-reference/endpoint/get-suspicious-trade"},{"title":"Insider Radar","openapi":"GET /api/v1/insider-radar","href":"/api-reference/endpoint/get-insider-radar"},{"title":"Insider Radar flag","openapi":"GET /api/v1/insider-radar/{id}","href":"/api-reference/endpoint/get-insider-radar-flag"}]},{"group":"Events","pages":[{"title":"Event replay","openapi":"GET /api/v1/events/feed/since","href":"/api-reference/endpoint/get-event-replay-since"}]},{"group":"Streaming","pages":[{"title":"Stream","openapi":"GET /api/v1/stream","href":"/api-reference/endpoint/get-stream"}]},{"group":"Usage","pages":[{"title":"Account identity","openapi":"GET /api/v1/me","href":"/api-reference/endpoint/get-account-identity"},{"title":"Usage","openapi":"GET /api/v1/usage","href":"/api-reference/endpoint/get-usage"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","openapi":"GET /api/v1/webhooks","href":"/api-reference/endpoint/list-webhooks"},{"title":"Webhook events","openapi":"GET /api/v1/webhooks/events","href":"/api-reference/endpoint/list-webhook-events"},{"title":"Create a webhook","openapi":"POST /api/v1/webhooks","href":"/api-reference/endpoint/create-webhook"},{"title":"Webhook","openapi":"GET /api/v1/webhooks/{id}","href":"/api-reference/endpoint/get-webhook"},{"title":"Update a webhook","openapi":"PATCH /api/v1/webhooks/{id}","href":"/api-reference/endpoint/update-webhook"},{"title":"Delete a webhook","openapi":"DELETE /api/v1/webhooks/{id}","href":"/api-reference/endpoint/delete-webhook"},{"title":"Verify a webhook","openapi":"POST /api/v1/webhooks/{id}/verify","href":"/api-reference/endpoint/verify-webhook"},{"title":"Start webhook verification","openapi":"POST /api/v1/webhooks/{id}/verification-attempts","href":"/api-reference/endpoint/create-webhook-verification-attempt"},{"title":"Get webhook verification","openapi":"GET /api/v1/webhooks/{id}/verification-attempts/{attempt_id}","href":"/api-reference/endpoint/get-webhook-verification-attempt"},{"title":"Rotate a webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret","href":"/api-reference/endpoint/rotate-webhook-secret"},{"title":"Prepare a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/prepare","href":"/api-reference/endpoint/prepare-webhook-secret"},{"title":"Activate a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/activate","href":"/api-reference/endpoint/activate-webhook-secret"},{"title":"Retire a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/retire","href":"/api-reference/endpoint/retire-webhook-secret"},{"title":"Webhook deliveries","openapi":"GET /api/v1/webhooks/{id}/deliveries","href":"/api-reference/endpoint/list-webhook-deliveries"},{"title":"Redeliver a webhook delivery","openapi":"POST /api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver","href":"/api-reference/endpoint/redeliver-webhook-delivery"}]},{"group":"Webhook events","pages":[{"title":"large_trade_inserted_v2","openapi":"api-reference/openapi.json webhook large_trade_inserted_v2","href":"/api-reference/webhooks/large-trade-inserted-v2"},{"title":"large_trades_inserted","openapi":"api-reference/openapi.json webhook large_trades_inserted","href":"/api-reference/webhooks/large-trades-inserted"},{"title":"whale_trades_inserted","openapi":"api-reference/openapi.json webhook whale_trades_inserted","href":"/api-reference/webhooks/whale-trades-inserted"},{"title":"live_sports_updated","openapi":"api-reference/openapi.json webhook live_sports_updated","href":"/api-reference/webhooks/live-sports-updated"},{"title":"trader_synced","openapi":"api-reference/openapi.json webhook trader_synced","href":"/api-reference/webhooks/trader-synced"},{"title":"whale_trader_synced","openapi":"api-reference/openapi.json webhook whale_trader_synced","href":"/api-reference/webhooks/whale-trader-synced"},{"title":"large_positions_updated","openapi":"api-reference/openapi.json webhook large_positions_updated","href":"/api-reference/webhooks/large-positions-updated"},{"title":"wallet_grade_changed","openapi":"api-reference/openapi.json webhook wallet_grade_changed","href":"/api-reference/webhooks/wallet-grade-changed"},{"title":"suspicious_trade_flagged","openapi":"api-reference/openapi.json webhook suspicious_trade_flagged","href":"/api-reference/webhooks/suspicious-trade-flagged"},{"title":"insider_radar_flag_raised","openapi":"api-reference/openapi.json webhook insider_radar_flag_raised","href":"/api-reference/webhooks/insider-radar-flag-raised"},{"title":"sharp_money_flow_detected","openapi":"api-reference/openapi.json webhook sharp_money_flow_detected","href":"/api-reference/webhooks/sharp-money-flow-detected"},{"title":"smart_money_flow_detected","openapi":"api-reference/openapi.json webhook smart_money_flow_detected","href":"/api-reference/webhooks/smart-money-flow-detected"},{"title":"export_job_ready","openapi":"api-reference/openapi.json webhook export_job_ready","href":"/api-reference/webhooks/export-job-ready"},{"title":"export_job_failed","openapi":"api-reference/openapi.json webhook export_job_failed","href":"/api-reference/webhooks/export-job-failed"},{"title":"export_job_expired","openapi":"api-reference/openapi.json webhook export_job_expired","href":"/api-reference/webhooks/export-job-expired"},{"title":"export_job_cancelled","openapi":"api-reference/openapi.json webhook export_job_cancelled","href":"/api-reference/webhooks/export-job-cancelled"},{"title":"market_price_moved","openapi":"api-reference/openapi.json webhook market_price_moved","href":"/api-reference/webhooks/market-price-moved"},{"title":"market_settled","openapi":"api-reference/openapi.json webhook market_settled","href":"/api-reference/webhooks/market-settled"}]},{"group":"Reports","pages":[{"title":"Reports","openapi":"GET /api/v1/reports","href":"/api-reference/endpoint/get-reports"},{"title":"Daily report snapshot","openapi":"GET /api/v1/reports/daily","href":"/api-reference/endpoint/get-daily-report-snapshot"},{"title":"Weekly report snapshot","openapi":"GET /api/v1/reports/weekly","href":"/api-reference/endpoint/get-weekly-report-snapshot"},{"title":"Monthly report snapshot","openapi":"GET /api/v1/reports/monthly","href":"/api-reference/endpoint/get-monthly-report-snapshot"},{"title":"Resolution report","openapi":"GET /api/v1/reports/resolutions","href":"/api-reference/endpoint/get-resolution-report"}]},{"group":"System","pages":[{"title":"Health","openapi":"GET /api/v1/health","href":"/api-reference/endpoint/health"},{"title":"Remote MCP","sidebarTitle":"Remote MCP","openapi":"POST /api/v1/mcp","href":"/api-reference/endpoint/remote-mcp"},{"title":"Remote MCP GET","sidebarTitle":"Remote MCP GET","openapi":"GET /api/v1/mcp","href":"/api-reference/endpoint/remote-mcp-stream"}]},{"group":"Retired endpoints","pages":[{"title":"Sports edge signals (retired)","openapi":"GET /api/v1/sports-edge-signals","href":"/api-reference/endpoint/get-sports-edge-signals"},{"title":"Sports edge observations (retired)","openapi":"GET /api/v1/sports-edge-observations","href":"/api-reference/endpoint/get-sports-edge-observations"},{"title":"Pre-game sides (retired)","openapi":"GET /api/v1/sports/pre-game-sides","href":"/api-reference/endpoint/get-pre-game-sides"},{"title":"Pre-game side observations (retired)","openapi":"GET /api/v1/sports/pre-game-side-observations","href":"/api-reference/endpoint/get-pre-game-side-observations"}]}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/recipes/copy-trade"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"List games - 0xinsider API","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}