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>.
Captured example
Captured example
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_seconds0…86,400,limit1…500) and the rewards rule:include_rewards_in_total=trueneedsrewardsininclude.
Captured example
Captured example
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 examplenative_stake).
Captured example
Captured example
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: sendAuthorization: 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.
Captured example
Captured example
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: waitRetry-Afterseconds.details.reasonisper_ip_rate(60 units per minute spent) orcold_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 therequest_id.QUEUE_UNAVAILABLE,SNAPSHOT_UNAVAILABLE,SCAN_FAILED,RPC_BUDGET_EXHAUSTED: the wallet has no snapshot and none can be produced right now; retry afterRetry-After.CONFIG_INVALID: a deployment problem on our side; retry later.FORBIDDEN,CONFLICT: internal admin routes only; public clients never see them.