Current offer: every account has 1 reset chance(s) (valid for 30 days) to top its balance back up to 30,000,000 CU in one click. New accounts start with 30,000,000 CU. Learn more →

Error Reference

Complete reference for BlockVectra JSON-RPC, Data API, and console error codes, reasons, billing rules, retry guidance, and agent actions.

This reference documents all error codes and machine-readable reason values across BlockVectra services, including whether a rejected call is billed, retry policies, backoff durations, and recommended actions for AI agents and automated clients.

For machine-readable consumption, fetch the complete catalog as JSON at /errors.json. Every error response carrying a docs_url links directly to a stable anchor on this page: https://docs.blockvectra.com/en/errors/#<reason> (or #-<code-number> for errors without a reason code).

Special Empty Responses

HTTP 404 (Empty Body): Invalid, Suspended, or Revoked API Key

When a request to /v1/{chain} has no API key, or the key is unrecognized, disabled, or revoked, the service returns HTTP 404 with an empty body. For security and anti-probing reasons, the service intentionally does not distinguish between these cases. Agent action: Ensure a valid API key is passed via the x-api-key header or configured in the BLOCKVECTRA_API_KEY environment variable.

HTTP 403 (Empty Body): Non-POST Method on JSON-RPC Endpoints

When a request to /v1/{chain} or /v1/{chain}/{api_key} uses an HTTP method other than POST or OPTIONS (e.g. GET), the service returns HTTP 403 with an empty body and an Allow: POST,OPTIONS header. Agent action: Always use the POST method for JSON-RPC requests.

JSON-RPC errors

Errors returned during JSON-RPC dispatch, upstream node forwarding, or service admission control.

HTTPCodeReasonMeaningBilledRetryableWait Time (Retry-After)Agent ActionRelated DocAnchor
200-32700parse_errorparse errorNoNo—Verify valid JSON syntax in request body before sending.JSON-RPC Docs#parse_error
200-32600invalid_requestinvalid requestNoNo—Inspect request structure; verify jsonrpc: '2.0', id, and method fields before resending.JSON-RPC Docs#invalid_request
200-32600batch_too_largebatch too large: max <N> callsNoNo—Split batch into smaller batches meeting the max call limit indicated in error data.JSON-RPC Docs#batch_too_large
200-32601method_not_allowedmethod not available: <method>NoNo—Check methods.allow and methods.deny in GET /v1/chains for supported methods.JSON-RPC Docs#method_not_allowed
404-32600unknown_chainunknown chainNoNo—Check available chains via GET /v1/chains or the list_chains tool; verify URL path.JSON-RPC Docs#unknown_chain
200-32602logs_range_too_largeeth_getLogs block range too large: max <N> blocksNoNo—Narrow query block range to within max_logs_block_range indicated in GET /v1/chains.JSON-RPC Docs#logs_range_too_large
200-32602invalid_paramstracer not allowedNoNo—Adjust method params; check supported tracers and timeout limits for the chain.JSON-RPC Docs#invalid_params
200-32010node_syncingnode is syncing; calls are temporarily unavailableNoYesWait a few seconds and retryWait for node synchronization to finish, or check GET /v1/status.JSON-RPC Docs#node_syncing
200-32011state_windowhistorical state is not available beyond the most recent <N> blocksNoNo—Query blocks within state_window_blocks as reported in GET /v1/chains, or use Data API for historical data.JSON-RPC Docs#state_window
200-32000not_foundtransaction not foundNoYesRetry after a few seconds if recently broadcast or minedIf newly submitted or mined, wait for propagation and retry; otherwise check block number or hash.JSON-RPC Docs#not_found
200-32000response_too_largeupstream response too largeNoNo—Narrow query parameters (e.g. reduce block range in eth_getLogs or request smaller traces).JSON-RPC Docs#response_too_large
200-32005overloadedservice overloaded, retry laterNoYesWait a few seconds and retry with exponential backoffBack off with jitter and retry request.JSON-RPC Docs#overloaded
429-32005key_rate_limitrate limit exceededNoYesHonor Retry-After header (seconds)Sleep for the duration specified in Retry-After header before retrying, or distribute load.JSON-RPC Docs#key_rate_limit
429-32005free_plan_call_limitrate limit exceededNoYesWait 1 second before retryingThrottle request rate or top up to unlock paid tier throughput.JSON-RPC Docs#free_plan_call_limit
429-32005concurrency_limitrate limit exceededNoYesHonor Retry-After header or wait for active calls to completeLimit client concurrency pool size and retry completed slots.JSON-RPC Docs#concurrency_limit
429-32022request_exceeds_burstrequest cost <N> CU exceeds burst capacity <M> CUNoNo—Waiting will not succeed; split batch or lower method parameters to fit within burst capacity.JSON-RPC Docs#request_exceeds_burst
429-32022free_plan_batch_too_largerequest has <N> calls, exceeding the free-plan limit of <M> calls per secondNoNo—Waiting will not succeed; split batch so call count is within free-plan limit, or top up.JSON-RPC Docs#free_plan_batch_too_large
200-32603upstream_unavailableupstream unavailableNoYesWait a few seconds and retryRetry with exponential backoff; check GET /v1/status for node health.JSON-RPC Docs#upstream_unavailable
200-32603internal_errorinternal service errorNoYesRetry after a brief delayRetry request; report persistent failures with timestamp to support.JSON-RPC Docs#internal_error
402-32020balance_exhaustedinsufficient balanceNoNo—Contact contact@blockvectra.com to top up, or use quota reset in console if eligible.JSON-RPC Docs#balance_exhausted
402-32020free_grant_exhaustedinsufficient balanceNoNo—Contact contact@blockvectra.com to top up, use quota reset if available, or wait for next cycle grant.JSON-RPC Docs#free_grant_exhausted
401-32024missing_api_keymissing API key: send it in the request path (/v1/{chain}/<api_key>) or in the x-api-key headerNoNo—Provide a valid API key in request path (/v1/{chain}/<api_key>) or in x-api-key request header.JSON-RPC Docs#missing_api_key
503-32021billing_unavailablebilling data temporarily unavailableNoYesHonor Retry-After header (seconds)This is not a balance issue; newly created keys sync within seconds. Wait for Retry-After and retry.JSON-RPC Docs#billing_unavailable
2004444—pruned history unavailableNoNo—Block is outside the node's pruned history window; query historical blocks via Data API.JSON-RPC Docs#4444
200-32000—historical state ... is not available; old data not available due to pruning...NoNo—Query blocks within the state window, or use Data API for historical queries.JSON-RPC Docs#-32000
200-32002—<node message>NoYesWait a few seconds and retry with a smaller batchReduce the number of calls in the batch and retry.JSON-RPC Docs#-32002
200-32003—<node message>NoNo—Split batch into smaller requests to reduce response payload size.JSON-RPC Docs#-32003
200-32600—<node message>NoNo—Inspect individual requests in the batch for non-compliant parameters; split and retry.JSON-RPC Docs#-32600
200*—<node message>YesNo—Node performed computation and was billed. Inspect revert reason/data or call parameters; do not blindly retry.JSON-RPC Docs#*
408408—Request timed out after 35s between request header completion and responsePossibleYesWait a few seconds before retrying read callsCalls may have reached node and could be billed. For read calls, retry with backoff. For write calls (e.g. eth_sendRawTransaction), check transaction status by hash first.JSON-RPC Docs#408

Data API Errors

Errors returned by the Blockchain Data API endpoints under /v1/data/{chain}/.

HTTPCodeReasonMeaningBilledRetryableWait Time (Retry-After)Agent ActionRelated DocAnchor
400bad_request—Duplicate query parameter, invalid query string, or malformed requestNoNo—Inspect query parameters; ensure parameters like limit appear at most once and query parameters are valid.Data API Docs#bad_request
409not_indexed_yet—Requested block number is above current indexed head (carries indexed_through watermark)NoYesWait a few seconds until indexed_through reaches the blockWait for the service to catch up to this block height and retry.Data API Docs#not_indexed_yet
409finality_exceeded—Block is indexed but above finalized_block (not yet reorg-safe)NoYesWait for chain finality to advanceWait for block finalization, or restrict query to blocks at or below meta.finalized_block.Data API Docs#finality_exceeded
409window_too_large—Block window spans more than 100,000 blocks and clamp parameter was not set to trueNoNo—Narrow block range (from_block to to_block) <= 100,000 blocks, or pass clamp=true.Data API Docs#window_too_large
409too_many_pools—Token matches more than 200 liquidity pools; query by pool dimension insteadNoNo—Query by specific pool address rather than querying all pools for the token.Data API Docs#too_many_pools
409span_exceeded—Requested date span exceeds the 90-day maximum limitNoNo—Narrow date range between from_time and to_time to within 90 days.Data API Docs#span_exceeded
422no_coverage—Capability not supported on this chain, or requested block is before the coverage windowNoNo—Verify chain features and coverage.from_block via GET /v1/data/{chain}/status before querying.Data API Docs#no_coverage
503unavailable—Data service temporarily unavailable, query slots busy, or shutting downNoYesWait a few seconds and retry with exponential backoffRetry after a brief delay with exponential backoff.Data API Docs#unavailable

Console & Account API Errors

Errors returned by the management, key provisioning, and authentication endpoints under /v1/.

HTTPCodeReasonMeaningBilledRetryableWait Time (Retry-After)Agent ActionRelated DocAnchor
400invalid_requestinvalid_usernameUsername format is invalid (must be alphanumeric or underscores)NoNo—Provide a valid username adhering to username character and length requirements.—#invalid_username
400siwe_invalidexpiredSign-In with Ethereum (SIWE) message has expired or nonce was already usedNoYesFetch a new challenge immediately and signRequest a fresh challenge from /v1/auth/siwe/challenge and sign the newly issued statement.—#expired
400siwe_invalidchain_mismatchSIWE message chainId does not match server settingsNoNo—Use the chainId returned by /v1/auth/siwe/challenge when constructing the SIWE message.—#chain_mismatch
400siwe_invaliddomain_mismatchSIWE message domain does not match server hostNoNo—Ensure domain and uri match the server host returned in challenge.—#domain_mismatch
400siwe_invalidsignatureSIWE cryptographic signature verification failedNoNo—Verify that the message was signed by the private key corresponding to the specified address.—#signature
409key_limit_reachedactive_keysActive (non-revoked) API keys reached maximum account limitNoNo—Revoke an existing unused key before creating a new key.—#active_keys
409no_reset_availablenothing_to_resetBalance is already at or above the reset target; reset opportunity is preservedNoNo—No reset needed currently; use reset opportunity after balance is depleted.—#nothing_to_reset
429rate_limiteddaily_creationsAccount 24-hour key creation limit reachedNoYesHonor Retry-After header (seconds)Rotate existing keys instead of creating new ones, or wait for 24-hour window to reset.—#daily_creations
429signup_rate_limitedper_ipSign-up rate limit reached for the client IP subnetNoYesHonor Retry-After header (seconds)Wait for the Retry-After interval before creating a new account from this network.—#per_ip
429signup_rate_limitedglobalGlobal new user registration rate limit reached across all sourcesNoYesHonor Retry-After header (seconds)Wait for the Retry-After interval before retrying account creation.—#global
400oauth_invalid—OAuth parameter invalid or callback state unknown, expired, or already usedNoYes—Initiate a fresh OAuth login flow from /v1/auth/oauth/{provider}/start.—#oauth_invalid
400login_code_invalid—Login code unknown, expired, already consumed, or PKCE verifier mismatchNoNo—Restart login to obtain a fresh login code.—#login_code_invalid
401unauthenticated—Missing session, or session token is invalid, expired, or revokedNoNo—Sign in again to acquire a new Bearer session token.—#unauthenticated
403user_disabled—Account has been suspended by administrationNoNo—Contact contact@blockvectra.com for account support.—#user_disabled
404provider_disabled—OAuth provider is recognized but currently disabledNoNo—Use SIWE or another supported authentication provider.—#provider_disabled
409identity_in_use—Identity (wallet or OAuth account) is already bound to another userNoNo—Unbind the identity from the previous account or use a different identity.—#identity_in_use
409identity_limit_reached—Maximum number of linked identities (5) reached for this accountNoNo—Unbind an unnecessary identity before linking a new one.—#identity_limit_reached
409last_identity—Cannot unbind the sole remaining identity from the accountNoNo—Bind another identity first before removing this one.—#last_identity
409key_not_active—Attempted to rotate an API key that is disabled or revokedNoNo—Create a new key or rotate an active key.—#key_not_active
409no_reset_available—No quota reset opportunities remain on this accountNoNo—Contact contact@blockvectra.com to top up, or wait for next promotion cycle.—#no_reset_available
413payload_too_large—Request body exceeds the 64 KiB size limitNoNo—Reduce request body size below 64 KiB.—#payload_too_large
429rate_limited—Request rate limit exceeded on control plane APINoYesHonor Retry-After header (seconds)Sleep for duration in Retry-After before retrying.—#rate_limited
429signup_rate_limited—Sign-up rate limit reached for the client IP subnetNoYesHonor Retry-After header (seconds)Wait for the Retry-After interval before creating a new account.—#signup_rate_limited
503signup_paused—Global new user registrations are temporarily paused; existing logins unaffectedNoYesRetry registration laterNew user sign-ups temporarily paused; check status and try again later.—#signup_paused
503usage_unavailable—Usage reporting service is temporarily unavailableNoYesWait a few seconds and retryOnly affects /usage endpoint; other endpoints work normally. Retry shortly.—#usage_unavailable
500internal—Unexpected server errorNoYesRetry after a brief delayRetry request with exponential backoff.—#internal

Last updated: