Skip to main content

The error envelope

Every error has the same shape. code is stable (codes never change meaning or get renamed); message is for humans and may change; details is optional and route-specific. Every response, error or not, carries an X-Request-Id header, and the envelope repeats it as request_id: quote it when you contact <CONTACT_EMAIL>.
GET /v1/solana/wallets/not-a-wallet/defi-positions → 400 (captured 2026-11-12 from local error-invalid-address)

Codes

Troubleshooting by code

  • INVALID_PARAMETER: check the parameter name (unknown names are rejected), ranges (freshness_seconds 0…86,400, limit 1…500) and the rewards rule: include_rewards_in_total=true needs rewards in include.
GET /v1/solana/wallets/G4VmLamEV6h15gndx7nHn8TTcu7fJkBBNVN3wTugMNtH/defi-positions?freshness_seconds=-1 → 400 (captured 2026-11-12 from local error-invalid-parameter)
  • INVALID_ADDRESS: addresses are case-sensitive base58 and must decode to exactly 32 bytes. Don’t lower-case them or strip characters.
  • UNSUPPORTED_PROTOCOL: use ids from /v1/solana/protocols (for example native_stake).
GET /v1/solana/wallets/G4VmLamEV6h15gndx7nHn8TTcu7fJkBBNVN3wTugMNtH/defi-positions?protocols=not_a_protocol → 400 (captured 2026-11-12 from local error-unsupported-protocol)
  • CURSOR_EXPIRED: the snapshot behind the cursor is gone or too old to serve; request the first page again.
  • UNAUTHORIZED: send Authorization: Bearer $LUCIDBLOCK_TOKEN. Tokens are issued during the alpha at <CONTACT_EMAIL>.
  • NOT_FOUND: check the path against the API reference.
  • JOB_NOT_FOUND: the job is unknown for this wallet (jobs are kept 7 days). Request the wallet again; it returns a snapshot or a new job.
GET /v1/solana/wallets/G4VmLamEV6h15gndx7nHn8TTcu7fJkBBNVN3wTugMNtH/defi-positions/jobs/00000000-0000-4000-8000-000000000000 → 404 (captured 2026-11-12 from local error-job-not-found)
  • METHOD_NOT_ALLOWED: the API is read-only; use GET.
  • RATE_LIMITED: wait Retry-After seconds. details.reason is per_ip_rate (60 units per minute spent) or cold_scan_limit (20 new scans per hour from your IP; existing snapshots still load). See Rate limits.
  • INTERNAL, DB_UNAVAILABLE: retry with exponential backoff; if it persists, report the request_id.
  • QUEUE_UNAVAILABLE, SNAPSHOT_UNAVAILABLE, SCAN_FAILED, RPC_BUDGET_EXHAUSTED: the wallet has no snapshot and none can be produced right now; retry after Retry-After.
  • CONFIG_INVALID: a deployment problem on our side; retry later.
  • FORBIDDEN, CONFLICT: internal admin routes only; public clients never see them.
For retries, partial coverage and null values, see Error handling.