Base URL and access token
- Production:
https://api.lucidblock.xyz. Local development:http://127.0.0.1:8789(pnpm dev). - During the private alpha every
/v1/*route except/v1/healthneeds a token. Request one at<CONTACT_EMAIL>. Send it asAuthorization: Bearer $LUCIDBLOCK_TOKENon every request. Never put it in a URL. /v1/health,/openapi.jsonand/need no token.
Your first request in 60 seconds
The first request for a wallet nobody has looked up recently returns202 with a scan job: the API has queued a
bounded scan of the supported protocols. Poll the job (it costs 1 rate-limit unit; a wallet read costs 5), wait the
number of seconds in Retry-After / retry_after_seconds, and when the job reaches succeeded or partial, request
the wallet again to get the 200 snapshot. A wallet with a fresh snapshot returns 200 straight away.
- curl
- JavaScript
- Python
202 (from local development):
Captured example
Captured example
GET /v1/solana/wallets/BWJUG6W67qRq7Xbkv3cLo7m4zEr21oJKg93ens3mLmBg/defi-positions → 202 (captured 2026-11-12 from local positions-202)Reading a response
Read a snapshot in this order. The captured response below is a native-stake wallet (two stake accounts the wallet can withdraw).coverage: did we look everywhere we support?coverage.statusiscomplete_for_supported_protocolshere, and every entry ofcoverage.protocolsiscomplete. A missing position means something only for protocols listedcomplete(Concepts: coverage vs valuation).totals:total_value_usdis a real total only when coverage is complete and every counted leg is priced; otherwise it isnullandtotal_null_reasonssays why.known_value_usdis the sum of the legs we could price (Concepts: totals).positions[]: each position hasassets,debtsandrewardslegs. Each leg has an exactamount, avalue_usd(ornull), itspricing_sourceandvaluation_status, and whether it counts (in_totals) (Concepts: positions, legs and roles).
Captured example
Captured example
GET /v1/solana/wallets/G4VmLamEV6h15gndx7nHn8TTcu7fJkBBNVN3wTugMNtH/defi-positions → 200 (captured 2026-11-12 from local positions-native-stake)Other useful first requests
Rate limits
60 units per minute per IP: a wallet read costs 5 units, everything else costs 1, and at most 20 requests per hour may start a new scan. Every response carriesRateLimit-Remaining; a 429 carries Retry-After. Details:
Rate limits and access.
Next steps
- Concepts: coverage, null-not-zero, totals, freshness.
- Supported protocols and API reference.
- Errors and the FAQ.