Everything needed to decide about a token, in one call
One document instead of six calls: the signed verdict, the trust score with the signals that made it, both liquidity figures with lock and burn, the 24-hour market on the deepest pool, holder concentration, the deployer's history and the flags. Fields arrive in a fixed order — verdict is early enough to decide on before the body finishes — and empty blocks are omitted rather than sent as null, because a null invites a reader to treat "not measured" as a measured zero.
A real token's brief is under two kilobytes. Poll it with If-None-Match: an unchanged token answers 304 and costs neither payment nor context.
A keyless caller past its budget can pay per call with x402, as on every priced operation; a caller with an API key is never challenged. The embedded verdict is the verdict endpoint's object unchanged, so a chain with no oracle carries status: "unknown" and no signature here too.
Path Parameters
chain slug (ton) or numeric chain id (950000)
1 <= length <= 32chain-native address; EVM addresses are case-insensitive
1 <= length <= 128Header Parameters
the ETag of the brief you already hold. An unchanged token answers 304 with no body, and costs neither payment nor context. This is the intended way to poll.
length <= 128payment methods the client can use, comma-separated, case-insensitive. With x402 in the list, a spent keyless budget answers 402 with the x402 challenge instead of 429.
base64 x402 v2 payment payload for this request. A paid request skips the keyless budget and is settled only when it answers 2xx. The v1 header X-PAYMENT is accepted too.
Response Body
application/json
application/problem+json
application/problem+json
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/chains/string/tokens/string/brief"{ "chain": "hyperliquid", "as_of": "string", "source": "string", "verdict": { "token_address": "string", "chain": "hyperliquid", "chain_id": 0, "status": "string", "reasons": [ "string" ], "reason_bits": 0, "verdict_at": "string", "signed_at": "string", "expires_at": "string", "signature": "string", "signer": "string", "oracle_address": "string" }, "score": { "value": 0, "title": "string", "signals": [ { "kind": "string", "weight": 0 } ] }, "liquidity": { "usd": 0, "onchain_usd": 0, "locked_pct": 0, "burned_pct": 0, "earliest_unlock_at": "string" }, "market": { "price_usd": 0, "volume_24h": 0, "trades_24h": 0, "change_24h": 0, "best_pair": "string", "dex": "string" }, "holders": { "top10_pct": 0, "count": 0 }, "deployer": { "address": "string", "launches": 0, "rugs": 0, "status": "string" }, "flags": [ "string" ]}Merkle proof of a verdict at the last published epoch GET
The audit path, and the companion to the verdict. It answers "what did avee commit to at epoch N", never "is this token blocked now" — for that, read the verdict, or `isBlocked` on the oracle contract. Verify the returned path with `AveeTrustOracle.verifyLeaf(epoch, token, verdict, proof)`. No key, for the same reason the verdict needs none: a commitment nobody can check is not a commitment. A token absent from the published epoch is `404` — it was not committed to, which is a different fact from being committed to as unblocked.
Canonical token by id GET
Next Page