Merkle proof of a verdict at the last published epoch

GET
/chains/{chain}/tokens/{address}/proof

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.

Path Parameters

chain*string

chain slug (ton) or numeric chain id (950000)

Length1 <= length <= 32
address*string

chain-native address; EVM addresses are case-insensitive

Length1 <= length <= 128

Response Body

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/proof"
{  "token_address": "string",  "chain": "hyperliquid",  "chain_id": 0,  "epoch": 0,  "root": "string",  "proof": [    "string"  ],  "status": "string"}

Signed token verdict, submittable to the trust oracle GET

What the avee trust oracle holds for one token, signed (EIP-712) so it can be submitted to `AveeTrustOracle.submitAttestation` or carried in a Uniswap v4 `hookData`. No key, no payment: a verdict nobody can read is a verdict nobody can act on. Read `status` and the signature together. `ok` means the oracle holds no block — it is **not** a clearance, and it never means the token was examined and found clean. A token nobody has evaluated answers `200` with `status: "unknown"` and no signature block at all, because a signed zero would be a claim nobody made. Chains with no oracle answer the same way, with `oracle_address` absent. `verdict_at` is when the verdict was reached; `signed_at` is when this response was signed and is the value the signature covers. An attestation can only tighten a verdict on chain: it may raise a status or set one where none exists, never lower one the relayer wrote.

Everything needed to decide about a token, in one call GET

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.