Robinhood Chain 4663
famdotfun · API

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.

Base URL https://api.famdotfun.com. The full list of routes is in the docs.

Quick start

no key
Base URLhttps://api.famdotfun.com
KeyNone. Every route here is public and read-only.
FormatJSON. Amounts are strings, so no number loses digits.
Rate limit300 requests a minute per IP. Write to hello@famdotfun.com for more.
From a browserOnly our own sites may call it from a web page (CORS). Call it from your server, a bot or a script.
ChainRobinhood 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 first

Amounts 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.

FieldHow to read it
pair_amount, volume_24h, reserveDivide by 10pair_decimals to get ETH or USDG.
token_amount, sold, balanceDivide by 1018 to get coins.
priceThe 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 /tokens

The board

curl "https://api.famdotfun.com/tokens?status=curve&sort=progress&limit=20"

Answers { "tokens": [ ... ] }, newest first unless you pick a sort.

QueryValues
sortnew (the default), volume, progress, graduated, boost
statuscurve, sold_out, graduated, or graduating (past half its curve, not graduated yet)
categorynew (the last 24 hours), stocks, culture, locked, direct
creatorOnly the launches of one wallet.
qSearch the name, the ticker or the address.
limit, offsetPaging. 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:

FieldWhat it is
tokenThe coin's contract. Every coin has 18 decimals and a fixed supply.
curveThe bonding curve it trades on until it graduates.
creatorThe wallet that launched it.
pair_token, pair_decimalsWhat it is priced in. The zero address 0x000…000 is ETH.
name, symbol, image, descriptionWhat the creator typed at launch, plus website, twitter and telegram.
priceThe last price, in the pair's smallest unit per whole coin. See reading amounts.
sold, curve_supplyCoins sold off the curve, and how many it sells in all. sold / curve_supply is the progress bar.
phase, bonded, statusWhere the coin is: on the curve, sold out, or graduated into its Uniswap v4 pool.
volume_24h, volume_totalVolume in the pair's smallest unit.
launched_at, block, txWhen and where it was launched.
boostedWhether it holds a boost slot this hour.
usd, holdersOne 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/holders
curl "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 /pairs
curl "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 /stream

Server-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));
  }
}
EventWhat it carries
tradeA buy or sell: token, side, trader, pairAmount, tokenAmount, price, tx, at.
launchA new coin: token, symbol, name, creator, mode, launched_at.
graduatedA coin sold out its curve and moved into its pool.
feeFees moved for a coin.
bagMoney into or out of the Bag, with the token when there is one.
messageA new chat message on a coin.
pingEvery 25 seconds, to keep the connection open.

Limits & errors

per IP
Over the limit429. Every answer carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset (seconds).
Unknown coin404 with {"error":"unknown token"}.
Unknown route404 with a docs link back to this page.
Live stream10 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 needed

Everything 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 Launched event on the factory, or DirectLaunched on the portal.
  • Curve trades are Bought and Sold events 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