The answer
Both checks answer in the same shape. Your code reads one field, action; a person reads one sentence, summary.
A real answer
A token check on Base, 14 Oct 2026: a token whose creator kept the power to make tokens at will, paid for by a wallet behind earlier rugs. Shortened:
The fields
- verdict
allow,cautionorblock. - actionThe same decision for code:
proceed,limit_exposureordo_not_proceed. - summaryOne plain sentence, written to be shown to a person: the decision, then the most important details.
- reasonsEach with a
code, aseverityand a sentence, most serious first. Every code: reason codes. - risk_scoreThe points behind the decision, 0 to 100: caution from 30, block from 70. Some findings decide on their own, whatever the score: a sale that fails always blocks.
- confidence
highwhen every check finished,mediumwhen one could not (it is then named inchecks_failed). - checks_run, checks_failedWhich checks answered, and which could not finish. A failed check never counts in a token's favour.
- block, as_of, rulesetThe exact block and time the answer was true, and the version of the rules that produced it.
- cached
truewhen the answer came from a short cache (see below). - request_idThis request's id, inside the signed answer, so an answer can't be passed off as another request's. Quote it if you report an answer.
- signatureProof that the answer is ours and unchanged: signatures.
- token, wallet, address_typeThe facts behind the answer: token, wallet.
What each answer means
| Reply | What it means | What a platform usually does |
|---|---|---|
Allow200 proceed | No blocking risks found. | Trade. |
Caution200 limit_exposure | Real risks, listed in reasons. | Warn the user, or cap the size. |
Block200 do_not_proceed | A trap, a scam or a sanctioned address. summary says why. | Refuse, and show the summary. |
Unknown503 CHECKS_INCOMPLETE | A check we need couldn't finish. Not an answer, and never charged. | Treat as not verified. Ask again after Retry-After seconds. |
"Allow" is not a guarantee. It means we found nothing that should stop the trade at the moment we looked. A token can still fall in price, and things can change after the check.
Freshness
An answer may come from a short cache, keeping its original as_of and block: at most 30 seconds for most tokens, 60 seconds for wallets, 5 minutes for well-known tokens, and 10 minutes for blocks that don't lift. An answer with a failed check is never cached. Cache-Control: no-cache forces a fresh check.
When to ask again
A caution that lists a check in checks_failed is worth asking again a few seconds later (with a new Idempotency-Key if you send one). The usual cause is a token we are seeing for the very first time.