Read endpoints for bots and builders. Everything here is what the site
itself reads: every token on Robinhood Chain (chain 4663), found from the
chain itself (mint logs, every five minutes), with every launchpad's own events
layered on top where an adapter exists (hood.fun, Hashling, Noxa, Flap, lemon).
Uniswap v3 and v2 pools are indexed for every token, with swaps captured live.
Free, no key. If you post from it, say via hashling.xyz
and link the project page. Questions: support@hashling.xyz.
https://hashling.xyz. JSON, CORS *./api/new, /api/board,
/api/search 60 s, /api/sparks 30 s,
/api/project and /api/history 120 s,
/alerts.xml 300 s, /api/tail not cached. Polling
faster than that returns the same bytes./api/*; over it
you get a block page. If you need more, email us with what you are building.User-Agent that names your bot (e.g. mybot/1.0 (+https://…)). Cloudflare's browser check returns 403 (error 1010) for a few default library agents such as Python-urllib; requests, curl and named agents pass.https://hashling.xyz/p/<slug>; it unfurls with the token's
art or banner.Newest launches across every venue, newest first. The endpoint to poll.
| param | default | meaning |
|---|---|---|
limit | 50 | 1 to 200 |
since | 0 | unix seconds; only rows first seen after this. Pass back the newest you last received. |
launchpad | all launchpads | default excludes asset (registry sync, not launches); hashling_v1, hashling_v2, main, custom (both hood.fun factories), noxa, flap, lemon, asset, unknown (found on chain, no adapter yet) |
curl 'https://hashling.xyz/api/new?limit=5'
{ "count": 5, "newest": 1786900259, "projects": [ … ] }
Without parameters: the legacy payload (curve tokens that have traded on the
hood.fun and Hashling factories, counts, provenance). With
launchpad= it is the paged board over the whole index, server
sorted, 500 per page:
| param | values |
|---|---|
launchpad | any (everything) · all (launchpad index, no noxa/asset) · hashling_v1 · hashling_v2 · main · custom · noxa · flap · lemon · asset · unknown |
status | hatched · bonding · near_graduation · graduation_ready · graduated · refunding · abandoned · unclassified |
active | 1 = traded in the last 24 h on any venue (curve or pool) |
sort | newest · active (last trade) · volume (24 h, ETH-equivalent) · trades (24 h count) · change (24 h gainers) · losers · bonding · raise |
page | 0-based |
curl 'https://hashling.xyz/api/board?launchpad=any&active=1&sort=volume'
{ "page": 0, "pageSize": 500, "total": 2652, "pages": 6, "projects": [ … ] }
Global search over every token on the chain, never filtered by venue:
address (exact), then symbol, then name (prefix, then contains). Ranked by
24 h volume first, so the token that actually trades outranks its clones.
limit 1 to 50 (20). Same rows as the board.
Sparkline series for up to 60 tokens in one call: window=0
(default) returns the last 40 trades (curve and pool merged); window=N
seconds returns the last N seconds sampled to 40 buckets (last price per bucket,
carried forward). { "window": N, "sparks": { "0x…": { "points": [[ts, price], …] } } }
One project by slug, any venue.
What traded in a window across curves and pools: minutes
(minimum 10), limit, and scope. Use
scope=all for trade counts and market type. Venue scopes are
hoodfun, noxa, lemon, flap,
and asset. The backward-compatible default scope=curves
returns curve-balance
deltaPct, deltaWei, and awakened.
Curves that crossed a threshold: minutes, min
(percentage points gained), optional address for one token.
/alerts.xml is the same as RSS, for readers and bots that speak
feeds.
Price history for one token, for charts: curve trades from its first buy
and Uniswap pool swaps (any venue) merged in time order. Pool points
carry venue: "pool" and quote: "WETH" | "USDG"
(prices and ethWei volumes are normalized to ETH; quote
records the pool's original quote asset). /api/tail?address=&since=
returns only points after since, uncached, for live refresh.
{
"slug": "hashbrown-257112", // page: https://hashling.xyz/p/<slug>
"name": "Hashbrown", "symbol": "HASHBRN",
"launchpad": "hashling_v2", // hashling_v1 | hashling_v2 | main | custom | noxa | flap | lemon | asset | unknown
"status": "bonding", // hatched | bonding | near_graduation | graduation_ready | graduated | refunding | abandoned | unclassified
"bondingPct": 0.05, "realEth": "0.003465", "realEthWei": "…",
"creator": "0x…", "firstSeen": 1786…, "graduatedAt": null,
"pool": "0x…" | null, // known Uniswap v2 or v3 pool
"verified": true, "confidence": "…", // true only when a venue adapter enumerated it; "unknown" rows are unverified
"traded": true, // curve ETH held, graduated, curve trade log, or any pool swap
"lastTradeAt": 1787…, "trades24h": 12, "vol24hEth": 3.2, // any venue; nulls/0 when never traded in a pool
"lastPriceEth": 0.0000021, "change24h": 0.12 | null, // change needs 24 h of history
"image": "/img/…" | null, "banner": "…" | null,
"description": "…", "links": { "site": "…", "x": "…", "telegram": "…" },
"addresses": [ { "kind": "token", "chainId": 4663, "address": "0x…" } ],
"assetKind": null, "issuer": null, "poolPair": null, "poolDepth": null
}
There is no trade API and there does not need to be: trades are signed by your own wallet and sent to the selected contract route. Sources and ABIs: github.com/hashlingxyz/hashling-contracts. See the Contracts page for deployed addresses, configuration, and validation benchmarks.
0x3b38c6Fa9Cc41d3A20d64111325231E7dEF7D523 serves legacy curves.
Hashling V2 factory 0xC73A79A974fD175927b6b87C86d57081c9d2F3C9 serves new launches and adds permissionless graduation and redemption states. Both expose:
buy(address token, uint256 minTokensOut) payable,
sell(address token, uint256 tokensIn, uint256 minEthOut),
launch(string name, string symbol, uint256 supply, string artUri).launchpad main/custom): trade on hood.fun's own
verified factories (see the row's _source.factories on
/api/board); Hashling is not involved in those calls.launchpad=flap, Portal status 1): trade on the verified Portal
0x26605f322f7ff986f381bb9a6e3f5dab0beaeb09. Quote with
quoteExactInput((address,address,uint256)) and execute with
swapExactInput((address,address,uint256,uint256,bytes)).
Portal quotes include protocol fees and token tax. The Portal is an
upgradeable third-party proxy; verify its implementation and simulate
before sending.HashlingSwap 0x16Bc3720C90c3d5b5B99acf2Df746bAC03Cb53a1, a 1%
fee wrapper over SwapRouter02, no custody:
buy(address token, uint24 poolFee, uint256 minOut, uint256 deadline) payable
(send ETH; poolFee is the pool tier, 100 / 500 / 3000 / 10000)sell(address token, uint24 poolFee, uint256 amountIn, uint256 minOut, uint256 deadline)
(approve the token to HashlingSwap first)Pick the tier by liquidity: factory.getPool(token, WETH, tier)
and compare liquidity(). Simulate with eth_call before
sending; thin pools move a lot on small orders. Or call SwapRouter02
directly and skip the fee, that is allowed and expected; the wrapper is for
people trading on the site.
# quote a buy by simulating (cast, Foundry)
cast call 0x16Bc3720C90c3d5b5B99acf2Df746bAC03Cb53a1 \
'buy(address,uint24,uint256,uint256)(uint256)' <token> 3000 0 9999999999 \
--value 0.001ether --from <funded address> --rpc-url https://rpc.mainnet.chain.robinhood.com
HashlingV2Swap
0x84a7280190012DF7C03B1a137890ff27a1dF9bbB is a dedicated 1%
fee route over Router02 for supported V2 markets. The Flap adapter enables it only when
getTokenV8Safe(token) reports status 4 and its
reported pool equals
0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f.getPair(token,WETH):
buy(address token, uint256 minOut, uint256 deadline) payablesell(address token, uint256 amountIn, uint256 minOut, uint256 deadline)
(approve the token to HashlingV2Swap first)The wrapper takes 1% of ETH in on buys or gross ETH out on sells. The canonical pair and token may have their own mechanics. Simulate first and use a short deadline; the site applies 5% maximum slippage. Calling Router02 directly remains possible and avoids Hashling’s fee.
HashlingV4Swap
0x7dD8a784e555afdf0028e309782dedc4564e96FF is a dedicated 1%
fee route over the Uniswap V4 PoolManager for Pons V2 tokens that have
graduated. It only ever trades a token’s canonical graduation pool (Pons hook,
fee 0, tick spacing 200); the quote asset is the one the launch chose (ETH as
address(0), USDG or a tokenized stock):
buy(address token, address quote, uint256 quoteAmount, uint256 minTokensOut) payable
(send exactly quoteAmount as value for ETH; otherwise approve the
quote token to HashlingV4Swap first)sell(address token, address quote, uint256 tokenAmount, uint256 minQuoteOut)
(approve the token to HashlingV4Swap first)The wrapper takes 1% of the quote asset in on buys or of the gross quote out
on sells. Orders are exact-input; if the pool cannot fill the whole amount the
call reverts with PartialFill(). Simulate first; the site applies
5% maximum slippage. Calling the PoolManager directly remains possible and
avoids Hashling’s fee.
/p/ link./api/new with since; do not refetch the whole board every few seconds.Questions about integration or navigating the API? Join Discord or email support@hashling.xyz.