Token due diligence
A team that needs a first pass on a token contract can use the report to collect public fields into one structured record, then decide which ones need a closer look. The report does not say whether a token is good or bad. It gives no score and no view on price.
#Workflow
- Confirm the contract address from the project's own channels. A symbol is not an identifier, and the same symbol can exist on many contracts.
- Run the token report, or call
GET /tokens/{chain}/{address}. It costs 3 units. - Check
sources[]first. A source withok: falseexplains a group ofunknownchecks. - Read
failandwarnrows, then everyunknownrow. An unknown row is a question you still have to answer elsewhere. - Read
holders. Decide which large holders are pools, exchanges or lockers, because the top-holder share includes them. - Open the contract on an explorer for the fields the report does not cover.
- If you need to watch a curated token afterwards, add a Beamline rule. Rules work on curated tokens only.
curl -s "https://farbeamlabs.com/api/v1/tokens/base/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"const res = await fetch("https://farbeamlabs.com/api/v1/tokens/base/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
const { data } = await res.json();
for (const c of data.checks.filter((c) => c.status !== "pass")) {
console.log(c.status, c.id, c.detail, `(${c.source}: ${c.field})`);
}import requests
data = requests.get(
"https://farbeamlabs.com/api/v1/tokens/base/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
timeout=30,
).json()["data"]
for c in data["checks"]:
if c["status"] != "pass":
print(c["status"], c["id"], c["detail"], f"({c['source']}: {c['field']})")#Real sample
USDC on Base, read at 2026-11-04T19:45:26Z. counts was 7 pass, 1 warn, 0 fail and 6 unknown. All three sources answered: DexScreener in 137 ms, chain RPC in 342 ms and GoPlus in 170 ms.
| Check | Status | Detail |
|---|---|---|
liquidity | pass | $8,862,271 across 30 pools |
pool_age | pass | 1156 days |
open_source | pass | Source code is verified |
honeypot | pass | Simulation did not flag a sell block |
proxy | warn | Logic can change through a proxy |
mintable, balance_change, hidden_owner, pausable, blacklist | unknown | Field is absent from the source |
lp_locked | unknown | LP holder data is absent |
This sample shows why unknown matters. USDC has an issuer with admin powers, yet GoPlus returned none of those fields for this proxy contract. A reader who counted unknown as pass would conclude the wrong thing.
#Thresholds
| Check | Warn | Fail |
|---|---|---|
liquidity | Below $100,000 | Below $10,000 |
pool_age | Below 7 days | Below 1 day |
buy_tax, sell_tax | Above 1% | 10% or more |
top10 on EVM | Above 40% | Above 70% |
top10 on Solana | Above 70% | None |
lp_locked | Below 50% | None |
The full list, including contract flags and Solana authorities, is on token checks.
#Rule for afterwards
Tested with POST /rules/validate at 2026-11-04T19:21:20Z. It matched 1 of the newest 1,948 stored rows.
token_address == "0xdac17f958d2ee523a2206206994597c13d831ec7" and usd >= 10m#What this will not do
- It does not predict price, and it says nothing about whether to buy or sell.
- It does not audit a contract. It reads third-party fields and does not review logic.
- It cannot see the project team, its promises or off-chain risks.
- It cannot watch a token outside the curated list with Beamline, because those transfers are not indexed.
- A clean report is not proof of safety, and a
failis not proof of fraud.