API
The board, as JSON. Data refreshes every 5 minutes; responses are cached for 60 seconds.
Endpoints
GET /api/v1/stats
Latest scan summary: launched_24h, alive, watch, dead, tracked, day7_club, dex_vol_24h, tvl_usd, fees_24h, ts.
GET /api/v1/board?status=alive|watch|dead&pairing=stock|eth|usdg&dex=<id>&page=1&limit=50
Scored pools (latest state joined with pool metadata), best score first.
GET /api/v1/token/{poolAddress}One pool: state, snapshot history (up to 600 points), obituary if dead.
GET /api/v1/survivors?page=1&limit=50
Alive pools older than 7 days, best score first.
GET /api/v1/obituaries?since=<ISO>&cause=<id>&page=1&limit=50
Deaths, newest first, with cause and lifetime.
Every list endpoint is paginated: limit defaults to 50 and is capped at 50, page starts at 1. The response is { items, page, per_page, total, next }; next is the next page number or null.
curl -s https://trenchroach.xyz/api/v1/stats curl -s "https://trenchroach.xyz/api/v1/board?status=alive&pairing=stock&page=2"
Rate limits
Public tier: 60 requests per hour per IP, no key. Builder tier (coming soon): key in x-roach-key, 600 requests per hour, plus WS /v1/stream.
Fields
| field | meaning |
|---|---|
| status | alive (score ≥ 70), watch (40–69), dead (liq < $5K or vol24 < $1K) |
| survival_score | 40·L + 35·B + 25·T, see methodology |
| rug_score | 100 − survival, +25 if liquidity halved since last scan, +15 if sells/buys > 3 |
| age_hours | hours since pool creation (GeckoTerminal pool_created_at) |
| stock_symbol | set when the quote token is a Robinhood Stock Token |
| crossed_6h_at / 24h / 7d | first scan where the pool was alive past that age |
Keys
Not issued yet. Builder keys open soon; each key is shown once.