04API
Same numbers,
as JSON.
The map is built on these endpoints. Clients never pass an RPC or price URL — sources are fixed server-side and named in every response.
GET /v1/snapshot
One finalized read for 1–3 basket mints: identity checks, decoded index, supply, every vault and the price bundle.
curl "https://basketmap.app/v1/snapshot?mints=<mintA>,<mintB>"
{
"slot": 466897193, "commitment": "finalized",
"consistency": "atomic", // | "cached" | "unstable_snapshot"
"adapter": "diversifi-index@2.1.0",
"baskets": [{ "input": "<mintA>", "kind": "registry", "supply": "1987803419",
"layout": { "bytes": 348, "slots": 8, "version": "v2" },
"checks": [...], "constituents": [{ "mint": "...", "targetBps": 3500,
"vault": "...", "vaultExists": true, "raw": "1526444996376" }] }],
"prices": { "<mint>": { "usd": 0.3316, "slot": 466897166, "source": "jupiter-price-v3" } },
"evidence": [{ "address": "...", "role": "vault", "sha256": "..." }]
}GET /v1/registry
Supported baskets with targets and constituent symbols, plus the count of detected indexes.
Reports
A report = snapshot + your quantities, evaluated by the open engine. Holders and API clients get server-kept versions:
POST /v1/reports { network, positions: [{ mint, quantity }], idempotencyKey }
GET /v1/reports/{id} frozen version — never re-read
GET /v1/reports/{id}/evidence
GET /v1/reports/{id}/export
POST /v1/reports/{id}/share → share token · DELETE revokes itA refresh is a new POST and a new id. Reading someone else's private report is refused.
Export schema
schema "basketmap.report/1"
metric "gross look-through of visible vault balances — not net redeemable NAV"
positions[] mint, quantityAtomic, supplyAtomic, axes{}, blockers[], checks[]
constituents[] targetBps, actualBps, vaultRaw, share{numerator, denominator}, state, priceUsd
overlaps[] a, b, value | null, reason
exposure byMint[], knownUsd, totalUsd | null
evidence[] address, role, owner, bytes, sha256Exports keep raw integers and rational shares next to the display values. They never contain an RPC URL, an email or a watchlist.
Limits
- Public lookups: 30 snapshots per minute per client; then
429withretryAfterSec. - Up to 3 baskets and 8 constituents each per report; one batch of ≤ 100 accounts.
- Source timeout 5 s; at most two retries for a moving config; cache 60 s.