Use this endpoint for the wallets with a proven edge in one sport or in esports. It returns the board the category pages on 0xinsider.com show, for example /categories/soccer. It needs a Pro or Max key.For every category’s top three in one read, use Category leaders. To rank one sport by edge, P&L, or win rate over settled markets, use Sport leaderboard.
Each wallet’s edge is how much more often its side won than the prices it paid implied, measured over independent events in the category. The board ranks edge_lower_bound, the 95% lower bound of that edge, so a short lucky record does not rank first. Only wallets whose lower bound is above zero are listed. Ties go to the wallet with more independent_events.
Required, in the path. A category slug, for example soccer, basketball, tennis, or esports. A slug outside sports and esports returns 404 with error.paramslug.
active_within
Optional. all (the default), 7d, 30d, or 90d. Keeps only the wallets that traded in the category within that window. Any other value returns 400 with error.paramactive_within.
min_events
Optional. The number of independent events a wallet needs in the category to be listed. The default is 0. The website offers 50, 100, and 250.
limit
Optional. The number of rows per page, from 1 to 100. The default is 20.
Pass next_cursor as cursor until has_more is false. The ranking is recomputed about once an hour. A cursor issued before a recompute returns 400 with error.reasoncursor_expired: start again from the first page. A cursor from another slug, active_within, or min_events returns 400 with error.paramcursor.
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.
The category slug, for example soccer, basketball, tennis or esports, as GET /api/v1/leaderboard/categories lists it lowercased. Matched case-insensitively.
Opaque cel_ pagination cursor from a prior response. It binds the lower-bound/independent-event/wallet boundary to the committed category-skill ranking and to the slug, active_within and min_events of the request that issued it; a cursor from another filter is 400 on cursor, and one issued before the ranking refreshed is 400 with error.reason=cursor_expired.
Response
One category's edge leaders, best lower bound first
Wallets in the category whose edge lower bound is above zero, Wallets in the full walk across every page: those in the category, under this request's active_within and min_events, whose edge lower bound is above zero. The same on every page.
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"},"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":""},"chroma":{"liveDeploymentHistoryId":"6ae825ab1795b614d9d57995","collectionId":"c830f8ee-3170-460e-b696-0169a982208f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae825ab1795b614d9d57995"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{},"buildId":"6ae826cf4729f9837cf0baa1","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API reference","count":124},{"language":"default","tag":"Traders","count":25},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Webhook events","count":16},{"language":"default","tag":"Webhooks","count":15},{"language":"default","tag":"Markets","count":14},{"language":"default","tag":"Whale trades","count":10},{"language":"default","tag":"Concepts","count":8},{"language":"default","tag":"Integrations","count":7},{"language":"default","tag":"Games","count":6}]},"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".bg-primary-dark,[class*=playground] button,[class*=try-it],[data-active],[data-active] a,[role=tab],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,[data-active=true],[data-active=true] a{color:#000!important}.dark [data-active=true],.dark [data-active=true] a{color:#fff!important}.dark [class*=DELETE],.dark [class*=GET],.dark [class*=POST],.dark [class*=PUT],.dark [class*=delete],.dark [class*=get],.dark [class*=post],.dark [class*=put]{background-color:rgba(255,255,255,.15)!important;color:#fff!important}[class*=DELETE],[class*=GET],[class*=POST],[class*=PUT],[class*=delete],[class*=get],[class*=post],[class*=put]{background-color:rgba(0,0,0,.08)!important;color:#000!important}.dark [class*=playground] button,.dark [class*=try-it]{background-color:#fff!important;color:#000!important}[class*=playground] button,[class*=try-it]{background-color:#000!important;color:#fff!important}.dark [role=tab][aria-selected=true],.dark [role=tab][data-state=active]{border-color:#fff!important;color:#fff!important}[role=tab][aria-selected=true],[role=tab][data-state=active]{border-color:#000!important;color:#000!important}"}],"page":{"pagePath":"api-reference/endpoint/get-category-leaderboard","slug":"/api-reference/endpoint/get-category-leaderboard","pageMetadata":{"title":"Category leaderboard","description":"Get one sport's wallets ranked by how surely they beat the prices they paid.","openapi":"GET /api/v1/leaderboard/categories/{slug}","href":"/api-reference/endpoint/get-category-leaderboard"},"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: \"Get one sport’s wallets ranked by how surely they beat the prices they paid.\"\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 the wallets with a proven edge in one sport or in esports. It returns the board the category pages on 0xinsider.com show, for example `,_jsx(_components.code,{children:`/categories/soccer`}),`. It needs a Pro or Max key.`]}),`\n`,_jsxs(_components.p,{children:[`For every category’s top three in one read, use `,_jsx(_components.a,{href:`/api-reference/endpoint/list-category-leaders`,children:`Category leaders`}),`. To rank one sport by edge, P\u0026L, or win rate over settled markets, use `,_jsx(_components.a,{href:`/api-reference/endpoint/get-sport-leaderboard`,children:`Sport leaderboard`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-ranks`,children:`How it ranks`}),`\n`,_jsxs(_components.p,{children:[`Each wallet’s edge is how much more often its side won than the prices it paid implied, measured over independent events in the category. The board ranks `,_jsx(_components.code,{children:`edge_lower_bound`}),`, the 95% lower bound of that edge, so a short lucky record does not rank first. Only wallets whose lower bound is above zero are listed. Ties go to the wallet with more `,_jsx(_components.code,{children:`independent_events`}),`.`]}),`\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:`slug`})}),_jsxs(_components.td,{children:[`Required, in the path. A category slug, for example `,_jsx(_components.code,{children:`soccer`}),`, `,_jsx(_components.code,{children:`basketball`}),`, `,_jsx(_components.code,{children:`tennis`}),`, or `,_jsx(_components.code,{children:`esports`}),`. A slug outside sports and esports returns `,_jsx(_components.code,{children:`404`}),` with `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`slug`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`active_within`})}),_jsxs(_components.td,{children:[`Optional. `,_jsx(_components.code,{children:`all`}),` (the default), `,_jsx(_components.code,{children:`7d`}),`, `,_jsx(_components.code,{children:`30d`}),`, or `,_jsx(_components.code,{children:`90d`}),`. Keeps only the wallets that traded in the category within that window. Any other value returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`active_within`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`min_events`})}),_jsx(_components.td,{children:`Optional. The number of independent events a wallet needs in the category to be listed. The default is 0. The website offers 50, 100, and 250.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`limit`})}),_jsx(_components.td,{children:`Optional. The number of rows per page, from 1 to 100. The default is 20.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cursor`})}),_jsxs(_components.td,{children:[`Optional. The `,_jsx(_components.code,{children:`next_cursor`}),` from the previous page.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`key-response-fields`,children:`Key response fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].rank`})}),_jsx(_components.td,{children:`The wallet’s position in the category, 1 first.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].category`})}),_jsxs(_components.td,{children:[`The category name, for example `,_jsx(_components.code,{children:`Soccer`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].id`})}),_jsxs(_components.td,{children:[`The wallet’s trader ID, `,_jsx(_components.code,{children:`trd_0x...`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].grade`})}),_jsxs(_components.td,{children:[`The wallet’s 0xinsider grade. `,_jsx(_components.code,{children:`null`}),` when the wallet is unranked.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].edge_lower_bound`})}),_jsxs(_components.td,{children:[`The ranking value: the 95% lower bound of the wallet’s edge, as a fraction. `,_jsx(_components.code,{children:`0.05`}),` is 5 percentage points.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].independent_events`})}),_jsx(_components.td,{children:`The independent events the edge is measured over.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].unresolved_events`})}),_jsx(_components.td,{children:`The wallet’s positions in the category that are still waiting for a result.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`data[].n_resolved`}),`, `,_jsx(_components.code,{children:`win_rate`})]}),_jsx(_components.td,{children:`The wallet’s resolved markets in the category, and the share it made money on, from 0 to 1.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].pnl`})}),_jsx(_components.td,{children:`Realized P\u0026L across those resolved markets, in USD.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data[].as_of`})}),_jsx(_components.td,{children:`When the wallet’s ranking was last computed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`total`})}),_jsx(_components.td,{children:`The number of listed wallets across every page for these filters.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`paging`,children:`Paging`}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`next_cursor`}),` as `,_jsx(_components.code,{children:`cursor`}),` until `,_jsx(_components.code,{children:`has_more`}),` is `,_jsx(_components.code,{children:`false`}),`. The ranking is recomputed about once an hour. A cursor issued before a recompute returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.reason`}),` `,_jsx(_components.code,{children:`cursor_expired`}),`: start again from the first page. A cursor from another `,_jsx(_components.code,{children:`slug`}),`, `,_jsx(_components.code,{children:`active_within`}),`, or `,_jsx(_components.code,{children:`min_events`}),` returns `,_jsx(_components.code,{children:`400`}),` with `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`cursor`}),`.`]}),`\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/leaderboard/categories/soccer?active_within=30d\u0026min_events=50\"`})}),`\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:[`Wallets whose edge lower bound is zero or below. `,_jsx(_components.code,{children:`total`}),` counts only the listed wallets.`]}),`\n`,_jsx(_components.li,{children:`The model’s other figures, such as its mean, spread, or calibration scores.`}),`\n`,_jsx(_components.li,{children:`Open positions or live P\u0026L. Every figure comes from resolved markets.`}),`\n`,_jsxs(_components.li,{children:[`A board while the ranking is being rebuilt. The endpoint returns `,_jsx(_components.code,{children:`503`}),` `,_jsx(_components.code,{children:`read_model_warming`}),` with `,_jsx(_components.code,{children:`Retry-After`}),` instead.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`caching`,children:`Caching`}),`\n`,_jsxs(_components.p,{children:[`The response carries an `,_jsx(_components.code,{children:`ETag`}),`. Send it back as `,_jsx(_components.code,{children:`If-None-Match`}),` to get `,_jsx(_components.code,{children:`304 Not Modified`}),` with an empty body when the page has not changed.`]})]})}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":"Category leaderboard","description":"Get one sport's wallets ranked by how surely they beat the prices they paid.","openapi":"GET /api/v1/leaderboard/categories/{slug}","href":"/api-reference/endpoint/get-category-leaderboard"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it ranks","slug":"how-it-ranks","depth":2,"children":[]},{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"Key response fields","slug":"key-response-fields","depth":2,"children":[]},{"title":"Paging","slug":"paging","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":[],"openApiReferenceData":{"operation":{"operationId":"getCategoryLeaderboard","summary":"Get a category's edge leaderboard","description":"Get one sport's wallets ranked by how surely they beat the prices they paid.","tags":["Leaderboard"],"parameters":["6ed39f35-fde3-4697-86d0-339f338f7c13","10071b6a-c8ae-4456-9165-55fd59923afe","c7900fb3-171b-4993-a247-e565b5de2516","8e30d33c-2fdf-4495-a213-ddd76cf6ac20","35df4b4f-f849-4f6d-8e1d-2fe260078c67","561d6037-22b8-43d8-8e13-b2615150c4a5","0b9d28b2-0b20-4a2a-82ad-a39fbf6ccbe7"],"responses":{"200":"6b21e2c1-351f-4732-a560-c8b875bce452","304":"8f8853cc-aa6a-489f-9886-49c40fd4964e","400":"ba58b14a-6af8-4926-8d8a-0e773e38acf4","401":"1e25b7cb-424e-4989-886d-d70f718a4a02","402":"12a47470-944a-4cae-b265-20eefa0416c5","403":"112e3532-db4d-4845-9e4e-75e9367ea90d","404":"bd70501e-f3ab-46b1-9915-df344727e616","408":"c955d6ca-9466-458b-8152-7e12bb072ab6","423":"d562f7a7-40b6-4339-a2ea-21a5d8cb8c24","429":"e278725b-389c-45ff-bc2c-bb033af1f4d5","500":"a63ee64c-ed2a-4725-844a-0fa683476ad7","503":"397e3083-5af4-4d09-81bb-24bbaa3f08a8"},"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/leaderboard/categories/soccer?limit=20'"}],"x-latency-budget":{"milliseconds":250,"measurement":"response-ready","requirement":"engineering-budget"},"method":"get","type":"path","servers":["b9fc890a-fae0-4094-a39c-3a0b177c12e7","85081cc0-37d4-4473-acd8-21cff40b4d9b"],"security":["5818e99b-57b6-456f-b4b6-04ad1487b463","25a3da35-8d27-4982-8a2b-17206b95f300"],"path":"/api/v1/leaderboard/categories/{slug}","baseUrlOptions":["https://api.0xinsider.com","https://0xinsider.com/sandbox"],"title":"Get a category's edge leaderboard","codeSamples":[{"label":"cURL","lang":"curl","source":"curl -sS \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n 'https://api.0xinsider.com/api/v1/leaderboard/categories/soccer?limit=20'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"6ed39f35-fde3-4697-86d0-339f338f7c13":{"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>"}},"10071b6a-c8ae-4456-9165-55fd59923afe":{"name":"slug","in":"path","required":true,"description":"The category slug, for example soccer, basketball, tennis or esports, as GET /api/v1/leaderboard/categories lists it lowercased. Matched case-insensitively.","schema":{"type":"string","isRequired":true,"description":"The category slug, for example soccer, basketball, tennis or esports, as GET /api/v1/leaderboard/categories lists it lowercased. Matched case-insensitively.","uniqueKey":"","typeLabel":"string"}},"c7900fb3-171b-4993-a247-e565b5de2516":{"name":"active_within","in":"query","description":"Keep wallets that traded in the category within this window. all (the default) keeps every ranked wallet.","schema":{"type":"string","enum":["all","7d","30d","90d"],"default":"all","description":"Keep wallets that traded in the category within this window. all (the default) keeps every ranked wallet.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"8e30d33c-2fdf-4495-a213-ddd76cf6ac20":{"name":"min_events","in":"query","description":"Independent events a wallet needs in the category to be listed. The site offers 0, 50, 100 and 250. Clamped to 0..1000000.","schema":{"type":"integer","minimum":0,"default":0,"description":"Independent events a wallet needs in the category to be listed. The site offers 0, 50, 100 and 250. Clamped to 0..1000000.","uniqueKey":"","typeLabel":"integer"}},"35df4b4f-f849-4f6d-8e1d-2fe260078c67":{"name":"limit","in":"query","description":"Maximum number of leaders to return. Out-of-range values are clamped to 1..100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of leaders to return. Out-of-range values are clamped to 1..100.","uniqueKey":"","typeLabel":"integer"}},"561d6037-22b8-43d8-8e13-b2615150c4a5":{"name":"cursor","in":"query","description":"Opaque cel_ pagination cursor from a prior response. It binds the lower-bound/independent-event/wallet boundary to the committed category-skill ranking and to the slug, active_within and min_events of the request that issued it; a cursor from another filter is 400 on cursor, and one issued before the ranking refreshed is 400 with error.reason=cursor_expired.","schema":{"type":"string","description":"Opaque cel_ pagination cursor from a prior response. It binds the lower-bound/independent-event/wallet boundary to the committed category-skill ranking and to the slug, active_within and min_events of the request that issued it; a cursor from another filter is 400 on cursor, and one issued before the ranking refreshed is 400 with error.reason=cursor_expired.","uniqueKey":"","typeLabel":"string"}},"0b9d28b2-0b20-4a2a-82ad-a39fbf6ccbe7":{"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":{"6b21e2c1-351f-4732-a560-c8b875bce452":{"description":"One category's edge leaders, best lower bound first","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":"Stable validator for the current page. Re-send it via If-None-Match for conditional GETs.","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"}},"X-Usage-Accounting":{"description":"Usage-record persistence for a protected V1 handler response. persisted: confirmed row; failed: write failed; unknown: completion could not be confirmed. Independent of handler success; do not replay successful mutations to repair accounting. Absent before accounting admission and on public routes. The zero-cost /api/v1/usage route also omits it.","schema":{"type":"string","enum":["persisted","failed","unknown"]}},"Server-Timing":{"description":"Processing time in milliseconds, for example api;dur=12.345. Includes API authentication, quota admission, handler work and response construction. Excludes network transit and streamed body or export-file transfer. The engineering budget is strictly below 250 ms; this header reports observations, not a latency guarantee or a new timeout.","schema":{"type":"string"},"example":"api;dur=12.345"}},"content":{"application/json":{"schema":{"type":"object","required":["object","data","has_more","meta"],"properties":{"object":{"type":"string","const":"list","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"data":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].address","typeLabel":"string"},"as_of":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].as_of","typeLabel":"string\u003cdate-time>"},"category":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].category","typeLabel":"string"},"edge_lower_bound":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].edge_lower_bound.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].edge_lower_bound.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].edge_lower_bound","typeLabel":"number | null"},"grade":{"oneOf":[{"type":"string","enum":["S","A","B","C","D","F"],"isRequired":true,"uniqueKey":"data.items.[INDEX].grade.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].grade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].grade","typeLabel":"enum\u003cstring> | null"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].id","typeLabel":"string"},"independent_events":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].independent_events","typeLabel":"integer"},"n_resolved":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].n_resolved.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].n_resolved.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].n_resolved","typeLabel":"integer | null"},"platform":{"type":"string","enum":["polymarket"],"isRequired":true,"uniqueKey":"data.items.[INDEX].platform","typeLabel":"enum\u003cstring>"},"pnl":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].pnl.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].pnl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].pnl","typeLabel":"number | null"},"rank":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].rank","typeLabel":"integer"},"unresolved_events":{"type":"integer","isRequired":true,"uniqueKey":"data.items.[INDEX].unresolved_events","typeLabel":"integer"},"username":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.items.[INDEX].username.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].username.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].username","typeLabel":"string | null"},"win_rate":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"data.items.[INDEX].win_rate.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"data.items.[INDEX].win_rate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].win_rate","typeLabel":"number | null"}},"required":["rank","category","id","address","username","platform","grade","edge_lower_bound","independent_events","unresolved_events","n_resolved","win_rate","pnl","as_of"],"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data","typeLabel":"object[]"},"has_more":{"type":"boolean","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"},"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>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"next_cursor":{"type":"string","uniqueKey":"next_cursor","typeLabel":"string"},"total":{"type":"integer","description":"Wallets in the category whose edge lower bound is above zero, Wallets in the full walk across every page: those in the category, under this request's active_within and min_events, whose edge lower bound is above zero. The same on every page.","uniqueKey":"total","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"success":{"title":"success","value":{"object":"list","data":[{"rank":1,"category":"Soccer","id":"trd_0x1234567890abcdef1234567890abcdef12345678","address":"0x1234567890abcdef1234567890abcdef12345678","username":"example","platform":"polymarket","grade":"A","edge_lower_bound":0.184,"independent_events":31,"unresolved_events":0,"n_resolved":479,"win_rate":0.7286,"pnl":18076.35,"as_of":"2026-11-01T22:59:07.413338Z"},{"rank":2,"category":"Soccer","id":"trd_0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","address":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","username":null,"platform":"polymarket","grade":"S","edge_lower_bound":0.1223,"independent_events":66,"unresolved_events":0,"n_resolved":829,"win_rate":0.7503,"pnl":31907.45,"as_of":"2026-11-01T22:59:07.413338Z"}],"has_more":true,"next_cursor":"cel_example","total":412,"meta":{"request_id":"req_example","cached":false,"cost":1}}}},"exampleType":"examples"}},"exampleType":"examples"},"8f8853cc-aa6a-489f-9886-49c40fd4964e":{"description":"Not Modified. Returned when If-None-Match matches the current page of the category's ranking.","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":"Validator for the unchanged leaderboard payload.","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"}},"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":""}}}},"ba58b14a-6af8-4926-8d8a-0e773e38acf4":{"description":"Bad request: active_within outside all, 7d, 30d, 90d (error.param=active_within), or a malformed cursor or one from another filter (error.param=cursor). error.reason=cursor_expired with error.param=cursor means the category-skill ranking refreshed since the cursor was issued: discard accumulated rows, request the first page again, and continue with its next_cursor. There is no retry delay.","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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"1e25b7cb-424e-4989-886d-d70f718a4a02":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"12a47470-944a-4cae-b265-20eefa0416c5":{"description":"Active Pro subscription required. The key is valid but the account has no active Pro subscription; error.reason is subscription_inactive and error.message names the reactivation URL (https://0xinsider.com/billing). Permanent until a person reactivates: 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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"112e3532-db4d-4845-9e4e-75e9367ea90d":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"bd70501e-f3ab-46b1-9915-df344727e616":{"description":"The slug is not a sports or esports category (error.param=slug). GET /api/v1/leaderboard/categories lists the categories with leaders.","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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"c955d6ca-9466-458b-8152-7e12bb072ab6":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"d562f7a7-40b6-4339-a2ea-21a5d8cb8c24":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"e278725b-389c-45ff-bc2c-bb033af1f4d5":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"a63ee64c-ed2a-4725-844a-0fa683476ad7":{"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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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"},"397e3083-5af4-4d09-81bb-24bbaa3f08a8":{"description":"Service unavailable. On this route a 503 has TWO distinct causes; branch on error.reason. (1) error.reason=\"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; consult that endpoint's contract and do not infer dependency health from this shared reason. This is endpoint-local unavailability, not rate limiting: retry only this route after Retry-After (or error.retry_at), and do not feed it into a rate-limit backoff shared with other endpoints. (2) no error.reason: the Redis-backed authenticated rate limiter is unavailable and the middleware failed closed; Retry-After is the seconds until it probes Redis again. Both carry error.code=\"rate_limit_unavailable\" (a FROZEN contract value, so it cannot be split per cause) and X-Request-Id -- which is why error.reason, not error.code, is the discriminator.","headers":{"Retry-After":{"description":"Seconds until retrying is worth doing. With error.reason=\"read_model_warming\" this is the endpoint-local read-model retry interval; without a reason it is the rate-limiter outage cooldown. Always >= 1.","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","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh can satisfy max_age_s.","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"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","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","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. 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. 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>"},"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"},"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","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":{"5818e99b-57b6-456f-b4b6-04ad1487b463":{"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"}},"25a3da35-8d27-4982-8a2b-17206b95f300":{"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":{"b9fc890a-fae0-4094-a39c-3a0b177c12e7":{"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."},"85081cc0-37d4-4473-acd8-21cff40b4d9b":{"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":"Category leaderboard - 0xinsider API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T04:56:46.991Z","originalFileLocation":"api-reference/endpoint/get-category-leaderboard.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=\"Get one sport\u0026#x27;s wallets ranked by how surely they beat the prices they paid.\">\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=\"Category leaderboard - 0xinsider API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Get one sport\u0026#x27;s wallets ranked by how surely they beat the prices they paid.\">\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-category-leaderboard\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://0xinsider.mintlify.app/_mintlify/api/og/v2?division=Traders\u0026amp;title=Category+leaderboard\u0026amp;description=Get+one+sport%27s+wallets+ranked+by+how+surely+they+beat+the+prices+they+paid.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=cf4c3ca388c9f09619f4e1e3e66e051ab0e3af8f01f659f69d9d520ff008360b\">\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=\"Category leaderboard - 0xinsider API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Get one sport\u0026#x27;s wallets ranked by how surely they beat the prices they paid.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://0xinsider.mintlify.app/_mintlify/api/og/v2?division=Traders\u0026amp;title=Category+leaderboard\u0026amp;description=Get+one+sport%27s+wallets+ranked+by+how+surely+they+beat+the+prices+they+paid.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=cf4c3ca388c9f09619f4e1e3e66e051ab0e3af8f01f659f69d9d520ff008360b\">\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-category-leaderboard\">\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-category-leaderboard.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-category-leaderboard#webpage\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard\",\"name\":\"Category leaderboard\",\"description\":\"Get one sport's wallets ranked by how surely they beat the prices they paid.\",\"dateModified\":\"2026-11-02T04:56:46.991Z\",\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Traders\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/get-trader\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Category leaderboard\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard#apireference\",\"headline\":\"Category leaderboard\",\"name\":\"Category leaderboard\",\"description\":\"Get one sport's wallets ranked by how surely they beat the prices they paid.\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/get-category-leaderboard#webpage\"},\"dateModified\":\"2026-11-02T04:56:46.991Z\",\"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":"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","description":"Get one sport's or one league's wallet leaderboard, ranked by edge, P\u0026L, or win rate.","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","description":"List the top three wallets with a proven edge in every sport and in esports.","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":"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 candles","openapi":"GET /api/v1/market/{condition_id}/candles","href":"/api-reference/endpoint/get-market-candles"},{"title":"Market wallets in and out","openapi":"GET /api/v1/market/{condition_id}/wallets-in-out","href":"/api-reference/endpoint/get-market-wallets-in-out"}]},{"group":"Content","pages":[{"title":"Search content","openapi":"GET /api/v1/content/search","href":"/api-reference/endpoint/search-content"}]},{"group":"Pick of the Day","pages":[{"title":"Pick of the Day","openapi":"GET /api/v1/pick-of-the-day","href":"/api-reference/endpoint/get-pick-of-the-day"},{"title":"Pick of the Day archive","openapi":"GET /api/v1/pick-of-the-day/archive","href":"/api-reference/endpoint/get-pick-of-the-day-archive"},{"title":"Pick of the Day stats","openapi":"GET /api/v1/pick-of-the-day/stats","href":"/api-reference/endpoint/get-pick-of-the-day-stats"},{"title":"Pick of the Day ledger","openapi":"GET /api/v1/pick-of-the-day/ledger","href":"/api-reference/endpoint/get-pick-of-the-day-ledger"},{"title":"Pick of the Day ledger entry","openapi":"GET /api/v1/pick-of-the-day/ledger/{pick_id}","href":"/api-reference/endpoint/get-pick-of-the-day-ledger-entry"}]},{"group":"Whale trades","pages":[{"title":"Large trades","openapi":"GET /api/v1/large-trades","href":"/api-reference/endpoint/get-large-trades"},{"title":"Large trade","openapi":"GET /api/v1/large-trades/{id}","href":"/api-reference/endpoint/get-large-trade"},{"title":"Large trades history","openapi":"GET /api/v1/large-trades/history","href":"/api-reference/endpoint/get-large-trades-history"},{"title":"Counterparty executions","openapi":"GET /api/v1/large-trades/{id}/counterparties/executions","href":"/api-reference/endpoint/get-large-trade-counterparty-executions"},{"title":"Counterparty makers","openapi":"GET /api/v1/large-trades/{id}/counterparties/executions/{execution_id}/makers","href":"/api-reference/endpoint/get-large-trade-counterparty-makers"},{"title":"Whale trades (deprecated)","openapi":"GET /api/v1/whale-trades","href":"/api-reference/endpoint/get-whale-trades"},{"title":"Whale trade (deprecated)","openapi":"GET /api/v1/whale-trades/{id}","href":"/api-reference/endpoint/get-whale-trade"},{"title":"Whale trades history (deprecated)","openapi":"GET /api/v1/whale-trades/history","href":"/api-reference/endpoint/get-whale-trades-history"},{"title":"Counterparty executions (deprecated)","openapi":"GET /api/v1/whale-trades/{id}/counterparties/executions","href":"/api-reference/endpoint/get-whale-trade-counterparty-executions"},{"title":"Counterparty makers (deprecated)","openapi":"GET /api/v1/whale-trades/{id}/counterparties/executions/{execution_id}/makers","href":"/api-reference/endpoint/get-whale-trade-counterparty-makers"}]},{"group":"Suspicious trades","pages":[{"title":"Suspicious trades","openapi":"GET /api/v1/suspicious-trades","href":"/api-reference/endpoint/get-suspicious-trades"},{"title":"Suspicious trade","openapi":"GET /api/v1/suspicious-trades/{id}","href":"/api-reference/endpoint/get-suspicious-trade"},{"title":"Insider Radar","openapi":"GET /api/v1/insider-radar","href":"/api-reference/endpoint/get-insider-radar"},{"title":"Insider Radar flag","openapi":"GET /api/v1/insider-radar/{id}","href":"/api-reference/endpoint/get-insider-radar-flag"}]},{"group":"Events","pages":[{"title":"Event replay","openapi":"GET /api/v1/events/feed/since","href":"/api-reference/endpoint/get-event-replay-since"}]},{"group":"Streaming","pages":[{"title":"Stream","openapi":"GET /api/v1/stream","href":"/api-reference/endpoint/get-stream"}]},{"group":"Usage","pages":[{"title":"Account identity","openapi":"GET /api/v1/me","href":"/api-reference/endpoint/get-account-identity"},{"title":"Usage","openapi":"GET /api/v1/usage","href":"/api-reference/endpoint/get-usage"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","openapi":"GET /api/v1/webhooks","href":"/api-reference/endpoint/list-webhooks"},{"title":"Webhook events","openapi":"GET /api/v1/webhooks/events","href":"/api-reference/endpoint/list-webhook-events"},{"title":"Create a webhook","openapi":"POST /api/v1/webhooks","href":"/api-reference/endpoint/create-webhook"},{"title":"Webhook","openapi":"GET /api/v1/webhooks/{id}","href":"/api-reference/endpoint/get-webhook"},{"title":"Update a webhook","openapi":"PATCH /api/v1/webhooks/{id}","href":"/api-reference/endpoint/update-webhook"},{"title":"Delete a webhook","openapi":"DELETE /api/v1/webhooks/{id}","href":"/api-reference/endpoint/delete-webhook"},{"title":"Verify a webhook","openapi":"POST /api/v1/webhooks/{id}/verify","href":"/api-reference/endpoint/verify-webhook"},{"title":"Start webhook verification","openapi":"POST /api/v1/webhooks/{id}/verification-attempts","href":"/api-reference/endpoint/create-webhook-verification-attempt"},{"title":"Get webhook verification","openapi":"GET /api/v1/webhooks/{id}/verification-attempts/{attempt_id}","href":"/api-reference/endpoint/get-webhook-verification-attempt"},{"title":"Rotate a webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret","href":"/api-reference/endpoint/rotate-webhook-secret"},{"title":"Prepare a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/prepare","href":"/api-reference/endpoint/prepare-webhook-secret"},{"title":"Activate a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/activate","href":"/api-reference/endpoint/activate-webhook-secret"},{"title":"Retire a staged webhook secret","openapi":"POST /api/v1/webhooks/{id}/rotate-secret/retire","href":"/api-reference/endpoint/retire-webhook-secret"},{"title":"Webhook deliveries","openapi":"GET /api/v1/webhooks/{id}/deliveries","href":"/api-reference/endpoint/list-webhook-deliveries"},{"title":"Redeliver a webhook delivery","openapi":"POST /api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver","href":"/api-reference/endpoint/redeliver-webhook-delivery"}]},{"group":"Webhook events","pages":[{"title":"large_trade_inserted_v2","openapi":"api-reference/openapi.json webhook large_trade_inserted_v2","href":"/api-reference/webhooks/large-trade-inserted-v2"},{"title":"large_trades_inserted","openapi":"api-reference/openapi.json webhook large_trades_inserted","href":"/api-reference/webhooks/large-trades-inserted"},{"title":"whale_trades_inserted","openapi":"api-reference/openapi.json webhook whale_trades_inserted","href":"/api-reference/webhooks/whale-trades-inserted"},{"title":"live_sports_updated","openapi":"api-reference/openapi.json webhook live_sports_updated","href":"/api-reference/webhooks/live-sports-updated"},{"title":"trader_synced","openapi":"api-reference/openapi.json webhook trader_synced","href":"/api-reference/webhooks/trader-synced"},{"title":"whale_trader_synced","openapi":"api-reference/openapi.json webhook whale_trader_synced","href":"/api-reference/webhooks/whale-trader-synced"},{"title":"large_positions_updated","openapi":"api-reference/openapi.json webhook large_positions_updated","href":"/api-reference/webhooks/large-positions-updated"},{"title":"wallet_grade_changed","openapi":"api-reference/openapi.json webhook wallet_grade_changed","href":"/api-reference/webhooks/wallet-grade-changed"},{"title":"suspicious_trade_flagged","openapi":"api-reference/openapi.json webhook suspicious_trade_flagged","href":"/api-reference/webhooks/suspicious-trade-flagged"},{"title":"insider_radar_flag_raised","openapi":"api-reference/openapi.json webhook insider_radar_flag_raised","href":"/api-reference/webhooks/insider-radar-flag-raised"},{"title":"sharp_money_flow_detected","openapi":"api-reference/openapi.json webhook sharp_money_flow_detected","href":"/api-reference/webhooks/sharp-money-flow-detected"},{"title":"smart_money_flow_detected","openapi":"api-reference/openapi.json webhook smart_money_flow_detected","href":"/api-reference/webhooks/smart-money-flow-detected"},{"title":"export_job_ready","openapi":"api-reference/openapi.json webhook export_job_ready","href":"/api-reference/webhooks/export-job-ready"},{"title":"export_job_failed","openapi":"api-reference/openapi.json webhook export_job_failed","href":"/api-reference/webhooks/export-job-failed"},{"title":"export_job_expired","openapi":"api-reference/openapi.json webhook export_job_expired","href":"/api-reference/webhooks/export-job-expired"},{"title":"export_job_cancelled","openapi":"api-reference/openapi.json webhook export_job_cancelled","href":"/api-reference/webhooks/export-job-cancelled"}]},{"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":"Category leaderboard - 0xinsider API","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}