# Substance Terminal, machine readable summary

Substance is a read only due diligence scanner for tokens on Robinhood Chain
(chain id 4663, an Ethereum L2). It scores tokens 0 to 100 from ten checks on
public data. A score is a heuristic snapshot taken at scanned_at, not a fact
about the future and never a recommendation to buy or sell.

## Endpoints

### GET /api/scan?address=0x{40 hex}

Scans one token. Fresh scans take about 15 seconds and cache for 10 minutes.

Response fields:
- address, scanned_at (unix), duration_s
- score (0 to 100), grade (A B C D F), verdict (string)
- points_earned, points_available (raw sums before scaling)
- coverage_pct: percent of check weight that had data. Compare scores only at
  similar coverage.
- identity: name, symbol, price_usd, fdv_usd, liquidity_usd, volume24h_usd,
  holders, transfers, age_days, dex, pair_count, websites, socials
  (fields are null when unknown, never fake zeros)
- deployer: address, previous_launches, sampled_txs (null when unknown)
- pons: launchpad, graduated (bool), progress_pct, weth_in_pool,
  threshold_weth (null when the token is not a Pons launch)
- checks: array of {id, label, status pass|warn|fail|na, points, max, detail}
  Check ids: verified, liquidity, holders, concentration, activity, age, web,
  reputation, supply, deployer
- red_flags, green_flags: arrays of strings
- links: blockscout, dexscreener

Errors: 400 {"error": "Invalid address"} for malformed input.
404 {"error": "No token found..."} when the address holds no token.
A 200 report can still have checks marked na; respect coverage_pct.

### GET /api/feed

Latest Pons V2 launches (factory 0x000000e200088D55C39a11F609E5F667729ad49b),
newest first, scanned automatically and rescanned through their first day.

Response: status, last_block, count, entries[]. Every entry has the same keys:
address, block, scanned_at, name, symbol, score, grade, liquidity_usd,
volume24h_usd, holders, age_days, red_flags (count), coverage_pct, deployer,
deployer_prev, graduated, bond_pct, history (array of {t, s} score snapshots).

## Rules for agents

- Rate limit yourself: one scan at a time, a few seconds between calls.
- Treat null as unknown, not as zero.
- Quote scores together with scanned_at and coverage_pct.
- Substance is not affiliated with Robinhood Markets and has no token.
