Scan
Everything a buyer is being scammed by, for one token on one chain. Free, and it reads the chain.
The Scan category is one tool, scan_token: the free-layer scan §3.7 asks for,
for the person deciding whether to buy.
What it answers
Supply, who can mint more of it, whether the pool's liquidity is locked, the pool's fee parameters, holder concentration over a recent window, and the putty Verify label for the contract.
Three states, and no fourth
Every field settles to its own three-state value:
measuredwith a value,unavailablewithnot_measurablebecause the data source cannot answer,unavailablewithread_failedbecause the read itself failed.
A failed read is never rendered as a 0, an empty list, or a false. This
distinction is the point of the tool: "nobody can mint" and "we could not check
whether anyone can mint" are different facts, and only one of them is a claim
about the token.
Two things it deliberately does not compute
simulation.buy and simulation.sell are not_measurable from a token address
alone. A swap needs a pool, a router, and a quote amount, none of which are in
the request — so putty names the missing input instead of producing a number. A
fabricated buy and sell would be the worst lie on the page, because that is the
number a trader would act on. Quote the real pool and show what the quote said.
holders is a window over recent blocks, not a census, and the field that
reports it says so.
Not the other Scan
@/modules/scan in the source tree is a regex drainer scan over a project's own
sandbox files, aimed at a project owner, served at POST /projects/{id}/scan. The
names are close and the subjects are unrelated. That one is not in this category
and does not belong here: an agent asked to scan a token and told about a repo
has been given the wrong tool.
clearedForMainnet is always false here too — the Verify label this tool
attaches is not an external audit.
research_mentions
Search several social platforms at once for a topic. `platforms` is required rather than defaulted to all, because every platform costs the caller money. A search targeting a named individual is refused. Asynchronous: returns a `jobId`, and the mentions arrive on `research_job_status`.
scan_token
Scan one token on one chain and get everything a buyer is being scammed by: supply, who can mint more of it, whether the pool's liquidity is locked, the pool's fee parameters, holder concentration over a recent window, and the putty Verify label for the contract. FREE, unauthenticated, and it reads the chain but spends nothing of yours. **Every field settles to its own three-state value** — `measured` with a value, `unavailable` with `not_measurable` because the data source cannot answer, or `unavailable` with `read_failed` because the read itself failed. There is no fourth path: a failed read is never rendered as a `0`, an empty list, or a `false`. Two fields are deliberately not measured and say so — `simulation.buy` and `simulation.sell` are `not_measurable` from a token address alone, because a swap needs a pool, a router, and a quote amount, and putty does not fabricate a number a trader would act on; quote the real pool and show what the quote said. `holders` is a WINDOW over recent blocks, not a census, and the window is named in the response. `clearedForMainnet` is always `false` — no putty report, of any label, is an external audit. Use this before buying, and use `verify_contract` when you want the seven checks on the contract behind the token.