Find every pool and the liquidity of a Robinhood Chain token (liquidity API)
Robinhood Chain liquidity API: list every Uniswap v2, v3 and v4 pool and launch curve of a token, with USD liquidity, fees, hooks and the price pool. No key.
The Robinhood Chain liquidity API is GET /v1/robinhood/token/{address}/pools. It lists every market the token trades in (Uniswap v2 pairs, v3 fee tiers, v4 pools with their hook, launchpad curves), ranked by liquidity_usd, with amounts of each side, fee, hook, price_usd and is_price_pool for the market the token's price comes from. meta.total counts all pools; page with cursor. For one pool in depth (reserves, TVL, LP lock, stats), call GET /v1/robinhood/pool/{pool}. Both are on the anonymous plan.
A Robinhood Chain token usually trades in more than one place: the pool its launchpad created at graduation, Uniswap v3 fee tiers, v4 pools with different hooks, and side pools anyone can open. The pools endpoint lists all of them for one token, ranked by USD liquidity, so you can see where the real market is, how deep it is and which pools are noise. The pool detail endpoint then gives one pool in depth: reserves, TVL, hook, LP lock status and trade stats. Together they are the Crius liquidity API for Robinhood Chain, and both work without a key.
List a token’s pools in one call
Charge AI: one real market and two decoy pools
Where does Charge AI (0x7b8892cea949bc60d494681d1bc3ea96071ab0b8) trade, and how much liquidity is behind each market?
curl "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/pools?limit=3"const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/pools?limit=3");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/pools?limit=3",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 123 lines (arrays trimmed)
{ "data": [ { "amounts": { "token0": 1.18969, "token1": 720478686 }, "base": { "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128", "symbol": "CHARGE" }, "created_block": 88461321, "dex": "uniswap_v4", "dynamic_fee": false, "fee": 0, "hook": { "address": "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044", "name": "pons_v2_meme_hook" }, "is_price_pool": true, "liquidity_usd": 5604.57, "pool": "0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913", "price_usd": 0.00000388948, "quote": { "address": "0x0000000000000000000000000000000000000000", "logo": null, "symbol": "ETH" }, "quote_liquidity_usd": 2802.29, "state": { "liquidity": 29277002188455996438188, "reserve0": 0, "reserve1": 0, "sqrt_price_x96": 1949728392666469411451966154432124, "tick": 202227 }, "swaps_indexed": 432, "tick_spacing": 200 }, { "amounts": { "token0": 3.1477, "token1": 115029 }, "base": { "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128", "symbol": "CHARGE" }, "created_block": 88461495, "dex": "uniswap_v4", "dynamic_fee": false, "fee": 850000, "hook": null, "is_price_pool": false, "liquidity_usd": 6.29539, "pool": "0xe928234e515b0c000dd6aa1c60cf5a009082367cda4775a5b63b4ff0c83dcdd3", "price_usd": 0.0000273644, "quote": { "address": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "logo": null, "symbol": "USDG" }, "quote_liquidity_usd": 3.1477, "state": { "liquidity": 601728037770030, "reserve0": 0, "reserve1": 0, "sqrt_price_x96": 15145615706034675540349663040887263187, "tick": 381391 }, "swaps_indexed": 3, "tick_spacing": 60 }, { "amounts": { "token0": 0.328859, "token1": 35779.5 }, "base": { "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128", "symbol": "CHARGE" }, "created_block": 88466617, "dex": "uniswap_v4", "dynamic_fee": false, "fee": 450000, "hook": null, "is_price_pool": false, "liquidity_usd": 0.657719, "pool": "0x1a184f0aa1978e7b543ee944a30df88dd34fcb667aa5a9142bb399ef582481b8", "price_usd": 0.00000919127, "quote": { "address": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "logo": null, "symbol": "USDG" }, "quote_liquidity_usd": 0.328859, "state": { "liquidity": 108473206521826, "reserve0": 0, "reserve1": 0, "sqrt_price_x96": 26133147987752847079481471382601445977, "tick": 392302 }, "swaps_indexed": 4, "tick_spacing": 4500 } ], "meta": { "block": 100406784, "block_age_ms": 826, "block_ts": 1793225076000, "chain": "robinhood", "finalized_block": 100397649, "lag_ms": 11, "next_cursor": "3", "safe_block": 100401329, "total": 10 }}What this tells you
meta.total: 10: CHARGE has 10 pools. This page shows the top 3; passmeta.next_cursor("3") ascursorfor the rest.- The first pool,
0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913, is the real market: Uniswap v4 against ETH,liquidity_usd: 5604.57,is_price_pool: true. It holds 1.18969 ETH and 720,478,686 CHARGE (amounts), and itshookispons_v2_meme_hook. - Its
created_blockis 88461321, the same block as CHARGE’s graduation in the token profile: this is the pool Pons opened when the bonding curve completed. - The next two pools are USDG pools with no hook and fees of
850000and450000(85% and 45%). They hold $6.29539 and $0.657719 and quote CHARGE at 0.0000273644 and 0.00000919127, several times the real price of 0.00000388948. Pools with a 25% fee or more never set the token’s price.
Look at one pool in depth
The CHARGE/ETH Uniswap v4 pool
What's in CHARGE's main pool, who controls its liquidity, and how much has it traded?
curl "https://api.crius.sh/v1/robinhood/pool/0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913"const res = await fetch("https://api.crius.sh/v1/robinhood/pool/0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/pool/0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 207 lines (arrays trimmed)
{ "data": { "created_block": 88461321, "created_ts": 1791990423100, "currency0": { "address": "0x0000000000000000000000000000000000000000", "decimals": 18, "logo": null, "price_usd": 2355.49, "symbol": "ETH" }, "currency1": { "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "decimals": 18, "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128", "price_usd": 0.00000388948, "symbol": "CHARGE" }, "dex": "uniswap_v4", "dynamic_fee": false, "factory": "0x8366a39cc670b4001a1121b8f6a443a643e40951", "fee": 0, "fee_bps": 0, "hook": { "address": "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044", "name": "PonsV2MemeHook", "permissions": [ "beforeInitialize", "afterSwap", "afterSwapReturnDelta" ], "risk": [ "can_modify_swap_amounts" ] }, "lp": { "locked_pct": 100, "locker": "pons_v2_launch_locker", "permanent": true, "status": "locked" }, "pool": "0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913", "pool_manager": "0x8366a39cc670b4001a1121b8f6a443a643e40951", "state": { "initialized_ticks": 2, "last_block": 100128111, "liquidity": 29277002188455996438188, "price_0_in_1": 605604460, "price_1_in_0": 0.00000000165124, "real_quote_raised": null, "reserve0": 0, "reserve1": 0, "reserves": { "currency0": 1.18969, "currency1": 720478686, "kind": "real" }, "sqrt_price_x96": 1949728392666469411451966154432124, "tick": 202227 }, "stats": { "all_time": { "buy_volume_usd": 107700, "buys": 2159, "first_trade_ts": 1791990423000, "sell_volume_usd": 114903, "sells": 1767, "since": "chain_start", "trades": 3926, "volume_usd": 222603 }, "avg_trade_usd": { "1h": null, "1m": null, "1s": null, "24h": 2.96366, "30s": null, "4h": null, "5m": null, "6h": null }, "buy_volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "buyers": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "buys": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "last_trade_ts": 1793196204000, "sell_volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 5.92732, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "sellers": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "sells": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "traders": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "trades": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "txns": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "volume_eth": { "1h": 0, "1m": 0, "1s": 0, "24h": 0.00252958, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 5.92732, "30s": 0, "4h": 0, "5m": 0, "6h": 0 } }, "swaps_indexed": 432, "tick_spacing": 200, "tvl_usd": 5604.57 }, "meta": { "block": 100406786, "block_age_ms": 1080, "block_ts": 1793225076000, "chain": "robinhood", "finalized_block": 100397649, "lag_ms": 48, "safe_block": 100401329 }}What this tells you
currency0is native ETH (price_usd: 2355.49) andcurrency1is CHARGE (price_usd: 0.00000388948).state.price_1_in_0: 0.00000000165124is CHARGE’s price in ETH.state.reserveshaskind: "real": 1.18969 ETH and 720,478,686 CHARGE that can actually be swapped.tvl_usd: 5604.57.fee: 0: the pool itself charges no LP fee. Thehook(PonsV2MemeHook) has theafterSwapandafterSwapReturnDeltapermissions and the riskcan_modify_swap_amounts: it can change what a swap pays out, so a fee can be taken inside the hook rather than throughfee.lp.status: "locked",locked_pct: 100,locker: "pons_v2_launch_locker",permanent: true: the liquidity can’t be removed.stats.all_timeshows 3,926 trades and $222,603 of volume in this pool, out of $280,667 for the token across all its markets.
What the fields mean
| Field | Meaning |
|---|---|
pool | Pair address (Uniswap v2, v3) or 32-byte pool id (Uniswap v4). |
dex | uniswap_v2, uniswap_v3, uniswap_v4 or a launchpad curve. |
base, quote | The token you asked about and what it's paired with (address, symbol, logo). Native ETH is 0x0000000000000000000000000000000000000000. |
amounts | Each side's balance in whole tokens (token0, token1, in the pool's own order). |
liquidity_usd, quote_liquidity_usd | 2 × the quote side, and the quote side alone, from the pool's own state. |
price_usd | The token's price in this pool. It can differ a lot from the token's price in thin pools. |
is_price_pool | true for the pool the token's price comes from. |
fee, dynamic_fee, tick_spacing | The swap fee in millionths (3000 = 0.3%, 850000 = 85%), whether a v4 hook sets it per swap, and the tick spacing. |
hook | The v4 hook's address and name, or null. |
state | Raw pool state: liquidity, sqrt_price_x96, tick, and reserve0/reserve1 for v2 pairs. |
created_block | The block the pool was created. |
The pool detail adds tvl_usd, fee_bps, currency0 and currency1 with decimals and USD prices, the hook’s permissions and risk, the lp lock summary, state.reserves and the same stats windows as the token profile.
Use it in your app
-
Call
/poolsto find the real market. Take the row withis_price_pool: truefor links to the pool and for swaps, and show the top rows as “markets”. -
Hide noise. Rows with a tiny
liquidity_usdor afeeof 250000 (25%) or more are rarely real markets; leave them out of totals and charts. -
Show real depth. Display
quote_liquidity_usdnext toliquidity_usd, so users see what could actually be sold into. -
Drill into one pool with
/pool/{pool}for its hook, lock status and stats, and check the hook with the hook risk guide before trading v4 pools.
import requests
token = "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8"r = requests.get(f"https://api.crius.sh/v1/robinhood/token/{token}/pools", params={"limit": 50}, timeout=10)body = r.json()
real = [p for p in body["data"] if p["fee"] < 250000 and p["liquidity_usd"] >= 100]for p in real: mark = "price pool" if p["is_price_pool"] else "" hook = p["hook"]["name"] if p["hook"] else "no hook" print(f'{p["dex"]} {p["base"]["symbol"]}/{p["quote"]["symbol"]} ${p["liquidity_usd"]:,.0f} {hook} {mark}')print(f'{len(real)} real markets out of {body["meta"]["total"]} pools')Frequently asked questions
Is there a Robinhood Chain liquidity API?
Yes. The Crius API reads liquidity from every Uniswap v2, v3 and v4 pool and launchpad curve on Robinhood Chain (chain id 4663). Per token, GET /v1/robinhood/token/{address}/pools returns each pool's liquidity_usd and quote_liquidity_usd; per pool, GET /v1/robinhood/pool/{pool} adds reserves, tvl_usd and the LP lock; chain-wide, GET /v1/robinhood/stats returns liquidity.tvl_usd and liquidity.locked_lp_usd. All three work without an API key.
How do I get the total liquidity of a Robinhood Chain token?
Read market.liquidity_usd (2 × the quote side) and market.quote_liquidity_usd from the token profile, GET /v1/robinhood/token/{address}: they add up all of the token's pools. To see how that total splits across pools, call /token/{address}/pools, where rows are ranked by liquidity_usd.
How do I find a token's liquidity pool on Robinhood Chain?
Call GET /v1/robinhood/token/{address}/pools. The first row is the pool with the most liquidity, and the row with is_price_pool: true is the one the token's price comes from. Each row's pool is a pair address (Uniswap v2 and v3) or a 32-byte pool id (Uniswap v4).
How much liquidity does a token have?
Two numbers matter. liquidity_usd is 2 × the quote side of a pool, the number DEX screeners show. quote_liquidity_usd is the ETH, WETH or USDG actually in the pool: the most sellers could take out. The token profile's market.liquidity_usd and market.quote_liquidity_usd add up all pools.
Why does a token have pools at very different prices?
Anyone can create a pool for any token, with any fee and starting price. Small side pools often sit far from the real price because almost nobody trades them. Crius never prices a token from a pool with a fee of 25% or more, and its candles leave out thin pools by default.
Is the liquidity locked?
The pool detail has an lp object with status, locked_pct, locker and permanent. For every LP position of the token, who holds it and when locks expire, use Liquidity & locks (Free plan) or read Check if liquidity is locked.
Which DEXes does Crius index on Robinhood Chain?
Uniswap v2, v3 and v4 (including every v4 hook) and the launchpad bonding curves (Pons and others). See Uniswap on Robinhood Chain and Launchpads.
Related
Get your free Crius API key
Every example on this page works with a free key: higher rate limits than the anonymous plan, holders, wallets and the WebSocket stream. No card needed.
- Robinhood Chain (4663) only, from our own archive nodes
- REST + WebSocket
- Pay on-chain or by card