Hashling API

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.

Basics

GET /api/new

Newest launches across every venue, newest first. The endpoint to poll.

paramdefaultmeaning
limit501 to 200
since0unix seconds; only rows first seen after this. Pass back the newest you last received.
launchpadall launchpadsdefault 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": [ … ] }

GET /api/board

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:

paramvalues
launchpadany (everything) · all (launchpad index, no noxa/asset) · hashling_v1 · hashling_v2 · main · custom · noxa · flap · lemon · asset · unknown
statushatched · bonding · near_graduation · graduation_ready · graduated · refunding · abandoned · unclassified
active1 = traded in the last 24 h on any venue (curve or pool)
sortnewest · active (last trade) · volume (24 h, ETH-equivalent) · trades (24 h count) · change (24 h gainers) · losers · bonding · raise
page0-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.

GET /api/sparks?addresses=a,b,…&window=

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], …] } } }

GET /api/project?slug=

One project by slug, any venue.

GET /api/movement

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.

GET /api/alerts and /alerts.xml

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.

GET /api/history?address=

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.

Project row

{
  "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
}

Trading from a bot

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.

Curve tokens (bonding)

Graduated tokens and assets (Uniswap v3)

HashlingSwap 0x16Bc3720C90c3d5b5B99acf2Df746bAC03Cb53a1, a 1% fee wrapper over SwapRouter02, no custody:

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

Graduated Flap tokens (Uniswap v2)

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):

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.

Graduated Pons V2 tokens (Uniswap v4)

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):

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.

Etiquette

Questions about integration or navigating the API? Join Discord or email support@hashling.xyz.