Use this endpoint to retry a delivery whose status is dead_letter. It returns the delivery in the same format as Webhook deliveries.Re-enabling an endpoint through Update a webhook does not resend failed events. Use this route for individual deliveries or Event replay to recover recorded large-trade events.
The wait after each failure is capped at the value below, and the 8th failure returns the delivery to dead_letter. Webhook deliveries explains how each wait is chosen, how a Retry-After from your server changes it, and what each retry_schedule_reason value means.
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.
Optional safe-retry key. Reuse the same value only when retrying the exact same mutation request body; a different body returns 422 and an in-flight matching request returns 409.
Owner-scoped view of one webhook delivery attempt. Deliberately omits the request body and the endpoint signing secret: a delivery log never re-exposes the payload or any secret material.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"0xinsider API","colors":{"primary":"#000000","light":"#000000","dark":"#ffffff"},"logo":{"light":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/logo/light.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=5a737b3d5f5bace7059eb57500f3c8ef","dark":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/logo/dark.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=2039a645e8826fe146e6cd8e15498ca5"},"favicon":"https://mintcdn.com/0xinsider/D5OLZi_kq06wJPfv/favicon.svg?fit=max\u0026auto=format\u0026n=D5OLZi_kq06wJPfv\u0026q=85\u0026s=06727454da2da854b5cdd4a0b06075fb","api":{"openapi":"api-reference/openapi.json"},"navbar":{"links":[{"href":"mailto:support@0xinsider.com","label":"Support"}],"primary":{"type":"button","label":"Get API key","href":"https://0xinsider.com/developers"}},"footer":{"socials":{"x":"https://x.com/0xinsiderdotcom","github":"https://github.com/0xinsider","linkedin":"https://linkedin.com/company/0xinsider-com"}},"seo":{"metatags":{"msvalidate.01":"46E18D97E322917120999977418630DE"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"markdown":{"schema":false,"instructions":["The Markdown of an API reference page leaves out the OpenAPI schema.","Every object an endpoint returns or a webhook carries, with each field's type, presence and meaning, is on https://docs.0xinsider.com/api-reference/objects.md.","The full OpenAPI 3.1 spec names each operation's and each webhook's exact parameters, request body and response schema: https://docs.0xinsider.com/api-reference/openapi.json."]},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Terminal","icon":"chart-line","href":"https://0xinsider.com"},{"anchor":"Product changelog","icon":"list","href":"https://0xinsider.com/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"0xinsider","hasAudioNarration":false,"actualSubdomain":"0xinsider","customDomains":["docs.0xinsider.com"],"gitSource":{"type":"github","owner":"0xinsider","repo":"docs.0xinsider.com","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb3b6c1f0e0ab891cd4ff7","collectionId":"78315c6b-fd38-46da-9d61-0bd96a960a61","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb3b6c1f0e0ab891cd4ff7"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{},"buildId":"6aeb3b6c1f0e0ab891cd4ff7","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API reference","count":126},{"language":"default","tag":"Traders","count":26},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Webhook events","count":16},{"language":"default","tag":"Changelog","count":16},{"language":"default","tag":"API updates","count":16},{"language":"default","tag":"Webhooks","count":15},{"language":"default","tag":"Markets","count":15},{"language":"default","tag":"Older entries","count":15},{"language":"default","tag":"Whale trades","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"[data-active],[data-active] a,[role=\"tab\"],[class*=\"playground\"] button,[class*=\"try-it\"],.bg-primary-dark,a[class*=\"anchor\"],a[class*=\"group\"],li a,nav a{transition:color 150ms ease, background-color 150ms ease, border-color 150ms ease, opacity 150ms ease, transform 150ms ease}[class*=\"badge\"],[data-testid*=\"badge\"]{--tw-bg-opacity: 1 !important}:root{--primary: 0 0 0;--primary-light: 0 0 0;--primary-dark: 0 0 0;--primary-foreground: 255 255 255}.dark{--primary-light: 255 255 255;--primary-dark: 255 255 255}.dark .bg-primary-dark~* .text-white,.dark .bg-primary-dark~* svg,.dark .bg-primary-dark~svg{color:#000000!important}.dark [data-active=\"true\"],.dark [data-active=\"true\"] a{color:#ffffff!important}[data-active=\"true\"],[data-active=\"true\"] a{color:#000000!important}.dark [class*=\"GET\"],.dark [class*=\"get\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"GET\"],[class*=\"get\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"POST\"],.dark [class*=\"post\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"POST\"],[class*=\"post\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"PUT\"],.dark [class*=\"put\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"PUT\"],[class*=\"put\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"DELETE\"],.dark [class*=\"delete\"]{background-color:rgba(255, 255, 255, 0.15)!important;color:#ffffff!important}[class*=\"DELETE\"],[class*=\"delete\"]{background-color:rgba(0, 0, 0, 0.08)!important;color:#000000!important}.dark [class*=\"playground\"] button,.dark [class*=\"try-it\"]{background-color:#ffffff!important;color:#000000!important}[class*=\"playground\"] button,[class*=\"try-it\"]{background-color:#000000!important;color:#ffffff!important}.dark [role=\"tab\"][aria-selected=\"true\"],.dark [role=\"tab\"][data-state=\"active\"]{border-color:#ffffff!important;color:#ffffff!important}[role=\"tab\"][aria-selected=\"true\"],[role=\"tab\"][data-state=\"active\"]{border-color:#000000!important;color:#000000!important}"}],"page":{"pagePath":"api-reference/endpoint/redeliver-webhook-delivery","slug":"/api-reference/endpoint/redeliver-webhook-delivery","pageMetadata":{"title":"Redeliver a webhook delivery","description":"Retry a failed webhook delivery with a new allowance of 8 attempts.","openapi":"POST /api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver","href":"/api-reference/endpoint/redeliver-webhook-delivery"},"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: \"Retry a failed webhook delivery with a new allowance of 8 attempts.\"\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 to retry a delivery whose `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`dead_letter`}),`. It returns the delivery in the same format as `,_jsx(_components.a,{href:`/api-reference/endpoint/list-webhook-deliveries`,children:`Webhook deliveries`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Re-enabling an endpoint through `,_jsx(_components.a,{href:`/api-reference/endpoint/update-webhook`,children:`Update a webhook`}),` does not resend failed events. Use this route for individual deliveries or `,_jsx(_components.a,{href:`/api-reference/endpoint/get-event-replay-since`,children:`Event replay`}),` to recover recorded large-trade 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:`id`})}),_jsx(_components.td,{children:`The endpoint the delivery belongs to.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delivery_id`})}),_jsxs(_components.td,{children:[`The delivery to requeue, taken from `,_jsx(_components.a,{href:`/api-reference/endpoint/list-webhook-deliveries`,children:`Webhook deliveries`}),`. It has to belong to the endpoint named by `,_jsx(_components.code,{children:`id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Idempotency-Key`}),` header`]}),_jsx(_components.td,{children:`Optional, and up to 255 characters. Reuse it only when you are retrying this exact request, on this same delivery.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-the-requeue-changes`,children:`What the requeue changes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`After the call`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`pending`}),`. The delivery is queued again like any other.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attempt_count`})}),_jsx(_components.td,{children:`0. The full schedule of 8 attempts runs again.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`next_attempt_at`})}),_jsx(_components.td,{children:`Now.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`retry_schedule_reason`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`manual_redelivery`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`event_id`}),` and the delivery’s `,_jsx(_components.code,{children:`idempotency-key`}),` header`]}),_jsx(_components.td,{children:`Unchanged, so a receiver that already processed this event can recognize the repeat and skip it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-0xinsider-delivery-attempt`})}),_jsxs(_components.td,{children:[`Starts again at `,_jsx(_components.code,{children:`1`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`last_response_status`}),` and `,_jsx(_components.code,{children:`last_error`})]}),_jsx(_components.td,{children:`They keep the old failure until the next attempt records its own.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The resend is sent to the endpoint’s current `,_jsx(_components.code,{children:`url`}),` and signed with its current secret, not the ones in use when the delivery first failed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`retry-schedule`,children:`Retry schedule`}),`\n`,_jsxs(_components.p,{children:[`The wait after each failure is capped at the value below, and the 8th failure returns the delivery to `,_jsx(_components.code,{children:`dead_letter`}),`. `,_jsx(_components.a,{href:`/api-reference/endpoint/list-webhook-deliveries`,children:`Webhook deliveries`}),` explains how each wait is chosen, how a `,_jsx(_components.code,{children:`Retry-After`}),` from your server changes it, and what each `,_jsx(_components.code,{children:`retry_schedule_reason`}),` value means.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Attempt that failed`}),_jsx(_components.th,{children:`Wait before the next one, at most`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`1`}),_jsx(_components.td,{children:`60 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2`}),_jsx(_components.td,{children:`120 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`3`}),_jsx(_components.td,{children:`240 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`4`}),_jsx(_components.td,{children:`480 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`5`}),_jsx(_components.td,{children:`960 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`6`}),_jsx(_components.td,{children:`1,920 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`7`}),_jsx(_components.td,{children:`3,600 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`8`}),_jsxs(_components.td,{children:[`None. `,_jsx(_components.code,{children:`status`}),` returns to `,_jsx(_components.code,{children:`dead_letter`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,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:`4`,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:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OXINSIDER_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Idempotency-Key: webhook-redeliver-456-2026-09-22\"`}),_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/webhooks/42/deliveries/456/redeliver\"`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`handle-a-409-or-a-422`,children:`Handle a 409 or a 422`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Answer`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`409`}),`, `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`delivery_id`})]}),_jsxs(_components.td,{children:[`The delivery was already `,_jsx(_components.code,{children:`delivered`}),`, or it is still queued as `,_jsx(_components.code,{children:`pending`}),`, `,_jsx(_components.code,{children:`retry`}),`, or `,_jsx(_components.code,{children:`processing`}),`. Only a `,_jsx(_components.code,{children:`dead_letter`}),` delivery can be requeued.`]}),_jsxs(_components.td,{children:[`Read the row in `,_jsx(_components.a,{href:`/api-reference/endpoint/list-webhook-deliveries`,children:`Webhook deliveries`}),`. A queued row needs nothing from you.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`409`}),`, `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`endpoint`})]}),_jsxs(_components.td,{children:[`The endpoint is disabled, is not verified, or no longer subscribes to this delivery’s `,_jsx(_components.code,{children:`event_type`}),`, so the resend would be dead-lettered again.`]}),_jsxs(_components.td,{children:[`Do what `,_jsx(_components.code,{children:`error.message`}),` names, then send this request again.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`409`}),`, `,_jsx(_components.code,{children:`error.reason`}),` `,_jsx(_components.code,{children:`idempotency_in_progress`})]}),_jsxs(_components.td,{children:[`Your first request with this `,_jsx(_components.code,{children:`Idempotency-Key`}),` is still running.`]}),_jsx(_components.td,{children:`Wait a few seconds, then send the same key again.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`422`}),`, `,_jsx(_components.code,{children:`error.param`}),` `,_jsx(_components.code,{children:`Idempotency-Key`})]}),_jsxs(_components.td,{children:[`The key was already used for a different request, such as a different `,_jsx(_components.code,{children:`delivery_id`}),`.`]}),_jsx(_components.td,{children:`Pick a new key. One key belongs to one request.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-does-not-do`,children:`What it does not do`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Find the delivery for you. Take `,_jsx(_components.code,{children:`delivery_id`}),` from `,_jsx(_components.a,{href:`/api-reference/endpoint/list-webhook-deliveries`,children:`Webhook deliveries`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Requeue in bulk. It is one call per delivery, so for a long gap catch up from `,_jsx(_components.a,{href:`/api-reference/endpoint/get-event-replay-since`,children:`Event replay`}),` instead.`]}),`\n`,_jsxs(_components.li,{children:[`Reach a row that retention deleted. `,_jsx(_components.code,{children:`delivered`}),` and `,_jsx(_components.code,{children:`dead_letter`}),` rows are kept for 7 days, after which the `,_jsx(_components.code,{children:`delivery_id`}),` returns `,_jsx(_components.code,{children:`404`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Answer anything but `,_jsx(_components.code,{children:`404`}),` for an endpoint or a delivery you do not own. That is the same answer as an id that never existed.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Redeliver a webhook delivery","description":"Retry a failed webhook delivery with a new allowance of 8 attempts.","openapi":"POST /api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver","href":"/api-reference/endpoint/redeliver-webhook-delivery"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"What the requeue changes","slug":"what-the-requeue-changes","depth":2,"children":[]},{"title":"Retry schedule","slug":"retry-schedule","depth":2,"children":[]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"Handle a 409 or a 422","slug":"handle-a-409-or-a-422","depth":2,"children":[]},{"title":"What it does not do","slug":"what-it-does-not-do","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/0xinsider/97b0167e20d57d7f/changelog-anchors.js"],"openApiReferenceData":{"operation":{"operationId":"redeliverWebhookDelivery","summary":"Redeliver a dead-lettered webhook delivery","description":"Retry a failed webhook delivery with a new allowance of 8 attempts.","tags":["Webhooks"],"parameters":["09777e1b-5f65-45ea-89a9-d412130e48b0","a2c294fc-cbc4-4741-a1b0-cbd98096dc63","c0c7e33c-5757-4f90-9bb5-ba36fe750d9a","cff2f0a1-474a-461a-a9b9-2499920d30bb"],"responses":{"200":"7207b7c5-5a54-4d24-ac26-20b870571144","400":"69accfd1-ef11-4377-a567-0dc4da9d8090","401":"f3b897e5-4b0f-4860-872b-5a6e7198e028","402":"c640eeae-c630-4399-9d1a-d3341cfd2ec6","403":"2c27b1f1-8afe-4bfb-869d-e63204f4c357","404":"62360d99-0328-4ad6-af09-1d0a6d3187e0","408":"9a77413f-856d-4748-aa3a-9c1467cfa1c4","409":"10c2d64e-53ca-4a96-b1ce-f16505d03edd","422":"edf17e39-19fd-4fe0-ad7c-b81edb83843b","423":"5efce69c-a648-447d-9af4-a57a31744e1c","429":"e435bf00-c2fe-4f2c-9930-49516b866e10","500":"0fca1d7e-0359-46d9-8aa7-a4be3fbf8669","503":"e2a005ea-12b7-4bc0-b99c-a51047771057"},"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl -sS \\\n -X POST \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n -H 'Idempotency-Key: wh_redeliver_456' \\\n 'https://api.0xinsider.com/api/v1/webhooks/123/deliveries/456/redeliver'"}],"x-examples":{"success":{"object":"webhook_delivery","data":{"id":456,"object":"webhook_delivery","event_id":"evt_whale_trades_inserted_1700000000_3","event_type":"whale_trades_inserted","status":"pending","attempt_count":0,"last_response_status":503,"last_error":"non-2xx response","next_attempt_at":"2026-06-04T12:00:00Z","retry_schedule_reason":"manual_redelivery","created_at":"2026-06-04T09:00:00Z"},"meta":{"request_id":"req_example","cached":false,"cost":1}}},"security":["7de8d922-2dd8-40d5-a4c3-757a95fea066","50e99796-10c8-461d-942b-d9689d78c1f5"],"x-latency-budget":{"milliseconds":250,"measurement":"response-ready","requirement":"engineering-budget"},"method":"post","type":"path","servers":["3c54bf91-5931-4abe-827d-b3a31ddf4885","155f76df-7ffd-4940-8c22-066e4ccb34a9"],"path":"/api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver","baseUrlOptions":["https://api.0xinsider.com","https://0xinsider.com/sandbox"],"title":"Redeliver a dead-lettered webhook delivery","codeSamples":[{"label":"cURL","lang":"curl","source":"curl -sS \\\n -X POST \\\n -H \"Authorization: Bearer $OXINSIDER_API_KEY\" \\\n -H 'Idempotency-Key: wh_redeliver_456' \\\n 'https://api.0xinsider.com/api/v1/webhooks/123/deliveries/456/redeliver'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"09777e1b-5f65-45ea-89a9-d412130e48b0":{"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>"}},"a2c294fc-cbc4-4741-a1b0-cbd98096dc63":{"name":"id","in":"path","required":true,"description":"Webhook endpoint id owned by the authenticated API key user.","schema":{"type":"integer","format":"int64","isRequired":true,"description":"Webhook endpoint id owned by the authenticated API key user.","uniqueKey":"","typeLabel":"integer\u003cint64>"}},"c0c7e33c-5757-4f90-9bb5-ba36fe750d9a":{"name":"delivery_id","in":"path","required":true,"description":"Delivery id from GET /api/v1/webhooks/{id}/deliveries. It must belong to the webhook endpoint named by id.","schema":{"type":"integer","format":"int64","isRequired":true,"description":"Delivery id from GET /api/v1/webhooks/{id}/deliveries. It must belong to the webhook endpoint named by id.","uniqueKey":"","typeLabel":"integer\u003cint64>"}},"cff2f0a1-474a-461a-a9b9-2499920d30bb":{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional safe-retry key. Reuse the same value only when retrying the exact same mutation request body; a different body returns 422 and an in-flight matching request returns 409.","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"Optional safe-retry key. Reuse the same value only when retrying the exact same mutation request body; a different body returns 422 and an in-flight matching request returns 409.","uniqueKey":"","typeLabel":"string"},"example":"wh_idem_01HX7Y9ZQ4K7Z0Q2E4N6A8C1BF"}},"responses":{"7207b7c5-5a54-4d24-ac26-20b870571144":{"description":"The requeued delivery, in the same shape as one GET /api/v1/webhooks/{id}/deliveries row.","content":{"application/json":{"schema":{"type":"object","required":["object","data","meta"],"properties":{"object":{"type":"string","const":"webhook_delivery","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"data":{"type":"object","description":"Owner-scoped view of one webhook delivery attempt. Deliberately omits the request body and the endpoint signing secret: a delivery log never re-exposes the payload or any secret material.","required":["id","object","event_id","event_type","status","attempt_count","next_attempt_at","retry_schedule_reason","created_at"],"properties":{"id":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"data.id","typeLabel":"integer\u003cint64>"},"object":{"type":"string","const":"webhook_delivery","isRequired":true,"uniqueKey":"data.object","typeLabel":"string"},"event_id":{"type":"string","description":"Stable event id for this delivery; identical across retries of the same logical event.","isRequired":true,"uniqueKey":"data.event_id","typeLabel":"string"},"event_type":{"type":"string","enum":["large_trade_inserted_v2","large_trades_inserted","whale_trades_inserted","live_sports_updated","trader_synced","whale_trader_synced","large_positions_updated","wallet_grade_changed","suspicious_trade_flagged","insider_radar_flag_raised","sharp_money_flow_detected","smart_money_flow_detected","export_job_ready","export_job_failed","export_job_expired","export_job_cancelled"],"isRequired":true,"uniqueKey":"data.event_type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Delivery lifecycle state (e.g. pending, delivered, dead_letter).","isRequired":true,"uniqueKey":"data.status","typeLabel":"string"},"attempt_count":{"type":"integer","description":"Number of delivery attempts made so far.","isRequired":true,"uniqueKey":"data.attempt_count","typeLabel":"integer"},"next_attempt_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the next delivery attempt is due, for a delivery whose status is pending or retry. null while an attempt is in flight (processing) and once the delivery is terminal (delivered or dead_letter).","isRequired":true,"uniqueKey":"data.next_attempt_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the next delivery attempt is due, for a delivery whose status is pending or retry. null while an attempt is in flight (processing) and once the delivery is terminal (delivered or dead_letter).","isRequired":true,"uniqueKey":"data.next_attempt_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.next_attempt_at","typeLabel":"string\u003cdate-time> | null"},"retry_schedule_reason":{"oneOf":[{"type":"string","enum":["receiver_retry_after","transient_failure","permanent_or_auth_failure","manual_redelivery","configuration_changed",null],"description":"Why next_attempt_at was scheduled: receiver_retry_after for an accepted Retry-After on a 408, 429, or 5xx response; transient_failure for a network or ordinary transient retry; permanent_or_auth_failure for another non-2xx response; manual_redelivery or configuration_changed for those queue actions. null while an attempt is in flight or once the delivery is terminal.","isRequired":true,"uniqueKey":"data.retry_schedule_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["receiver_retry_after","transient_failure","permanent_or_auth_failure","manual_redelivery","configuration_changed",null],"description":"Why next_attempt_at was scheduled: receiver_retry_after for an accepted Retry-After on a 408, 429, or 5xx response; transient_failure for a network or ordinary transient retry; permanent_or_auth_failure for another non-2xx response; manual_redelivery or configuration_changed for those queue actions. null while an attempt is in flight or once the delivery is terminal.","isRequired":true,"uniqueKey":"data.retry_schedule_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.retry_schedule_reason","typeLabel":"enum\u003cstring> | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"last_response_status":{"type":"integer","description":"HTTP status code of the most recent delivery attempt. Omitted until a response (or transport error) has been recorded.","uniqueKey":"data.last_response_status","typeLabel":"integer"},"last_error":{"type":"string","description":"Short description of the most recent delivery failure. Omitted when the last attempt succeeded or none has failed.","uniqueKey":"data.last_error","typeLabel":"string"},"delivered_at":{"type":"string","format":"date-time","description":"When the delivery was first accepted by the destination. Omitted until a delivery succeeds.","uniqueKey":"data.delivered_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data","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":{"success":{"title":"success","value":{"object":"webhook_delivery","data":{"id":456,"object":"webhook_delivery","event_id":"evt_whale_trades_inserted_1700000000_3","event_type":"whale_trades_inserted","status":"pending","attempt_count":0,"last_response_status":503,"last_error":"non-2xx response","next_attempt_at":"2026-06-04T12:00:00Z","retry_schedule_reason":"manual_redelivery","created_at":"2026-06-04T09:00:00Z"},"meta":{"request_id":"req_example","cached":false,"cost":1}}}},"exampleType":"examples"}},"headers":{"X-Query-Ignored":{"description":"Comma-separated, percent-encoded query names the operation did not publish and therefore ignored in compatible mode. Names are sorted and de-duplicated.","schema":{"type":"string"}},"X-Effective-Query":{"description":"Normalized, percent-encoded query string containing only the recognized names and values applied by the operation. Query names and values use form-urlencoded decoding, where + is a space. Repeated names are retained and sorted by name. A limit outside the operation's published minimum..maximum is reported as the clamped value the page used, so the header states the page size served rather than the one requested.","schema":{"type":"string"}},"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"]}},"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"}},"Server-Timing":{"description":"Processing time in milliseconds, for example api;dur=12.345. Includes API authentication, quota admission, handler work and response construction. Excludes network transit and streamed body or export-file transfer. The engineering budget is strictly below 250 ms; this header reports observations, not a latency guarantee or a new timeout.","schema":{"type":"string"},"example":"api;dur=12.345"}},"exampleType":"examples"},"69accfd1-ef11-4377-a567-0dc4da9d8090":{"description":"Invalid request parameter","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"f3b897e5-4b0f-4860-872b-5a6e7198e028":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"c640eeae-c630-4399-9d1a-d3341cfd2ec6":{"description":"Active Pro subscription required. The key is valid but the account has no paid access: error.reason is subscription_inactive when the Pro subscription has lapsed, or payment_overdue when the plan stands but its latest invoice is unpaid (#32592). error.billing_url and error.message name where a person clears it (https://0xinsider.com/billing). Permanent until a person acts: no Retry-After, never retry on a schedule.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"2c27b1f1-8afe-4bfb-869d-e63204f4c357":{"description":"Account access denied","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"62360d99-0328-4ad6-af09-1d0a6d3187e0":{"description":"The webhook endpoint is not owned by the caller or was deleted, or the delivery does not belong to that endpoint or was removed by retention.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"9a77413f-856d-4748-aa3a-9c1467cfa1c4":{"description":"The handler did not answer inside the server's 30-second timeout. error.code is request_timeout. On GET and HEAD the response carries Retry-After and error.retry_at; on a mutation it carries neither, because the request may have completed on the server: check its state before repeating it, and reuse its Idempotency-Key.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"10c2d64e-53ca-4a96-b1ce-f16505d03edd":{"description":"The delivery cannot be requeued in its current state. error.param is delivery_id when the delivery itself is the cause (already delivered, or still queued) and endpoint when the endpoint would not receive it (disabled, not verified, or no longer subscribed to its event_type); error.message names the fix. error.reason is idempotency_in_progress while the same keyed request is still running.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"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":{"idempotency_in_progress":{"title":"idempotency_in_progress","value":{"object":"error","error":{"code":"bad_request","message":"Your previous request is still processing. Retry in a moment.","param":"Idempotency-Key","reason":"idempotency_in_progress"},"meta":{"request_id":"req_example","cached":false,"cost":1}}},"already_delivered":{"title":"already_delivered","value":{"object":"error","error":{"code":"bad_request","message":"This webhook delivery was already delivered. Only a dead_letter delivery can be redelivered.","param":"delivery_id"},"meta":{"request_id":"req_example","cached":false,"cost":1}}},"already_queued":{"title":"already_queued","value":{"object":"error","error":{"code":"bad_request","message":"This webhook delivery is already queued with status retry, so the worker attempts it without a redelivery. Only a dead_letter delivery can be redelivered.","param":"delivery_id"},"meta":{"request_id":"req_example","cached":false,"cost":1}}},"endpoint_disabled":{"title":"endpoint_disabled","value":{"object":"error","error":{"code":"bad_request","message":"Webhook endpoint 123 is disabled, so a redelivered delivery would be dead-lettered again. Re-enable it with PATCH /api/v1/webhooks/123 {\"enabled\": true}, then retry this request.","param":"endpoint"},"meta":{"request_id":"req_example","cached":false,"cost":1}}}},"exampleType":"examples"}},"exampleType":"examples"},"edf17e39-19fd-4fe0-ad7c-b81edb83843b":{"description":"The Idempotency-Key was already used with a different request body.","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"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":{"different_body":{"title":"different_body","value":{"object":"error","error":{"code":"bad_request","message":"Idempotency-Key already used with a different request body","param":"Idempotency-Key"},"meta":{"request_id":"req_example","cached":false,"cost":1}}}},"exampleType":"examples"}},"exampleType":"examples"},"5efce69c-a648-447d-9af4-a57a31744e1c":{"description":"Account is locked","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"e435bf00-c2fe-4f2c-9930-49516b866e10":{"description":"Rate limit exceeded. Three independent budgets. (1) 100 requests/minute per user on Pro, 200 on Max (sliding window), on every authenticated route; RateLimit-Limit reports the caller's. On the remote MCP endpoint /api/v1/mcp only tools/call is counted: initialize, ping, tools/list, notifications, and the GET, HEAD and DELETE the endpoint answers 405 spend no per-minute request, no monthly quota and no pay-as-you-go usage, with or without a key. (2) On the BATCH routes only: 2500 batch item units/minute per user on Pro, 5000 on Max, reserved before any item is executed. A batch with N requested items costs N item units, including duplicate and invalid items. 2500 = 100 requests x 25 items per batch on Pro, 5000 = 200 x 25 on Max, which is the most item work a key can buy through the request limiter at all: a caller may spend their plan's entire request minute on full 25-item batches without the item budget being what stops them. The REQUEST budget is the effective ceiling, and batching is never the more expensive choice. The item budget can still deny at a sliding-window boundary (both counters carry the previous window forward with a floor, and the item counter runs 25x the request counter), so honor a 429 from either. Over-quota batches return 429 with Retry-After plus RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset before any item work is done. (3) The monthly quota: Pro includes 500,000 and Max includes 2,000,000 authenticated requests per UTC calendar month. Over the plan's included requests: with pay as you go on, the excess bills at USD 0.20 per 1,000 on a monthly invoice, up to four times the included allowance (2,000,000 requests for Pro); without it, from October 1, 2026, the next request answers 429 rate_limited with error.reason monthly_quota_exceeded and a Retry-After to the month's reset. Pay-as-you-go accounts receive the same refusal at their ceiling. A refused request is not counted. X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining, and X-Monthly-Quota-Reset (unix seconds, the first of next month) are on every response a route answers for a counted request, on the monthly-quota 429, and on GET /api/v1/me and GET /api/v1/usage, which read the month without spending it. Any other refusal or failure before the route runs, such as a per-minute 429 or a 401, carries none, nor does a remote MCP message other than tools/call. (4) The per-address budget: 1200 requests/minute per IP, shared by every caller behind one address and counted before authentication, on every route. A 429 from it carries error.reason ip_rate_limited and describes that bucket in RateLimit-*; a throttled address (sustained over-limit traffic) carries error.reason ip_throttled with a Retry-After of minutes to days, and a request before it does not shorten the cooldown. Every 429 is the standard error envelope with meta.request_id equal to X-Request-Id.","headers":{"Retry-After":{"description":"Seconds until rate limit resets.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Request limit of the budget this request was counted against, for its current window: the API key's per-minute sliding window on an authenticated call, at its plan's limit (100 requests on Pro, 200 on Max); the control-plane bucket GET /api/v1/me and GET /api/v1/usage share, the same on every plan, on a 429 from either; and the per-IP budget on a public route, on a refused credential (401, 402, 403, 423), and on a remote MCP message other than tools/call, none of which reaches the per-key limiter. Standard RateLimit header spelling.","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"Requests remaining in that budget's current window after this response. Standard RateLimit header spelling.","schema":{"type":"integer","example":84}},"RateLimit-Reset":{"description":"Seconds until that budget's current window resets. Standard RateLimit header spelling.","schema":{"type":"integer","example":42}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"X-Request-Id":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"0fca1d7e-0359-46d9-8aa7-a4be3fbf8669":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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"},"e2a005ea-12b7-4bc0-b99c-a51047771057":{"description":"Redis-backed authenticated rate limiter unavailable; retry after the per-process outage cooldown","headers":{"Retry-After":{"description":"Seconds until the middleware will probe the Redis-backed rate limiter again.","schema":{"type":"integer"}},"X-Request-Id":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["object","error","meta"],"properties":{"object":{"type":"string","const":"error","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"FROZEN: an existing value never changes meaning. request_timeout (408, #16146) was added the way insufficient_scope was: the handler did not answer inside the server's 30-second timeout. Retry-After and retry_at ride on it only for a safe method (GET, HEAD); a timed-out mutation may have completed, so check its state and reuse its Idempotency-Key.","enum":["bad_request","invalid_api_key","subscription_required","forbidden","insufficient_scope","not_found","account_locked","rate_limited","rate_limit_unavailable","internal_error","request_timeout","endpoint_retired"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"retry_at":{"type":"string","format":"date-time","description":"The recommended next request instant (RFC3339), always in the future. Present on every retryable error: `pick_not_released`, `rate_limited`, `rate_limit_unavailable`, and `read_model_warming`. Omitted otherwise. The absolute twin of `Retry-After`; prefer the header for the sleep duration. For `pick_not_released`, the earliest of the next scheduled release, the next automatic selector attempt, the operating-window start, or about 60 seconds. See that response.","uniqueKey":"error.retry_at","typeLabel":"string\u003cdate-time>"},"freshness":{"type":"object","required":["max_age_s","data_quality_status"],"properties":{"max_age_s":{"type":"integer","format":"int64","minimum":0,"description":"The caller's requested whole-response freshness ceiling in seconds.","isRequired":true,"uniqueKey":"error.freshness.max_age_s","typeLabel":"integer\u003cint64>"},"data_quality_status":{"type":"string","enum":["fresh","stale","partial","unknown","untracked","unavailable"],"description":"The trader body's whole-response data-quality status. Only fresh or stale can satisfy max_age_s: the ceiling replaces each writer's own budget, so a stale body inside it is answered.","isRequired":true,"uniqueKey":"error.freshness.data_quality_status","typeLabel":"enum\u003cstring>"},"actual_age_s":{"type":"integer","format":"int64","minimum":0,"description":"Age in seconds of the oldest stored data_quality.as_of clock, when one is available.","uniqueKey":"error.freshness.actual_age_s","typeLabel":"integer\u003cint64>"},"as_of":{"type":"string","format":"date-time","description":"The oldest stored data-quality clock used to calculate actual_age_s, when one is available.","uniqueKey":"error.freshness.as_of","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"error.freshness","typeLabel":"object"},"billing_url":{"type":"string","format":"uri","description":"Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","enum":["cursor_expired","unknown_endpoint","pick_not_released","trader_not_tracked","market_out_of_scope","read_model_warming","database_unavailable","request_accounting_unavailable","idempotency_in_progress","webhook_delivery_in_progress","webhook_secret_rotation_not_prepared","webhook_secret_rotation_overlap_active","sandbox_api_key","api_key_in_query","subscription_inactive","payment_overdue","monthly_quota_exceeded","invalid_query","unknown_query_parameter","invalid_path","invalid_body","unsupported_media_type","payload_too_large","method_not_allowed","ip_rate_limited","ip_throttled","cold_read_limited","export_expired","freshness_ceiling_unsatisfied","max_plan_required","endpoint_retired"],"description":"ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed.","uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","required":["request_id","cached","cost"],"properties":{"request_id":{"type":"string","description":"Unique request ID (req_ prefix). The same value as the X-Request-Id response header, the request's usage accounting row and its log lines.","isRequired":true,"uniqueKey":"meta.request_id","typeLabel":"string"},"cached":{"type":"boolean","isRequired":true,"uniqueKey":"meta.cached","typeLabel":"boolean"},"cost":{"type":"integer","description":"Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.","isRequired":true,"uniqueKey":"meta.cost","typeLabel":"integer"},"cache_age_s":{"type":"integer","description":"Cache age in seconds. Omitted when the response was not cached, and also when it was cached but its age cannot be established (an entry stored before its cache carried a computed instant). Never a placeholder: an unknown age is reported as no value rather than as the cache TTL.","uniqueKey":"meta.cache_age_s","typeLabel":"integer"},"ranking_generation":{"type":"integer","description":"Committed PostgreSQL-owned leaderboard generation for the returned rows and cursor. Present on GET /api/v1/leaderboard; omitted on endpoints that do not read this ranking.","uniqueKey":"meta.ranking_generation","typeLabel":"integer"},"ranking_as_of":{"type":"string","format":"date-time","description":"Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order.","uniqueKey":"meta.ranking_as_of","typeLabel":"string\u003cdate-time>"},"directional_source":{"type":"string","enum":["live","degraded"],"description":"Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field.","uniqueKey":"meta.directional_source","typeLabel":"enum\u003cstring>"},"ranking_source":{"type":"string","enum":["live","db_only"],"description":"Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field.","uniqueKey":"meta.ranking_source","typeLabel":"enum\u003cstring>"},"category_skill_source":{"type":"string","enum":["live","partial","degraded","unavailable"],"description":"Whole filtered snapshot category-evidence status before pagination. Operational live always remains partial source coverage.","uniqueKey":"meta.category_skill_source","typeLabel":"enum\u003cstring>"},"category_skill_model_version":{"type":"string","uniqueKey":"meta.category_skill_model_version","typeLabel":"string"},"category_skill_taxonomy_version":{"type":"string","uniqueKey":"meta.category_skill_taxonomy_version","typeLabel":"string"},"category_skill_platform":{"type":"string","const":"polymarket","uniqueKey":"meta.category_skill_platform","typeLabel":"string"},"category_skill_scope":{"type":"string","const":"observed_goldsky_primary_taker_fill","uniqueKey":"meta.category_skill_scope","typeLabel":"string"},"category_skill_source_coverage":{"type":"string","enum":["partial_whale_threshold_fills","graded_wallet_fills"],"uniqueKey":"meta.category_skill_source_coverage","typeLabel":"enum\u003cstring>"},"category_skill_observation_started_at":{"type":"string","format":"date-time","uniqueKey":"meta.category_skill_observation_started_at","typeLabel":"string\u003cdate-time>"},"category_skill_model_operationally_degraded":{"type":"boolean","description":"Whole-model operational readiness captured with the category model snapshot. Present on category-enriched responses even when the filtered signal list is empty. When true, category_skill_source is degraded and Edge Hunter signals uses the shorter degraded cache TTL.","uniqueKey":"meta.category_skill_model_operationally_degraded","typeLabel":"boolean"},"category_skill_status_counts":{"type":"object","required":["live","insufficient","stale","unknown","degraded"],"properties":{"live":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.live","typeLabel":"integer"},"insufficient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.insufficient","typeLabel":"integer"},"stale":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.stale","typeLabel":"integer"},"unknown":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.unknown","typeLabel":"integer"},"degraded":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"meta.category_skill_status_counts.degraded","typeLabel":"integer"}},"uniqueKey":"meta.category_skill_status_counts","typeLabel":"object"},"category_skill_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_base_payload_hash","typeLabel":"string"},"category_skill_enriched_base_payload_hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Edge Hunter signals view only.","uniqueKey":"meta.category_skill_enriched_base_payload_hash","typeLabel":"string"}},"isRequired":true,"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","error":{"code":"bad_request","message":"\u003cstring>","doc_url":"\u003cstring>","param":"\u003cstring>","retry_at":"2023-11-07T05:31:56Z","freshness":{"max_age_s":1,"data_quality_status":"fresh","actual_age_s":1,"as_of":"2023-11-07T05:31:56Z"},"billing_url":"\u003cstring>","reason":"cursor_expired"},"meta":{"request_id":"\u003cstring>","cached":true,"cost":123,"cache_age_s":123,"ranking_generation":123,"ranking_as_of":"2023-11-07T05:31:56Z","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":{"7de8d922-2dd8-40d5-a4c3-757a95fea066":{"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"}},"50e99796-10c8-461d-942b-d9689d78c1f5":{"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":["webhooks"],"schemeName":"oauth2"}}},"servers":{"3c54bf91-5931-4abe-827d-b3a31ddf4885":{"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."},"155f76df-7ffd-4940-8c22-066e4ccb34a9":{"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":["webhooks"],"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":"Redeliver a webhook delivery - 0xinsider API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T17:16:37.907Z","originalFileLocation":"api-reference/endpoint/redeliver-webhook-delivery.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=\"Retry a failed webhook delivery with a new allowance of 8 attempts.\">\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=\"Redeliver a webhook delivery - 0xinsider API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retry a failed webhook delivery with a new allowance of 8 attempts.\">\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/redeliver-webhook-delivery\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://0xinsider.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Redeliver+a+webhook+delivery\u0026amp;description=Retry+a+failed+webhook+delivery+with+a+new+allowance+of+8+attempts.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=bb5e237f087f966f5b32e8998045ffcb7a616fb42624b38042d7835002f47adc\">\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=\"Redeliver a webhook delivery - 0xinsider API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retry a failed webhook delivery with a new allowance of 8 attempts.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://0xinsider.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Redeliver+a+webhook+delivery\u0026amp;description=Retry+a+failed+webhook+delivery+with+a+new+allowance+of+8+attempts.\u0026amp;theme=f60be7b65c9764d9e284b0d8\u0026amp;signature=bb5e237f087f966f5b32e8998045ffcb7a616fb42624b38042d7835002f47adc\">\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/redeliver-webhook-delivery\">\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/redeliver-webhook-delivery.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/redeliver-webhook-delivery#webpage\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery\",\"name\":\"Redeliver a webhook delivery\",\"description\":\"Retry a failed webhook delivery with a new allowance of 8 attempts.\",\"dateModified\":\"2026-09-30T17:16:37.907Z\",\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/list-webhooks\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Redeliver a webhook delivery\",\"item\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery#apireference\",\"headline\":\"Redeliver a webhook delivery\",\"name\":\"Redeliver a webhook delivery\",\"description\":\"Retry a failed webhook delivery with a new allowance of 8 attempts.\",\"url\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xinsider.com/api-reference/endpoint/redeliver-webhook-delivery#webpage\"},\"dateModified\":\"2026-09-30T17:16:37.907Z\",\"publisher\":{\"@id\":\"https://docs.0xinsider.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.0xinsider.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"0xinsider API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"0xinsider API","nav":{"global":{"anchors":[{"anchor":"Terminal","icon":"chart-line","href":"https://0xinsider.com"},{"anchor":"Product changelog","icon":"list","href":"https://0xinsider.com/changelog"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"0xinsider API reference","sidebarTitle":"Overview","href":"/api-reference/introduction"}]},{"group":"Edge Hunter","pages":[{"title":"Edge Hunter","sidebarTitle":"Edge Hunter","openapi":"GET /api/v1/edge-hunter","href":"/api-reference/endpoint/get-edge-hunter"}]},{"group":"Objects","pages":[{"title":"Objects","href":"/api-reference/objects"}]},{"group":"Discovery","pages":[{"title":"API discovery","openapi":"GET /api/v1","href":"/api-reference/endpoint/get-api-discovery"},{"title":"Register an agent","openapi":"POST /api/v1/agents/register","href":"/api-reference/endpoint/register-agent"},{"title":"Coverage","openapi":"GET /api/v1/coverage","href":"/api-reference/endpoint/get-coverage"},{"title":"Platforms (deprecated)","openapi":"GET /api/v1/platforms","href":"/api-reference/endpoint/get-platforms"},{"title":"OpenAPI spec","openapi":"GET /api/v1/openapi.json","href":"/api-reference/endpoint/redirect-api-openapi-spec"}]},{"group":"Traders","pages":[{"title":"Trader","openapi":"GET /api/v1/trader/{address}","href":"/api-reference/endpoint/get-trader"},{"title":"Trader context","openapi":"GET /api/v1/trader/{address}/context","href":"/api-reference/endpoint/get-trader-context"},{"title":"Trader context as Markdown","openapi":"GET /api/v1/trader/{address}/context.md","href":"/api-reference/endpoint/get-trader-context-markdown"},{"title":"Trader category records","openapi":"GET /api/v1/trader/{address}/categories","href":"/api-reference/endpoint/get-trader-category-records"},{"title":"Trader grade at a past time","openapi":"GET /api/v1/trader/{address}/grade-at","href":"/api-reference/endpoint/get-trader-grade-at"},{"title":"Trader closing line value","openapi":"GET /api/v1/trader/{address}/clv","href":"/api-reference/endpoint/get-trader-clv"},{"title":"Batch traders","openapi":"POST /api/v1/traders/batch","href":"/api-reference/endpoint/batch-get-traders"},{"title":"Trader P\u0026L","openapi":"GET /api/v1/trader/{address}/pnl","href":"/api-reference/endpoint/get-trader-pnl"},{"title":"Position timeline","openapi":"GET /api/v1/trader/{address}/position-timeline","href":"/api-reference/endpoint/get-position-timeline"},{"title":"Position timeline by trader","openapi":"GET /api/v1/traders/{trader}/position-timeline","href":"/api-reference/endpoint/get-trader-position-timeline"},{"title":"Large positions","openapi":"GET /api/v1/large-positions","href":"/api-reference/endpoint/list-large-positions"},{"title":"Trader export snapshot","openapi":"GET /api/v1/trader/{address}/export","href":"/api-reference/endpoint/get-trader-export-snapshot"},{"title":"Submit a whale dataset","openapi":"POST /api/v1/datasets/whale-trades","href":"/api-reference/endpoint/submit-whale-dataset"},{"title":"Read a whale dataset job","openapi":"GET /api/v1/datasets/whale-trades/{job_id}","href":"/api-reference/endpoint/get-whale-dataset-status"},{"title":"Download a whale dataset","openapi":"GET /api/v1/datasets/whale-trades/{job_id}/download","href":"/api-reference/endpoint/download-whale-dataset"},{"title":"Cancel a whale dataset job","openapi":"POST /api/v1/datasets/whale-trades/{job_id}/cancel","href":"/api-reference/endpoint/cancel-whale-dataset"},{"title":"Submit a trader export","openapi":"POST /api/v1/trader/{address}/export","href":"/api-reference/endpoint/submit-trader-export"},{"title":"Trader export status","openapi":"GET /api/v1/trader/{address}/export/status","href":"/api-reference/endpoint/get-trader-export-status"},{"title":"Download a trader export","openapi":"GET /api/v1/trader/{address}/export/download","href":"/api-reference/endpoint/download-trader-export"},{"title":"Cancel a trader export","openapi":"POST /api/v1/trader/{address}/export/cancel","href":"/api-reference/endpoint/cancel-trader-export"},{"title":"Leaderboard","openapi":"GET /api/v1/leaderboard","href":"/api-reference/endpoint/get-leaderboard"},{"title":"Trending wallets","openapi":"GET /api/v1/leaderboard/trending","href":"/api-reference/endpoint/list-trending-wallets"},{"title":"Leaderboard leagues","openapi":"GET /api/v1/leaderboard/leagues","href":"/api-reference/endpoint/list-leaderboard-leagues"},{"title":"Sport leaderboard","openapi":"GET /api/v1/leaderboard/sports/{sport}","href":"/api-reference/endpoint/get-sport-leaderboard"},{"title":"Category leaderboard","openapi":"GET /api/v1/leaderboard/categories/{slug}","href":"/api-reference/endpoint/get-category-leaderboard"},{"title":"Category leaders","openapi":"GET /api/v1/leaderboard/categories","href":"/api-reference/endpoint/list-category-leaders"}]},{"group":"Positions","pages":[{"title":"Positions","openapi":"GET /api/v1/positions","href":"/api-reference/endpoint/get-positions"}]},{"group":"Combos","pages":[{"title":"Combo fills","openapi":"GET /api/v1/combos/fills","href":"/api-reference/endpoint/list-combo-fills"},{"title":"Combos summary","openapi":"GET /api/v1/combos/summary","href":"/api-reference/endpoint/get-combos-summary"},{"title":"Combo","openapi":"GET /api/v1/combos/{condition_id}","href":"/api-reference/endpoint/get-combo"}]},{"group":"Games","pages":[{"title":"List games","openapi":"GET /api/v1/games","href":"/api-reference/endpoint/list-games"},{"title":"Game","openapi":"GET /api/v1/games/{event_slug}","href":"/api-reference/endpoint/get-game"},{"title":"List game markets","openapi":"GET /api/v1/games/{event_slug}/markets","href":"/api-reference/endpoint/list-game-markets"},{"title":"Game sharp money","openapi":"GET /api/v1/games/{event_slug}/sharp-money","href":"/api-reference/endpoint/get-game-sharp-money"},{"title":"Game trades","openapi":"GET /api/v1/games/{event_slug}/trades","href":"/api-reference/endpoint/list-game-trades"},{"title":"Game holders","openapi":"GET /api/v1/games/{event_slug}/holders","href":"/api-reference/endpoint/get-game-holders"}]},{"group":"Markets","pages":[{"title":"Search markets","openapi":"GET /api/v1/markets/search","href":"/api-reference/endpoint/search-markets"},{"title":"Explore markets","openapi":"GET /api/v1/markets/explore","href":"/api-reference/endpoint/explore-markets"},{"title":"Sharp money flows","openapi":"GET /api/v1/markets/sharp-money-flows","href":"/api-reference/endpoint/sharp-money-flows"},{"title":"Smart money flows","openapi":"GET /api/v1/markets/smart-money-flows","href":"/api-reference/endpoint/smart-money-flows"},{"title":"Market flow","openapi":"GET /api/v1/market/{condition_id}/flow","href":"/api-reference/endpoint/get-market-flow"},{"title":"Batch market flow","openapi":"POST /api/v1/markets/flow/batch","href":"/api-reference/endpoint/batch-get-market-flow"},{"title":"Market intel (deprecated)","openapi":"GET /api/v1/market/{condition_id}/intel","href":"/api-reference/endpoint/get-market-intel"},{"title":"Batch market intel (deprecated)","openapi":"POST /api/v1/markets/intel/batch","href":"/api-reference/endpoint/batch-get-market-intel"},{"title":"Market snapshot","openapi":"GET /api/v1/market/{condition_id}/snapshot","href":"/api-reference/endpoint/get-market-snapshot"},{"title":"Market context as Markdown","openapi":"GET /api/v1/market/{condition_id}/context.md","href":"/api-reference/endpoint/get-market-context-markdown"},{"title":"Market holders","openapi":"GET /api/v1/market/{condition_id}/holders","href":"/api-reference/endpoint/get-market-holders"},{"title":"Market top holders","openapi":"GET /api/v1/market/{condition_id}/top-holders","href":"/api-reference/endpoint/get-market-top-holders"},{"title":"Market closing line","openapi":"GET /api/v1/market/{condition_id}/close","href":"/api-reference/endpoint/get-market-close"},{"title":"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","description":"Inspect a webhook's deliveries, failures, and scheduled retries.","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","description":"Sends one large trade per delivery, with its market, wallet, grade, size, price, and trade time.","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":"Redeliver a webhook delivery - 0xinsider API","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}