Mainly

Errors

Predictable HTTP status codes and machine-readable error codes on every failure.

Error shape

Every non-2xx response has the same body:

{
  "error": {
    "code": "invalid_address",
    "message": "\"abc123\" is not a valid Solana address. Addresses are 32–44 base58 characters.",
    "details": { "address": "abc123" }
  }
}
FieldTypeDescription
codestringStable, machine-readable identifier. Branch on this, not on message.
messagestringHuman explanation of what went wrong and, where possible, how to fix it.
detailsobjectOptional structured context (the offending parameter, limits, etc.).

Error codes

HTTPcodeMeaning
400invalid_addressA path or body parameter isn't a valid Solana address.
400invalid_signatureNot a valid transaction signature.
400invalid_transactionThe submitted transaction couldn't be decoded (expects base64).
400invalid_parameterA query or body parameter has the wrong type or an out-of-range value.
400unsupported_confirmationThis endpoint doesn't support the requested confirmation level.
400cursor_expiredThe pagination cursor is no longer valid — restart from a checkpoint.
401unauthorizedMissing or invalid API key.
404not_foundThe account, transaction, or token doesn't exist at the requested confirmation level.
409blockhash_expiredThe transaction's blockhash lapsed before it could land. Rebuild and re-sign.
422simulation_failedPreflight simulation failed — the response includes program logs in details.logs.
429rate_limitedToo many requests. Back off; see headers below.
500internal_errorSomething failed on our side. Safe to retry with backoff.
503upstream_unavailableThe blockchain network or upstream infrastructure is degraded. Retry with backoff.

Rate limit headers

Every response includes your current standing:

X-RateLimit-Limit: 50
X-RateLimit-Remaining: 46
X-RateLimit-Reset: 1754300400

On 429, a Retry-After header tells you how many seconds to wait.

Retry guidance

  • Safe to retry: 429, 500, 503 — with exponential backoff and jitter.
  • Retry after rebuilding: blockhash_expired — fetch a fresh blockhash, re-sign, resubmit. (The send endpoint manages retries within the blockhash window for you.)
  • Don't retry: 4xx validation errors — fix the request first.

On this page