{"openapi":"3.0.3","info":{"title":"Famspad Public API","version":"1.0.0","description":"Read-only market data for memecoins launched on Famspad (Robinhood Chain, chainId 4663). Use it to auto-list tokens, power aggregators/trackers, or feed wallets and bots. No auth, CORS open, cached ~15s.\n\n**Real-time:** for live trades don't poll — subscribe to the push feed. Two transports carry the same `{ type, ts, data }` messages (type = `trade` | `token.created` | `token.graduated`): Server-Sent Events at `GET /stream` (documented below) and WebSocket at `wss://famspad.com/api/v1/ws`. Both accept `?token=0x…` and `?types=trade,token.created` filters. Historical trades stay at `/tokens/{contractAddress}/trades`.","contact":{"name":"Famspad","url":"https://famspad.com"}},"servers":[{"url":"https://famspad.com/api/v1","description":"Famspad API v1"}],"tags":[{"name":"Discovery"},{"name":"Tokens"},{"name":"Market"},{"name":"Realtime"},{"name":"Platform"},{"name":"Aggregator"}],"paths":{"/":{"get":{"tags":["Discovery"],"summary":"API index","operationId":"getIndex","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/stats":{"get":{"tags":["Platform"],"summary":"Platform aggregates","operationId":"getStats","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformStats"}}}}}}},"/tokens":{"get":{"tags":["Tokens"],"summary":"List tokens (newest first)","operationId":"listTokens","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":100,"maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}},{"name":"status","in":"query","schema":{"type":"string","enum":["all","bonding","listed"],"default":"all"},"description":"bonding = on the curve · listed = on Uniswap"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenList"}}}}}}},"/tokens/{contractAddress}":{"get":{"tags":["Tokens"],"summary":"One token","operationId":"getToken","parameters":[{"name":"contractAddress","in":"path","required":true,"schema":{"type":"string"},"description":"Token contract address (0x…)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"404":{"description":"Token not found"}}}},"/tokens/{contractAddress}/trades":{"get":{"tags":["Market"],"summary":"Recent trades (newest first)","operationId":"getTrades","parameters":[{"name":"contractAddress","in":"path","required":true,"schema":{"type":"string"},"description":"Token contract address (0x…)"},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"maximum":1000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeList"}}}},"404":{"description":"Token not found"}}}},"/tokens/{contractAddress}/ohlc":{"get":{"tags":["Market"],"summary":"OHLC price candles","operationId":"getOHLC","parameters":[{"name":"contractAddress","in":"path","required":true,"schema":{"type":"string"},"description":"Token contract address (0x…)"},{"name":"resolution","in":"query","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"],"default":"1h"}},{"name":"limit","in":"query","schema":{"type":"integer","default":200,"maximum":1000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandleList"}}}},"404":{"description":"Token not found"}}}},"/dex/latest-block":{"get":{"tags":["Aggregator"],"summary":"Latest indexed block","operationId":"dexLatestBlock","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/dex/asset":{"get":{"tags":["Aggregator"],"summary":"Asset (token) by id","operationId":"dexAsset","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"},"description":"Token address, or \"ETH\" for the native asset"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Token not found"}}}},"/dex/pair":{"get":{"tags":["Aggregator"],"summary":"Pair by id","operationId":"dexPair","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"},"description":"Pair/curve/token address"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Token not found"}}}},"/dex/events":{"get":{"tags":["Aggregator"],"summary":"Swap events in a block range","operationId":"dexEvents","parameters":[{"name":"fromBlock","in":"query","schema":{"type":"integer"}},{"name":"toBlock","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer","default":1000,"maximum":5000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/stream":{"get":{"tags":["Realtime"],"summary":"Real-time event stream (Server-Sent Events)","description":"A long-lived `text/event-stream` response. Each SSE message's `data:` line is a JSON `{ type, ts, data }` envelope — type is `hello`, `ping` (heartbeat comment, no event), `trade`, `token.created` or `token.graduated`. Consume with `new EventSource(url).onmessage`. A WebSocket with identical messages is at `wss://famspad.com/api/v1/ws`.","operationId":"stream","parameters":[{"name":"token","in":"query","schema":{"type":"string"},"description":"Restrict trade messages to one contract address (0x…)"},{"name":"types","in":"query","schema":{"type":"string"},"description":"Comma-separated subset of trade,token.created,token.graduated"}],"responses":{"200":{"description":"Event stream","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/StreamMessage"}}}}}}}},"components":{"schemas":{"Token":{"type":"object","properties":{"chainId":{"type":"integer","example":4663},"chain":{"type":"string","example":"robinhood"},"address":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"symbol":{"type":"string","nullable":true},"decimals":{"type":"integer","example":18},"totalSupply":{"type":"string","example":"1000000000"},"logoURI":{"type":"string","nullable":true},"description":{"type":"string"},"links":{"type":"object","properties":{"website":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"telegram":{"type":"string","nullable":true}}},"creator":{"type":"string","nullable":true},"status":{"type":"string","enum":["bonding","listed"]},"graduated":{"type":"boolean"},"priceUsd":{"type":"number","nullable":true},"marketCapUsd":{"type":"number","nullable":true},"volume":{"type":"object","properties":{"h24Usd":{"type":"number","nullable":true},"totalUsd":{"type":"number","nullable":true}}},"fees":{"type":"object","properties":{"buyPercent":{"type":"number"},"sellPercent":{"type":"number"}}},"creatorFeesEarnedEth":{"type":"number","nullable":true},"curveAddress":{"type":"string","nullable":true},"pairAddress":{"type":"string","nullable":true},"createdAt":{"type":"integer","nullable":true},"urls":{"type":"object","properties":{"famspad":{"type":"string"},"explorer":{"type":"string","nullable":true},"api":{"type":"string","nullable":true}}}}},"TokenList":{"type":"object","properties":{"chainId":{"type":"integer"},"updatedAt":{"type":"integer"},"ethUsd":{"type":"number"},"count":{"type":"integer"},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/Token"}}}},"Trade":{"type":"object","properties":{"ts":{"type":"integer","description":"ms epoch"},"side":{"type":"string","enum":["buy","sell"]},"priceUsd":{"type":"number"},"priceEth":{"type":"number"},"volumeUsd":{"type":"number"},"volumeEth":{"type":"number"}}},"TradeList":{"type":"object","properties":{"chainId":{"type":"integer"},"address":{"type":"string"},"symbol":{"type":"string"},"trades":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}}}},"Candle":{"type":"object","properties":{"time":{"type":"integer","description":"unix seconds (bucket start)"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volumeUsd":{"type":"number"}}},"CandleList":{"type":"object","properties":{"chainId":{"type":"integer"},"address":{"type":"string"},"symbol":{"type":"string"},"resolutionSec":{"type":"integer"},"quote":{"type":"string"},"candles":{"type":"array","items":{"$ref":"#/components/schemas/Candle"}}}},"PlatformStats":{"type":"object","properties":{"chainId":{"type":"integer"},"chain":{"type":"string"},"updatedAt":{"type":"integer"},"ethUsd":{"type":"number"},"tokensTracked":{"type":"integer"},"volume24hUsd":{"type":"number"},"volumeTotalUsd":{"type":"number"},"paidToCreatorsUsd":{"type":"number"}}},"StreamMessage":{"type":"object","description":"One real-time message (SSE data: line, or a WS frame).","properties":{"type":{"type":"string","enum":["hello","ping","trade","token.created","token.graduated"]},"ts":{"type":"integer","description":"ms epoch"},"data":{"type":"object","nullable":true,"description":"type=trade: { chainId, address, symbol, name, side(buy|sell), priceEth, priceUsd, volumeEth, volumeUsd, block, txnId, ts } (priceUsd/volumeUsd may be null until the ETH/USD rate is known). type=token.created: the full Token object. type=token.graduated: { chainId, address, symbol, name, status, graduated, priceUsd, marketCapUsd }."}}}}}}