0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.
Selects the 2026-10 response contract. Send 2026-10-01; any dated version on or after it selects the same shapes. Without the header every response keeps its existing shape. With it:
The data quality routes, /v1/status/coverage and /v1/symbols answer the standard {success, data, meta} envelope.
Record times that are integer milliseconds by default become RFC 3339 UTC strings with millisecond precision, and the integer moves to a *_ms field: L4 resting-order timestamp (timestamp_ms), CVD buckets, HIP-3 oracle reads, Lighter and Lighter on Robinhood Chain liquidations and liquidation volume. Levels and trigger-levels snapshot_ts become RFC 3339 with snapshot_ts_ms.
Error bodies carry the contract error_code names: invalid_parameter instead of invalid_query_params and invalid_path_params, historical_depth_exceeded instead of history_window_exceeded, and historical_range_exceeded instead of request_range_exceeded; a malformed cursor that fails to parse answers 400 invalid_cursor instead of invalid_query_params. With 0xArchive-Version: 2026-10-01, malformed cursors on trades, liquidations, L2 and L4 diffs, order history, TP/SL and order-flow routes answer 400 invalid_cursor. Without the header, the first six route families treat a malformed cursor as no cursor and return the first page; order flow answers 400 invalid_query_params. Malformed trade time inputs answer 400 invalid_time_range with the header and 400 invalid_query_params without it.
The response echoes the selected version in its own 0xArchive-Version header.
Available options:
2026-10-01
Example:
"2026-10-01"
Body
application/json
A would-be subscription to evaluate against history. Same shape as a create, without the endpoint, plus the window.
Venue or venues to match, from the event type's venues list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.
Parameter values for the event type, keyed by the parameter names it declares. A declared parameter you leave out is stored at its default. A declared parameter may also be written at the top level of the config.
What to compare against. A number, string, boolean or RFC 3339 timestamp for a single value comparison; a two entry [low, high] list for between and not_between; a non-empty list for in and not_in. Omitted for is_empty and is_not_empty.
Shorthand for a notional_usd at-or-above condition, kept for compatibility. It is stored as a condition, and it is mirrored back here as the loosest notional lower bound the config carries.
Venue or venues to match, from the event type's venues list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.
Parameter values for the event type, keyed by the parameter names it declares. A declared parameter you leave out is stored at its default. A declared parameter may also be written at the top level of the config.
What to compare against. A number, string, boolean or RFC 3339 timestamp for a single value comparison; a two entry [low, high] list for between and not_between; a non-empty list for in and not_in. Omitted for is_empty and is_not_empty.
Shorthand for a notional_usd at-or-above condition, kept for compatibility. It is stored as a condition, and it is mirrored back here as the loosest notional lower bound the config carries.
Days of history to evaluate, ending now. Between 1 and 30; a value outside that range is refused with a 400. Some event types evaluate a shorter window (for example 7 days for account.fill); the response's days and basis.note then say so.
exact counted every occurrence in the window. sampled scaled the counts from a capped scan, and the note says by how much. replayed re-ran a windowed rule over history at your own parameters.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"0xArchive","description":"Hyperliquid and Lighter market data through the REST API, WebSocket, Webhook Alerts, and Bulk Exports. Start with your first request on the Free plan.","colors":{"primary":"#15803D","light":"#21C55E","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/0xarchive-e895b8e7/_8ck-oUq6ufsot88/logo-light.svg?fit=max\u0026auto=format\u0026n=_8ck-oUq6ufsot88\u0026q=85\u0026s=125ef51299181bd38460b33344f30ff5","dark":"https://mintcdn.com/0xarchive-e895b8e7/_8ck-oUq6ufsot88/logo-dark.svg?fit=max\u0026auto=format\u0026n=_8ck-oUq6ufsot88\u0026q=85\u0026s=829b1f9b3638e20a5c6bc6032ab00025","href":"https://0xarchive.io/?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=logo_home"},"favicon":"https://mintcdn.com/0xarchive-e895b8e7/_8ck-oUq6ufsot88/favicon.svg?fit=max\u0026auto=format\u0026n=_8ck-oUq6ufsot88\u0026q=85\u0026s=df84c8913362b83bdf0443dd4b49a717","api":{"openapi":{"source":"openapi.json","directory":"api-reference"},"params":{"expanded":"all"},"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript","go"],"prefill":true,"autogenerate":true},"url":"full"},"appearance":{"default":"dark","strict":false},"navbar":{"links":[{"href":"https://0xarchive.io/pricing?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=navbar_pricing","label":"Pricing"},{"href":"https://0xarchive.io/status?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=navbar_status","label":"Status"},{"href":"https://0xarchive.io/changelog?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=navbar_changelog","label":"Changelog"},{"href":"https://github.com/0xArchiveIO","label":"GitHub"}],"primary":{"type":"button","label":"Dashboard","href":"https://0xarchive.io/dashboard?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=navbar_dashboard"}},"footer":{"socials":{"x":"https://x.com/0xarchiveIo","github":"https://github.com/0xArchiveIO","telegram":"https://t.me/archivedotio","linkedin":"https://www.linkedin.com/company/0xarchive"},"links":[{"header":"Product","items":[{"label":"Pricing","href":"https://0xarchive.io/pricing?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_pricing"},{"label":"Status","href":"https://0xarchive.io/status?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_status"},{"label":"Data Catalog","href":"https://0xarchive.io/data?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_data_catalog"},{"label":"Dashboard","href":"https://0xarchive.io/dashboard?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_dashboard"}]},{"header":"Developers","items":[{"label":"Data rights","href":"/data-rights"},{"label":"AI clients","href":"/ai-clients"},{"label":"Coding agents","href":"/coding-agents"},{"label":"Choose an interface","href":"/tooling"}]},{"header":"Resources","items":[{"label":"Reference","href":"/reference"},{"label":"OpenAPI","href":"/openapi"},{"label":"Recommendations","href":"/recommendations"},{"label":"Free crypto data API","href":"/free-crypto-data-api"},{"label":"Sitemap","href":"/sitemap"},{"label":"llms.txt","href":"/llms.txt"},{"label":"llms-full.txt","href":"/llms-full.txt"},{"label":"Resources","href":"https://0xarchive.io/resources?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_blog"}]},{"header":"Company","items":[{"label":"Home","href":"https://0xarchive.io/?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_home"},{"label":"Contact","href":"https://0xarchive.io/contact?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_contact"},{"label":"Terms","href":"https://0xarchive.io/terms?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_terms"},{"label":"Privacy","href":"https://0xarchive.io/privacy?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_nav\u0026utm_content=footer_privacy"}]}]},"search":{"prompt":"Search routes, symbols, SDKs, WebSocket replay, and data quality"},"seo":{"metatags":{"canonical":"https://docs.0xarchive.io","og:site_name":"0xArchive Docs","og:type":"website","twitter:card":"summary_large_image","twitter:site":"@0xarchiveIo","google-site-verification":"Hpedp6bedqc3av1195euaGMwyFEVHcJhcyUY9YiMvTY"},"organization":{"id":"https://0xarchive.io/#organization","name":"0xArchive","legalName":"Archive Labs Inc.","url":"https://0xarchive.io/","logo":"https://0xarchive.io/logo-square-1024.png","sameAs":["https://x.com/0xarchiveIo","https://github.com/0xArchiveIO","https://t.me/archivedotio","https://www.linkedin.com/company/0xarchive/"]},"indexing":"all"},"fonts":{"family":"Geist","source":"fonts/geist-variable.woff2","format":"woff2"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"github-dark"},"latex":true},"errors":{"404":{"redirect":false,"title":"Page not found","description":"Open the quickstart, REST reference, or search the docs for the route you need."}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","perplexity","cursor","vscode","windsurf","grok","devin","aistudio"],"display":"header"},"thumbnails":{"background":"https://mintcdn.com/0xarchive-e895b8e7/ZmnWL31Kq8lGIdPW/images/og-background.svg?fit=max\u0026auto=format\u0026n=ZmnWL31Kq8lGIdPW\u0026q=85\u0026s=802efd004c3811d20f873d5f00c5ef32"},"metadata":{"timestamp":true},"markdown":{"schema":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"0xarchive-e895b8e7","hasAudioNarration":false,"actualSubdomain":"0xarchive-e895b8e7","customDomains":["docs.0xarchive.io"],"gitSource":{"type":"github","owner":"0xarchiveio","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea19b7fb19e826efc55a2b","collectionId":"d8b1f375-18ee-4c1c-9493-b62f9a952505","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea19b7fb19e826efc55a2b"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea19b7fb19e826efc55a2b","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"REST API","count":478},{"language":"default","tag":"OpenAPI and schemas","count":230},{"language":"default","tag":"Operation schemas","count":225},{"language":"default","tag":"Endpoint reference","count":213},{"language":"default","tag":"HIP-3","count":94},{"language":"default","tag":"Hyperliquid core","count":90},{"language":"default","tag":"Terminal","count":84},{"language":"default","tag":"Lighter","count":60},{"language":"default","tag":"Webhook Alerts","count":53},{"language":"default","tag":"HIP-4","count":52}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","href":"/_mintlify/custom/0xarchive-e895b8e7/4b473e296a6c1d39/styles.css"}],"page":{"pagePath":"api-reference/webhooks--previews/estimate-a-webhook-subscription","slug":"/api-reference/webhooks--previews/estimate-a-webhook-subscription","pageMetadata":{"title":"Estimate a webhook subscription","description":"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/estimate","href":"/api-reference/webhooks--previews/estimate-a-webhook-subscription","autogeneratedByOpenApi":true},"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: \"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\"\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`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Info}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Info)_missingMdxReference(`Info`,true);return _jsxs(_Fragment,{children:[_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`API key required.`}),` Send `,_jsx(_components.code,{children:`X-API-Key`}),` with this request. See `,_jsx(_components.a,{href:`/rest-api/authentication`,children:`REST authentication`}),`.`]})}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/schemas/operations/estimate-webhook-subscription`,children:`Operation schema`})}),`\n`,_jsx(Accordion,{title:`Shared request rules`,id:`shared-request-rules`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/rate-limits`,children:`Rate limits and credits`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/responses`,children:`HTTP responses and status codes`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/errors`,children:`Errors and request IDs`})}),`\n`]})}),`\n`,_jsx(Accordion,{title:`Machine schema`,id:`machine-schema`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/schemas/operations/estimate-webhook-subscription`,children:`Open the generated operation schema`}),` for machine-readable request and response details.`]})})]})}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":{"codeStyling":{"theme":"github-dark"},"config":{},"pageMetadata":{"title":"Estimate a webhook subscription","description":"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/estimate","href":"/api-reference/webhooks--previews/estimate-a-webhook-subscription","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/0xarchive-e895b8e7/7de7178c454c8311/analytics-delayed.js","/_mintlify/custom/0xarchive-e895b8e7/64d76990ea4d1101/ahrefs-analytics.js","/_mintlify/custom/0xarchive-e895b8e7/9c04a5e34ef7363a/assistant-ui.js","/_mintlify/custom/0xarchive-e895b8e7/ae934b733ebeac03/single-public-docs.js","/_mintlify/custom/0xarchive-e895b8e7/ab832e8be54292e5/webhooks-anchors.js"],"openApiReferenceData":{"operation":{"tags":["Webhooks - Previews"],"summary":"Estimate a webhook subscription","description":"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.","operationId":"estimateWebhookSubscription","requestBody":"097b45da-9b12-44e6-baeb-5f78a1cd5ef8","responses":{"200":"da08de5d-ffa7-4c61-b718-e3136fd8fa53","400":"3d7c3c3c-bcda-4516-9b03-da800713755d","401":"2934c3d3-3695-487c-8b62-778b24cf81a0","429":"a828120a-1f9e-4bef-9d28-7bcbe7868fa6","503":"5f06058e-b7ca-458f-b64a-9c682fbf6705","default":"991bd2b9-4100-485f-8e6d-d41ff83ec5ec"},"x-hidden":true,"x-mint":{"content":"\u003cInfo>\n **API key required.** Send `X-API-Key` with this request. See [REST authentication](/rest-api/authentication).\n\u003c/Info>\n\n[Operation schema](/schemas/operations/estimate-webhook-subscription)\n\n\u003cAccordion title=\"Shared request rules\">\n - [Rate limits and credits](/rate-limits)\n - [HTTP responses and status codes](/responses)\n - [Errors and request IDs](/errors)\n\u003c/Accordion>\n\n\u003cAccordion title=\"Machine schema\">\n [Open the generated operation schema](/schemas/operations/estimate-webhook-subscription) for machine-readable request and response details.\n\u003c/Accordion>","metadata":{"description":"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes."}},"method":"post","type":"path","servers":["afa1230c-1573-4566-9e9a-40f758adb7f2"],"security":["b5f63b2d-d545-4c2d-99b7-ab24e07d269d"],"path":"/v1/webhooks/subscriptions/estimate","baseUrlOptions":["https://api.0xarchive.io"],"title":"Estimate a webhook subscription","codeSamples":[],"requestExampleLanguages":["bash","python","javascript","go"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.event_type":"market.liquidation","body.config.venue.oneOf.0":"hyperliquid","body.config.symbols.items.0":"BTC","body.config.symbols.items.1":"ETH","body.config.addresses.items.0":"0x6b9e773128f453f5c2c60935ee2de2cbc5390a24","body.config.params":{"max_age_s":3600},"body.config.conditions.items.0.metric":"notional_usd","body.config.conditions.items.0.op":"greater_than_or_equal","body.config.conditions.items.0.value":100000,"body.config.min_notional_usd":100000,"body.filters.venue.oneOf.0":"hyperliquid","body.filters.symbols.items.0":"BTC","body.filters.symbols.items.1":"ETH","body.filters.addresses.items.0":"0x6b9e773128f453f5c2c60935ee2de2cbc5390a24","body.filters.params":{"max_age_s":3600},"body.filters.conditions.items.0.metric":"notional_usd","body.filters.conditions.items.0.op":"greater_than_or_equal","body.filters.conditions.items.0.value":100000,"body.filters.min_notional_usd":100000,"body.lookback_days":7}],"urlDisplay":"full"},"dependencies":{"parameters":{"7279f798-54d8-4ad5-8f80-75fffca8d95b":{"name":"0xArchive-Version","in":"header","required":false,"description":"Selects the 2026-10 response contract. Send `2026-10-01`; any dated version on or after it selects the same shapes. Without the header every response keeps its existing shape. With it:\n\n- The data quality routes, `/v1/status/coverage` and `/v1/symbols` answer the standard `{success, data, meta}` envelope.\n- Record times that are integer milliseconds by default become RFC 3339 UTC strings with millisecond precision, and the integer moves to a `*_ms` field: L4 resting-order `timestamp` (`timestamp_ms`), CVD buckets, HIP-3 oracle reads, Lighter and Lighter on Robinhood Chain liquidations and liquidation volume. Levels and trigger-levels `snapshot_ts` become RFC 3339 with `snapshot_ts_ms`.\n- Error bodies carry the contract `error_code` names: `invalid_parameter` instead of `invalid_query_params` and `invalid_path_params`, `historical_depth_exceeded` instead of `history_window_exceeded`, and `historical_range_exceeded` instead of `request_range_exceeded`; a malformed cursor that fails to parse answers 400 `invalid_cursor` instead of `invalid_query_params`. With `0xArchive-Version: 2026-10-01`, malformed cursors on trades, liquidations, L2 and L4 diffs, order history, TP/SL and order-flow routes answer 400 `invalid_cursor`. Without the header, the first six route families treat a malformed cursor as no cursor and return the first page; order flow answers 400 `invalid_query_params`. Malformed trade time inputs answer 400 `invalid_time_range` with the header and 400 `invalid_query_params` without it.\n\nThe response echoes the selected version in its own `0xArchive-Version` header.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01","isRequired":false,"description":"Selects the 2026-10 response contract. Send `2026-10-01`; any dated version on or after it selects the same shapes. Without the header every response keeps its existing shape. With it:\n\n- The data quality routes, `/v1/status/coverage` and `/v1/symbols` answer the standard `{success, data, meta}` envelope.\n- Record times that are integer milliseconds by default become RFC 3339 UTC strings with millisecond precision, and the integer moves to a `*_ms` field: L4 resting-order `timestamp` (`timestamp_ms`), CVD buckets, HIP-3 oracle reads, Lighter and Lighter on Robinhood Chain liquidations and liquidation volume. Levels and trigger-levels `snapshot_ts` become RFC 3339 with `snapshot_ts_ms`.\n- Error bodies carry the contract `error_code` names: `invalid_parameter` instead of `invalid_query_params` and `invalid_path_params`, `historical_depth_exceeded` instead of `history_window_exceeded`, and `historical_range_exceeded` instead of `request_range_exceeded`; a malformed cursor that fails to parse answers 400 `invalid_cursor` instead of `invalid_query_params`. With `0xArchive-Version: 2026-10-01`, malformed cursors on trades, liquidations, L2 and L4 diffs, order history, TP/SL and order-flow routes answer 400 `invalid_cursor`. Without the header, the first six route families treat a malformed cursor as no cursor and return the first page; order flow answers 400 `invalid_query_params`. Malformed trade time inputs answer 400 `invalid_time_range` with the header and 400 `invalid_query_params` without it.\n\nThe response echoes the selected version in its own `0xArchive-Version` header.","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A would-be subscription to evaluate against history. Same shape as a create, without the endpoint, plus the window.","required":["event_type"],"properties":{"event_type":{"type":"string","description":"Event type to evaluate.","example":"market.liquidation","isRequired":true,"uniqueKey":"event_type","typeLabel":"string"},"config":{"type":"object","description":"Rule configuration to evaluate. `filters` is accepted as an alias.","properties":{"venue":{"oneOf":[{"type":"string","description":"Venue or venues to match, from the event type's `venues` list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.","example":"hyperliquid","uniqueKey":"config.venue.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"config.venue.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Venue or venues to match, from the event type's `venues` list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.","example":"hyperliquid","uniqueKey":"config.venue.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"config.venue","typeLabel":"string | string[]"},"symbols":{"type":"array","items":{"type":"string","uniqueKey":"config.symbols.items.[INDEX]","typeLabel":"string"},"description":"Instrument symbols to match. Omit to match every symbol.","example":["BTC","ETH"],"uniqueKey":"config.symbols","typeLabel":"string[]"},"addresses":{"type":"array","items":{"type":"string","uniqueKey":"config.addresses.items.[INDEX]","typeLabel":"string"},"description":"Wallets to match, for an address scoped event type. Every address must already be on your watched list. Omit to match all of them.","example":["0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"],"uniqueKey":"config.addresses","typeLabel":"string[]"},"params":{"type":"object","additionalProperties":true,"description":"Parameter values for the event type, keyed by the parameter names it declares. A declared parameter you leave out is stored at its default. A declared parameter may also be written at the top level of the config.","example":{"max_age_s":3600},"uniqueKey":"config.params","typeLabel":"object"},"conditions":{"type":"array","items":{"type":"object","description":"One condition on an event metric. The operator vocabulary is grouped by the metric's type; see `operators` on the event type.","required":["metric","op"],"properties":{"metric":{"type":"string","description":"A metric declared by the event type.","example":"notional_usd","isRequired":true,"uniqueKey":"config.conditions.items.[INDEX].metric","typeLabel":"string"},"op":{"type":"string","enum":["greater_than","greater_than_or_equal","less_than","less_than_or_equal","equal","not_equal","between","not_between","in","not_in","contains","not_contains","starts_with","ends_with","before","after","is_empty","is_not_empty"],"description":"Comparison to apply. Symbol spellings such as `>=` are accepted on the way in and stored in the canonical spelling shown here.","example":"greater_than_or_equal","isRequired":true,"uniqueKey":"config.conditions.items.[INDEX].op","typeLabel":"enum\u003cstring>"},"value":{"description":"What to compare against. A number, string, boolean or RFC 3339 timestamp for a single value comparison; a two entry `[low, high]` list for `between` and `not_between`; a non-empty list for `in` and `not_in`. Omitted for `is_empty` and `is_not_empty`.","example":100000,"uniqueKey":"config.conditions.items.[INDEX].value","typeLabel":"any"}},"uniqueKey":"config.conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions on the event's metrics, all of which must hold for a delivery. At most 16 per subscription.","uniqueKey":"config.conditions","typeLabel":"object[]"},"min_notional_usd":{"type":"number","description":"Shorthand for a `notional_usd` at-or-above condition, kept for compatibility. It is stored as a condition, and it is mirrored back here as the loosest notional lower bound the config carries.","example":100000,"uniqueKey":"config.min_notional_usd","typeLabel":"number"}},"uniqueKey":"config","typeLabel":"object"},"filters":{"type":"object","description":"Alias of `config`. Send one or the other.","properties":{"venue":{"oneOf":[{"type":"string","description":"Venue or venues to match, from the event type's `venues` list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.","example":"hyperliquid","uniqueKey":"filters.venue.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"filters.venue.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Venue or venues to match, from the event type's `venues` list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.","example":"hyperliquid","uniqueKey":"filters.venue.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"filters.venue","typeLabel":"string | string[]"},"symbols":{"type":"array","items":{"type":"string","uniqueKey":"filters.symbols.items.[INDEX]","typeLabel":"string"},"description":"Instrument symbols to match. Omit to match every symbol.","example":["BTC","ETH"],"uniqueKey":"filters.symbols","typeLabel":"string[]"},"addresses":{"type":"array","items":{"type":"string","uniqueKey":"filters.addresses.items.[INDEX]","typeLabel":"string"},"description":"Wallets to match, for an address scoped event type. Every address must already be on your watched list. Omit to match all of them.","example":["0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"],"uniqueKey":"filters.addresses","typeLabel":"string[]"},"params":{"type":"object","additionalProperties":true,"description":"Parameter values for the event type, keyed by the parameter names it declares. A declared parameter you leave out is stored at its default. A declared parameter may also be written at the top level of the config.","example":{"max_age_s":3600},"uniqueKey":"filters.params","typeLabel":"object"},"conditions":{"type":"array","items":{"type":"object","description":"One condition on an event metric. The operator vocabulary is grouped by the metric's type; see `operators` on the event type.","required":["metric","op"],"properties":{"metric":{"type":"string","description":"A metric declared by the event type.","example":"notional_usd","isRequired":true,"uniqueKey":"filters.conditions.items.[INDEX].metric","typeLabel":"string"},"op":{"type":"string","enum":["greater_than","greater_than_or_equal","less_than","less_than_or_equal","equal","not_equal","between","not_between","in","not_in","contains","not_contains","starts_with","ends_with","before","after","is_empty","is_not_empty"],"description":"Comparison to apply. Symbol spellings such as `>=` are accepted on the way in and stored in the canonical spelling shown here.","example":"greater_than_or_equal","isRequired":true,"uniqueKey":"filters.conditions.items.[INDEX].op","typeLabel":"enum\u003cstring>"},"value":{"description":"What to compare against. A number, string, boolean or RFC 3339 timestamp for a single value comparison; a two entry `[low, high]` list for `between` and `not_between`; a non-empty list for `in` and `not_in`. Omitted for `is_empty` and `is_not_empty`.","example":100000,"uniqueKey":"filters.conditions.items.[INDEX].value","typeLabel":"any"}},"uniqueKey":"filters.conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions on the event's metrics, all of which must hold for a delivery. At most 16 per subscription.","uniqueKey":"filters.conditions","typeLabel":"object[]"},"min_notional_usd":{"type":"number","description":"Shorthand for a `notional_usd` at-or-above condition, kept for compatibility. It is stored as a condition, and it is mirrored back here as the loosest notional lower bound the config carries.","example":100000,"uniqueKey":"filters.min_notional_usd","typeLabel":"number"}},"uniqueKey":"filters","typeLabel":"object"},"lookback_days":{"type":"integer","format":"int64","description":"Days of history to evaluate, ending now. Between 1 and 30; a value outside that range is refused with a 400. Some event types evaluate a shorter window (for example 7 days for `account.fill`); the response's `days` and `basis.note` then say so.","default":7,"minimum":1,"maximum":30,"example":7,"uniqueKey":"lookback_days","typeLabel":"integer\u003cint64>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"event_type":"market.liquidation","config":{"venue":"hyperliquid","symbols":["BTC","ETH"],"addresses":["0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"],"params":{"max_age_s":3600},"conditions":[{"metric":"notional_usd","op":"greater_than_or_equal","value":100000}],"min_notional_usd":100000},"filters":{"venue":"hyperliquid","symbols":["BTC","ETH"],"addresses":["0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"],"params":{"max_age_s":3600},"conditions":[{"metric":"notional_usd","op":"greater_than_or_equal","value":100000}],"min_notional_usd":100000},"lookback_days":7}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"da08de5d-ffa7-4c61-b718-e3136fd8fa53":{"description":"How often the configuration would have fired","content":{"application/json":{"schema":{"type":"object","description":"API response containing a subscription estimate.","properties":{"success":{"type":"boolean","example":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","description":"How often a would-be subscription would have fired over the requested window. Nothing is stored and no delivery is sent.","required":["event_type","window","days","total","per_day","per_day_p50","per_day_max","ladder","sample","basis"],"properties":{"event_type":{"type":"string","description":"Event type that was evaluated.","example":"market.liquidation","isRequired":true,"uniqueKey":"data.event_type","typeLabel":"string"},"window":{"type":"object","description":"The window a preview vouches for. It can start later than the one that was asked for when a scan reached its row cap.","required":["from","to"],"properties":{"from":{"type":"string","format":"date-time","description":"Start of the window the answer covers.","isRequired":true,"uniqueKey":"data.window.from","typeLabel":"string\u003cdate-time>"},"to":{"type":"string","format":"date-time","description":"End of the window, which is the moment of the request.","isRequired":true,"uniqueKey":"data.window.to","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data.window","typeLabel":"object"},"days":{"type":"integer","format":"int64","description":"Days the answer covers. Shorter than requested when the event type carries a shorter cap.","example":7,"isRequired":true,"uniqueKey":"data.days","typeLabel":"integer\u003cint64>"},"total":{"type":"integer","format":"int64","description":"Occurrences that would have been delivered across the window.","example":84,"isRequired":true,"uniqueKey":"data.total","typeLabel":"integer\u003cint64>"},"per_day":{"type":"array","items":{"type":"object","description":"One 24 hour bin of the estimate window.","required":["date","count"],"properties":{"date":{"type":"string","format":"date","description":"UTC date the bin ends on.","example":"2026-09-19","isRequired":true,"uniqueKey":"data.per_day.items.[INDEX].date","typeLabel":"string\u003cdate>"},"count":{"type":"integer","format":"int64","description":"Occurrences that would have been delivered in the bin.","example":12,"isRequired":true,"uniqueKey":"data.per_day.items.[INDEX].count","typeLabel":"integer\u003cint64>"}},"uniqueKey":"data.per_day.items.[INDEX]","typeLabel":"object"},"description":"One entry per day, oldest first, zero filled. The last entry ends at the moment of the request.","isRequired":true,"uniqueKey":"data.per_day","typeLabel":"object[]"},"per_day_p50":{"type":"number","description":"Median deliveries a day across the window.","example":11,"isRequired":true,"uniqueKey":"data.per_day_p50","typeLabel":"number"},"per_day_max":{"type":"integer","format":"int64","description":"Busiest day in the window.","example":26,"isRequired":true,"uniqueKey":"data.per_day_max","typeLabel":"integer\u003cint64>"},"ladder":{"type":"array","items":{"type":"object","description":"One rung of the threshold ladder: the daily rate the same configuration would have had at a different threshold.","required":["value","per_day"],"properties":{"value":{"type":"number","description":"Threshold on the primary metric.","example":250000,"isRequired":true,"uniqueKey":"data.ladder.items.[INDEX].value","typeLabel":"number"},"per_day":{"type":"number","description":"Deliveries a day at that threshold, everything else unchanged.","example":3.4,"isRequired":true,"uniqueKey":"data.ladder.items.[INDEX].per_day","typeLabel":"number"}},"uniqueKey":"data.ladder.items.[INDEX]","typeLabel":"object"},"description":"Ascending. Empty when there is no primary metric.","isRequired":true,"uniqueKey":"data.ladder","typeLabel":"object[]"},"sample":{"type":"array","items":{"type":"object","description":"One occurrence that would have been delivered, in the shape the delivered payload carries.","required":["observed_at_estimate","data"],"properties":{"observed_at_estimate":{"type":"string","format":"date-time","description":"The occurrence's own timestamp. A real delivery's `observed_at` is this plus the time it takes to see the occurrence.","isRequired":true,"uniqueKey":"data.sample.items.[INDEX].observed_at_estimate","typeLabel":"string\u003cdate-time>"},"data":{"type":"object","additionalProperties":true,"description":"The occurrence body, the same `data` a delivery would carry.","isRequired":true,"uniqueKey":"data.sample.items.[INDEX].data","typeLabel":"object"}},"uniqueKey":"data.sample.items.[INDEX]","typeLabel":"object"},"description":"Newest matches first, in the same shape the dry-run returns.","isRequired":true,"uniqueKey":"data.sample","typeLabel":"object[]"},"basis":{"type":"object","description":"How the estimate was produced, so the numbers can be read for what they are.","required":["mode"],"properties":{"mode":{"type":"string","enum":["exact","sampled","replayed"],"description":"`exact` counted every occurrence in the window. `sampled` scaled the counts from a capped scan, and the note says by how much. `replayed` re-ran a windowed rule over history at your own parameters.","example":"exact","isRequired":true,"uniqueKey":"data.basis.mode","typeLabel":"enum\u003cstring>"},"note":{"oneOf":[{"type":"string","description":"What qualifies the numbers, when anything does.","uniqueKey":"data.basis.note.oneOf.0","typeLabel":"string"},{"type":"null","description":"What qualifies the numbers, when anything does.","uniqueKey":"data.basis.note.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.basis.note","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.basis","typeLabel":"object"},"primary_metric":{"oneOf":[{"type":"string","description":"The metric the ladder and the distribution are about. Null when the type has none.","example":"notional_usd","uniqueKey":"data.primary_metric.oneOf.0","typeLabel":"string"},{"type":"null","description":"The metric the ladder and the distribution are about. Null when the type has none.","example":"notional_usd","uniqueKey":"data.primary_metric.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.primary_metric","typeLabel":"string | null"},"distribution":{"oneOf":[{"type":"object","description":"Quantiles of the primary metric. Null when the type has no primary metric or nothing matched.","required":["n","p50","p90","p99","max"],"properties":{"n":{"type":"integer","format":"int64","description":"Occurrences the quantiles are computed over.","example":842,"isRequired":true,"uniqueKey":"data.distribution.oneOf.0.n","typeLabel":"integer\u003cint64>"},"p50":{"type":"number","description":"Median.","example":18400,"isRequired":true,"uniqueKey":"data.distribution.oneOf.0.p50","typeLabel":"number"},"p90":{"type":"number","description":"90th percentile.","example":132000,"isRequired":true,"uniqueKey":"data.distribution.oneOf.0.p90","typeLabel":"number"},"p99":{"type":"number","description":"99th percentile.","example":910000,"isRequired":true,"uniqueKey":"data.distribution.oneOf.0.p99","typeLabel":"number"},"max":{"type":"number","description":"Largest value seen.","example":4210000,"isRequired":true,"uniqueKey":"data.distribution.oneOf.0.max","typeLabel":"number"}},"uniqueKey":"data.distribution.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.distribution.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.distribution","typeLabel":"object | null"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"event_type":"market.liquidation","window":{"from":"2023-11-07T05:31:56Z","to":"2023-11-07T05:31:56Z"},"days":7,"total":84,"per_day":[{"date":"2026-09-19","count":12}],"per_day_p50":11,"per_day_max":26,"ladder":[{"value":250000,"per_day":3.4}],"sample":[{"observed_at_estimate":"2023-11-07T05:31:56Z","data":{}}],"basis":{"mode":"exact","note":"\u003cstring>"},"primary_metric":"notional_usd","distribution":{"n":842,"p50":18400,"p90":132000,"p99":910000,"max":4210000}}}}},"exampleType":"generated"}},"headers":{"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"exampleType":"generated"},"3d7c3c3c-bcda-4516-9b03-da800713755d":{"description":"Invalid request: a parameter, symbol, interval, cursor or time range failed validation. See `error_code`.","content":{"application/json":{"schema":{"type":"object","description":"Body of every non-2xx JSON response. `code` repeats the HTTP status, `error_code` is the stable machine-readable code (see `ErrorCode`), `error` is a human-readable message, and `request_id` identifies the request for support. Validation failures add `param` and, where the accepted set is fixed, `valid_values`. A 404 for a datatype the venue does not offer (`unsupported_for_venue`) adds `venue`, `datatype` and `available_on`; any other unknown path answers 404 `route_not_found`.","required":["success","code","error_code","error","request_id"],"properties":{"success":{"type":"boolean","enum":[false],"description":"Always `false` on an error.","isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"code":{"type":"integer","description":"HTTP status code.","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"error_code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value, not on the `error` text.\n\n**Contract codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_parameter` | 400 | A parameter failed to parse or validate. `param` names it and `valid_values` lists accepted values where the set is fixed. |\n| `invalid_symbol` | 400 | The symbol is not listed on this venue. |\n| `invalid_interval` | 400 | The `interval` (bucket width) is not one this route accepts. |\n| `invalid_cursor` | 400 | The `cursor` is malformed, stale, or was issued for other filters. Restart pagination without a cursor. Trades, liquidations, L2 and L4 diffs, order history and TP/SL routes currently return the first page for a malformed cursor instead. |\n| `invalid_time_range` | 400 | `start` is after `end`, or a time value could not be parsed. |\n| `range_before_coverage` | 400 | The whole requested range ends before the first instant this dataset is served from. |\n| `historical_range_exceeded` | 403 | The requested span is longer than the plan allows in one request or replay. |\n| `historical_depth_exceeded` | 403 | The request reaches further back than the plan's history window. |\n| `unsupported_for_venue` | 404 | The venue does not offer this datatype. The message, `datatype` and `available_on` name where it is served. |\n| `route_not_found` | 404 | No route matches the path or method. `GET /v1/capabilities` lists the routes each venue serves. |\n| `not_found` | 404 | The route exists but the requested resource (for example an incident, endpoint or outcome id) does not. |\n| `unauthorized` | 401 | The API key is missing or invalid. |\n| `forbidden` | 403 | The key is valid but not allowed to make this request. |\n| `insufficient_credits` | 429 | The monthly credit allowance is spent (402 on pay-per-request routes). |\n| `rate_limited` | 429 | Too many requests or concurrent queries. Retry after the interval in the rate-limit headers. |\n| `conflict` | 409 | The request conflicts with the current state of the resource. |\n| `upstream_unavailable` | 503 | A dependency is unavailable or saturated. Retry shortly; the response carries `Retry-After`. |\n| `internal_error` | 500 | An unexpected server error. Quote `request_id` when contacting support. |\n\n**WebSocket only** (sent in `{\"type\":\"error\"}` messages, never by REST)\n\n| Code | Where | Meaning |\n|---|---|---|\n| `endpoint_unsupported` | WebSocket | This WebSocket endpoint does not serve the channel or operation. The message names the endpoint that does. |\n| `slow_consumer` | WebSocket | The connection fell behind a stream and messages were dropped. Re-subscribe, or restart the replay, to resynchronise. |\n\n**Route-specific codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `positions_unavailable` | 503 | Account positions are temporarily unavailable for this venue. |\n| `reconstruction_unavailable` | 503 | The as-of positions state for this instant cannot be reconstructed right now. |\n| `snapshot_advanced` | 409 | A positions market cursor pinned a snapshot that has since been replaced or expired. Restart pagination. |\n| `pagination_unavailable` | 503 | The next positions page cannot be served right now. Retry the same cursor shortly. |\n| `api_key_limit_reached` | 403 | The account already holds the maximum number of API keys for its plan. |\n| `wallet_requires_plan` | 402 | A wallet-authenticated key needs an active plan for this request. |\n| `wallet_account_required` | 403 | Wallet sign-in needs an existing account linked to the wallet. |\n| `wallet_free_signup_retired` | 410 | Free wallet sign-up is no longer offered. |\n| `account_disabled` | 403 | The account is disabled. |\n| `oauth_not_permitted` | 403 | This route is not available to OAuth access tokens. |\n| `insufficient_scope` | 403 | The OAuth access token lacks the scope this route requires. |\n\n**Legacy names.** Requests without `0xArchive-Version: 2026-10-01` keep the four names that predate the contract; with the header they receive the contract names instead.\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_query_params` | 400 | Legacy name of `invalid_parameter` (query parameter), or of `invalid_cursor` when the parameter is `cursor`, sent without the version header. |\n| `invalid_path_params` | 400 | Legacy name of `invalid_parameter` (path parameter), sent without the version header. |\n| `history_window_exceeded` | 403 | Legacy name of `historical_depth_exceeded`, sent without the version header. |\n| `request_range_exceeded` | 403 | Legacy name of `historical_range_exceeded`, sent without the version header. |\n\nTreat any value not listed here as a generic error of the HTTP status.","enum":["invalid_parameter","invalid_symbol","invalid_interval","invalid_cursor","invalid_time_range","range_before_coverage","historical_range_exceeded","historical_depth_exceeded","unsupported_for_venue","route_not_found","not_found","unauthorized","forbidden","insufficient_credits","rate_limited","conflict","upstream_unavailable","internal_error","endpoint_unsupported","slow_consumer","positions_unavailable","reconstruction_unavailable","snapshot_advanced","pagination_unavailable","api_key_limit_reached","wallet_requires_plan","wallet_account_required","wallet_free_signup_retired","account_disabled","oauth_not_permitted","insufficient_scope","invalid_query_params","invalid_path_params","history_window_exceeded","request_range_exceeded"],"example":"invalid_parameter","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Human-readable message. Wording can change; do not parse it.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Unique request ID for support.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"},"param":{"type":"string","description":"The parameter that failed validation, when one did.","example":"side","uniqueKey":"param","typeLabel":"string"},"valid_values":{"type":"array","items":{"type":"string","uniqueKey":"valid_values.items.[INDEX]","typeLabel":"string"},"description":"Accepted values of `param`, when the set is fixed.","example":["buy","sell"],"uniqueKey":"valid_values","typeLabel":"string[]"},"venue":{"type":"string","description":"`unsupported_for_venue` only: the venue the request asked.","example":"spot","uniqueKey":"venue","typeLabel":"string"},"datatype":{"type":"string","description":"`unsupported_for_venue` only: the datatype the request asked for, as `GET /v1/capabilities` names it.","example":"order_flow","uniqueKey":"datatype","typeLabel":"string"},"available_on":{"type":"array","description":"`unsupported_for_venue` only: the venues and routes that serve the datatype.","items":{"type":"object","required":["venue","route"],"properties":{"venue":{"type":"string","example":"hyperliquid","isRequired":true,"uniqueKey":"available_on.items.[INDEX].venue","typeLabel":"string"},"route":{"type":"string","example":"/v1/hyperliquid/orders/{symbol}/flow","isRequired":true,"uniqueKey":"available_on.items.[INDEX].route","typeLabel":"string"}},"uniqueKey":"available_on.items.[INDEX]","typeLabel":"object"},"uniqueKey":"available_on","typeLabel":"object[]"},"credits_used":{"type":"integer","format":"int64","description":"`insufficient_credits` only: credits used this period.","uniqueKey":"credits_used","typeLabel":"integer\u003cint64>"},"credits_limit":{"type":"integer","format":"int64","description":"`insufficient_credits` only: the period's credit allowance.","uniqueKey":"credits_limit","typeLabel":"integer\u003cint64>"},"max_concurrent":{"type":"integer","description":"`rate_limited` concurrency refusals only: simultaneous queries the plan allows.","uniqueKey":"max_concurrent","typeLabel":"integer"},"suggestion":{"type":"object","description":"Present when the symbol exists on another venue: where to request it instead.","properties":{"venue":{"type":"string","example":"hip3","uniqueKey":"suggestion.venue","typeLabel":"string"},"symbol":{"type":"string","example":"xyz:TSLA","uniqueKey":"suggestion.symbol","typeLabel":"string"},"endpoint":{"type":"string","example":"/v1/hyperliquid/hip3/trades/xyz:TSLA","uniqueKey":"suggestion.endpoint","typeLabel":"string"}},"uniqueKey":"suggestion","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_parameter":{"title":"invalid_parameter","value":{"success":false,"code":400,"error_code":"invalid_parameter","error":"Invalid side 'up'. Use buy or sell.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05","param":"side","valid_values":["buy","sell"]}},"invalid_symbol":{"title":"invalid_symbol","value":{"success":false,"code":400,"error_code":"invalid_symbol","error":"The symbol 'ZZZ' does not exist. Please see /v1/hyperliquid/instruments for available symbols.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05","param":"symbol"}},"invalid_time_range":{"title":"invalid_time_range","value":{"success":false,"code":400,"error_code":"invalid_time_range","error":"start must be \u003c= end","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}},"legacy_invalid_query_params":{"title":"legacy_invalid_query_params","value":{"success":false,"code":400,"error_code":"invalid_query_params","error":"Failed to deserialize query string: limit: invalid digit found in string","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}},"current_main":{"title":"current_main","value":{"code":400,"error":"Failed to deserialize query string: limit: invalid digit found in string","error_code":"invalid_query_params","param":"limit","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05","success":false}}},"exampleType":"examples"}},"headers":{"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"exampleType":"examples"},"2934c3d3-3695-487c-8b62-778b24cf81a0":{"description":"Authentication required: the API key is missing or invalid.","content":{"application/json":{"schema":{"type":"object","description":"Body of every non-2xx JSON response. `code` repeats the HTTP status, `error_code` is the stable machine-readable code (see `ErrorCode`), `error` is a human-readable message, and `request_id` identifies the request for support. Validation failures add `param` and, where the accepted set is fixed, `valid_values`. A 404 for a datatype the venue does not offer (`unsupported_for_venue`) adds `venue`, `datatype` and `available_on`; any other unknown path answers 404 `route_not_found`.","required":["success","code","error_code","error","request_id"],"properties":{"success":{"type":"boolean","enum":[false],"description":"Always `false` on an error.","isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"code":{"type":"integer","description":"HTTP status code.","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"error_code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value, not on the `error` text.\n\n**Contract codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_parameter` | 400 | A parameter failed to parse or validate. `param` names it and `valid_values` lists accepted values where the set is fixed. |\n| `invalid_symbol` | 400 | The symbol is not listed on this venue. |\n| `invalid_interval` | 400 | The `interval` (bucket width) is not one this route accepts. |\n| `invalid_cursor` | 400 | The `cursor` is malformed, stale, or was issued for other filters. Restart pagination without a cursor. Trades, liquidations, L2 and L4 diffs, order history and TP/SL routes currently return the first page for a malformed cursor instead. |\n| `invalid_time_range` | 400 | `start` is after `end`, or a time value could not be parsed. |\n| `range_before_coverage` | 400 | The whole requested range ends before the first instant this dataset is served from. |\n| `historical_range_exceeded` | 403 | The requested span is longer than the plan allows in one request or replay. |\n| `historical_depth_exceeded` | 403 | The request reaches further back than the plan's history window. |\n| `unsupported_for_venue` | 404 | The venue does not offer this datatype. The message, `datatype` and `available_on` name where it is served. |\n| `route_not_found` | 404 | No route matches the path or method. `GET /v1/capabilities` lists the routes each venue serves. |\n| `not_found` | 404 | The route exists but the requested resource (for example an incident, endpoint or outcome id) does not. |\n| `unauthorized` | 401 | The API key is missing or invalid. |\n| `forbidden` | 403 | The key is valid but not allowed to make this request. |\n| `insufficient_credits` | 429 | The monthly credit allowance is spent (402 on pay-per-request routes). |\n| `rate_limited` | 429 | Too many requests or concurrent queries. Retry after the interval in the rate-limit headers. |\n| `conflict` | 409 | The request conflicts with the current state of the resource. |\n| `upstream_unavailable` | 503 | A dependency is unavailable or saturated. Retry shortly; the response carries `Retry-After`. |\n| `internal_error` | 500 | An unexpected server error. Quote `request_id` when contacting support. |\n\n**WebSocket only** (sent in `{\"type\":\"error\"}` messages, never by REST)\n\n| Code | Where | Meaning |\n|---|---|---|\n| `endpoint_unsupported` | WebSocket | This WebSocket endpoint does not serve the channel or operation. The message names the endpoint that does. |\n| `slow_consumer` | WebSocket | The connection fell behind a stream and messages were dropped. Re-subscribe, or restart the replay, to resynchronise. |\n\n**Route-specific codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `positions_unavailable` | 503 | Account positions are temporarily unavailable for this venue. |\n| `reconstruction_unavailable` | 503 | The as-of positions state for this instant cannot be reconstructed right now. |\n| `snapshot_advanced` | 409 | A positions market cursor pinned a snapshot that has since been replaced or expired. Restart pagination. |\n| `pagination_unavailable` | 503 | The next positions page cannot be served right now. Retry the same cursor shortly. |\n| `api_key_limit_reached` | 403 | The account already holds the maximum number of API keys for its plan. |\n| `wallet_requires_plan` | 402 | A wallet-authenticated key needs an active plan for this request. |\n| `wallet_account_required` | 403 | Wallet sign-in needs an existing account linked to the wallet. |\n| `wallet_free_signup_retired` | 410 | Free wallet sign-up is no longer offered. |\n| `account_disabled` | 403 | The account is disabled. |\n| `oauth_not_permitted` | 403 | This route is not available to OAuth access tokens. |\n| `insufficient_scope` | 403 | The OAuth access token lacks the scope this route requires. |\n\n**Legacy names.** Requests without `0xArchive-Version: 2026-10-01` keep the four names that predate the contract; with the header they receive the contract names instead.\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_query_params` | 400 | Legacy name of `invalid_parameter` (query parameter), or of `invalid_cursor` when the parameter is `cursor`, sent without the version header. |\n| `invalid_path_params` | 400 | Legacy name of `invalid_parameter` (path parameter), sent without the version header. |\n| `history_window_exceeded` | 403 | Legacy name of `historical_depth_exceeded`, sent without the version header. |\n| `request_range_exceeded` | 403 | Legacy name of `historical_range_exceeded`, sent without the version header. |\n\nTreat any value not listed here as a generic error of the HTTP status.","enum":["invalid_parameter","invalid_symbol","invalid_interval","invalid_cursor","invalid_time_range","range_before_coverage","historical_range_exceeded","historical_depth_exceeded","unsupported_for_venue","route_not_found","not_found","unauthorized","forbidden","insufficient_credits","rate_limited","conflict","upstream_unavailable","internal_error","endpoint_unsupported","slow_consumer","positions_unavailable","reconstruction_unavailable","snapshot_advanced","pagination_unavailable","api_key_limit_reached","wallet_requires_plan","wallet_account_required","wallet_free_signup_retired","account_disabled","oauth_not_permitted","insufficient_scope","invalid_query_params","invalid_path_params","history_window_exceeded","request_range_exceeded"],"example":"invalid_parameter","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Human-readable message. Wording can change; do not parse it.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Unique request ID for support.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"},"param":{"type":"string","description":"The parameter that failed validation, when one did.","example":"side","uniqueKey":"param","typeLabel":"string"},"valid_values":{"type":"array","items":{"type":"string","uniqueKey":"valid_values.items.[INDEX]","typeLabel":"string"},"description":"Accepted values of `param`, when the set is fixed.","example":["buy","sell"],"uniqueKey":"valid_values","typeLabel":"string[]"},"venue":{"type":"string","description":"`unsupported_for_venue` only: the venue the request asked.","example":"spot","uniqueKey":"venue","typeLabel":"string"},"datatype":{"type":"string","description":"`unsupported_for_venue` only: the datatype the request asked for, as `GET /v1/capabilities` names it.","example":"order_flow","uniqueKey":"datatype","typeLabel":"string"},"available_on":{"type":"array","description":"`unsupported_for_venue` only: the venues and routes that serve the datatype.","items":{"type":"object","required":["venue","route"],"properties":{"venue":{"type":"string","example":"hyperliquid","isRequired":true,"uniqueKey":"available_on.items.[INDEX].venue","typeLabel":"string"},"route":{"type":"string","example":"/v1/hyperliquid/orders/{symbol}/flow","isRequired":true,"uniqueKey":"available_on.items.[INDEX].route","typeLabel":"string"}},"uniqueKey":"available_on.items.[INDEX]","typeLabel":"object"},"uniqueKey":"available_on","typeLabel":"object[]"},"credits_used":{"type":"integer","format":"int64","description":"`insufficient_credits` only: credits used this period.","uniqueKey":"credits_used","typeLabel":"integer\u003cint64>"},"credits_limit":{"type":"integer","format":"int64","description":"`insufficient_credits` only: the period's credit allowance.","uniqueKey":"credits_limit","typeLabel":"integer\u003cint64>"},"max_concurrent":{"type":"integer","description":"`rate_limited` concurrency refusals only: simultaneous queries the plan allows.","uniqueKey":"max_concurrent","typeLabel":"integer"},"suggestion":{"type":"object","description":"Present when the symbol exists on another venue: where to request it instead.","properties":{"venue":{"type":"string","example":"hip3","uniqueKey":"suggestion.venue","typeLabel":"string"},"symbol":{"type":"string","example":"xyz:TSLA","uniqueKey":"suggestion.symbol","typeLabel":"string"},"endpoint":{"type":"string","example":"/v1/hyperliquid/hip3/trades/xyz:TSLA","uniqueKey":"suggestion.endpoint","typeLabel":"string"}},"uniqueKey":"suggestion","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"code":401,"error_code":"unauthorized","error":"Missing authentication credentials. Provide X-API-Key header or Bearer token.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"},"examples":{"Example":{"title":"Example","value":{"success":false,"code":401,"error_code":"unauthorized","error":"Missing authentication credentials. Provide X-API-Key header or Bearer token.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}}},"exampleType":"examples"}},"headers":{"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"exampleType":"examples"},"a828120a-1f9e-4bef-9d28-7bcbe7868fa6":{"description":"Rate limit, concurrency limit or monthly credits exceeded. See `error_code`.","content":{"application/json":{"schema":{"type":"object","description":"Body of every non-2xx JSON response. `code` repeats the HTTP status, `error_code` is the stable machine-readable code (see `ErrorCode`), `error` is a human-readable message, and `request_id` identifies the request for support. Validation failures add `param` and, where the accepted set is fixed, `valid_values`. A 404 for a datatype the venue does not offer (`unsupported_for_venue`) adds `venue`, `datatype` and `available_on`; any other unknown path answers 404 `route_not_found`.","required":["success","code","error_code","error","request_id"],"properties":{"success":{"type":"boolean","enum":[false],"description":"Always `false` on an error.","isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"code":{"type":"integer","description":"HTTP status code.","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"error_code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value, not on the `error` text.\n\n**Contract codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_parameter` | 400 | A parameter failed to parse or validate. `param` names it and `valid_values` lists accepted values where the set is fixed. |\n| `invalid_symbol` | 400 | The symbol is not listed on this venue. |\n| `invalid_interval` | 400 | The `interval` (bucket width) is not one this route accepts. |\n| `invalid_cursor` | 400 | The `cursor` is malformed, stale, or was issued for other filters. Restart pagination without a cursor. Trades, liquidations, L2 and L4 diffs, order history and TP/SL routes currently return the first page for a malformed cursor instead. |\n| `invalid_time_range` | 400 | `start` is after `end`, or a time value could not be parsed. |\n| `range_before_coverage` | 400 | The whole requested range ends before the first instant this dataset is served from. |\n| `historical_range_exceeded` | 403 | The requested span is longer than the plan allows in one request or replay. |\n| `historical_depth_exceeded` | 403 | The request reaches further back than the plan's history window. |\n| `unsupported_for_venue` | 404 | The venue does not offer this datatype. The message, `datatype` and `available_on` name where it is served. |\n| `route_not_found` | 404 | No route matches the path or method. `GET /v1/capabilities` lists the routes each venue serves. |\n| `not_found` | 404 | The route exists but the requested resource (for example an incident, endpoint or outcome id) does not. |\n| `unauthorized` | 401 | The API key is missing or invalid. |\n| `forbidden` | 403 | The key is valid but not allowed to make this request. |\n| `insufficient_credits` | 429 | The monthly credit allowance is spent (402 on pay-per-request routes). |\n| `rate_limited` | 429 | Too many requests or concurrent queries. Retry after the interval in the rate-limit headers. |\n| `conflict` | 409 | The request conflicts with the current state of the resource. |\n| `upstream_unavailable` | 503 | A dependency is unavailable or saturated. Retry shortly; the response carries `Retry-After`. |\n| `internal_error` | 500 | An unexpected server error. Quote `request_id` when contacting support. |\n\n**WebSocket only** (sent in `{\"type\":\"error\"}` messages, never by REST)\n\n| Code | Where | Meaning |\n|---|---|---|\n| `endpoint_unsupported` | WebSocket | This WebSocket endpoint does not serve the channel or operation. The message names the endpoint that does. |\n| `slow_consumer` | WebSocket | The connection fell behind a stream and messages were dropped. Re-subscribe, or restart the replay, to resynchronise. |\n\n**Route-specific codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `positions_unavailable` | 503 | Account positions are temporarily unavailable for this venue. |\n| `reconstruction_unavailable` | 503 | The as-of positions state for this instant cannot be reconstructed right now. |\n| `snapshot_advanced` | 409 | A positions market cursor pinned a snapshot that has since been replaced or expired. Restart pagination. |\n| `pagination_unavailable` | 503 | The next positions page cannot be served right now. Retry the same cursor shortly. |\n| `api_key_limit_reached` | 403 | The account already holds the maximum number of API keys for its plan. |\n| `wallet_requires_plan` | 402 | A wallet-authenticated key needs an active plan for this request. |\n| `wallet_account_required` | 403 | Wallet sign-in needs an existing account linked to the wallet. |\n| `wallet_free_signup_retired` | 410 | Free wallet sign-up is no longer offered. |\n| `account_disabled` | 403 | The account is disabled. |\n| `oauth_not_permitted` | 403 | This route is not available to OAuth access tokens. |\n| `insufficient_scope` | 403 | The OAuth access token lacks the scope this route requires. |\n\n**Legacy names.** Requests without `0xArchive-Version: 2026-10-01` keep the four names that predate the contract; with the header they receive the contract names instead.\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_query_params` | 400 | Legacy name of `invalid_parameter` (query parameter), or of `invalid_cursor` when the parameter is `cursor`, sent without the version header. |\n| `invalid_path_params` | 400 | Legacy name of `invalid_parameter` (path parameter), sent without the version header. |\n| `history_window_exceeded` | 403 | Legacy name of `historical_depth_exceeded`, sent without the version header. |\n| `request_range_exceeded` | 403 | Legacy name of `historical_range_exceeded`, sent without the version header. |\n\nTreat any value not listed here as a generic error of the HTTP status.","enum":["invalid_parameter","invalid_symbol","invalid_interval","invalid_cursor","invalid_time_range","range_before_coverage","historical_range_exceeded","historical_depth_exceeded","unsupported_for_venue","route_not_found","not_found","unauthorized","forbidden","insufficient_credits","rate_limited","conflict","upstream_unavailable","internal_error","endpoint_unsupported","slow_consumer","positions_unavailable","reconstruction_unavailable","snapshot_advanced","pagination_unavailable","api_key_limit_reached","wallet_requires_plan","wallet_account_required","wallet_free_signup_retired","account_disabled","oauth_not_permitted","insufficient_scope","invalid_query_params","invalid_path_params","history_window_exceeded","request_range_exceeded"],"example":"invalid_parameter","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Human-readable message. Wording can change; do not parse it.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Unique request ID for support.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"},"param":{"type":"string","description":"The parameter that failed validation, when one did.","example":"side","uniqueKey":"param","typeLabel":"string"},"valid_values":{"type":"array","items":{"type":"string","uniqueKey":"valid_values.items.[INDEX]","typeLabel":"string"},"description":"Accepted values of `param`, when the set is fixed.","example":["buy","sell"],"uniqueKey":"valid_values","typeLabel":"string[]"},"venue":{"type":"string","description":"`unsupported_for_venue` only: the venue the request asked.","example":"spot","uniqueKey":"venue","typeLabel":"string"},"datatype":{"type":"string","description":"`unsupported_for_venue` only: the datatype the request asked for, as `GET /v1/capabilities` names it.","example":"order_flow","uniqueKey":"datatype","typeLabel":"string"},"available_on":{"type":"array","description":"`unsupported_for_venue` only: the venues and routes that serve the datatype.","items":{"type":"object","required":["venue","route"],"properties":{"venue":{"type":"string","example":"hyperliquid","isRequired":true,"uniqueKey":"available_on.items.[INDEX].venue","typeLabel":"string"},"route":{"type":"string","example":"/v1/hyperliquid/orders/{symbol}/flow","isRequired":true,"uniqueKey":"available_on.items.[INDEX].route","typeLabel":"string"}},"uniqueKey":"available_on.items.[INDEX]","typeLabel":"object"},"uniqueKey":"available_on","typeLabel":"object[]"},"credits_used":{"type":"integer","format":"int64","description":"`insufficient_credits` only: credits used this period.","uniqueKey":"credits_used","typeLabel":"integer\u003cint64>"},"credits_limit":{"type":"integer","format":"int64","description":"`insufficient_credits` only: the period's credit allowance.","uniqueKey":"credits_limit","typeLabel":"integer\u003cint64>"},"max_concurrent":{"type":"integer","description":"`rate_limited` concurrency refusals only: simultaneous queries the plan allows.","uniqueKey":"max_concurrent","typeLabel":"integer"},"suggestion":{"type":"object","description":"Present when the symbol exists on another venue: where to request it instead.","properties":{"venue":{"type":"string","example":"hip3","uniqueKey":"suggestion.venue","typeLabel":"string"},"symbol":{"type":"string","example":"xyz:TSLA","uniqueKey":"suggestion.symbol","typeLabel":"string"},"endpoint":{"type":"string","example":"/v1/hyperliquid/hip3/trades/xyz:TSLA","uniqueKey":"suggestion.endpoint","typeLabel":"string"}},"uniqueKey":"suggestion","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"rate_limited":{"title":"rate_limited","value":{"success":false,"code":429,"error_code":"rate_limited","error":"Rate limit exceeded","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}},"insufficient_credits":{"title":"insufficient_credits","value":{"success":false,"code":429,"error_code":"insufficient_credits","error":"Monthly credit limit exceeded. Please upgrade your plan.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05","credits_used":50000,"credits_limit":50000}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests per second limit"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Remaining requests this second"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when limit resets"},"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"exampleType":"examples"},"5f06058e-b7ca-458f-b64a-9c682fbf6705":{"description":"The estimate could not be produced right now. Retry shortly.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."},"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"content":{"application/json":{"schema":{"type":"object","description":"Body of every non-2xx JSON response. `code` repeats the HTTP status, `error_code` is the stable machine-readable code (see `ErrorCode`), `error` is a human-readable message, and `request_id` identifies the request for support. Validation failures add `param` and, where the accepted set is fixed, `valid_values`. A 404 for a datatype the venue does not offer (`unsupported_for_venue`) adds `venue`, `datatype` and `available_on`; any other unknown path answers 404 `route_not_found`.","required":["success","code","error_code","error","request_id"],"properties":{"success":{"type":"boolean","enum":[false],"description":"Always `false` on an error.","isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"code":{"type":"integer","description":"HTTP status code.","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"error_code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value, not on the `error` text.\n\n**Contract codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_parameter` | 400 | A parameter failed to parse or validate. `param` names it and `valid_values` lists accepted values where the set is fixed. |\n| `invalid_symbol` | 400 | The symbol is not listed on this venue. |\n| `invalid_interval` | 400 | The `interval` (bucket width) is not one this route accepts. |\n| `invalid_cursor` | 400 | The `cursor` is malformed, stale, or was issued for other filters. Restart pagination without a cursor. Trades, liquidations, L2 and L4 diffs, order history and TP/SL routes currently return the first page for a malformed cursor instead. |\n| `invalid_time_range` | 400 | `start` is after `end`, or a time value could not be parsed. |\n| `range_before_coverage` | 400 | The whole requested range ends before the first instant this dataset is served from. |\n| `historical_range_exceeded` | 403 | The requested span is longer than the plan allows in one request or replay. |\n| `historical_depth_exceeded` | 403 | The request reaches further back than the plan's history window. |\n| `unsupported_for_venue` | 404 | The venue does not offer this datatype. The message, `datatype` and `available_on` name where it is served. |\n| `route_not_found` | 404 | No route matches the path or method. `GET /v1/capabilities` lists the routes each venue serves. |\n| `not_found` | 404 | The route exists but the requested resource (for example an incident, endpoint or outcome id) does not. |\n| `unauthorized` | 401 | The API key is missing or invalid. |\n| `forbidden` | 403 | The key is valid but not allowed to make this request. |\n| `insufficient_credits` | 429 | The monthly credit allowance is spent (402 on pay-per-request routes). |\n| `rate_limited` | 429 | Too many requests or concurrent queries. Retry after the interval in the rate-limit headers. |\n| `conflict` | 409 | The request conflicts with the current state of the resource. |\n| `upstream_unavailable` | 503 | A dependency is unavailable or saturated. Retry shortly; the response carries `Retry-After`. |\n| `internal_error` | 500 | An unexpected server error. Quote `request_id` when contacting support. |\n\n**WebSocket only** (sent in `{\"type\":\"error\"}` messages, never by REST)\n\n| Code | Where | Meaning |\n|---|---|---|\n| `endpoint_unsupported` | WebSocket | This WebSocket endpoint does not serve the channel or operation. The message names the endpoint that does. |\n| `slow_consumer` | WebSocket | The connection fell behind a stream and messages were dropped. Re-subscribe, or restart the replay, to resynchronise. |\n\n**Route-specific codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `positions_unavailable` | 503 | Account positions are temporarily unavailable for this venue. |\n| `reconstruction_unavailable` | 503 | The as-of positions state for this instant cannot be reconstructed right now. |\n| `snapshot_advanced` | 409 | A positions market cursor pinned a snapshot that has since been replaced or expired. Restart pagination. |\n| `pagination_unavailable` | 503 | The next positions page cannot be served right now. Retry the same cursor shortly. |\n| `api_key_limit_reached` | 403 | The account already holds the maximum number of API keys for its plan. |\n| `wallet_requires_plan` | 402 | A wallet-authenticated key needs an active plan for this request. |\n| `wallet_account_required` | 403 | Wallet sign-in needs an existing account linked to the wallet. |\n| `wallet_free_signup_retired` | 410 | Free wallet sign-up is no longer offered. |\n| `account_disabled` | 403 | The account is disabled. |\n| `oauth_not_permitted` | 403 | This route is not available to OAuth access tokens. |\n| `insufficient_scope` | 403 | The OAuth access token lacks the scope this route requires. |\n\n**Legacy names.** Requests without `0xArchive-Version: 2026-10-01` keep the four names that predate the contract; with the header they receive the contract names instead.\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_query_params` | 400 | Legacy name of `invalid_parameter` (query parameter), or of `invalid_cursor` when the parameter is `cursor`, sent without the version header. |\n| `invalid_path_params` | 400 | Legacy name of `invalid_parameter` (path parameter), sent without the version header. |\n| `history_window_exceeded` | 403 | Legacy name of `historical_depth_exceeded`, sent without the version header. |\n| `request_range_exceeded` | 403 | Legacy name of `historical_range_exceeded`, sent without the version header. |\n\nTreat any value not listed here as a generic error of the HTTP status.","enum":["invalid_parameter","invalid_symbol","invalid_interval","invalid_cursor","invalid_time_range","range_before_coverage","historical_range_exceeded","historical_depth_exceeded","unsupported_for_venue","route_not_found","not_found","unauthorized","forbidden","insufficient_credits","rate_limited","conflict","upstream_unavailable","internal_error","endpoint_unsupported","slow_consumer","positions_unavailable","reconstruction_unavailable","snapshot_advanced","pagination_unavailable","api_key_limit_reached","wallet_requires_plan","wallet_account_required","wallet_free_signup_retired","account_disabled","oauth_not_permitted","insufficient_scope","invalid_query_params","invalid_path_params","history_window_exceeded","request_range_exceeded"],"example":"invalid_parameter","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Human-readable message. Wording can change; do not parse it.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Unique request ID for support.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"},"param":{"type":"string","description":"The parameter that failed validation, when one did.","example":"side","uniqueKey":"param","typeLabel":"string"},"valid_values":{"type":"array","items":{"type":"string","uniqueKey":"valid_values.items.[INDEX]","typeLabel":"string"},"description":"Accepted values of `param`, when the set is fixed.","example":["buy","sell"],"uniqueKey":"valid_values","typeLabel":"string[]"},"venue":{"type":"string","description":"`unsupported_for_venue` only: the venue the request asked.","example":"spot","uniqueKey":"venue","typeLabel":"string"},"datatype":{"type":"string","description":"`unsupported_for_venue` only: the datatype the request asked for, as `GET /v1/capabilities` names it.","example":"order_flow","uniqueKey":"datatype","typeLabel":"string"},"available_on":{"type":"array","description":"`unsupported_for_venue` only: the venues and routes that serve the datatype.","items":{"type":"object","required":["venue","route"],"properties":{"venue":{"type":"string","example":"hyperliquid","isRequired":true,"uniqueKey":"available_on.items.[INDEX].venue","typeLabel":"string"},"route":{"type":"string","example":"/v1/hyperliquid/orders/{symbol}/flow","isRequired":true,"uniqueKey":"available_on.items.[INDEX].route","typeLabel":"string"}},"uniqueKey":"available_on.items.[INDEX]","typeLabel":"object"},"uniqueKey":"available_on","typeLabel":"object[]"},"credits_used":{"type":"integer","format":"int64","description":"`insufficient_credits` only: credits used this period.","uniqueKey":"credits_used","typeLabel":"integer\u003cint64>"},"credits_limit":{"type":"integer","format":"int64","description":"`insufficient_credits` only: the period's credit allowance.","uniqueKey":"credits_limit","typeLabel":"integer\u003cint64>"},"max_concurrent":{"type":"integer","description":"`rate_limited` concurrency refusals only: simultaneous queries the plan allows.","uniqueKey":"max_concurrent","typeLabel":"integer"},"suggestion":{"type":"object","description":"Present when the symbol exists on another venue: where to request it instead.","properties":{"venue":{"type":"string","example":"hip3","uniqueKey":"suggestion.venue","typeLabel":"string"},"symbol":{"type":"string","example":"xyz:TSLA","uniqueKey":"suggestion.symbol","typeLabel":"string"},"endpoint":{"type":"string","example":"/v1/hyperliquid/hip3/trades/xyz:TSLA","uniqueKey":"suggestion.endpoint","typeLabel":"string"}},"uniqueKey":"suggestion","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"code":503,"error_code":"upstream_unavailable","error":"estimate is temporarily unavailable","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"},"examples":{"Example":{"title":"Example","value":{"success":false,"code":503,"error_code":"upstream_unavailable","error":"estimate is temporarily unavailable","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}}},"exampleType":"examples"}},"exampleType":"examples"},"991bd2b9-4100-485f-8e6d-d41ff83ec5ec":{"description":"Any other error. The body is an `ErrorResponse`; branch on `error_code`. A 503 (`upstream_unavailable`) carries `Retry-After`.","content":{"application/json":{"schema":{"type":"object","description":"Body of every non-2xx JSON response. `code` repeats the HTTP status, `error_code` is the stable machine-readable code (see `ErrorCode`), `error` is a human-readable message, and `request_id` identifies the request for support. Validation failures add `param` and, where the accepted set is fixed, `valid_values`. A 404 for a datatype the venue does not offer (`unsupported_for_venue`) adds `venue`, `datatype` and `available_on`; any other unknown path answers 404 `route_not_found`.","required":["success","code","error_code","error","request_id"],"properties":{"success":{"type":"boolean","enum":[false],"description":"Always `false` on an error.","isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"code":{"type":"integer","description":"HTTP status code.","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"error_code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value, not on the `error` text.\n\n**Contract codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_parameter` | 400 | A parameter failed to parse or validate. `param` names it and `valid_values` lists accepted values where the set is fixed. |\n| `invalid_symbol` | 400 | The symbol is not listed on this venue. |\n| `invalid_interval` | 400 | The `interval` (bucket width) is not one this route accepts. |\n| `invalid_cursor` | 400 | The `cursor` is malformed, stale, or was issued for other filters. Restart pagination without a cursor. Trades, liquidations, L2 and L4 diffs, order history and TP/SL routes currently return the first page for a malformed cursor instead. |\n| `invalid_time_range` | 400 | `start` is after `end`, or a time value could not be parsed. |\n| `range_before_coverage` | 400 | The whole requested range ends before the first instant this dataset is served from. |\n| `historical_range_exceeded` | 403 | The requested span is longer than the plan allows in one request or replay. |\n| `historical_depth_exceeded` | 403 | The request reaches further back than the plan's history window. |\n| `unsupported_for_venue` | 404 | The venue does not offer this datatype. The message, `datatype` and `available_on` name where it is served. |\n| `route_not_found` | 404 | No route matches the path or method. `GET /v1/capabilities` lists the routes each venue serves. |\n| `not_found` | 404 | The route exists but the requested resource (for example an incident, endpoint or outcome id) does not. |\n| `unauthorized` | 401 | The API key is missing or invalid. |\n| `forbidden` | 403 | The key is valid but not allowed to make this request. |\n| `insufficient_credits` | 429 | The monthly credit allowance is spent (402 on pay-per-request routes). |\n| `rate_limited` | 429 | Too many requests or concurrent queries. Retry after the interval in the rate-limit headers. |\n| `conflict` | 409 | The request conflicts with the current state of the resource. |\n| `upstream_unavailable` | 503 | A dependency is unavailable or saturated. Retry shortly; the response carries `Retry-After`. |\n| `internal_error` | 500 | An unexpected server error. Quote `request_id` when contacting support. |\n\n**WebSocket only** (sent in `{\"type\":\"error\"}` messages, never by REST)\n\n| Code | Where | Meaning |\n|---|---|---|\n| `endpoint_unsupported` | WebSocket | This WebSocket endpoint does not serve the channel or operation. The message names the endpoint that does. |\n| `slow_consumer` | WebSocket | The connection fell behind a stream and messages were dropped. Re-subscribe, or restart the replay, to resynchronise. |\n\n**Route-specific codes**\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `positions_unavailable` | 503 | Account positions are temporarily unavailable for this venue. |\n| `reconstruction_unavailable` | 503 | The as-of positions state for this instant cannot be reconstructed right now. |\n| `snapshot_advanced` | 409 | A positions market cursor pinned a snapshot that has since been replaced or expired. Restart pagination. |\n| `pagination_unavailable` | 503 | The next positions page cannot be served right now. Retry the same cursor shortly. |\n| `api_key_limit_reached` | 403 | The account already holds the maximum number of API keys for its plan. |\n| `wallet_requires_plan` | 402 | A wallet-authenticated key needs an active plan for this request. |\n| `wallet_account_required` | 403 | Wallet sign-in needs an existing account linked to the wallet. |\n| `wallet_free_signup_retired` | 410 | Free wallet sign-up is no longer offered. |\n| `account_disabled` | 403 | The account is disabled. |\n| `oauth_not_permitted` | 403 | This route is not available to OAuth access tokens. |\n| `insufficient_scope` | 403 | The OAuth access token lacks the scope this route requires. |\n\n**Legacy names.** Requests without `0xArchive-Version: 2026-10-01` keep the four names that predate the contract; with the header they receive the contract names instead.\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `invalid_query_params` | 400 | Legacy name of `invalid_parameter` (query parameter), or of `invalid_cursor` when the parameter is `cursor`, sent without the version header. |\n| `invalid_path_params` | 400 | Legacy name of `invalid_parameter` (path parameter), sent without the version header. |\n| `history_window_exceeded` | 403 | Legacy name of `historical_depth_exceeded`, sent without the version header. |\n| `request_range_exceeded` | 403 | Legacy name of `historical_range_exceeded`, sent without the version header. |\n\nTreat any value not listed here as a generic error of the HTTP status.","enum":["invalid_parameter","invalid_symbol","invalid_interval","invalid_cursor","invalid_time_range","range_before_coverage","historical_range_exceeded","historical_depth_exceeded","unsupported_for_venue","route_not_found","not_found","unauthorized","forbidden","insufficient_credits","rate_limited","conflict","upstream_unavailable","internal_error","endpoint_unsupported","slow_consumer","positions_unavailable","reconstruction_unavailable","snapshot_advanced","pagination_unavailable","api_key_limit_reached","wallet_requires_plan","wallet_account_required","wallet_free_signup_retired","account_disabled","oauth_not_permitted","insufficient_scope","invalid_query_params","invalid_path_params","history_window_exceeded","request_range_exceeded"],"example":"invalid_parameter","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Human-readable message. Wording can change; do not parse it.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Unique request ID for support.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"},"param":{"type":"string","description":"The parameter that failed validation, when one did.","example":"side","uniqueKey":"param","typeLabel":"string"},"valid_values":{"type":"array","items":{"type":"string","uniqueKey":"valid_values.items.[INDEX]","typeLabel":"string"},"description":"Accepted values of `param`, when the set is fixed.","example":["buy","sell"],"uniqueKey":"valid_values","typeLabel":"string[]"},"venue":{"type":"string","description":"`unsupported_for_venue` only: the venue the request asked.","example":"spot","uniqueKey":"venue","typeLabel":"string"},"datatype":{"type":"string","description":"`unsupported_for_venue` only: the datatype the request asked for, as `GET /v1/capabilities` names it.","example":"order_flow","uniqueKey":"datatype","typeLabel":"string"},"available_on":{"type":"array","description":"`unsupported_for_venue` only: the venues and routes that serve the datatype.","items":{"type":"object","required":["venue","route"],"properties":{"venue":{"type":"string","example":"hyperliquid","isRequired":true,"uniqueKey":"available_on.items.[INDEX].venue","typeLabel":"string"},"route":{"type":"string","example":"/v1/hyperliquid/orders/{symbol}/flow","isRequired":true,"uniqueKey":"available_on.items.[INDEX].route","typeLabel":"string"}},"uniqueKey":"available_on.items.[INDEX]","typeLabel":"object"},"uniqueKey":"available_on","typeLabel":"object[]"},"credits_used":{"type":"integer","format":"int64","description":"`insufficient_credits` only: credits used this period.","uniqueKey":"credits_used","typeLabel":"integer\u003cint64>"},"credits_limit":{"type":"integer","format":"int64","description":"`insufficient_credits` only: the period's credit allowance.","uniqueKey":"credits_limit","typeLabel":"integer\u003cint64>"},"max_concurrent":{"type":"integer","description":"`rate_limited` concurrency refusals only: simultaneous queries the plan allows.","uniqueKey":"max_concurrent","typeLabel":"integer"},"suggestion":{"type":"object","description":"Present when the symbol exists on another venue: where to request it instead.","properties":{"venue":{"type":"string","example":"hip3","uniqueKey":"suggestion.venue","typeLabel":"string"},"symbol":{"type":"string","example":"xyz:TSLA","uniqueKey":"suggestion.symbol","typeLabel":"string"},"endpoint":{"type":"string","example":"/v1/hyperliquid/hip3/trades/xyz:TSLA","uniqueKey":"suggestion.endpoint","typeLabel":"string"}},"uniqueKey":"suggestion","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"upstream_unavailable":{"title":"upstream_unavailable","value":{"success":false,"code":503,"error_code":"upstream_unavailable","error":"The service is temporarily unavailable. Retry shortly.","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}},"internal_error":{"title":"internal_error","value":{"success":false,"code":500,"error_code":"internal_error","error":"Internal server error","request_id":"3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"}}},"exampleType":"examples"}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","example":2}},"0xArchive-Version":{"description":"The contract version the response was shaped with. Present only when the request sent `0xArchive-Version`.","schema":{"type":"string","enum":["2026-10-01"],"example":"2026-10-01"}}},"exampleType":"examples"}},"security":{"b5f63b2d-d545-4c2d-99b7-ab24e07d269d":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key for authentication. Get yours at https://0xarchive.io/dashboard","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"afa1230c-1573-4566-9e9a-40f758adb7f2":{"url":"https://api.0xarchive.io","description":"Production API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key for authentication. Get yours at https://0xarchive.io/dashboard","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","description":"API key for authentication. Get yours at https://0xarchive.io/dashboard","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"0xarchive-e895b8e7","siteName":"0xArchive","title":"Estimate a webhook subscription - 0xArchive","contextualStarterQuestions":[{"_id":"6ae5fb23621de21a6396a2b3","deploymentId":"69fcef8bc84766ada2de665b","questionText":"How do webhooks get estimated?","status":"active","generatedBy":"contextual","path":"api-reference/webhooks--previews/estimate-a-webhook-subscription","createdAt":"2026-10-31T14:28:51.774Z","updatedAt":"2026-10-31T14:28:51.774Z","__v":0},{"_id":"6ae5fb23621de21a6396a2b1","deploymentId":"69fcef8bc84766ada2de665b","questionText":"How do I estimate webhook costs?","status":"active","generatedBy":"contextual","path":"api-reference/webhooks--previews/estimate-a-webhook-subscription","createdAt":"2026-10-31T14:28:51.774Z","updatedAt":"2026-10-31T14:28:51.774Z","__v":0},{"_id":"6ae5fb23621de21a6396a2b2","deploymentId":"69fcef8bc84766ada2de665b","questionText":"What parameters does estimation need?","status":"active","generatedBy":"contextual","path":"api-reference/webhooks--previews/estimate-a-webhook-subscription","createdAt":"2026-10-31T14:28:51.774Z","updatedAt":"2026-10-31T14:28:51.774Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-31T15:52:09.104Z","gitLastModified":"2026-10-07T19:23:09.000Z","originalFileLocation":"api-reference/webhooks--previews/estimate-a-webhook-subscription.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=\"dark\"}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=\"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"0xArchive\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Estimate a webhook subscription - 0xArchive\">\u003cmeta data-mint-head property=\"og:description\" content=\"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"0xArchive Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://0xarchive-e895b8e7.mintlify.app/_mintlify/api/og/v2?division=Previews\u0026amp;title=Estimate+a+webhook+subscription\u0026amp;description=0xArchive+API+reference+for+Estimate+a+webhook+subscription.+Includes+authentication%2C+parameters%2C+response+shape%2C+examples%2C+and+route-safe+implementation+notes.\u0026amp;theme=862485424f87dd9b21cb314f\u0026amp;signature=73ac0da769c1fa11b7e38719f818337b5b9bf3577dedd95a4de2b17ad8bfbf11\">\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=\"Estimate a webhook subscription - 0xArchive\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://0xarchive-e895b8e7.mintlify.app/_mintlify/api/og/v2?division=Previews\u0026amp;title=Estimate+a+webhook+subscription\u0026amp;description=0xArchive+API+reference+for+Estimate+a+webhook+subscription.+Includes+authentication%2C+parameters%2C+response+shape%2C+examples%2C+and+route-safe+implementation+notes.\u0026amp;theme=862485424f87dd9b21cb314f\u0026amp;signature=73ac0da769c1fa11b7e38719f818337b5b9bf3577dedd95a4de2b17ad8bfbf11\">\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/0xarchive-e895b8e7/epsl9cg6_-QmFjTh/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"0xArchive\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15803D\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"Hpedp6bedqc3av1195euaGMwyFEVHcJhcyUY9YiMvTY\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/webhooks--previews/estimate-a-webhook-subscription.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://0xarchive.io/#organization\",\"name\":\"0xArchive\",\"legalName\":\"Archive Labs Inc.\",\"url\":\"https://0xarchive.io/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://0xarchive.io/logo-square-1024.png\"},\"sameAs\":[\"https://x.com/0xarchiveIo\",\"https://github.com/0xArchiveIO\",\"https://t.me/archivedotio\",\"https://www.linkedin.com/company/0xarchive/\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.0xarchive.io#website\",\"name\":\"0xArchive\",\"url\":\"https://docs.0xarchive.io\",\"publisher\":{\"@id\":\"https://0xarchive.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription#webpage\",\"url\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription\",\"name\":\"Estimate a webhook subscription\",\"description\":\"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\",\"dateModified\":\"2026-10-07T19:23:09.000Z\",\"isPartOf\":{\"@id\":\"https://docs.0xarchive.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://docs.0xarchive.io/api-reference/webhooks\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Previews\",\"item\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/dry-run-a-webhook-subscription\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Estimate a webhook subscription\",\"item\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription#apireference\",\"headline\":\"Estimate a webhook subscription\",\"name\":\"Estimate a webhook subscription\",\"description\":\"0xArchive API reference for Estimate a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.\",\"url\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription\",\"mainEntityOfPage\":{\"@id\":\"https://docs.0xarchive.io/api-reference/webhooks--previews/estimate-a-webhook-subscription#webpage\"},\"dateModified\":\"2026-10-07T19:23:09.000Z\",\"publisher\":{\"@id\":\"https://0xarchive.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.0xarchive.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"0xArchive\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"0xArchive","nav":{"global":null,"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"REST API","pages":[{"title":"REST API","href":"/rest-api"}]},{"tab":"WebSocket","pages":[{"title":"WebSocket","href":"/websocket"}]},{"tab":"Webhook Alerts","pages":[{"title":"Webhook Alerts","sidebarTitle":"Overview","href":"/webhooks"},{"title":"Webhook Alerts quickstart","sidebarTitle":"Quickstart","href":"/webhooks/quickstart"},{"group":"Guides","icon":"route","pages":[{"title":"Alert events","sidebarTitle":"Events","href":"/webhooks/events"},{"title":"Alert rules","sidebarTitle":"Rules","href":"/webhooks/rules"},{"title":"Estimate and dry-run","sidebarTitle":"Estimate and dry-run","href":"/webhooks/estimate-and-dry-run"},{"title":"Watched addresses","sidebarTitle":"Watched addresses","href":"/webhooks/watched-addresses"},{"title":"Signatures and payloads","sidebarTitle":"Signatures and payloads","href":"/webhooks/signatures-and-payloads"},{"title":"Delivery and retries","sidebarTitle":"Delivery and retries","href":"/webhooks/delivery-and-retries"},{"title":"Limits and plans","sidebarTitle":"Limits and plans","href":"/webhooks/limits-and-plans"}]},{"group":"API reference","icon":"book-open-check","pages":[{"title":"API overview","icon":"webhook","href":"/api-reference/webhooks"},{"group":"Event types and limits","expanded":false,"pages":[{"title":"List webhook event types","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/event-types","href":"/api-reference/webhooks--catalog-and-limits/list-webhook-event-types"},{"title":"Get webhook plan limits and usage","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/limits","href":"/api-reference/webhooks--catalog-and-limits/get-webhook-plan-limits-and-usage"}]},{"group":"Receiver endpoints","expanded":false,"pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints","href":"/api-reference/webhooks--endpoints/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints","href":"/api-reference/webhooks--endpoints/create-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhooks/endpoints/{id}","href":"/api-reference/webhooks--endpoints/delete-a-webhook-endpoint"},{"title":"Enable a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{id}/enable","href":"/api-reference/webhooks--endpoints/enable-a-webhook-endpoint"},{"title":"Rotate a webhook endpoint secret","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{id}/rotate","href":"/api-reference/webhooks--endpoints/rotate-a-webhook-endpoint-secret"},{"title":"Send a test delivery","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{id}/test","href":"/api-reference/webhooks--endpoints/send-a-test-delivery"}]},{"group":"Subscriptions","expanded":false,"pages":[{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/subscriptions","href":"/api-reference/webhooks--subscriptions/list-webhook-subscriptions"},{"title":"Create a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions","href":"/api-reference/webhooks--subscriptions/create-a-webhook-subscription"},{"title":"Resume every paused subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/resume","href":"/api-reference/webhooks--subscriptions/resume-every-paused-subscription"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhooks/subscriptions/{id}","href":"/api-reference/webhooks--subscriptions/delete-a-webhook-subscription"},{"title":"Update a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/webhooks/subscriptions/{id}","href":"/api-reference/webhooks--subscriptions/update-a-webhook-subscription"},{"title":"Resume a paused subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/{id}/resume","href":"/api-reference/webhooks--subscriptions/resume-a-paused-subscription"}]},{"group":"Previews","expanded":false,"pages":[{"title":"Dry-run a webhook subscription","description":"0xArchive API reference for Dry-run a webhook subscription. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/dry-run","href":"/api-reference/webhooks--previews/dry-run-a-webhook-subscription"},{"title":"Estimate a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/subscriptions/estimate","href":"/api-reference/webhooks--previews/estimate-a-webhook-subscription"}]},{"group":"Deliveries","expanded":false,"pages":[{"title":"Send a past delivery again","description":"0xArchive API reference for Send a past delivery again. Includes authentication, parameters, response shape, examples, and route-safe implementation notes.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/deliveries/{id}/redeliver","href":"/api-reference/webhooks--deliveries/send-a-past-delivery-again"},{"title":"List deliveries for an endpoint","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints/{id}/deliveries","href":"/api-reference/webhooks--deliveries/list-deliveries-for-an-endpoint"}]},{"group":"Watched addresses","expanded":false,"pages":[{"title":"List watched wallet addresses","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/addresses","href":"/api-reference/webhooks--watched-addresses/list-watched-wallet-addresses"},{"title":"Add a watched wallet address","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/addresses","href":"/api-reference/webhooks--watched-addresses/add-a-watched-wallet-address"},{"title":"Delete a watched wallet address","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhooks/addresses/{id}","href":"/api-reference/webhooks--watched-addresses/delete-a-watched-wallet-address"}]},{"group":"JSON schemas","expanded":false,"pages":[{"title":"Webhooks Schemas","href":"/schemas/families/webhooks"},{"title":"List watched wallet addresses JSON Schema","href":"/schemas/operations/list-webhook-watched-addresses"},{"title":"Add a watched wallet address JSON Schema","href":"/schemas/operations/add-webhook-watched-address"},{"title":"Delete a watched wallet address JSON Schema","href":"/schemas/operations/delete-webhook-watched-address"},{"title":"Send a past delivery again JSON Schema","href":"/schemas/operations/redeliver-webhook-delivery"},{"title":"List webhook endpoints JSON Schema","href":"/schemas/operations/list-webhook-endpoints"},{"title":"Create a webhook endpoint JSON Schema","href":"/schemas/operations/create-webhook-endpoint"},{"title":"Delete a webhook endpoint JSON Schema","href":"/schemas/operations/delete-webhook-endpoint"},{"title":"List deliveries for an endpoint JSON Schema","href":"/schemas/operations/list-webhook-deliveries"},{"title":"Enable a webhook endpoint JSON Schema","href":"/schemas/operations/enable-webhook-endpoint"},{"title":"Rotate a webhook endpoint secret JSON Schema","href":"/schemas/operations/rotate-webhook-endpoint-secret"},{"title":"Send a test delivery JSON Schema","href":"/schemas/operations/test-webhook-endpoint"},{"title":"List webhook event types JSON Schema","href":"/schemas/operations/list-webhook-event-types"},{"title":"Get webhook plan limits and usage JSON Schema","href":"/schemas/operations/get-webhook-limits"},{"title":"List webhook subscriptions JSON Schema","href":"/schemas/operations/list-webhook-subscriptions"},{"title":"Create a webhook subscription JSON Schema","href":"/schemas/operations/create-webhook-subscription"},{"title":"Dry-run a webhook subscription JSON Schema","href":"/schemas/operations/dry-run-webhook-subscription"},{"title":"Estimate a webhook subscription JSON Schema","href":"/schemas/operations/estimate-webhook-subscription"},{"title":"Resume every paused subscription JSON Schema","href":"/schemas/operations/resume-all-webhook-subscriptions"},{"title":"Delete a webhook subscription JSON Schema","href":"/schemas/operations/delete-webhook-subscription"},{"title":"Update a webhook subscription JSON Schema","href":"/schemas/operations/update-webhook-subscription"},{"title":"Resume a paused subscription JSON Schema","href":"/schemas/operations/resume-webhook-subscription"}]}]}]},{"tab":"Bulk Exports","pages":[{"title":"Bulk Exports","href":"/exports"}]},{"tab":"SDKs \u0026 Tools","pages":[{"title":"SDKs \u0026 Tools","href":"/tooling"}]},{"tab":"Terminal","pages":[{"title":"Terminal","href":"/terminal"}]}]},"basePath":"","title":"Estimate a webhook subscription - 0xArchive","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}