Read famdotfun from your own code.
Every coin, trade, candle and holder on famdotfun, as JSON, free and without a key. Built for scanners, trading bots, dashboards and anyone who wants the numbers. The API follows the chain and can be rebuilt from it; the contracts stay the source of truth.
Quick start
no key| Base URL | https://api.famdotfun.com |
| Key | None. Every route here is public and read-only. |
| Format | JSON. Amounts are strings, so no number loses digits. |
| Rate limit | 300 requests a minute per IP. Write to hello@famdotfun.com for more. |
| From a browser | Only our own sites may call it from a web page (CORS). Call it from your server, a bot or a script. |
| Chain | Robinhood Chain, chain id 4663. Buying and selling happen on chain, not through this API. |
Your first call
The five coins with the most volume in the last 24 hours:
curl "https://api.famdotfun.com/tokens?sort=volume&limit=5"The same from JavaScript or TypeScript (Node 18 or newer, Bun, Deno):
const res = await fetch("https://api.famdotfun.com/tokens?sort=volume&limit=5");
const { tokens } = await res.json();
for (const t of tokens) console.log(t.symbol, t.token);And from Python:
import requests
tokens = requests.get("https://api.famdotfun.com/tokens", params={"sort": "volume", "limit": 5}).json()["tokens"]
for t in tokens:
print(t["symbol"], t["token"])Reading amounts
read this firstAmounts come as strings in the asset's smallest unit, the way the chain stores them. ETH and every coin have 18 decimals, USDG has 6. A coin says what it is priced in with pair_token and pair_decimals.
| Field | How to read it |
|---|---|
pair_amount, volume_24h, reserve | Divide by 10pair_decimals to get ETH or USDG. |
token_amount, sold, balance | Divide by 1018 to get coins. |
price | The pair's smallest unit per whole coin. Divide by 10pair_decimals for the price in ETH or USDG. |
A worked example
A coin priced in ETH shows "price": "1127778697". That is 1127778697 / 1018 = 0.00000000113 ETH per coin. With ETH at $2,669 (from /pairs) it is $0.00000301 a coin, and with a supply of one billion the market cap is about $3,010.
const pairs = (await (await fetch("https://api.famdotfun.com/pairs")).json()).pairs;
const coin = await (await fetch("https://api.famdotfun.com/tokens/0x82cad98a22a88443956b697dc6c0e04c13202b0d")).json();
const pair = pairs.find((p) => p.address === coin.pair_token);
const pricePair = Number(coin.price) / 10 ** coin.pair_decimals; // ETH per coin
const priceUsd = pricePair * pair.usd; // dollars per coin
const marketCapUsd = priceUsd * (Number(coin.total_supply) / 1e18);Number is fine for display. For exact sums use BigInt, or Python's int and Decimal.
Coins
GET /tokensThe board
curl "https://api.famdotfun.com/tokens?status=curve&sort=progress&limit=20"Answers { "tokens": [ ... ] }, newest first unless you pick a sort.
| Query | Values |
|---|---|
sort | new (the default), volume, progress, graduated, boost |
status | curve, sold_out, graduated, or graduating (past half its curve, not graduated yet) |
category | new (the last 24 hours), stocks, culture, locked, direct |
creator | Only the launches of one wallet. |
q | Search the name, the ticker or the address. |
limit, offset | Paging. limit is 30 by default and at most 100. |
One coin
curl "https://api.famdotfun.com/tokens/0x82cad98a22a88443956b697dc6c0e04c13202b0d"One object with everything the board row has, plus a few fields of its own. The fields you will use most:
| Field | What it is |
|---|---|
token | The coin's contract. Every coin has 18 decimals and a fixed supply. |
curve | The bonding curve it trades on until it graduates. |
creator | The wallet that launched it. |
pair_token, pair_decimals | What it is priced in. The zero address 0x000…000 is ETH. |
name, symbol, image, description | What the creator typed at launch, plus website, twitter and telegram. |
price | The last price, in the pair's smallest unit per whole coin. See reading amounts. |
sold, curve_supply | Coins sold off the curve, and how many it sells in all. sold / curve_supply is the progress bar. |
phase, bonded, status | Where the coin is: on the curve, sold out, or graduated into its Uniswap v4 pool. |
volume_24h, volume_total | Volume in the pair's smallest unit. |
launched_at, block, tx | When and where it was launched. |
boosted | Whether it holds a boost slot this hour. |
usd, holders | One coin only: the pair's dollar price and the holder count. |
Trades & candles
GET /tokens/:token/…The tape
curl "https://api.famdotfun.com/tokens/0x82cad98a22a88443956b697dc6c0e04c13202b0d/trades?limit=50"{ "trades": [ {
"side": "buy",
"trader": "0x4eecd59c19980022eed08281da990e9c6cde8c8f",
"recipient": "0xefd700f291e75086d84d62c54564a7def732a035",
"pair_amount": "3000000000000000",
"token_amount": "2660096353602991245683756",
"fee": "30000000000000",
"price": "1127778697",
"ts": "2026-09-30T20:51:35.000Z",
"tx": "0xcf25499f5db67a62ff9a933b05b1082907c19a5e30fa8ab98deecc2ff5df360e"
} ] }Newest first, 50 by default and at most 500. recipient is the wallet that got the coins. trader is whoever sent the call, which is a router or the factory when the buy went through one, so count wallets by recipient on a buy and by trader on a sell.
Candles
curl "https://api.famdotfun.com/tokens/0x82cad98a22a88443956b697dc6c0e04c13202b0d/candles?interval=1%20hour&limit=48"interval is one of 1 minute, 5 minutes (the default), 15 minutes, 1 hour, 4 hours, 1 day, with the space written as %20. limit is 288 by default and at most 1000. Each candle is t, open, high, low, close (prices, as above), volume (in the pair) and trades.
Holders
GET /tokens/:token/holderscurl "https://api.famdotfun.com/tokens/0x82cad98a22a88443956b697dc6c0e04c13202b0d/holders?limit=100"The wallets holding the coin, largest first: address, balance, team (a wallet of a team launch) and exempt (bought inside the launch, so it paid no opening tax). At most 100 a page, with offset for the next. The curve is left out: before graduation it holds the unsold supply, and counting it would make every coin look like one wallet owns it.
Prices
GET /pairscurl "https://api.famdotfun.com/pairs"Everything a coin can be priced in, as { "pairs": [ ... ] }. Each has address, symbol, decimals and usd, the dollar price the site uses. ETH is the zero address. Match a coin's pair_token to address to turn its numbers into dollars.
GET /stats gives the totals for the whole site: launches, graduations, volume, trades and traders.
Live stream
GET /streamServer-sent events: one connection, and every trade and launch arrives as it is indexed, a few seconds after it lands on chain. Add ?tokens=0xabc…,0xdef… (up to 100) to hear only those coins.
curl -N "https://api.famdotfun.com/stream"event: trade
data: {"token":"0x82ca…","side":"buy","trader":"0xd2e6…","pairAmount":"3000000000000000",
"tokenAmount":"2660096353602991245683756","price":"1127778697","tx":"0xcf25…","at":"2026-09-30T20:51:35.000Z"}From Node, without a library:
const res = await fetch("https://api.famdotfun.com/stream");
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of res.body) {
buffer += decoder.decode(chunk, { stream: true });
let end;
while ((end = buffer.indexOf("\n\n")) >= 0) {
const block = buffer.slice(0, end);
buffer = buffer.slice(end + 2);
const event = block.match(/^event: (.*)$/m)?.[1];
const data = block.match(/^data: (.*)$/m)?.[1];
if (event === "trade") console.log(JSON.parse(data));
}
}| Event | What it carries |
|---|---|
trade | A buy or sell: token, side, trader, pairAmount, tokenAmount, price, tx, at. |
launch | A new coin: token, symbol, name, creator, mode, launched_at. |
graduated | A coin sold out its curve and moved into its pool. |
fee | Fees moved for a coin. |
bag | Money into or out of the Bag, with the token when there is one. |
message | A new chat message on a coin. |
ping | Every 25 seconds, to keep the connection open. |
Limits & errors
per IP| Over the limit | 429. Every answer carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset (seconds). |
| Unknown coin | 404 with {"error":"unknown token"}. |
| Unknown route | 404 with a docs link back to this page. |
| Live stream | 10 open connections per IP. |
| Is it up? | GET /ready answers 200 while the indexer is in step with the chain, and 503 with a reason when it is not. |
Polling? Once every few seconds is plenty. For anything live, the stream is cheaper for you and for us.
Straight from the chain
no API neededEverything the API serves can be read from the contracts on chain 4663, with no key and no agreement. The contracts, their events and their addresses are in the docs: contract events and addresses.
- A new coin is a
Launchedevent on the factory, orDirectLaunchedon the portal. - Curve trades are
BoughtandSoldevents on the coin's curve, not DEX swaps. - After graduation the coin trades on a Uniswap v4 pool whose liquidity is locked for ever.
- Coins have no owner and no mint function after launch.
Questions, or need a higher limit? hello@famdotfun.com. updated 1 October 2026