Safety layer
Open blocklist
Robinhood Chain coins that Toll's own reads put at BLOCK, with the reason, the dates and a link to the evidence. Free, machine-readable, for any wallet, router, bot or agent.
On this page
What is on it
26,439 coins right now, built 2026-11-08 16:51 UTC.
Every entry comes from something Toll already decides and stores. Nothing here is a new judgment:
- Stored coin checks: a coin whose newest stored check carries a finding that the pre-buy and pre-sign checks answer BLOCK on (for example sells that fail through the pool’s hook).
- The launch record: a coin scored rugged 24 h after launch on /record, with the transaction when the launch liquidity was removed.
Coins only for now (kind token). Toll keeps no stored list of bad contracts or wallets, so none are listed; an unlimited approval to a plain wallet is a pattern the pre-sign check catches, not an address.
Reason codes
A program branches on the code; the sentence can be reworded. Each one is a fact the evidence page shows.
| Code | What it means | From | Coins |
|---|---|---|---|
| sells_fail | A small test sell through the coin's main pool failed: its hook stops sells. | stored check | 1 |
| lp_pullable | One wallet holds the main pool's liquidity and can pull it. | stored check | 0 |
| dev_sold | The dev sold a large share of the supply. | stored check | 990 |
| first_seconds_buys | Wallets bought a large share of the supply in the pool's first seconds of trading. | stored check | 17 |
| declared_bundle | The launch made wallets other than the dev exempt from the opening tax (a declared bundle). | stored check | 207 |
| holder_concentration | The ten biggest wallets hold most of the supply. | stored check | 0 |
| dev_coordinated_sell | The dev sold in the same tenth of a second as other wallets. | stored check | 136 |
| linked_wallets_hold | Linked wallets (one funder, or bought together) hold a large share of the supply now. | stored check | 0 |
| large_sell_into_pool | A wallet sold a large share of the supply into the pool or curve. | stored check | 0 |
| strong_finding | A finding that Toll's pre-buy check blocks on; the check page names it. | stored check | 0 |
| rugged_24h | Rugged within 24 h of launch, as scored on Toll's launch record (/record). | launch record | 25,877 |
| lp_removed_24h | Whoever added the launch liquidity removed most of it within 24 h of launch (the tx is given). | launch record | 15,224 |
Pull it
GET https://t0ll.xyz/api/blocklist: JSON by default, ?format=csv or ?format=txt; ?since=<ISO time> for entries confirmed from then; ?kind=token. No key. It is built from stored reads, kept up to 10 minutes, and carries an ETag, so a poll that changes nothing costs a 304. 30 requests a minute per caller. Also in /openapi.json.
# the whole list (JSON), then only what changed since your last pull
curl -s https://t0ll.xyz/api/blocklist
curl -s "https://t0ll.xyz/api/blocklist?since=2026-11-08T00:00:00Z"
# CSV, or one address per line
curl -s "https://t0ll.xyz/api/blocklist?format=csv" -o toll-blocklist.csv
curl -s "https://t0ll.xyz/api/blocklist?format=txt" -o toll-blocklist.txt
# send back the ETag you got: 304 when nothing changed
curl -s -H 'If-None-Match: W/"<etag>"' https://t0ll.xyz/api/blocklist -o /dev/null -w "%{http_code}\n"One entry:
{
"address": "0x…",
"kind": "token",
"chain": 4663,
"symbol": "…",
"reasons": ["rugged_24h", "lp_removed_24h"],
"first_seen": "2026-11-07T12:00:00.000Z",
"last_confirmed": "2026-11-07T12:00:00.000Z",
"evidence": "https://t0ll.xyz/check/0x…",
"tx": "0x…"
}Use it
- A wallet: before showing a swap or a transfer of a coin, look it up and show the reason and the evidence link next to the button.
- A router or aggregator: refuse, or ask for a second click, on a route that buys a listed coin.
- A trading bot or an agent: pull the list every few minutes with the ETag and skip listed coins. A coin that is not listed is not cleared: for a coin you are about to buy, ask pre_buy_check or check_tx.
const res = await fetch("https://t0ll.xyz/api/blocklist");
const { entries } = await res.json();
const blocked = new Map(entries.map((e) => [e.address, e])); // addresses are lowercase
export function tollBlock(token) {
return blocked.get(token.toLowerCase()) ?? null; // { reasons, evidence, ... } or null
}import requests
r = requests.get("https://t0ll.xyz/api/blocklist", timeout=20)
blocked = {e["address"]: e for e in r.json()["entries"]}
def toll_block(token: str):
return blocked.get(token.lower()) # the entry, or NoneLatest additions
| Coin | Reasons | First seen | Tx |
|---|---|---|---|
| Coin0x1b12…0b30 0x1b12…0b30 | Reasonsrugged_24h | First seen2026-11-08 16:51 UTC | Txnone stored |
| CoinMindy 0x46fd…c4cb | Reasonsdev_sold | First seen2026-11-08 16:49 UTC | Txnone stored |
| Coin0x6454…4166 0x6454…4166 | Reasonsrugged_24h | First seen2026-11-08 16:49 UTC | Txnone stored |
| Coin0x9f87…2e03 0x9f87…2e03 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:49 UTC | Tx0x8a4e…d6fd |
| Coin0xb627…d1d4 0xb627…d1d4 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:49 UTC | Tx0xfcb6…f431 |
| Coin0x1a83…8f39 0x1a83…8f39 | Reasonsrugged_24h | First seen2026-11-08 16:48 UTC | Txnone stored |
| Coin0x624c…224e 0x624c…224e | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:45 UTC | Tx0xa8d1…6b9b |
| Coin0xe94e…f24c 0xe94e…f24c | Reasonsrugged_24h | First seen2026-11-08 16:45 UTC | Txnone stored |
| Coin0x1312…eb50 0x1312…eb50 | Reasonsrugged_24h | First seen2026-11-08 16:43 UTC | Txnone stored |
| CoinYOURGP 0x0240…c48b | Reasonsdeclared_bundle | First seen2026-11-08 16:42 UTC | Txnone stored |
| Coin0x5022…c696 0x5022…c696 | Reasonsrugged_24h | First seen2026-11-08 16:41 UTC | Txnone stored |
| CoinW 0x24cc…4a6f | Reasonsdev_sold | First seen2026-11-08 16:40 UTC | Txnone stored |
| Coin0x337b…338f 0x337b…338f | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:38 UTC | Tx0x8a6a…46ca |
| Coin0x5be5…83ef 0x5be5…83ef | Reasonsrugged_24h | First seen2026-11-08 16:38 UTC | Txnone stored |
| Coin0x73df…1f47 0x73df…1f47 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:38 UTC | Tx0x0f55…cc96 |
| Coin0x8081…1d21 0x8081…1d21 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:38 UTC | Tx0x9cca…36c2 |
| Coin0xb93c…64b1 0xb93c…64b1 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:38 UTC | Tx0x10aa…a0da |
| Coin0x58ba…1df6 0x58ba…1df6 | Reasonsrugged_24h, lp_removed_24h | First seen2026-11-08 16:36 UTC | Tx0xfadf…ac6c |
| Coincoded 0x0076…b187 | Reasonsdev_sold | First seen2026-11-08 16:32 UTC | Txnone stored |
| CoinINVESTOR 0x2cab…1a57 | Reasonsdev_sold | First seen2026-11-08 16:32 UTC | Txnone stored |
Changes
- 2026-11-08: 1,079 added
- 2026-11-07: 1,589 added
- 2026-11-06: 1,807 added
- 2026-11-05: 1,301 added
- 2026-11-04: 1,117 added
- 2026-11-03: 1,291 added
- 2026-11-02: 1,094 added
- 2026-11-01: 1,041 added
- 2026-10-31: 1,048 added
- 2026-10-30: 1,142 added
- 2026-10-29: 1,426 added
- 2026-10-28: 716 added
- 2026-10-27: 805 added
- 2026-10-26: 912 added
Additions per UTC day, by first seen; the JSON carries the same list as changelog. A coin leaves the list when its newest stored check no longer carries the reason; a launch-record entry stays while the record keeps the coin (30 days). The day a coin left is not kept yet, so pull the whole list once a day to drop removed entries.
License
Free to use, including in commercial products. Attribution: Toll, t0ll.xyz. Link back to t0ll.xyz/blocklist where you show it.
What it is not
- Not advice, and not a verdict on any person: each reason is a fact read from the chain, with its evidence.
- Not a list of every bad coin: only coins Toll has read and stored (the newest stored checks, and launches of the last 30 days).
- Not a list of good coins: a coin missing from it is only a coin we did not put on it.
- The rules behind a reason are not published here; /record shows how Toll’s launch calls turned out.