Developers

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

TopicConvention
Base URLThis site's domain, for example https://<domain>/api/vaults
AmountsDecimal strings in the smallest unit: wei for ETH, and 18 decimals for Pons tokens
Sharesbps in basis points: 10,000 = 100%. Fields ending in Share are percentages.
TimesUnix seconds. Days are UTC, formatted YYYY-MM-DD.
AddressesAny 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.
Fair use
Responses are cached for the time shown on each endpoint. Please don't poll faster than that: a request can scan millions of blocks of logs on a shared public RPC. Shapes may still change during the beta.

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)
GET /api/vaults
{
  "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)
GET /api/protocol
{
  "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.

ParameterValue
tokenPons v2 token address (required)
days7, 30, or 365 (default 7). Other values round up to the next of these; ranges never start before launch.
Cache: 30 s (shared caches up to twice that)
GET /api/analytics?token=…&days=…
{
  "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.

ParameterValue
tokenPons v2 token address (required)
Cache: 60 s (shared caches up to twice that)
GET /api/holders?token=…
{
  "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.

ParameterValue
vaultVault address (required)
tokenThe vault's token (required)
Cache: none, always live
GET /api/activity?vault=…&token=…
{
  "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.

ParameterValue
vaultVault address (required)
tokenThe vault's token (required)
Cache: none, always live
GET /api/recipients?vault=…&token=…
{
  "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.

ParameterValue
walletAny address (required)
Cache: none, always live
GET /api/earnings?wallet=…
{
  "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.

ParameterValue
walletAny address (required)
Cache: none, always live
GET /api/tokens?wallet=…
{
  "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.

ParameterValue
tokenPons v2 token address (required)
Cache: 15 s (shared caches up to twice that)
GET /api/token?token=…
{
  "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)
GET /api/changes
{
  "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)
GET /api/sweeps
{
  "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
GET /api/status
{
  "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)
GET /api/price
{ "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.

html
<a href="https://<domain>/r/<token>">
  <img src="https://<domain>/r/<token>/badge.svg" alt="Fees split by Feeroute" height="28" />
</a>