Read API
Everything this site shows comes from an indexer we run: a Cloudflare Worker that reads Robinhood Chain and keeps the result in a database. The same endpoints our pages call are open to you — no key, no sign-up, CORS open to any origin. They are a convenience, not an authority: every number below can be re-derived from the contracts, and when the indexer is wrong or down, the chain is still right.
Base URL
https://damp-firefly-4dae.themaisonmau.workers.dev/api
All responses are JSON with ok: true on success and
{ "ok": false, "error": "..." } with a 4xx or 5xx status otherwise. Every endpoint
is GET. Amounts are returned in the quote asset, not in dollars: prices in dollars
are a presentation layer of this site, built from the rates in /api/stats.
Endpoints
GET /api/statsprecios. This is the only place the dollar
rates come from.GET /api/launches?limit= 1-200 (default 50), ?offset=,
?sort= newest | progress | volume.
Each token carries its price, phase, progress, supply, pool reserves
(pool_token_f, pool_quote_f) and its last 24 h
(trades24h, volume24hQuote, change24hPct).GET /api/coin/:tokenholders, stats24h and
reparto, the supply split described under Trust — liquidity,
burned, creator, protocol and market, with the top-10 concentration measured on the market
share alone.GET /api/trades?limit= 1-60 (default 20).GET /api/trades/:token?limit= 1-200 (default 50). Curve trades and pool
trades both appear; the curve field is null for the ones that happened in the
Uniswap pool.GET /api/candles/:token?res= 1m | 5m | 15m |
1h, ?limit= 1-1000 (default 200). There is no daily resolution:
build it by grouping hourly candles, which is what this site does.GET /api/holders/:token?limit= 1-500 (default 100), ?offset=.
Read the tag field before drawing conclusions: an address may be
the pool, the curve, the locker, the hook, the burn address or the creator. The largest
"holder" of a graduated token is normally the pool, and calling that a whale is the most
common mistake made about this data.GET /api/wallet/:addressLimits, caching and what we promise
- Rate limit. 300 requests per minute per IP. Over it you get
429with aRetry-Afterheader. The limit is generous on purpose and enforced approximately: it exists to stop scraping, not to police normal use. - Cache. Responses carry
Cache-Control; most are good for 10-30 seconds at the edge. Honour it — polling faster gets you the same bytes and counts against your limit. - Freshness. The indexer runs every minute.
/api/statsreports its cursor and the chain head so you can see how far behind it is. - Degraded mode. If our database is unavailable, most reads are served from a
snapshot in object storage and the response carries
X-AGI-Degradadowith the timestamp of that snapshot. The live-trades endpoint is the exception: it fails rather than serve stale data, because a frozen "live" feed is worse than none. - Stability. We will add fields without warning and we will try not to remove or rename them. This is a best-effort promise from a small project, not an SLA: if you build something that matters on it, pin what you read and handle a field going missing.
- No authority. If our numbers and the chain disagree, the chain is right. Nothing here should be the only source for a transaction you sign.
- One gotcha. Cloudflare's bot protection sits in front of this Worker and
rejects some default user agents with a
403— Python'surllibis one of them. Send any user agent of your own and it goes through.
An example
curl 'https://damp-firefly-4dae.themaisonmau.workers.dev/api/launches?limit=5&sort=volume'
There is no write API. Launching a token, trading and claiming fees are transactions you sign against the contracts — see Launching a token, Trading on the curve and Claiming fees.