Public API
The JSON endpoints behind this site. They are read-only, need no key, and read straight from Robinhood Chain, so you can build your own dashboards, bots, or alerts on top of Feeroute.
Conventions
| Topic | Convention |
|---|---|
| Base URL | This site's domain, for example https://<domain>/api/vaults |
| Amounts | Decimal strings in the smallest unit: wei for ETH, and 18 decimals for Pons tokens |
| Shares | bps in basis points: 10,000 = 100%. Fields ending in Share are percentages. |
| Times | Unix seconds. Days are UTC, formatted YYYY-MM-DD. |
| Addresses | Any casing is accepted in parameters. Compare addresses in responses case-insensitively. |
| Errors | { "error": "…" } with 400 for bad parameters, 404 for unknown tokens or vaults, 502 when the RPC fails. |
GET/api/vaults
Every Feeroute vault, one per token, with its split, settings, routing status, and lifetime total.
Cache: 30 s (shared caches up to twice that){
"vaults": [{
"vault": "0x…", "token": "0x…", "name": "Your Token", "symbol": "YOURTOKEN",
"owner": "0x…", "ownerBps": 4500, "creatorCapBps": 5000, "timelock": 172800,
"splits": [{ "account": "0x…", "bps": 4500, "vestSeconds": 0, "label": "Creator" }, …],
"hasVesting": true, "routed": true,
"totalSwept": "70000000000000000", "createdBlock": "89350550", "lastSweep": 1792080674
}]
}GET/api/protocol
Totals across all vaults, 30 days of sweeps, the latest sweeps, and the vaults that split the most.
Cache: 60 s (shared caches up to twice that){
"vaults": 1, "routed": 1, "recipients": 4, "sweeps": 2,
"totalRouted": "70000000000000000", "heldForRecipients": "21000000000000000",
"daily": [{ "day": "2026-10-15", "amount": "20000000000000000", "sweeps": 1 }, …],
"recent": [{ "vault": "0x…", "symbol": "YOURTOKEN", "amount": "…", "t": 1792080674, "txHash": "0x…" }, …],
"top": [{ "token": "0x…", "symbol": "YOURTOKEN", "totalSwept": "…", "ownerBps": 4500, "routed": true }, …]
}GET/api/analytics
Trading analytics for any Pons v2 token's bonding curve: creator earnings, volume, price, activity by hour, top traders, largest trades.
| Parameter | Value |
|---|---|
token | Pons v2 token address (required) |
days | 7, 30, or 365 (default 7). Other values round up to the next of these; ranges never start before launch. |
{
"days": 7, "from": 1791676800, "to": 1792083222, "launchedAt": 1791727904,
"totals": {
"creatorEarned": "375013747670214926", "creatorTax": "…", "swapShare": "…", "protocolCut": "…",
"volume": "16840792636370692830", "trades": 681, "buys": 406, "sells": 275,
"traders": 97, "biggestTrade": "390053940999993110"
},
"daily": [{ "day": "2026-10-11", "fromBuys": "…", "fromSells": "…", "volume": "…",
"trades": 287, "traders": 75, "close": 2.4e-9 }, …],
"price": [{ "t": 1791727863, "p": 1.79e-9, "side": "buy" }, …],
"heatmap": [[0, 3, …24 hours], …7 weekdays, UTC],
"topTraders": [{ "address": "0x…", "bought": "…", "sold": "…", "trades": 154 }, …],
"largestTrades": [{ "txHash": "0x…", "t": …, "side": "buy", "eth": "…", "tokens": "…", "trader": "0x…" }, …]
}GET/api/holders
Holder distribution rebuilt from every Transfer since launch. The curve, burn addresses, and Pons and Feeroute contracts are left out.
| Parameter | Value |
|---|---|
token | Pons v2 token address (required) |
{
"holders": 37, "transfers": 1631, "top10Share": 86.77,
"totalSupply": "1000000000000000000000000000", "circulating": "185278512303004776291485221",
"top": [{ "address": "0x…", "balance": "…", "share": 37.68 }, …20],
"distribution": [{ "label": "≥ 5%", "count": 5 }, …],
"excluded": [{ "address": "0x…", "label": "Bonding curve (unsold supply)", "balance": "…" }, …],
"newHolders": [{ "day": "2026-10-11", "count": 15 }, …]
}GET/api/activity
Every event a vault has emitted, newest first, with a readable title and the recipients' labels.
| Parameter | Value |
|---|---|
vault | Vault address (required) |
token | The vault's token (required) |
{
"createdBlock": "89350550", "createdAt": 1792080020,
"items": [{
"id": "0x…-6", "event": "Swept", "category": "sweep", "title": "Swept 0.0200 ETH with split v1",
"amount": "20000000000000000", "account": "0x…", "txHash": "0x…", "block": "89350559", "t": 1792080674
}, …],
"labels": { "0x…": "Creator", "0x…": "Dev team" }
}GET/api/recipients
Each current and past recipient of a vault: what it received, what was paid, what is vesting, and what it can release.
| Parameter | Value |
|---|---|
vault | Vault address (required) |
token | The vault's token (required) |
{
"recipients": [{
"account": "0x…", "label": "Dev team", "bps": 3000, "vestSeconds": 2592000, "current": true,
"received": "21000000000000000", "paid": "0", "vested": "21000000000000000",
"deferred": "0", "released": "0", "releasable": "24104173494354",
"locked": "20975895826505646", "vestEnd": 1794672246
}, …]
}GET/api/earnings
Every vault that pays, or once paid, a wallet.
| Parameter | Value |
|---|---|
wallet | Any address (required) |
{
"earnings": [{
"vault": "0x…", "token": "0x…", "name": "Your Token", "symbol": "YOURTOKEN",
"label": "Dev team", "bps": 3000, "vestSeconds": 2592000,
"received": "21000000000000000", "releasable": "24104173494354",
"locked": "20975895826505646", "vestEnd": 1794672246
}]
}GET/api/tokens
Pons v2 tokens whose creator fees a wallet controls, directly or as owner of their vault, with each curve's fee settings.
| Parameter | Value |
|---|---|
wallet | Any address (required) |
{
"tokens": [{
"token": "0x…", "curve": "0x…", "name": "Your Token", "symbol": "YOURTOKEN",
"deployer": "0x…", "recipient": "0x…", "status": "vault", "vault": "0x…", "vaultOwner": "0x…",
"nativeQuote": true, "creatorTaxBps": 150, "feeBps": 100, "protocolFeeShareBps": 3000,
"graduated": false, "graduationProgressBps": 957
}]
}GET/api/token
Where a Pons v2 token's creator fees go: the token and curve settings, and, if it has a Feeroute vault, its report (split, timelock, pending changes, totals, latest sweeps). Powers the token checker and the watchlist.
| Parameter | Value |
|---|---|
token | Pons v2 token address (required) |
{
"token": {
"token": "0x…", "curve": "0x…", "name": "Your Token", "symbol": "YOURTOKEN",
"recipient": "0x…", "status": "vault", "vault": "0x…", "vaultOwner": "0x…",
"creatorTaxBps": 150, "feeBps": 100, "protocolFeeShareBps": 3000,
"graduated": false, "graduationProgressBps": 957
},
"report": {
"vault": "0x…", "owner": "0x…", "routed": true, "ponsPending": null,
"timelock": 172800, "creatorCapBps": 5000, "ownerBps": 4500, "version": 1,
"splits": [{ "account": "0x…", "bps": 4500, "vestSeconds": 0, "label": "0x43726561746f72…" }, …],
"pendingSplits": null, "pendingRoute": null,
"totals": { "earned": "…", "distributed": "…", "waiting": "…", "owed": "…" },
"sweeps": [ …latest 5 ], "changes": [ …latest 5 ]
}
}GET/api/changes
Split and route changes waiting in a timelock on any vault, Pons admin recipient changes queued for vault tokens, and the history of proposals, changes that went live, and cancellations (latest 200).
Cache: 30 s (shared caches up to twice that){
"pending": [{
"token": "0x…", "symbol": "YOURTOKEN", "vault": "0x…",
"kind": "split", "title": "New split 40/30/20/10", "eta": 1792253222,
"splits": [{ "bps": 4000, "label": "Creator" }, …]
}],
"history": [{
"token": "0x…", "symbol": "YOURTOKEN", "vault": "0x…", "kind": "executed", "subject": "split",
"title": "Vault created with split 45/30/15/10", "txHash": "0x…", "t": 1792080020
}, …],
"checkedAt": 1792083222
}GET/api/sweeps
Every sweep across Feeroute vaults, newest first, with the split version it used and who called it. The latest 500 carry timestamps; the totals cover all of them.
Cache: 30 s (shared caches up to twice that){
"total": 2, "totalAmount": "70000000000000000",
"sweeps": [{
"token": "0x…", "symbol": "YOURTOKEN", "vault": "0x…", "amount": "20000000000000000",
"version": 1, "caller": "0x…", "txHash": "0x…", "block": "89350559", "t": 1792080674
}, …]
}GET/api/status
Health of the RPC, the factory, and the sweep bot, as shown on the Status page.
Cache: none, always live{
"chainId": 4663, "block": "89350562", "blockTime": 1792083222, "rpcLatencyMs": 32,
"factory": "0x…", "vaults": 1,
"bot": { "address": "0x…", "balance": "999853366813665750", "lastSweep": 1792080674 },
"cronConfigured": true, "supabase": false, "checkedAt": 1792085671
}GET/api/price
ETH/USD spot price from Coinbase, used for the dollar figures on this site, or null when it is unavailable.
Cache: 120 s (shared caches up to twice that){ "ethUsd": 2443.89 }Embeddable badge
Every vault has an SVG badge for a token's website or README. It shows whether fees are routed and the live split, for example “fees public · 45/30/15/10”, and refreshes every five minutes. Wrap it in a link to the public report.
<a href="https://<domain>/r/<token>"> <img src="https://<domain>/r/<token>/badge.svg" alt="Fees split by Feeroute" height="28" /> </a>