Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.
Zerion API uses standard HTTP status codes and returns structured error responses. This page covers what to expect and how to handle errors gracefully.
The PnL, transactions and NFT endpoints only accept addresses that behave like user wallets, and reject anything else before doing any work:
{ "errors": [ { "title": "Malformed parameter was sent", "detail": "address 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 is not trackable" } ]}
Rejected: contracts that aren’t recognized smart-contract wallets (token contracts, routers, vaults), burn and reserved addresses, and high-volume addresses such as exchange hot wallets and mining pools. Smart-contract wallets are fine: Safe, Coinbase Smart Wallet, ERC-4337 accounts and EIP-7702 delegated EOAs all work.Recognition works by wallet implementation, so a newly deployed Safe is tracked immediately with no setup. Trackability is decided per address, not per chain. If you need a specific address, or a wallet implementation Zerion doesn’t recognize yet, contact support.
Returned when a request cannot be served and retrying will not change that. Unlike a 503, it carries no Retry-After header.
{ "errors": [ { "title": "This request is not supported", "detail": "This request cannot be processed, and retrying will not help. Please contact support if you need it enabled." } ]}
The PnL endpoints (/v1/wallets/{address}/pnl and /v1/wallet-sets/pnl) return it for wallets with more than 1 million actions, which are too large for PnL to be calculated. The limit is counted per address, so a wallet set fails if any one of its addresses is over it.Don’t retry, and don’t cache the result against the address: the same address can return a different status later.
{ "errors": [ { "title": "Too many requests", "detail": "Your request had been throttled" } ]}
Implement exponential backoff when retrying. For header details and retry guidance, see Rate limits. If you’re hitting limits consistently, upgrade your plan in the Dashboard.
Returned when the data you asked for is still being prepared. The PnL, wallet positions and fungible chart endpoints compute a wallet’s state on the first request, and answer with a 503 while that runs.
{ "errors": [ { "title": "Service is temporarily unavailable", "detail": "Please, retry later (check the Retry-After header)" } ]}
This always includes a Retry-After header, typically 10 seconds. Wait for it rather than retrying immediately, and cap your attempts.
Retry on 429, 500 and 503. Do not retry 400, 401 or 422. These return the same result however many times you send them.
Respect Retry-After. On a 503 it tells you how long the data needs; retrying sooner burns your rate limit.
Use exponential backoff. When retrying, increase the delay between attempts exponentially (e.g., 1s, 2s, 4s) to avoid overwhelming the API.
Validate parameters before sending. Check that page[size] is within the endpoint’s allowed range, timestamps are 13-digit milliseconds, and chain IDs match the supported chains. This avoids unnecessary 400 errors.
Use webhooks instead of polling. If you need to monitor wallet activity, use transaction subscriptions instead of polling. This reduces API usage and gives you faster notifications.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Zerion API","description":"Zerion is an Ethereum and Solana wallet and developer platform focused on making blockchain data easy to use.","colors":{"primary":"#2461ED","light":"#2461ED","dark":"#2461ED"},"logo":{"light":"https://mintcdn.com/zerion-f99485ad/7LRY3a3Ldx_ROK8O/logo/light.svg?fit=max\u0026auto=format\u0026n=7LRY3a3Ldx_ROK8O\u0026q=85\u0026s=f451fe390bc92095f03123a8f7d40a7d","dark":"https://mintcdn.com/zerion-f99485ad/7LRY3a3Ldx_ROK8O/logo/dark.svg?fit=max\u0026auto=format\u0026n=7LRY3a3Ldx_ROK8O\u0026q=85\u0026s=4062b6f0d31d9101cb18ec6912f5260c"},"favicon":"https://mintcdn.com/zerion-f99485ad/CtpXHzWVHRggjdYr/images/favicon.png?fit=max\u0026auto=format\u0026n=CtpXHzWVHRggjdYr\u0026q=85\u0026s=ab9d008382caaa72b969c16793e48ba4","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript","go"],"prefill":true}},"navbar":{"links":[{"href":"https://dashboard.zerion.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.zerion.io"}},"footer":{"socials":{"x":"https://x.com/zerion","website":"https://zerion.io","linkedin":"https://www.linkedin.com/company/zeriontech"}},"fonts":{"heading":{"family":"Aeonik Pro","weight":700,"source":"fonts/AeonikPro-VF.woff2","format":"woff2"},"body":{"family":"Aeonik Pro","weight":400,"source":"fonts/AeonikPro-VF.woff2","format":"woff2"}},"integrations":{"ga4":{"measurementId":"G-KKSYM575R1"},"mixpanel":{"projectToken":"18a91a6fe2bdf70794ceb76c03433f19","region":"eu"},"posthog":{"apiKey":"phc_KpX0ph71XObDhlXXMKoAzXMtXYiNMMtDhuA8GvvudZI","apiHost":"https://eu.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"square-terminal","href":"https://dashboard.zerion.io"},{"anchor":"AI \u0026 Agents","icon":"brain","href":"/build-with-ai/overview"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zerion-f99485ad","hasAudioNarration":false,"actualSubdomain":"zerion-f99485ad","customDomains":["developers.zerion.io"],"gitSource":{"type":"github","owner":"zeriontech","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae35fcdb5de186da748cddb","collectionId":"2bc884e2-4f43-45be-9576-df32b58d87cf","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae35fcdb5de186da748cddb"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae35fcdb5de186da748cddb","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"API Reference","count":40},{"language":"default","tag":"REST API","count":40},{"language":"default","tag":"Home","count":26},{"language":"default","tag":"subscriptions to transactions","count":13},{"language":"default","tag":"Get started","count":9},{"language":"default","tag":"Core concepts","count":9},{"language":"default","tag":"Recipes","count":9},{"language":"default","tag":"Migrating to Zerion API","count":8},{"language":"default","tag":"wallets","count":8},{"language":"default","tag":"Build with AI","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":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}],"googleFontsInlined":false},"customCss":[{"filePath":"global.css","content":"@media (max-width:600px){.card-group,.hero-grid,.why-grid{grid-template-columns:1fr!important}.hero-grid img{display:none}}.pill-tabs{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.5rem}.pill-tab{display:inline-flex;align-items:center;padding:.5rem 1rem;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;border:1px solid #e5e7eb;background:#fff;color:#374151;transition:none}.pill-tab:hover{border-color:#e5e7eb;color:#374151}.pill-tab.active{background:#0f172a;color:#fff;border-color:#0f172a}@media (prefers-color-scheme:dark){.pill-tab{background:0 0}.pill-tab,.pill-tab:hover{border-color:#374151;color:#d1d5db}.pill-tab.active{background:#fff;color:#0f172a;border-color:#fff}}.feature-card{display:flex;align-items:center;gap:1rem;padding:1rem 1.25rem;border-radius:.375rem;border:1px solid #e5e7eb;text-decoration:none;color:inherit;transition:none}.feature-card:hover{border-color:#e5e7eb;box-shadow:none}@media (prefers-color-scheme:dark){.feature-card,.feature-card:hover{border-color:#374151}.feature-card:hover{box-shadow:none}}.feature-card-icon{display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:.375rem;background:#f4f4f5;flex-shrink:0}@media (prefers-color-scheme:dark){.feature-card-icon{background:#1e293b}}.hero-cta,.hero-cta:hover{color:#fff!important;text-decoration:none!important;border:0!important;box-shadow:none!important;transform:none!important}.hero-cta{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem 1.5rem;background-color:#2461ed;border-radius:.625rem;font-weight:500;font-size:.9375rem;margin-top:.5rem;position:relative}.hero-cta:hover{background-color:#1b4fc4}.stats-row{display:flex;gap:2rem;margin-top:1.5rem;flex-wrap:wrap}.stat-badge{display:flex;flex-direction:column;gap:.125rem}.stat-badge strong{font-size:1.25rem;color:#3030d4}.stat-badge span{font-size:.8125rem;color:#6b7280}.pricing-slider{-webkit-appearance:none;appearance:none;width:100%;height:.375rem;border-radius:9999px;background:linear-gradient(90deg,#3030d4 0%,#5b5bf0 var(--slider-progress, 0%),#e5e7eb var(--slider-progress, 0%),#e5e7eb 100%);outline:0}.pricing-slider::-webkit-slider-runnable-track{height:.375rem;border-radius:9999px;background:linear-gradient(90deg,#3030d4 0%,#5b5bf0 var(--slider-progress, 0%),#e5e7eb var(--slider-progress, 0%),#e5e7eb 100%)}.pricing-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:1rem;height:1rem;margin-top:-.3125rem;border-radius:9999px;background:#fff;border:.1875rem solid #3030d4;box-shadow:0 1px 6px rgba(48,48,212,.25)}.pricing-slider::-moz-range-track{height:.375rem;border:0;border-radius:9999px;background:linear-gradient(90deg,#3030d4 0%,#5b5bf0 var(--slider-progress, 0%),#e5e7eb var(--slider-progress, 0%),#e5e7eb 100%)}.pricing-slider::-moz-range-thumb{width:1rem;height:1rem;border-radius:9999px;background:#fff;border:.1875rem solid #3030d4;box-shadow:0 1px 6px rgba(48,48,212,.25)}@media (prefers-color-scheme:dark){.pricing-slider,.pricing-slider::-moz-range-track,.pricing-slider::-webkit-slider-runnable-track{background:linear-gradient(90deg,#6366f1 0%,#818cf8 var(--slider-progress, 0%),rgba(255,255,255,.14) var(--slider-progress, 0%),rgba(255,255,255,.14) 100%)}.pricing-slider::-moz-range-thumb,.pricing-slider::-webkit-slider-thumb{background:#0f172a;border-color:#818cf8;box-shadow:0 1px 8px rgba(129,140,248,.35)}}.sunset-badge{display:inline-block;margin-top:.625rem;padding:.1875rem .5rem;border-radius:.375rem;font-size:.75rem;font-weight:600;white-space:nowrap;background:rgba(36,97,237,.08);color:#2461ed}@media (prefers-color-scheme:dark){.sunset-badge{background:rgba(91,135,245,.14);color:#5b87f5}}table td,table th{min-width:3rem!important}.chain-support-table td:nth-child(-n+2),.chain-support-table th:nth-child(-n+2){width:1%;white-space:nowrap}#table-of-contents a,aside[aria-label=\"On this page\"i] a,nav[aria-label=\"Table of contents\"i] a{border-left:2px solid transparent;padding-left:.75rem;transition:border-color .15s ease,color .15s ease}#table-of-contents a.active,#table-of-contents a:hover,#table-of-contents a[aria-current],aside[aria-label=\"On this page\"i] a:hover,aside[aria-label=\"On this page\"i] a[aria-current],nav[aria-label=\"Table of contents\"i] a:hover,nav[aria-label=\"Table of contents\"i] a[aria-current]{border-left-color:#2461ed;color:#2461ed}@media (prefers-color-scheme:dark){#table-of-contents a:hover,#table-of-contents a[aria-current],aside[aria-label=\"On this page\"i] a:hover,aside[aria-label=\"On this page\"i] a[aria-current],nav[aria-label=\"Table of contents\"i] a:hover,nav[aria-label=\"Table of contents\"i] a[aria-current]{border-left-color:#5b87f5;color:#5b87f5}}"}],"page":{"pagePath":"error-handling","slug":"/error-handling","pageMetadata":{"title":"Error handling and status codes","description":"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.","href":"/error-handling"},"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: \"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Zerion API uses standard HTTP status codes and returns structured error responses. This page covers what to expect and how to handle errors gracefully.`}),`\n`,_jsx(Heading,{level:`2`,id:`error-response-format`,children:`Error response format`}),`\n`,_jsxs(_components.p,{children:[`All errors return a JSON object with an `,_jsx(_components.code,{children:`errors`}),` array:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Short error description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"A longer explanation of what went wrong\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`http-status-codes`,children:`HTTP status codes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Meaning`}),_jsx(_components.th,{children:`When it happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`200`})}),_jsx(_components.td,{children:`Success`}),_jsx(_components.td,{children:`Request completed successfully`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`202`})}),_jsx(_components.td,{children:`Accepted`}),_jsxs(_components.td,{children:[`NFT endpoints only: the wallet’s NFTs are still being indexed. Retry with backoff until you get `,_jsx(_components.code,{children:`200`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Bad Request`}),_jsx(_components.td,{children:`Malformed parameters. Check filter values, missing required fields, or invalid formats`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`Unauthorized`}),_jsx(_components.td,{children:`Missing or invalid API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:`Not Found`}),_jsx(_components.td,{children:`The requested resource doesn’t exist (single-resource endpoints only)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:`Unprocessable Entity`}),_jsx(_components.td,{children:`The request cannot be served, and retrying will not change that`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`429`})}),_jsx(_components.td,{children:`Too Many Requests`}),_jsx(_components.td,{children:`Rate limit exceeded`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`500`})}),_jsx(_components.td,{children:`Server Error`}),_jsx(_components.td,{children:`Unexpected error on Zerion’s side. Safe to retry with backoff`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`503`})}),_jsx(_components.td,{children:`Service Unavailable`}),_jsxs(_components.td,{children:[`Data is still being prepared. Retry after the delay in the `,_jsx(_components.code,{children:`Retry-After`}),` header`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`400-bad-request`,children:`400 - Bad Request`}),`\n`,_jsxs(_components.p,{children:[`Returned when query parameters are malformed or invalid. Check the `,_jsx(_components.code,{children:`detail`}),` field for specifics.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Malformed parameter was sent\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"chain {invalidchain} is not supported\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Common causes:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Invalid `,_jsx(_components.code,{children:`filter[chain_ids]`}),` value (e.g., a chain ID that doesn’t exist)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`page[size]`}),` outside the allowed range (the maximum varies by endpoint)`]}),`\n`,_jsxs(_components.li,{children:[`Missing required parameters (e.g., `,_jsx(_components.code,{children:`filter[references]`}),` on the NFTs endpoint)`]}),`\n`,_jsxs(_components.li,{children:[`Malformed `,_jsx(_components.code,{children:`filter[min_mined_at]`}),` timestamp (must be exactly 13 digits, in milliseconds)`]}),`\n`,_jsx(_components.li,{children:`An address Zerion doesn’t track (see below)`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`untracked-addresses`,children:`Untracked addresses`}),`\n`,_jsx(_components.p,{children:`The PnL, transactions and NFT endpoints only accept addresses that behave like user wallets, and reject anything else before doing any work:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Malformed parameter was sent\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"address 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 is not trackable\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Rejected: contracts that aren’t recognized smart-contract wallets (token contracts, routers, vaults), burn and reserved addresses, and high-volume addresses such as exchange hot wallets and mining pools. Smart-contract wallets are fine: Safe, Coinbase Smart Wallet, ERC-4337 accounts and EIP-7702 delegated EOAs all work.`}),`\n`,_jsx(_components.p,{children:`Recognition works by wallet implementation, so a newly deployed Safe is tracked immediately with no setup. Trackability is decided per address, not per chain. If you need a specific address, or a wallet implementation Zerion doesn’t recognize yet, contact support.`}),`\n`,_jsx(Heading,{level:`3`,id:`401-unauthorized`,children:`401 - Unauthorized`}),`\n`,_jsx(_components.p,{children:`Returned when the API key is missing, invalid, or incorrectly encoded.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Unauthorized Error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"The API key is invalid, please, make sure that you are using a valid key\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Common causes:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Missing `,_jsx(_components.code,{children:`Authorization`}),` header`]}),`\n`,_jsxs(_components.li,{children:[`API key not Base64-encoded correctly. Remember to append a colon: `,_jsx(_components.code,{children:`base64(\"your_key:\")`})]}),`\n`,_jsx(_components.li,{children:`Expired or revoked API key`}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Test your encoding: `,_jsx(_components.code,{children:`echo -n \"your_api_key:\" | base64`}),` should produce the value you pass after `,_jsx(_components.code,{children:`Basic `}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`404-not-found`,children:`404 - Not Found`}),`\n`,_jsx(_components.p,{children:`Returned on single-resource endpoints when the ID doesn’t match any record.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Requested fungible was not found\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"You have requested fungible which does not exist\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This only applies to endpoints like `,_jsx(_components.code,{children:`/v1/fungibles/{fungible_id}`}),` or `,_jsx(_components.code,{children:`/v1/nfts/{nft_id}`}),`. List endpoints return an empty `,_jsx(_components.code,{children:`data`}),` array instead of a 404.`]}),`\n`,_jsx(Heading,{level:`3`,id:`422-unprocessable-entity`,children:`422 - Unprocessable Entity`}),`\n`,_jsxs(_components.p,{children:[`Returned when a request cannot be served and retrying will not change that. Unlike a `,_jsx(_components.code,{children:`503`}),`, it carries no `,_jsx(_components.code,{children:`Retry-After`}),` header.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"This request is not supported\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"This request cannot be processed, and retrying will not help. Please contact support if you need it enabled.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The PnL endpoints (`,_jsx(_components.code,{children:`/v1/wallets/{address}/pnl`}),` and `,_jsx(_components.code,{children:`/v1/wallet-sets/pnl`}),`) return it for wallets with more than 1 million actions, which are too large for PnL to be calculated. The limit is counted per address, so a wallet set fails if any one of its addresses is over it.`]}),`\n`,_jsx(_components.p,{children:`Don’t retry, and don’t cache the result against the address: the same address can return a different status later.`}),`\n`,_jsx(Heading,{level:`3`,id:`429-too-many-requests`,children:`429 - Too Many Requests`}),`\n`,_jsx(_components.p,{children:`Returned when you exceed your plan’s rate limit.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Too many requests\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Your request had been throttled\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Implement exponential backoff when retrying. For header details and retry guidance, see `,_jsx(_components.a,{href:`/rate-limits`,children:`Rate limits`}),`. If you’re hitting limits consistently, upgrade your plan in the `,_jsx(_components.a,{href:`https://dashboard.zerion.io`,children:`Dashboard`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`500-server-error`,children:`500 - Server Error`}),`\n`,_jsx(_components.p,{children:`Returned when something unexpected goes wrong on Zerion’s side.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Internal Server Error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"An unexpected error occurred\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`These errors are safe to retry. Use exponential backoff (e.g., 1s, 2s, 4s) and cap your retries. If the error persists, reach out to support.`}),`\n`,_jsx(Heading,{level:`3`,id:`503-service-unavailable`,children:`503 - Service Unavailable`}),`\n`,_jsxs(_components.p,{children:[`Returned when the data you asked for is still being prepared. The PnL, wallet positions and fungible chart endpoints compute a wallet’s state on the first request, and answer with a `,_jsx(_components.code,{children:`503`}),` while that runs.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Service is temporarily unavailable\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Please, retry later (check the Retry-After header)\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This always includes a `,_jsx(_components.code,{children:`Retry-After`}),` header, typically 10 seconds. Wait for it rather than retrying immediately, and cap your attempts.`]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best practices`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Retry on `,_jsx(_components.code,{children:`429`}),`, `,_jsx(_components.code,{children:`500`}),` and `,_jsx(_components.code,{children:`503`}),`.`]}),` Do not retry `,_jsx(_components.code,{children:`400`}),`, `,_jsx(_components.code,{children:`401`}),` or `,_jsx(_components.code,{children:`422`}),`. These return the same result however many times you send them.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Respect `,_jsx(_components.code,{children:`Retry-After`}),`.`]}),` On a `,_jsx(_components.code,{children:`503`}),` it tells you how long the data needs; retrying sooner burns your rate limit.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use exponential backoff.`}),` When retrying, increase the delay between attempts exponentially (e.g., 1s, 2s, 4s) to avoid overwhelming the API.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validate parameters before sending.`}),` Check that `,_jsx(_components.code,{children:`page[size]`}),` is within the endpoint’s allowed range, timestamps are 13-digit milliseconds, and chain IDs match the `,_jsx(_components.a,{href:`/supported-blockchains`,children:`supported chains`}),`. This avoids unnecessary `,_jsx(_components.code,{children:`400`}),` errors.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use webhooks instead of polling.`}),` If you need to monitor wallet activity, use `,_jsx(_components.a,{href:`/api-reference/subscriptions-to-transactions/create-subscription`,children:`transaction subscriptions`}),` instead of polling. This reduces API usage and gives you faster notifications.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Error handling and status codes","description":"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.","href":"/error-handling"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Error response format","slug":"error-response-format","depth":2,"children":[]},{"title":"HTTP status codes","slug":"http-status-codes","depth":2,"children":[{"title":"400 - Bad Request","slug":"400-bad-request","depth":3,"children":[]},{"title":"Untracked addresses","slug":"untracked-addresses","depth":4,"children":[]},{"title":"401 - Unauthorized","slug":"401-unauthorized","depth":3,"children":[]},{"title":"404 - Not Found","slug":"404-not-found","depth":3,"children":[]},{"title":"422 - Unprocessable Entity","slug":"422-unprocessable-entity","depth":3,"children":[]},{"title":"429 - Too Many Requests","slug":"429-too-many-requests","depth":3,"children":[]},{"title":"500 - Server Error","slug":"500-server-error","depth":3,"children":[]},{"title":"503 - Service Unavailable","slug":"503-service-unavailable","depth":3,"children":[]}]},{"title":"Best practices","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"zerion-f99485ad","siteName":"Zerion API","title":"Error handling and status codes - Zerion API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T18:42:29.221Z","originalFileLocation":"error-handling.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Zerion API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Error handling and status codes - Zerion API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Zerion API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.zerion.io/error-handling\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zerion-f99485ad.mintlify.app/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Error+handling+and+status+codes\u0026amp;description=Understand+Zerion+API+error+responses%2C+HTTP+status+codes%2C+rate-limit+errors%2C+and+best+practices+for+retry+logic+and+exponential+backoff+in+production+apps.\u0026amp;theme=84bd58406d825a4dc94e9d1b\u0026amp;signature=13b47ac75cb4434fa58e259d43c6a810f801997f3f22d433d9e24a2ed3d7c31e\">\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=\"Error handling and status codes - Zerion API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zerion-f99485ad.mintlify.app/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Error+handling+and+status+codes\u0026amp;description=Understand+Zerion+API+error+responses%2C+HTTP+status+codes%2C+rate-limit+errors%2C+and+best+practices+for+retry+logic+and+exponential+backoff+in+production+apps.\u0026amp;theme=84bd58406d825a4dc94e9d1b\u0026amp;signature=13b47ac75cb4434fa58e259d43c6a810f801997f3f22d433d9e24a2ed3d7c31e\">\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/zerion-f99485ad/VzHsQ_h3ouhCUDnV/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Zerion API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2461ED\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.zerion.io/error-handling\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/error-handling.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.zerion.io/#organization\",\"name\":\"Zerion API\",\"url\":\"https://developers.zerion.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zerion-f99485ad/7LRY3a3Ldx_ROK8O/logo/light.svg?fit=max\u0026auto=format\u0026n=7LRY3a3Ldx_ROK8O\u0026q=85\u0026s=f451fe390bc92095f03123a8f7d40a7d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.zerion.io#website\",\"name\":\"Zerion API\",\"url\":\"https://developers.zerion.io\",\"publisher\":{\"@id\":\"https://developers.zerion.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.zerion.io/error-handling#webpage\",\"url\":\"https://developers.zerion.io/error-handling\",\"name\":\"Error handling and status codes\",\"description\":\"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\",\"dateModified\":\"2026-10-15T18:42:29.221Z\",\"isPartOf\":{\"@id\":\"https://developers.zerion.io#website\"},\"breadcrumb\":{\"@id\":\"https://developers.zerion.io/error-handling#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.zerion.io/error-handling#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core concepts\",\"item\":\"https://developers.zerion.io/supported-blockchains\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Error handling and status codes\",\"item\":\"https://developers.zerion.io/error-handling\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.zerion.io/error-handling#article\",\"headline\":\"Error handling and status codes\",\"name\":\"Error handling and status codes\",\"description\":\"Understand Zerion API error responses, HTTP status codes, rate-limit errors, and best practices for retry logic and exponential backoff in production apps.\",\"url\":\"https://developers.zerion.io/error-handling\",\"mainEntityOfPage\":{\"@id\":\"https://developers.zerion.io/error-handling#webpage\"},\"dateModified\":\"2026-10-15T18:42:29.221Z\",\"publisher\":{\"@id\":\"https://developers.zerion.io/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.zerion.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Zerion API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Zerion API","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"square-terminal","href":"https://dashboard.zerion.io"},{"anchor":"AI \u0026 Agents","icon":"brain","href":"/build-with-ai/overview"}]},"tabs":[{"tab":"Home","groups":[{"group":"Get started","pages":[{"title":"Introduction to Zerion API","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"group":"Build with AI","pages":[{"title":"Build AI agents with onchain data","href":"/build-with-ai/overview"},{"title":"Zerion CLI and agent skills for AI coding tools","href":"/build-with-ai/zerion-cli"},{"title":"x402 payments: pay-per-request Zerion API access","href":"/build-with-ai/x402"},{"title":"MPP payments: pay-per-request Zerion API access","href":"/build-with-ai/mpp"},{"title":"Model Context Protocol (MCP) server","href":"/build-with-ai/mcp"}]},{"title":"Migrate to Zerion API","sidebarTitle":"Migrate to Zerion","href":"/migrate-to-zerion"}]},{"group":"Core concepts","pages":[{"title":"Supported blockchains and chain IDs for Zerion API","sidebarTitle":"Supported blockchains","mode":"wide","href":"/supported-blockchains"},{"title":"Endpoints and response schema","href":"/endpoints-and-schema"},{"title":"Pagination, filtering, sorting, and currency","description":"Paginate through results with cursors, filter by chain, position type, or asset, sort responses, and switch currencies across Zerion API endpoints.","href":"/pagination-and-filtering"},{"title":"Error handling and status codes","href":"/error-handling"},{"title":"Rate limits and throttling","description":"How Zerion API rate limits work, which response headers to inspect, how to detect 429 responses, and best practices for retries with exponential backoff.","href":"/rate-limits"},{"title":"Webhooks for real-time wallet transaction notifications","href":"/webhooks"},{"title":"Kafka streaming for onchain events","href":"/streaming"},{"title":"Spam token filtering","href":"/spam-filtering"},{"title":"Real-world asset (RWA) classification","sidebarTitle":"RWA classification","href":"/rwa-classification"}]},{"group":"Migrating to Zerion API","pages":[{"title":"Migrate from Zapper to Zerion API","sidebarTitle":"From Zapper","href":"/migrate-from-zapper"},{"title":"Migrate from Dune SIM to Zerion API","sidebarTitle":"From Dune SIM","href":"/migrate-from-sim"},{"title":"Migrate from Mobula to Zerion API","sidebarTitle":"From Mobula","href":"/migrate-from-mobula"},{"title":"Migrate from OneBalance to Zerion API","sidebarTitle":"From OneBalance","href":"/migrate-from-onebalance"},{"title":"Migrate from DeBank Cloud to Zerion API","sidebarTitle":"From DeBank","href":"/migrate-from-debank"},{"title":"Migrate from Allium to Zerion API","sidebarTitle":"From Allium","href":"/migrate-from-allium"},{"title":"Migrate from GoldRush (Covalent) to Zerion API","sidebarTitle":"From GoldRush","href":"/migrate-from-goldrush"},{"title":"Migrate from Moralis to Zerion API","sidebarTitle":"From Moralis","href":"/migrate-from-moralis"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/wallets/get-wallet-balance-chart"}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/recipes"}]},{"tab":"Case studies","href":"https://zerion.io/blog/tag/zerion-api/"},{"tab":"Changelogs","pages":[{"title":"Changelogs","href":"/changelog"}]}]},"basePath":"","title":"Error handling and status codes - Zerion API","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}