Use this endpoint for historical analysis, backtests, and recovering trade data after an outage. Rows use the Large trades format and default to newest first.The endpoint reads stored trades, so its coverage can have gaps. For a recent feed without a time range, use Large trades.
The earliest traded_at to return, as an RFC3339 timestamp. The bound is inclusive.
to
The first traded_at to exclude, as an RFC3339 timestamp. When both are sent, to must be after from, or you get 400 with error.paramto.
condition_id
The exact raw Polymarket condition_id. A market 0xinsider has no rows for returns an empty list, not an error.
event_slug
A game ID from List games. Only the large trades in that game’s markets come back, the moneyline, spreads, totals, and props. It works with sort=recent only and cannot be sent with condition_id. An unknown game is a 404 with error.param set to event_slug.
trader
One wallet, given as an address, a timestamp-suffixed wallet alias, a Polymarket username, or a trd_ id. A wallet 0xinsider does not know returns an empty list.
platform
polymarket or all, which mean the same thing. Any other value returns 400 with error.paramplatform.
The same rules as Large trades. min_size defaults to 5000. min_grade reads the wallet’s grade today, not at trade time.
min_grade_at_trade
The lowest grade the wallet held when the trade filled, read from trader.grade_at_trade. A returns trades by S and A wallets. Only a trade whose trader.grade_at_trade_status is graded can match, so a trade before 23:00 UTC on September 19, 2026, or one made while the wallet’s grade was changing, never does. It is the same basis as min_grade_at_trade on Large trades, Stream, and webhook trade_filters, so a history read and a stream with the same floor agree. It works with both sorts and with condition_id, event_slug, trader, from, and to. Sending it with min_grade returns 400 with error.param set to min_grade_at_trade.
sort
recent returns newest first and is the default. market_volume_share returns the biggest share of its own market first, with trades that have no share last, and reads the window you asked for, or the last 30 days when you send no from.
limit
How many trades to return, from 1 to 100. The default is 20.
cursor
The next_cursor value from the previous response. URL-encode it. See Pagination. A cursor belongs to the sort it was returned under, so sending it with the other sort is rejected.
has_more and next_cursor describe the filtered result, so a full page always holds limit matching trades.
Always local_replay, and meta.source.table is always whale_alerts. The rows come from 0xinsider’s stored trades.
meta.source.provider_fetch_at_request_time
Always false. The request reads stored trades without fetching new data from Polymarket.
meta.completeness.status
Always best_effort, with meta.completeness.reason saying why. Coverage of a given market and window can have gaps, so do not treat an empty window as proof that nothing traded.
data_quality
Page-level age and coverage beside data. The groups are alert, trade, trader, ranking, market, and volume. trades.ingested_at, traders.last_synced, trader_rankings.computed_at, market_canonical.last_refreshed_at, and market_live_stats.volume_request_observed_at provide the measurable clocks; whale_alerts.inserted_xid is a transaction identifier, so alert is unknown. trader and ranking are stale past their max_age_s of 604800 seconds; the other clocks keep no schedule, carry no max_age_s, and are never stale. The stored clocks are part of the ETag; cache facts remain in meta.
market_volume_share
The trade’s share count (size_usd / price) divided by the shares its market has traded, as recorded at or after the trade, so it always reads between 0 and 1. It is absent when no such figure is stored, or when that figure is smaller than the trade. Filter on it with min_market_volume_share and rank by it with sort=market_volume_share.
trader.grade_at_trade
The grade the wallet held when the trade happened. null unless trader.grade_at_trade_status is graded.
trader.grade_at_trade_status
graded, ungraded (recorded without a grade then), or unknown (no record covers that moment). Every trade before September 19, 2026 23:00 UTC is unknown.
recorded_review_score
The review score written when the row was stored (formerly recorded_signal_score, which still carries the same value). null before August 3, 2026 11:59 UTC, and never backfilled.
trader.grade, review_score
Today’s values, on every row however old. review_score was formerly signal_score, which still carries the same value.
trader.grade, review_score, and the min_grade filter read the wallet as it is today. A rule like “follow S-grade wallets” tested on them selects wallets that were graded S after they won, so it looks better than it could have traded.Filter with min_grade_at_trade, and select on trader.grade_at_trade and recorded_review_score, instead. Grades are recorded from September 19, 2026 and recorded scores from August 3, 2026; before those dates the fields say unknown and null, never a guess. Nothing earlier can be rebuilt: the grade and the statistics the score reads were not kept per moment.
The size floor changed over the archive’s life, so month-to-month counts are not comparable at the default min_size.
Period
What was stored
Before February 2, 2026
Sparse: at most a few hundred trades a month.
February 2 to July 5, 2026
3,000 USD and up (1.4% of rows are smaller), at any price.
From July 6, 2026
10,000 USD and up (1,000 USD in earnings markets), priced below 0.97 (0.99 in earnings markets).
Pass min_size=10000 for one size rule across the whole range. Counts still follow the sports calendar.Until July 17, 2026, one match could be stored twice: once for each wallet. From May 1 to July 17, 27.7% of rows at $10,000 and up share a transaction and a market with another stored wallet, almost always a Yes buyer and a No buyer filled against each other.From July 18, 2026 a row is the taker’s side only. Before May the transaction hash is mostly absent, so the share cannot be measured there.
A live feed. These rows are a replay of what 0xinsider stored, and meta.completeness.status is best_effort for that reason.
A trade under min_size, which defaults to 5000. Any value down to 0 is accepted, but it cannot reach fills below the size at which a trade is recorded at all.
An error for an unknown trader or condition_id. You get an empty list and a 200, so check the length of data rather than the status code.
The wallets on the other side of a trade. Open one row with Large trade.
A grade or a recorded score for a moment nobody recorded. Before September 19, 2026 the grade at trade time is unknown, so min_grade_at_trade matches none of those trades; before August 3, 2026 recorded_review_score is null.
A trade priced at 0.97 or above stored since July 6, 2026, outside earnings markets.
Save the response’s ETag and send it in If-None-Match on your next request. If the list has not changed, the server returns 304 Not Modified with no body. data_quality is part of the representation and its stored clocks are included in the ETag; meta.cached and meta.cache_age_s describe the transport cache.
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.
Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count), where a positive volume is recorded for the market; a market without one keeps the fill, and rows written before that date were not re-filtered.
Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket. Sports and esports only (#27430): a category outside them returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657).
Minimum trader grade as of today (trader.grade), not at trade time. On a historical window it selects wallets by a grade they may have earned after the trade; for a point-in-time rule send min_grade_at_trade instead, which filters on trader.grade_at_trade. A means S or A, B means S, A or B.
Minimum grade the trader held when the trade filled (trader.grade_at_trade). Only rows whose trader.grade_at_trade_status is graded can match, so a trade before 2026-09-19T23:00Z, or one made while the wallet's grade was changing, never does. The same basis as min_grade_at_trade on GET /api/v1/large-trades, GET /api/v1/stream and webhook trade_filters, so a history read and a stream with the same floor agree. Applies to both sorts and beside condition_id, event_slug, trader and from/to. Sending it with min_grade is 400. A means S or A, B means S, A or B.
Keep only trades whose market_volume_share is known and at least this. A fraction, not a percent: 0.01 is one percent of the market's traded volume. A trade whose share is unavailable is never returned by a non-zero value, because an unavailable share cannot be said to clear a floor.
Order of the returned page. recent is newest first and is the default. market_volume_share ranks by each trade's share of its market's traded volume, biggest first, with a trade whose share is unavailable last. That ranking reads from, or the last 30 days when from is omitted, for the same reason. A cursor is bound to the order it was minted in, so a continuation cannot cross from one order into the other.
Only the large trades in one game: every market of the game behind this event slug, the moneyline, spreads, totals and props, as GET /api/v1/games/{event_slug}/trades reads them. Matched case-insensitively. Newest first only (sort=market_volume_share answers 400), and cannot be combined with condition_id (400). An unknown slug answers 404 not_found with error.param event_slug.
Total matching rows when the read model exposes a count; the key is absent when it does not.
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":"6af0ca257fb4490a674c2637","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API reference","count":132},{"language":"default","tag":"Traders","count":26},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Changelog","count":19},{"language":"default","tag":"API updates","count":19},{"language":"default","tag":"Webhook events","count":18},{"language":"default","tag":"Older entries","count":18},{"language":"default","tag":"Markets","count":17},{"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/get-large-trades-history","slug":"/api-reference/endpoint/get-large-trades-history","pageMetadata":{"title":"Large trades history","description":"Find recorded large trades by time range, market, wallet, or category.","openapi":"GET /api/v1/large-trades/history","href":"/api-reference/endpoint/get-large-trades-history"},"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: \"Find recorded large trades by time range, market, wallet, or category.\"\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:[_jsxs(_components.p,{children:[`Use this endpoint for historical analysis, backtests, and recovering trade data after an outage. Rows use the `,_jsx(_components.a,{href:`/api-reference/endpoint/get-large-trades`,children:`Large trades`}),` format and default to newest first.`]}),`\n`,_jsxs(_components.p,{children:[`The endpoint reads stored trades, so its coverage can have gaps. For a recent feed without a time range, use `,_jsx(_components.a,{href:`/api-reference/endpoint/get-large-trades`,children:`Large trades`}),`.`]}),`\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:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`from`})}),_jsxs(_components.td,{children:[`The earliest `,_jsx(_components.code,{children:`traded_at`}),` to return, as an RFC3339 timestamp. The bound is inclusive.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`to`})}),_jsxs(_components.td,{children:[`The first `,_jsx(_components.code,{children:`traded_at`}),` to exclude, as an RFC3339 timestamp. When both are sent, `,_jsx(_components.code,{children:`to`}),` must be after `,_jsx(_components.code,{children:`from`}),`, or you get `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`to`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`condition_id`})}),_jsxs(_components.td,{children:[`The exact raw Polymarket `,_jsx(_components.code,{children:`condition_id`}),`. A market 0xinsider has no rows for returns an empty list, not an error.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`event_slug`})}),_jsxs(_components.td,{children:[`A game ID from `,_jsx(_components.a,{href:`/api-reference/endpoint/list-games`,children:`List games`}),`. Only the large trades in that game’s markets come back, the moneyline, spreads, totals, and props. It works with `,_jsx(_components.code,{children:`sort=recent`}),` only and cannot be sent with `,_jsx(_components.code,{children:`condition_id`}),`. An unknown game is a `,_jsx(_components.code,{children:`404`}),` with `,_jsx(_components.code,{children:`error.param`}),` set to `,_jsx(_components.code,{children:`event_slug`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trader`})}),_jsxs(_components.td,{children:[`One wallet, given as an address, a timestamp-suffixed wallet alias, a Polymarket username, or a `,_jsx(_components.code,{children:`trd_`}),` id. A wallet 0xinsider does not know returns an empty list.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`platform`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`polymarket`}),` or `,_jsx(_components.code,{children:`all`}),`, which mean the same thing. Any other value returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`platform`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`category`}),`, `,_jsx(_components.code,{children:`min_grade`}),`, `,_jsx(_components.code,{children:`suspicious_only`}),`, `,_jsx(_components.code,{children:`min_size`}),`, `,_jsx(_components.code,{children:`min_market_volume_share`})]}),_jsxs(_components.td,{children:[`The same rules as `,_jsx(_components.a,{href:`/api-reference/endpoint/get-large-trades`,children:`Large trades`}),`. `,_jsx(_components.code,{children:`min_size`}),` defaults to `,_jsx(_components.code,{children:`5000`}),`. `,_jsx(_components.code,{children:`min_grade`}),` reads the wallet’s grade today, not at trade time.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`min_grade_at_trade`})}),_jsxs(_components.td,{children:[`The lowest grade the wallet held when the trade filled, read from `,_jsx(_components.code,{children:`trader.grade_at_trade`}),`. `,_jsx(_components.code,{children:`A`}),` returns trades by S and A wallets. Only a trade whose `,_jsx(_components.code,{children:`trader.grade_at_trade_status`}),` is `,_jsx(_components.code,{children:`graded`}),` can match, so a trade before 23:00 UTC on September 19, 2026, or one made while the wallet’s grade was changing, never does. It is the same basis as `,_jsx(_components.code,{children:`min_grade_at_trade`}),` on `,_jsx(_components.a,{href:`/api-reference/endpoint/get-large-trades`,children:`Large trades`}),`, `,_jsx(_components.a,{href:`/api-reference/endpoint/get-stream`,children:`Stream`}),`, and webhook `,_jsx(_components.code,{children:`trade_filters`}),`, so a history read and a stream with the same floor agree. It works with both sorts and with `,_jsx(_components.code,{children:`condition_id`}),`, `,_jsx(_components.code,{children:`event_slug`}),`, `,_jsx(_components.code,{children:`trader`}),`, `,_jsx(_components.code,{children:`from`}),`, and `,_jsx(_components.code,{children:`to`}),`. Sending it with `,_jsx(_components.code,{children:`min_grade`}),` returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` set to `,_jsx(_components.code,{children:`min_grade_at_trade`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sort`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`recent`}),` returns newest first and is the default. `,_jsx(_components.code,{children:`market_volume_share`}),` returns the biggest share of its own market first, with trades that have no share last, and reads the window you asked for, or the last 30 days when you send no `,_jsx(_components.code,{children:`from`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`limit`})}),_jsxs(_components.td,{children:[`How many trades to return, from 1 to 100. The default is `,_jsx(_components.code,{children:`20`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cursor`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`next_cursor`}),` value from the previous response. URL-encode it. See `,_jsx(_components.a,{href:`/concepts/pagination`,children:`Pagination`}),`. A cursor belongs to the `,_jsx(_components.code,{children:`sort`}),` it was returned under, so sending it with the other `,_jsx(_components.code,{children:`sort`}),` is rejected.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`has_more`}),` and `,_jsx(_components.code,{children:`next_cursor`}),` describe the filtered result, so a full page always holds `,_jsx(_components.code,{children:`limit`}),` matching trades.`]}),`\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:`meta.source.kind`})}),_jsxs(_components.td,{children:[`Always `,_jsx(_components.code,{children:`local_replay`}),`, and `,_jsx(_components.code,{children:`meta.source.table`}),` is always `,_jsx(_components.code,{children:`whale_alerts`}),`. The rows come from 0xinsider’s stored trades.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`meta.source.provider_fetch_at_request_time`})}),_jsxs(_components.td,{children:[`Always `,_jsx(_components.code,{children:`false`}),`. The request reads stored trades without fetching new data from Polymarket.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`meta.completeness.status`})}),_jsxs(_components.td,{children:[`Always `,_jsx(_components.code,{children:`best_effort`}),`, with `,_jsx(_components.code,{children:`meta.completeness.reason`}),` saying why. Coverage of a given market and window can have gaps, so do not treat an empty window as proof that nothing traded.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data_quality`})}),_jsxs(_components.td,{children:[`Page-level age and coverage beside `,_jsx(_components.code,{children:`data`}),`. The groups are `,_jsx(_components.code,{children:`alert`}),`, `,_jsx(_components.code,{children:`trade`}),`, `,_jsx(_components.code,{children:`trader`}),`, `,_jsx(_components.code,{children:`ranking`}),`, `,_jsx(_components.code,{children:`market`}),`, and `,_jsx(_components.code,{children:`volume`}),`. `,_jsx(_components.code,{children:`trades.ingested_at`}),`, `,_jsx(_components.code,{children:`traders.last_synced`}),`, `,_jsx(_components.code,{children:`trader_rankings.computed_at`}),`, `,_jsx(_components.code,{children:`market_canonical.last_refreshed_at`}),`, and `,_jsx(_components.code,{children:`market_live_stats.volume_request_observed_at`}),` provide the measurable clocks; `,_jsx(_components.code,{children:`whale_alerts.inserted_xid`}),` is a transaction identifier, so `,_jsx(_components.code,{children:`alert`}),` is `,_jsx(_components.code,{children:`unknown`}),`. `,_jsx(_components.code,{children:`trader`}),` and `,_jsx(_components.code,{children:`ranking`}),` are `,_jsx(_components.code,{children:`stale`}),` past their `,_jsx(_components.code,{children:`max_age_s`}),` of 604800 seconds; the other clocks keep no schedule, carry no `,_jsx(_components.code,{children:`max_age_s`}),`, and are never `,_jsx(_components.code,{children:`stale`}),`. The stored clocks are part of the `,_jsx(_components.code,{children:`ETag`}),`; cache facts remain in `,_jsx(_components.code,{children:`meta`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`market_volume_share`})}),_jsxs(_components.td,{children:[`The trade’s share count (`,_jsx(_components.code,{children:`size_usd / price`}),`) divided by the shares its market has traded, as recorded at or after the trade, so it always reads between 0 and 1. It is absent when no such figure is stored, or when that figure is smaller than the trade. Filter on it with `,_jsx(_components.code,{children:`min_market_volume_share`}),` and rank by it with `,_jsx(_components.code,{children:`sort=market_volume_share`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trader.grade_at_trade`})}),_jsxs(_components.td,{children:[`The grade the wallet held when the trade happened. `,_jsx(_components.code,{children:`null`}),` unless `,_jsx(_components.code,{children:`trader.grade_at_trade_status`}),` is `,_jsx(_components.code,{children:`graded`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trader.grade_at_trade_status`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`graded`}),`, `,_jsx(_components.code,{children:`ungraded`}),` (recorded without a grade then), or `,_jsx(_components.code,{children:`unknown`}),` (no record covers that moment). Every trade before September 19, 2026 23:00 UTC is `,_jsx(_components.code,{children:`unknown`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recorded_review_score`})}),_jsxs(_components.td,{children:[`The review score written when the row was stored (formerly `,_jsx(_components.code,{children:`recorded_signal_score`}),`, which still carries the same value). `,_jsx(_components.code,{children:`null`}),` before August 3, 2026 11:59 UTC, and never backfilled.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`trader.grade`}),`, `,_jsx(_components.code,{children:`review_score`})]}),_jsxs(_components.td,{children:[`Today’s values, on every row however old. `,_jsx(_components.code,{children:`review_score`}),` was formerly `,_jsx(_components.code,{children:`signal_score`}),`, which still carries the same value.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`backtest-without-look-ahead`,children:`Backtest without look-ahead`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`trader.grade`}),`, `,_jsx(_components.code,{children:`review_score`}),`, and the `,_jsx(_components.code,{children:`min_grade`}),` filter read the wallet as it is today. A rule like “follow S-grade wallets” tested on them selects wallets that were graded S after they won, so it looks better than it could have traded.`]}),`\n`,_jsxs(_components.p,{children:[`Filter with `,_jsx(_components.a,{href:`#parameters`,children:_jsx(_components.code,{children:`min_grade_at_trade`})}),`, and select on `,_jsx(_components.code,{children:`trader.grade_at_trade`}),` and `,_jsx(_components.code,{children:`recorded_review_score`}),`, instead. Grades are recorded from September 19, 2026 and recorded scores from August 3, 2026; before those dates the fields say `,_jsx(_components.code,{children:`unknown`}),` and `,_jsx(_components.code,{children:`null`}),`, never a guess. Nothing earlier can be rebuilt: the grade and the statistics the score reads were not kept per moment.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,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:` -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/large-trades/history?min_grade_at_trade=S\u0026min_size=10000\u0026from=2026-10-01T00:00:00Z\u0026to=2026-11-01T00:00:00Z\u0026limit=100\"`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`capture-rules-by-period`,children:`Capture rules by period`}),`\n`,_jsxs(_components.p,{children:[`The size floor changed over the archive’s life, so month-to-month counts are not comparable at the default `,_jsx(_components.code,{children:`min_size`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Period`}),_jsx(_components.th,{children:`What was stored`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Before February 2, 2026`}),_jsx(_components.td,{children:`Sparse: at most a few hundred trades a month.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`February 2 to July 5, 2026`}),_jsx(_components.td,{children:`3,000 USD and up (1.4% of rows are smaller), at any price.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`From July 6, 2026`}),_jsx(_components.td,{children:`10,000 USD and up (1,000 USD in earnings markets), priced below 0.97 (0.99 in earnings markets).`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`min_size=10000`}),` for one size rule across the whole range. Counts still follow the sports calendar.`]}),`\n`,_jsxs(_components.p,{children:[`Until July 17, 2026, one match could be stored twice: once for each wallet. From May 1 to July 17, 27.7% of rows at $10,000 and up share a transaction and a market with another stored wallet, almost always a `,_jsx(_components.code,{children:`Yes`}),` buyer and a `,_jsx(_components.code,{children:`No`}),` buyer filled against each other.`]}),`\n`,_jsx(_components.p,{children:`From July 18, 2026 a row is the taker’s side only. Before May the transaction hash is mostly absent, so the share cannot be measured there.`}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,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:` -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/large-trades/history?trader=swisstony\u0026min_size=10000\u0026from=2026-05-01T00:00:00Z\u0026to=2026-06-01T00:00:00Z\u0026limit=100\"`})}),`\n`]})})}),`\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:[`A live feed. These rows are a replay of what 0xinsider stored, and `,_jsx(_components.code,{children:`meta.completeness.status`}),` is `,_jsx(_components.code,{children:`best_effort`}),` for that reason.`]}),`\n`,_jsxs(_components.li,{children:[`A trade under `,_jsx(_components.code,{children:`min_size`}),`, which defaults to `,_jsx(_components.code,{children:`5000`}),`. Any value down to `,_jsx(_components.code,{children:`0`}),` is accepted, but it cannot reach fills below the size at which a trade is recorded at all.`]}),`\n`,_jsxs(_components.li,{children:[`An error for an unknown `,_jsx(_components.code,{children:`trader`}),` or `,_jsx(_components.code,{children:`condition_id`}),`. You get an empty list and a `,_jsx(_components.code,{children:`200`}),`, so check the length of `,_jsx(_components.code,{children:`data`}),` rather than the status code.`]}),`\n`,_jsxs(_components.li,{children:[`The wallets on the other side of a trade. Open one row with `,_jsx(_components.a,{href:`/api-reference/endpoint/get-large-trade`,children:`Large trade`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A grade or a recorded score for a moment nobody recorded. Before September 19, 2026 the grade at trade time is `,_jsx(_components.code,{children:`unknown`}),`, so `,_jsx(_components.code,{children:`min_grade_at_trade`}),` matches none of those trades; before August 3, 2026 `,_jsx(_components.code,{children:`recorded_review_score`}),` is `,_jsx(_components.code,{children:`null`}),`.`]}),`\n`,_jsx(_components.li,{children:`A trade priced at 0.97 or above stored since July 6, 2026, outside earnings markets.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`caching`,children:`Caching`}),`\n`,_jsxs(_components.p,{children:[`Save the response’s `,_jsx(_components.code,{children:`ETag`}),` and send it in `,_jsx(_components.code,{children:`If-None-Match`}),` on your next request. If the list has not changed, the server returns `,_jsx(_components.code,{children:`304 Not Modified`}),` with no body. `,_jsx(_components.code,{children:`data_quality`}),` is part of the representation and its stored clocks are included in the `,_jsx(_components.code,{children:`ETag`}),`; `,_jsx(_components.code,{children:`meta.cached`}),` and `,_jsx(_components.code,{children:`meta.cache_age_s`}),` describe the transport cache.`]})]})}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":"Large trades history","description":"Find recorded large trades by time range, market, wallet, or category.","openapi":"GET /api/v1/large-trades/history","href":"/api-reference/endpoint/get-large-trades-history"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"Key response fields","slug":"key-response-fields","depth":2,"children":[]},{"title":"Backtest without look-ahead","slug":"backtest-without-look-ahead","depth":2,"children":[]},{"title":"Capture rules by period","slug":"capture-rules-by-period","depth":2,"children":[]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"What it does not return","slug":"what-it-does-not-return","depth":2,"children":[]},{"title":"Caching","slug":"caching","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/0xinsider/0665b0844daabe8f/changelog-anchors.js"],"openApiReferenceData":{"operation":{"operationId":"listLargeTradeHistory","summary":"Replay historical large trades","description":"Find recorded large trades by time range, market, wallet, or category.","tags":["Large trades"],"parameters":["5fa025e3-4125-4537-b8a5-f74976b237da","c9d13ec2-9763-401b-9f32-b90d9d131e9b","8455ec04-8c54-4078-a79d-39a4be6302fe","d5e3605b-24b2-482e-839d-b919685b4cac","cae322f5-3975-48a2-a1ce-08e064c809cd","5e1e0772-bb7e-4a49-bc89-ec22d243e220","9c0fc82f-b653-4f60-8019-c2f4bf3c10ba","dbce054e-007c-4a27-ae5b-39a3057a2eee","d5ec058c-67d3-4b5d-a16e-5e137f35831f","d0dd5877-d275-437b-9363-f075c3ad2dee","2fb1fc75-d2b5-4436-829c-4adfced1869e","5543fdb8-3696-4315-af9f-908434c24c4a","4e881910-d4cc-453b-a9ba-39f2c99bed6a","5044b4cb-1916-48f4-bb5c-8d526280e024","78957152-8c2c-4dc9-bd9f-bbd4a49bf891","a0ba409d-f1d3-46d3-a2f4-b25d6fcc2ba4","ef085dc9-a7ac-490c-a55d-a4d7df0889b3"],"responses":{"200":"6c8fefe7-4d9f-4421-b04f-98ec7989dd85","304":"79a71d73-e8a1-4156-ac87-05a6c1c4cf90","400":"d9a83e7e-c6f9-4914-9e8c-3e1b04bf5299","401":"b7f3b6f6-be5b-4380-8b69-74392e035b93","402":"b708be70-226c-4347-ac4e-03048e5c569c","403":"3b200010-7504-4726-a674-4aead1052b2c","408":"2d6b5505-a87b-4027-b477-e4c9882e111c","423":"9fef1c4a-7a58-4a9b-bfcc-7960c7973830","429":"42012940-e8c7-4824-b1c4-1cc0eeed4caa","500":"0e88ad79-44bb-44ae-bd12-76ab3590c4f9","503":"bc05a1ee-b610-434f-a80c-9bc11d06256c"},"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/large-trades/history'"}],"x-examples":{"success":{"object":"list","data":[],"data_quality":{"status":"partial","field_groups":[{"group":"alert","owner":"whale_alerts.inserted_xid","status":"unknown","reason":"whale_alerts.inserted_xid is a transaction identifier rather than a timestamp"},{"group":"trade","owner":"trades.ingested_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"trader","owner":"traders.last_synced","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"ranking","owner":"trader_rankings.computed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"market","owner":"market_canonical.last_refreshed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"volume","owner":"market_live_stats.volume_request_observed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"}]},"has_more":false,"next_cursor":null,"total":0,"meta":{"request_id":"req_example","cached":false,"cost":1}}},"x-latency-budget":{"milliseconds":250,"measurement":"response-ready","requirement":"engineering-budget"},"method":"get","type":"path","servers":["76f8193f-6892-42e2-adf3-2507e4ce7561","6a1bcb01-27ed-4bb9-a1f6-01754ab9b34c"],"security":["5b04c279-f1b6-4a1f-bb21-71fc7368d2ca","f871f473-8446-4a8a-a660-382a5cc22d0c"],"path":"/api/v1/large-trades/history","baseUrlOptions":["https://api.0xinsider.com","https://0xinsider.com/sandbox"],"title":"Replay historical large trades","codeSamples":[{"label":"cURL","lang":"curl","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/large-trades/history'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"5fa025e3-4125-4537-b8a5-f74976b237da":{"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>"}},"c9d13ec2-9763-401b-9f32-b90d9d131e9b":{"name":"limit","in":"query","description":"Maximum number of historical large trades to return. Out-of-range values are clamped to 1..100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of historical large trades to return. Out-of-range values are clamped to 1..100.","uniqueKey":"","typeLabel":"integer"}},"8455ec04-8c54-4078-a79d-39a4be6302fe":{"name":"cursor","in":"query","description":"Pagination cursor from previous response's next_cursor. Prefix: wth_. URL-encode when replaying as a query parameter.","schema":{"type":"string","description":"Pagination cursor from previous response's next_cursor. Prefix: wth_. URL-encode when replaying as a query parameter.","uniqueKey":"","typeLabel":"string"}},"d5e3605b-24b2-482e-839d-b919685b4cac":{"name":"min_size","in":"query","description":"Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count), where a positive volume is recorded for the market; a market without one keeps the fill, and rows written before that date were not re-filtered.","schema":{"type":"number","default":5000,"description":"Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count), where a positive volume is recorded for the market; a market without one keeps the fill, and rows written before that date were not re-filtered.","uniqueKey":"","typeLabel":"number"}},"cae322f5-3975-48a2-a1ce-08e064c809cd":{"name":"condition_id","in":"query","description":"Exact raw provider condition_id. Unknown markets return an empty list.","schema":{"type":"string","description":"Exact raw provider condition_id. Unknown markets return an empty list.","uniqueKey":"","typeLabel":"string"}},"5e1e0772-bb7e-4a49-bc89-ec22d243e220":{"name":"trader","in":"query","description":"Trader wallet address, timestamp-suffixed wallet alias, username, or trd_-prefixed trader ID, resolved against the traders table. Unknown traders return an empty list.","schema":{"type":"string","description":"Trader wallet address, timestamp-suffixed wallet alias, username, or trd_-prefixed trader ID, resolved against the traders table. Unknown traders return an empty list.","uniqueKey":"","typeLabel":"string"}},"9c0fc82f-b653-4f60-8019-c2f4bf3c10ba":{"name":"category","in":"query","description":"Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket. Sports and esports only (#27430): a category outside them returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657).","schema":{"type":"string","description":"Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket. Sports and esports only (#27430): a category outside them returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657).","uniqueKey":"","typeLabel":"string"}},"dbce054e-007c-4a27-ae5b-39a3057a2eee":{"name":"min_grade","in":"query","description":"Minimum trader grade as of today (trader.grade), not at trade time. On a historical window it selects wallets by a grade they may have earned after the trade; for a point-in-time rule send min_grade_at_trade instead, which filters on trader.grade_at_trade. A means S or A, B means S, A or B.","schema":{"type":"string","enum":["S","A","B","C","D","F"],"description":"Minimum trader grade as of today (trader.grade), not at trade time. On a historical window it selects wallets by a grade they may have earned after the trade; for a point-in-time rule send min_grade_at_trade instead, which filters on trader.grade_at_trade. A means S or A, B means S, A or B.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"d5ec058c-67d3-4b5d-a16e-5e137f35831f":{"name":"min_grade_at_trade","in":"query","description":"Minimum grade the trader held when the trade filled (trader.grade_at_trade). Only rows whose trader.grade_at_trade_status is graded can match, so a trade before 2026-09-19T23:00Z, or one made while the wallet's grade was changing, never does. The same basis as min_grade_at_trade on GET /api/v1/large-trades, GET /api/v1/stream and webhook trade_filters, so a history read and a stream with the same floor agree. Applies to both sorts and beside condition_id, event_slug, trader and from/to. Sending it with min_grade is 400. A means S or A, B means S, A or B.","schema":{"type":"string","enum":["S","A","B","C","D","F"],"description":"Minimum grade the trader held when the trade filled (trader.grade_at_trade). Only rows whose trader.grade_at_trade_status is graded can match, so a trade before 2026-09-19T23:00Z, or one made while the wallet's grade was changing, never does. The same basis as min_grade_at_trade on GET /api/v1/large-trades, GET /api/v1/stream and webhook trade_filters, so a history read and a stream with the same floor agree. Applies to both sorts and beside condition_id, event_slug, trader and from/to. Sending it with min_grade is 400. A means S or A, B means S, A or B.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"d0dd5877-d275-437b-9363-f075c3ad2dee":{"name":"suspicious_only","in":"query","description":"When true, return only rows with persisted suspicion_score >= 60. The filter is applied before SQL-backed limit + 1 pagination.","schema":{"type":"boolean","default":false,"description":"When true, return only rows with persisted suspicion_score >= 60. The filter is applied before SQL-backed limit + 1 pagination.","uniqueKey":"","typeLabel":"boolean"}},"2fb1fc75-d2b5-4436-829c-4adfced1869e":{"name":"platform","in":"query","description":"Filter by whale_alerts.platform. all is equivalent to omitted.","schema":{"type":"string","enum":["polymarket","all"],"description":"Filter by whale_alerts.platform. all is equivalent to omitted.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"5543fdb8-3696-4315-af9f-908434c24c4a":{"name":"from","in":"query","description":"Inclusive RFC3339 lower bound on whale_alerts.traded_at.","schema":{"type":"string","format":"date-time","description":"Inclusive RFC3339 lower bound on whale_alerts.traded_at.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"4e881910-d4cc-453b-a9ba-39f2c99bed6a":{"name":"to","in":"query","description":"Exclusive RFC3339 upper bound on whale_alerts.traded_at. Must be after from when both are present.","schema":{"type":"string","format":"date-time","description":"Exclusive RFC3339 upper bound on whale_alerts.traded_at. Must be after from when both are present.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"5044b4cb-1916-48f4-bb5c-8d526280e024":{"name":"min_market_volume_share","in":"query","description":"Keep only trades whose market_volume_share is known and at least this. A fraction, not a percent: 0.01 is one percent of the market's traded volume. A trade whose share is unavailable is never returned by a non-zero value, because an unavailable share cannot be said to clear a floor.","schema":{"type":"number","minimum":0,"maximum":1,"description":"Keep only trades whose market_volume_share is known and at least this. A fraction, not a percent: 0.01 is one percent of the market's traded volume. A trade whose share is unavailable is never returned by a non-zero value, because an unavailable share cannot be said to clear a floor.","uniqueKey":"","typeLabel":"number"}},"78957152-8c2c-4dc9-bd9f-bbd4a49bf891":{"name":"sort","in":"query","description":"Order of the returned page. recent is newest first and is the default. market_volume_share ranks by each trade's share of its market's traded volume, biggest first, with a trade whose share is unavailable last. That ranking reads from, or the last 30 days when from is omitted, for the same reason. A cursor is bound to the order it was minted in, so a continuation cannot cross from one order into the other.","schema":{"type":"string","enum":["recent","market_volume_share"],"default":"recent","description":"Order of the returned page. recent is newest first and is the default. market_volume_share ranks by each trade's share of its market's traded volume, biggest first, with a trade whose share is unavailable last. That ranking reads from, or the last 30 days when from is omitted, for the same reason. A cursor is bound to the order it was minted in, so a continuation cannot cross from one order into the other.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"a0ba409d-f1d3-46d3-a2f4-b25d6fcc2ba4":{"name":"event_slug","in":"query","description":"Only the large trades in one game: every market of the game behind this event slug, the moneyline, spreads, totals and props, as GET /api/v1/games/{event_slug}/trades reads them. Matched case-insensitively. Newest first only (sort=market_volume_share answers 400), and cannot be combined with condition_id (400). An unknown slug answers 404 not_found with error.param event_slug.","schema":{"type":"string","description":"Only the large trades in one game: every market of the game behind this event slug, the moneyline, spreads, totals and props, as GET /api/v1/games/{event_slug}/trades reads them. Matched case-insensitively. Newest first only (sort=market_volume_share answers 400), and cannot be combined with condition_id (400). An unknown slug answers 404 not_found with error.param event_slug.","uniqueKey":"","typeLabel":"string"}},"ef085dc9-a7ac-490c-a55d-a4d7df0889b3":{"name":"If-None-Match","in":"header","required":false,"description":"Conditional GET validator from a previous ETag. Matching values return 304 Not Modified with an empty body.","schema":{"type":"string","isRequired":false,"description":"Conditional GET validator from a previous ETag. Matching values return 304 Not Modified with an empty body.","uniqueKey":"","typeLabel":"string"}}},"responses":{"6c8fefe7-4d9f-4421-b04f-98ec7989dd85":{"description":"Historical large trade replay","content":{"application/json":{"schema":{"type":"object","required":["object","data","data_quality","has_more","meta"],"properties":{"object":{"type":"string","const":"list","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"data":{"type":"array","items":{"type":"object","required":["id","traded_at","size_usd","side","outcome","token_id","price","review_score","signal_score","recorded_review_score","recorded_signal_score","suspicion_score","suspicion_track","trader","market","clv"],"properties":{"id":{"type":"string","description":"Prefixed ID (wt_...).","isRequired":true,"uniqueKey":"data.items.[INDEX].id","typeLabel":"string"},"traded_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].traded_at","typeLabel":"string\u003cdate-time>"},"size_usd":{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].size_usd","typeLabel":"number"},"side":{"type":"string","enum":["BUY","SELL"],"isRequired":true,"uniqueKey":"data.items.[INDEX].side","typeLabel":"enum\u003cstring>"},"outcome":{"oneOf":[{"type":"string","description":"Traded outcome label (e.g. \"Yes\"/\"No\"/team name), resolved provider-first from the trade's outcome_index against market_canonical (index 0 -> yes, 1 -> no). Distinct axis from side (BUY/SELL): side is the trade direction, outcome is which leg was traded. null for multi-outcome (outcome_index >= 2) or unsynced markets, and for a Polymarket trade recorded before 2026-04-02T00:00:00Z unless its stored outcome_index was verified against the fill's own trade records (before that date the stored index was wrong for a large share of trades; an unverified side is unknown, not defaulted).","isRequired":true,"uniqueKey":"data.items.[INDEX].outcome.oneOf.0","typeLabel":"string"},{"type":"null","description":"Traded outcome label (e.g. \"Yes\"/\"No\"/team name), resolved provider-first from the trade's outcome_index against market_canonical (index 0 -> yes, 1 -> no). Distinct axis from side (BUY/SELL): side is the trade direction, outcome is which leg was traded. null for multi-outcome (outcome_index >= 2) or unsynced markets, and for a Polymarket trade recorded before 2026-04-02T00:00:00Z unless its stored outcome_index was verified against the fill's own trade records (before that date the stored index was wrong for a large share of trades; an unverified side is unknown, not defaulted).","isRequired":true,"uniqueKey":"data.items.[INDEX].outcome.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].outcome","typeLabel":"string | null"},"token_id":{"oneOf":[{"type":"string","description":"The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the traded outcome; null when unavailable (e.g. unsynced markets) and for a Polymarket trade recorded before 2026-04-02T00:00:00Z whose traded side is not verified (the same rule as outcome).","isRequired":true,"uniqueKey":"data.items.[INDEX].token_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the traded outcome; null when unavailable (e.g. unsynced markets) and for a Polymarket trade recorded before 2026-04-02T00:00:00Z whose traded side is not verified (the same rule as outcome).","isRequired":true,"uniqueKey":"data.items.[INDEX].token_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].token_id","typeLabel":"string | null"},"price":{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].price","typeLabel":"number"},"review_score":{"type":"number","description":"Current trade review score on a 0..1 scale; higher values indicate a stronger review signal. This is the current response value and can differ from the recorded score. Missing measurements remain unavailable.","isRequired":true,"uniqueKey":"data.items.[INDEX].review_score","typeLabel":"number"},"signal_score":{"deprecated":true,"type":"number","description":"Deprecated alias of review_score with the same current value and 0..1 scale. Sunset 2027-02-01 (#29352): removed from V1 on that date; read review_score.","isRequired":true,"uniqueKey":"data.items.[INDEX].signal_score","typeLabel":"number"},"recorded_review_score":{"oneOf":[{"type":"number","description":"0.0–1.0 review score written once when the trade row is inserted, from the trader's statistics at that moment. Populated from 2026-08-03T11:59Z; older rows return null and are never backfilled, because a backfill could only read today's statistics. If a trade is added later, its time-sensitive recorded score reflects that delay. Canonical since #16311; recorded_signal_score carries the same value.","isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_review_score.oneOf.0","typeLabel":"number"},{"type":"null","description":"0.0–1.0 review score written once when the trade row is inserted, from the trader's statistics at that moment. Populated from 2026-08-03T11:59Z; older rows return null and are never backfilled, because a backfill could only read today's statistics. If a trade is added later, its time-sensitive recorded score reflects that delay. Canonical since #16311; recorded_signal_score carries the same value.","isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_review_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_review_score","typeLabel":"number | null"},"recorded_signal_score":{"oneOf":[{"deprecated":true,"type":"number","description":"0.0–1.0 review score written once when the trade row is inserted; null before 2026-08-03T11:59Z. Deprecated (#16311): `recorded_review_score` is the canonical spelling and carries the same value; this key stays on the wire until its sunset on 2027-02-01 (#29352), when it is removed.","isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_signal_score.oneOf.0","typeLabel":"number"},{"deprecated":true,"type":"null","description":"0.0–1.0 review score written once when the trade row is inserted; null before 2026-08-03T11:59Z. Deprecated (#16311): `recorded_review_score` is the canonical spelling and carries the same value; this key stays on the wire until its sunset on 2027-02-01 (#29352), when it is removed.","isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_signal_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].recorded_signal_score","typeLabel":"number | null"},"suspicion_score":{"oneOf":[{"type":"integer","minimum":0,"maximum":100,"description":"Persisted live suspicion score from the scorer. Null when the row has no persisted score.","isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_score.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"maximum":100,"description":"Persisted live suspicion score from the scorer. Null when the row has no persisted score.","isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_score","typeLabel":"integer | null"},"suspicion_track":{"oneOf":[{"type":"string","enum":["whale","fresh_conviction","sliced_position",null],"description":"Persisted scorer track. Null when a legacy row has no stored track label.","isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_track.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["whale","fresh_conviction","sliced_position",null],"description":"Persisted scorer track. Null when a legacy row has no stored track label.","isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_track.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].suspicion_track","typeLabel":"enum\u003cstring> | null"},"trader":{"type":"object","required":["id","address","grade_at_trade","grade_at_trade_status"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].trader.id","typeLabel":"string"},"address":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].trader.address","typeLabel":"string"},"grade_at_trade":{"oneOf":[{"type":"string","enum":["S","A","B","C","D","F",null],"description":"The grade the trader held when the trade happened, from recorded grade history (recorded from 2026-09-19T23:00Z). Null unless grade_at_trade_status is graded. Never today's grade projected backward.","isRequired":true,"uniqueKey":"data.items.[INDEX].trader.grade_at_trade.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["S","A","B","C","D","F",null],"description":"The grade the trader held when the trade happened, from recorded grade history (recorded from 2026-09-19T23:00Z). Null unless grade_at_trade_status is graded. Never today's grade projected backward.","isRequired":true,"uniqueKey":"data.items.[INDEX].trader.grade_at_trade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].trader.grade_at_trade","typeLabel":"enum\u003cstring> | null"},"grade_at_trade_status":{"type":"string","enum":["graded","ungraded","unknown"],"description":"graded: grade_at_trade holds the recorded grade. ungraded: the trader was recorded without a grade at that moment. unknown: no record covers the moment, which is every trade before 2026-09-19T23:00Z and a trade that fell between a grade change and its confirmation. unknown never means ungraded.","isRequired":true,"uniqueKey":"data.items.[INDEX].trader.grade_at_trade_status","typeLabel":"enum\u003cstring>"},"username":{"type":"string","uniqueKey":"data.items.[INDEX].trader.username","typeLabel":"string"},"grade":{"type":"string","description":"The trader's grade today, on every row however old. For what the grade was when the trade happened, read grade_at_trade.","enum":["S","A","B","C","D","F"],"uniqueKey":"data.items.[INDEX].trader.grade","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].trader","typeLabel":"object"},"market":{"type":"object","required":["id","condition_id","title"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].market.id","typeLabel":"string"},"condition_id":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].market.condition_id","typeLabel":"string"},"title":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].market.title","typeLabel":"string"},"slug":{"type":"string","uniqueKey":"data.items.[INDEX].market.slug","typeLabel":"string"},"category":{"type":"string","description":"Provider-backed market_canonical category.","uniqueKey":"data.items.[INDEX].market.category","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].market","typeLabel":"object"},"clv":{"type":"object","required":["status","unavailable_reason","pre_kickoff","close_anchor_at","close_price","clv_cents","basis_version","taker_fee_cents","clv_after_fees_cents"],"properties":{"basis_version":{"type":"string","description":"The CLV definition, clv@v1.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.basis_version","typeLabel":"string"},"close_anchor_at":{"oneOf":[{"type":"string","format":"date-time","description":"The anchor pre_kickoff was judged against: the stored close's anchor, else the market's kickoff.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_anchor_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The anchor pre_kickoff was judged against: the stored close's anchor, else the market's kickoff.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_anchor_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_anchor_at","typeLabel":"string\u003cdate-time> | null"},"close_price":{"oneOf":[{"type":"number","description":"The traded outcome's closing price, 0 to 1, whenever a usable close is stored and the outcome is known, in play included.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_price.oneOf.0","typeLabel":"number"},{"type":"null","description":"The traded outcome's closing price, 0 to 1, whenever a usable close is stored and the outcome is known, in play included.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.close_price","typeLabel":"number | null"},"clv_cents":{"oneOf":[{"type":"number","description":"Cents per share, positive when the trade beat the close: buy is (close_price - price) * 100, sell is (price - close_price) * 100. Gross of fees. Computed from the trade's exact stored price; price on the wire is rounded to 4 places, so a recomputation from it agrees within 0.005 cents. Set exactly when status is measured.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_cents.oneOf.0","typeLabel":"number"},{"type":"null","description":"Cents per share, positive when the trade beat the close: buy is (close_price - price) * 100, sell is (price - close_price) * 100. Gross of fees. Computed from the trade's exact stored price; price on the wire is rounded to 4 places, so a recomputation from it agrees within 0.005 cents. Set exactly when status is measured.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_cents","typeLabel":"number | null"},"pre_kickoff":{"oneOf":[{"type":"boolean","description":"Whether the trade filled before close_anchor_at. null when the market has no anchor.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.pre_kickoff.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the trade filled before close_anchor_at. null when the market has no anchor.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.pre_kickoff.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.pre_kickoff","typeLabel":"boolean | null"},"status":{"type":"string","enum":["measured","in_play","pending","unavailable"],"description":"measured: clv_cents is set. in_play: traded at or after the close anchor (kickoff), no CLV is defined. pending: traded before kickoff and the market's close is not stored yet. unavailable: see unavailable_reason.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.status","typeLabel":"enum\u003cstring>"},"unavailable_reason":{"oneOf":[{"type":"string","description":"Set exactly when status is unavailable. The market's reasons (see MarketClose.unavailable_reason), plus anchor_stale (the kickoff moved after the close was captured) and outcome_unknown (the traded outcome is not known for this trade).","enum":["no_observation_in_lookback","provider_empty_window","provider_invalid_contract","capture_window_closed","no_game_start_time","not_one_sided_resolution","not_captured","close_token_mismatch","anchor_stale","outcome_unknown"],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.unavailable_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Set exactly when status is unavailable. The market's reasons (see MarketClose.unavailable_reason), plus anchor_stale (the kickoff moved after the close was captured) and outcome_unknown (the traded outcome is not known for this trade).","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.unavailable_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.unavailable_reason","typeLabel":"enum\u003cstring> | null"},"clv_after_fees_cents":{"oneOf":[{"type":"number","description":"clv_cents - taker_fee_cents: the CLV after the fee the fill paid, cents per share. Set exactly when both are set.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_after_fees_cents.oneOf.0","typeLabel":"number"},{"type":"null","description":"clv_cents - taker_fee_cents: the CLV after the fee the fill paid, cents per share. Set exactly when both are set.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_after_fees_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.clv_after_fees_cents","typeLabel":"number | null"},"taker_fee_cents":{"oneOf":[{"type":"number","description":"The fee the fill paid as taker, cents per share, from the exchange's on-chain record of the fill (the OrderFilled event in its Polygon receipt); the trader is its taker. Polymarket charges only takers, so a buy's fee adds to its cost and a sell's comes out of its proceeds, and either way it lowers the CLV by this amount. Includes any builder fee an app added; excludes maker and taker rebates, which Polymarket pays later and no fill records. Set whatever status is; null until the record is decoded (about a minute after the trade) and for trades before 2026-08-16.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.taker_fee_cents.oneOf.0","typeLabel":"number"},{"type":"null","description":"The fee the fill paid as taker, cents per share, from the exchange's on-chain record of the fill (the OrderFilled event in its Polygon receipt); the trader is its taker. Polymarket charges only takers, so a buy's fee adds to its cost and a sell's comes out of its proceeds, and either way it lowers the CLV by this amount. Includes any builder fee an app added; excludes maker and taker rebates, which Polymarket pays later and no fill records. Set whatever status is; null until the record is decoded (about a minute after the trade) and for trades before 2026-08-16.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv.taker_fee_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].clv.taker_fee_cents","typeLabel":"number | null"}},"description":"Closing line value against the market's stored close (GET /api/v1/market/{condition_id}/close). Always present; status says whether it is measured.","isRequired":true,"uniqueKey":"data.items.[INDEX].clv","typeLabel":"object"},"market_volume_share":{"type":"number","minimum":0,"maximum":1,"description":"This fill's size relative to its market: its share count (size_usd / price) divided by the shares the market has traded, Polymarket's recorded volume, which counts shares rather than dollars, as observed at or after the trade, so the value always falls between 0 and 1 inclusive. A 20,000-share fill is 0.00005 of a market that has traded 400M shares and 0.125 of one that has traded 160,000, which size_usd alone cannot distinguish. Absent when no volume figure recorded at or after the trade is available, or when that figure is smaller than the fill; never 0 as a stand-in and never capped at 1, because a denominator we cannot trust publishes nothing rather than a trimmed number. A market's volume keeps growing, so the same trade reports a smaller share as the market trades on.","uniqueKey":"data.items.[INDEX].market_volume_share","typeLabel":"number"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data","typeLabel":"object[]"},"data_quality":{"type":"object","description":"Writer-backed age and coverage for this page; it is part of the representation and the ETag, while transport cache facts remain in meta.","required":["status","field_groups"],"properties":{"status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"fresh when every group is fresh, unavailable when every group is unavailable, stale when every group is fresh or stale and at least one is stale, and partial in every other case.","isRequired":true,"uniqueKey":"data_quality.status","typeLabel":"enum\u003cstring>"},"field_groups":{"type":"array","items":{"type":"object","description":"One group of response fields that share a writer and therefore share a clock.","required":["group","owner","status"],"properties":{"group":{"type":"string","description":"Stable snake_case group name. Names are additive across releases, so match on the ones you know and ignore the rest.","isRequired":true,"uniqueKey":"data_quality.field_groups.items.[INDEX].group","typeLabel":"string"},"owner":{"type":"string","description":"The table and column that write this group, named so the verdict can be audited (for example trader_rankings.computed_at).","isRequired":true,"uniqueKey":"data_quality.field_groups.items.[INDEX].owner","typeLabel":"string"},"status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"fresh: served, as_of carries this group's real observation or computation clock, and that clock is no older than max_age_s when the group carries one. stale: served and clocked, but as_of is older than max_age_s, so the writer has missed a refresh its schedule promises. partial: some of the group's fields are served and some are missing. unknown: served, and this read has no clock for it, so no age may be inferred. untracked: 0xinsider does not track this group for this subject, by design. unavailable: the group could not be served. New values may be added; treat one you do not recognize as unknown. Neither fresh nor stale is a tolerance for your use: compare as_of against your own.","isRequired":true,"uniqueKey":"data_quality.field_groups.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"as_of":{"type":"string","format":"date-time","description":"When this group's values were observed or computed. Omitted whenever the read cannot measure it, and never filled with the serialization time, the cache time, or another group's clock.","uniqueKey":"data_quality.field_groups.items.[INDEX].as_of","typeLabel":"string\u003cdate-time>"},"reason":{"type":"string","description":"Why the status is not fresh. Omitted when it is.","uniqueKey":"data_quality.field_groups.items.[INDEX].reason","typeLabel":"string"},"max_age_s":{"type":"integer","minimum":0,"description":"The longest gap in seconds this group's writer leaves between refreshes on its schedule: the age past which the group reads stale instead of fresh. Omitted when the writer keeps no schedule its clock could fall behind (a clock stamped once, only on a change, or when a reader asks), and such a group is never stale. It is the writer's promise, not a tolerance for your use.","uniqueKey":"data_quality.field_groups.items.[INDEX].max_age_s","typeLabel":"integer"}},"uniqueKey":"data_quality.field_groups.items.[INDEX]","typeLabel":"object"},"description":"One entry per field group. Entries may be added in later releases, so match on group rather than on position or length.","isRequired":true,"uniqueKey":"data_quality.field_groups","typeLabel":"object[]"},"as_of":{"type":"string","format":"date-time","description":"The oldest as_of among the groups that carry one: the age of the weakest clock this body rests on. Omitted when no group carries a clock.","uniqueKey":"data_quality.as_of","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data_quality","typeLabel":"object"},"has_more":{"type":"boolean","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"},"meta":{"type":"object","required":["request_id","cached","source","completeness"],"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"},"source":{"type":"object","required":["kind","table","provider_fetch_at_request_time"],"properties":{"kind":{"type":"string","const":"local_replay","isRequired":true,"uniqueKey":"meta.source.kind","typeLabel":"string"},"table":{"type":"string","const":"whale_alerts","isRequired":true,"uniqueKey":"meta.source.table","typeLabel":"string"},"provider_fetch_at_request_time":{"type":"boolean","const":false,"isRequired":true,"uniqueKey":"meta.source.provider_fetch_at_request_time","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"meta.source","typeLabel":"object"},"completeness":{"type":"object","required":["status","reason"],"properties":{"status":{"type":"string","const":"best_effort","isRequired":true,"uniqueKey":"meta.completeness.status","typeLabel":"string"},"reason":{"type":"string","description":"Explains that local replay completeness can vary by market and time window.","isRequired":true,"uniqueKey":"meta.completeness.reason","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta.completeness","typeLabel":"object"},"cache_age_s":{"type":"integer","description":"Cache age in seconds; the key is absent when the response was not cached.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"next_cursor":{"type":"string","uniqueKey":"next_cursor","typeLabel":"string"},"total":{"type":"integer","description":"Total matching rows when the read model exposes a count; the key is absent when it does not.","uniqueKey":"total","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"success":{"title":"success","value":{"object":"list","data":[{"id":"wt_392079","traded_at":"2026-09-22T02:05:52Z","size_usd":19232.92,"side":"BUY","outcome":"Rams","clv":{"status":"in_play","unavailable_reason":null,"pre_kickoff":false,"close_anchor_at":"2026-09-22T00:20:00Z","close_price":0.615,"clv_cents":null,"taker_fee_cents":0.2829,"clv_after_fees_cents":null,"basis_version":"clv@v1"},"token_id":"43677542496120548237382622015301078356830156697348317225498679221043021866409","price":0.9398,"review_score":0.3959,"signal_score":0.3959,"recorded_review_score":0.4041,"recorded_signal_score":0.4041,"market_volume_share":0.002852,"suspicion_score":null,"suspicion_track":null,"trader":{"id":"trd_0xabc1230000000000000000000000000000000abc","address":"0xabc1230000000000000000000000000000000abc","username":"example_trader","grade":"F","grade_at_trade":"F","grade_at_trade_status":"graded"},"market":{"id":"mkt_0xdef4560000000000000000000000000000000def613f54180a6d82f81c586f87","condition_id":"0xdef4560000000000000000000000000000000def613f54180a6d82f81c586f87","title":"Giants vs. Rams","slug":"nfl-nyg-la-2026-09-22","category":"NFL"}},{"id":"wt_392077","traded_at":"2026-09-22T02:04:20Z","size_usd":16292.73,"side":"BUY","outcome":"Dallas Wings","clv":{"status":"measured","unavailable_reason":null,"pre_kickoff":true,"close_anchor_at":"2026-09-22T02:30:00Z","close_price":0.665,"clv_cents":1.5,"taker_fee_cents":1.1375,"clv_after_fees_cents":0.3625,"basis_version":"clv@v1"},"token_id":"26603239767113701790776634803790654539492519362779665632490658212718064984767","price":0.65,"review_score":0.33,"signal_score":0.33,"recorded_review_score":0.3383,"recorded_signal_score":0.3383,"market_volume_share":0.528557,"suspicion_score":null,"suspicion_track":null,"trader":{"id":"trd_0xdef4560000000000000000000000000000000def","address":"0xdef4560000000000000000000000000000000def","grade_at_trade":null,"grade_at_trade_status":"unknown"},"market":{"id":"mkt_0xdef4560000000000000000000000000000000def4c2638b15eda50ca1b7ce303","condition_id":"0xdef4560000000000000000000000000000000def4c2638b15eda50ca1b7ce303","title":"Dallas Wings vs. Phoenix Mercury","slug":"wnba-dal-phx-2026-09-21","category":"WNBA"}}],"data_quality":{"status":"partial","field_groups":[{"group":"alert","owner":"whale_alerts.inserted_xid","status":"unknown","reason":"whale_alerts.inserted_xid is a transaction identifier rather than a timestamp"},{"group":"trade","owner":"trades.ingested_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"trader","owner":"traders.last_synced","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"ranking","owner":"trader_rankings.computed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"market","owner":"market_canonical.last_refreshed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"},{"group":"volume","owner":"market_live_stats.volume_request_observed_at","status":"unknown","reason":"the page returned no large-trade row from which to read this writer clock"}]},"has_more":true,"next_cursor":"2026-09-22T02:04:20+00:00_wth_392077","meta":{"request_id":"req_example","cached":false,"source":{"kind":"local_replay","table":"whale_alerts","provider_fetch_at_request_time":false},"completeness":{"status":"best_effort","reason":"Historical whale trades are replayed from local whale_alerts rows; provider backfill completeness can vary by market and time window."}}}}},"exampleType":"examples"}},"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"}},"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"}},"exampleType":"examples"},"79a71d73-e8a1-4156-ac87-05a6c1c4cf90":{"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"}},"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":""}}}},"d9a83e7e-c6f9-4914-9e8c-3e1b04bf5299":{"description":"Invalid request parameter","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"},"b7f3b6f6-be5b-4380-8b69-74392e035b93":{"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"},"b708be70-226c-4347-ac4e-03048e5c569c":{"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"},"3b200010-7504-4726-a674-4aead1052b2c":{"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"},"2d6b5505-a87b-4027-b477-e4c9882e111c":{"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"},"9fef1c4a-7a58-4a9b-bfcc-7960c7973830":{"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"},"42012940-e8c7-4824-b1c4-1cc0eeed4caa":{"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"},"0e88ad79-44bb-44ae-bd12-76ab3590c4f9":{"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"},"bc05a1ee-b610-434f-a80c-9bc11d06256c":{"description":"Redis-backed authenticated rate limiter unavailable; retry after the per-process outage cooldown","headers":{"Retry-After":{"description":"Seconds until the middleware will probe the Redis-backed rate limiter again.","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"}},"security":{"5b04c279-f1b6-4a1f-bb21-71fc7368d2ca":{"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"}},"f871f473-8446-4a8a-a660-382a5cc22d0c":{"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":{"76f8193f-6892-42e2-adf3-2507e4ce7561":{"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."},"6a1bcb01-27ed-4bb9-a1f6-01754ab9b34c":{"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":"Large trades history - 0xinsider API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T04:10:46.065Z","originalFileLocation":"api-reference/endpoint/get-large-trades-history.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=\"Find recorded large trades by time range, market, wallet, or category.\">\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=\"Large trades history - 0xinsider API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Find recorded large trades by time range, market, wallet, or category.\">\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/get-large-trades-history\">\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=Whale+trades\u0026amp;title=Large+trades+history\u0026amp;description=Find+recorded+large+trades+by+time+range%2C+market%2C+wallet%2C+or+category.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=e81132bae09ca1c43fe2d72fc149c5f356503deef855771871c75512df3e4bea\">\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=\"Large trades history - 0xinsider API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Find recorded large trades by time range, market, wallet, or category.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://0xinsider.mintlify.site/_mintlify/api/og/v2?division=Whale+trades\u0026amp;title=Large+trades+history\u0026amp;description=Find+recorded+large+trades+by+time+range%2C+market%2C+wallet%2C+or+category.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=e81132bae09ca1c43fe2d72fc149c5f356503deef855771871c75512df3e4bea\">\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/get-large-trades-history\">\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/get-large-trades-history.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/get-large-trades-history#webpage\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history\",\"name\":\"Large trades history\",\"description\":\"Find recorded large trades by time range, market, wallet, or category.\",\"dateModified\":\"2026-11-04T04:10:46.065Z\",\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Whale trades\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Large trades history\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history#apireference\",\"headline\":\"Large trades history\",\"name\":\"Large trades history\",\"description\":\"Find recorded large trades by time range, market, wallet, or category.\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history#webpage\"},\"dateModified\":\"2026-11-04T04:10:46.065Z\",\"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","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","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"},{"title":"List market trades","openapi":"GET /api/v1/market/{condition_id}/trades","href":"/api-reference/endpoint/list-market-trades"}]},{"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","description":"Get one large trade and the Polygon order matches and wallets behind it.","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","description":"Get more order matches for a large trade when its first response contains only a page.","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":"Large trades history - 0xinsider API","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}