Liquidity API: common questions
Each question below is one query on the Trading cubes, using the Liquidity, RankingDetail and LeadingPool fields. Every query was run against the live API on 2026-10-20; the IDE link opens it ready to run.
Two things to keep in mind throughout:
Liquidity.Usdis the quote-side reserve, not TVL. A pool explorers show at $2M TVL reports about $1M here.- Only
Source: "real"and"real_stale"are measured. Everything else is an estimate; most queries below filter on it.
Checking one token
Is this token's price backed by real liquidity, and which pool sets it?
One Tokens row gives the liquidity summed over the token's pools, how much of it is measured (RealShare), the market cap, and the pool at Ranking.Position: 1.
LeadingPool.PoolAddress is empty on some rows; the pool address is the last segment of MarketId.
query IsTokenBackedByRealLiquidity {
Trading {
Tokens(
limit: {count: 1}
orderBy: {descending: Block_Time}
where: {
Token: {Id: {is: "bid:solana:6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
}
) {
Block { Time }
Token { Symbol Id }
Price { Average { Mean } }
Liquidity { Usd Source RealShare }
Supply { MarketCap }
LeadingPool { MarketId QuoteTokenId PoolAddress }
}
}
}
Which pool should I trade this token on?
The token's pools ordered by measured liquidity, with the quote asset, reserves, the last price in each pool and its rank in the price blend. Only real and real_stale sources, so estimates cannot push a thin pool to the top.
query BestPoolToTradeAToken {
Trading {
Pairs(
limit: {count: 5}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Token: {Id: {is: "bid:solana:6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Liquidity: {Source: {in: ["real", "real_stale"]}}
}
) {
Market { Protocol Name }
Pool { Address }
QuoteToken { Symbol }
Price { Ohlc { Close } }
Liquidity { Usd QuoteReserve BaseReserve UpdatedAt Source }
Ranking { Position Weight }
}
}
}
How did one pool's liquidity move over the last 24 hours?
Hourly rows for a single pool. Liquidity.Usd on an hourly row is the last snapshot in that hour; hours with no trade have no row.
query PoolLiquidityHistoryHourly {
Trading {
Pairs(
limit: {count: 24}
orderBy: {descending: Block_Time}
where: {
Pool: {Address: {is: "EQEu6NyEq8nECAiem1YkTu3uDBiGTEA2tYBLBmr9YJ7Y"}}
QuoteToken: {Symbol: {is: "WSOL"}}
Interval: {Time: {Duration: {eq: 3600}}}
Block: {Time: {since_relative: {hours_ago: 24}}}
}
) {
Block { Time }
Interval { Time { Start } }
Liquidity { Usd Source }
Price { Ohlc { Open Close } }
Volume { Usd }
}
}
}
Screening for risk
Which tokens show a big market cap on almost no liquidity?
The classic scam shape: a tiny pool sets a price, the supply is huge, and the market cap looks like billions. RealShare: 1 keeps estimates out so the $20 pools are genuinely $20 pools.
query BigMarketCapNoLiquidity {
Trading {
Tokens(
limit: {count: 10}
limitBy: {by: Token_Id, count: 1}
orderBy: {descending: Supply_MarketCap}
where: {
Token: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Supply: {MarketCap: {gt: 1000000}}
Liquidity: {Usd: {lt: 5000}, RealShare: {ge: 1}}
}
) {
Token { Symbol Id }
Supply { MarketCap }
Liquidity { Usd Source RealShare }
Volume { Usd }
}
}
}
Which pools trade heavily on almost no liquidity?
Thousands of dollars of volume against a $20 reserve is a wash-trading or honeypot signal. Today's result is a cluster of Raydium pools named like stablecoin pairs, each with identical volume.
query HighVolumePoolsAlmostNoLiquidity {
Trading {
Pairs(
limit: {count: 10}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Volume_Usd}
where: {
Market: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Source: {is: "real"}, Usd: {lt: 1000}}
Volume: {Usd: {gt: 5000}}
}
) {
Token { Symbol Id }
Market { Protocol }
Pool { Address }
Liquidity { Usd }
Volume { Usd }
}
}
}
Which pools are priced off a reserve that is hours old?
real_stale plus an UpdatedAt filter finds pools whose reserve snapshot is older than six hours but still counts in full. Their Verdict is still priced.
query PoolsPricedOffAStaleReserve {
Trading {
Pairs(
limit: {count: 10}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Source: {is: "real_stale"}, UpdatedAt: {till_relative: {hours_ago: 6}}}
}
) {
Block { Time }
Market { Network Protocol }
Token { Symbol }
Pool { Address }
Liquidity { Usd UpdatedAt Source }
RankingDetail { Verdict StaleMultiplier }
}
}
}
Which large tokens have the most, and the least, liquidity relative to market cap?
Tokens above $10M market cap with at least 90 % measured liquidity. Divide Liquidity.Usd by Supply.MarketCap on your side: today Old Slerf is 87 %, BOME 16 %, PUMP 1 %.
query LiquidityShareOfMarketCapSolana {
Trading {
Tokens(
limit: {count: 15}
limitBy: {by: Token_Id, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Token: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Supply: {MarketCap: {gt: 10000000}}
Liquidity: {RealShare: {ge: 0.9}}
}
) {
Token { Symbol Id }
Liquidity { Usd RealShare }
Supply { MarketCap }
}
}
}
Launches
Which pump.fun curves are closest to graduation?
On a launch curve Liquidity.NetQuoteUsd is the money paid in minus the money taken out, which is what migrates to the AMM at graduation. Ordering by it lists the curves nearest the threshold.
The graduation threshold is not in the API; divide NetQuoteUsd by the current threshold yourself to get a percentage.
query PumpFunCurvesClosestToGraduation {
Trading {
Pairs(
limit: {count: 10}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_NetQuoteUsd}
where: {
Market: {Network: {is: "Solana"}, Protocol: {is: "pump"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Source: {is: "migration"}}
}
) {
Token { Symbol Id }
Pool { Address }
Liquidity { NetQuoteUsd Usd }
Volume { Usd }
Price { Ohlc { Close } }
}
}
}
Execution
Where can I sell $100k of WETH inside 1 % slippage?
DepthUsd is the quote-side amount that can be sold into the pool within the 1 % tier. Filter above your trade size and order by it. EVM only: Solana pools report 0.
query PoolsDeepEnoughForA100kSale {
Trading {
Pairs(
limit: {count: 5}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_DepthUsd}
where: {
Market: {Network: {is: "Ethereum"}}
Token: {Symbol: {is: "WETH"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {DepthUsd: {gt: 100000}}
}
) {
Market { Protocol }
Pool { Address }
QuoteToken { Symbol }
Liquidity { DepthUsd Usd QuoteReserveUsd }
Price { Ohlc { Close } }
}
}
}
Chain-wide rankings
What are the ten deepest pools on a chain?
Any token, measured reserves only, one row per pool.
query TopPoolsByMeasuredLiquiditySolana {
Trading {
Pairs(
limit: {count: 10}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Market: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Liquidity: {Source: {is: "real"}}
}
) {
Market { Protocol }
Pool { Address }
Token { Symbol }
QuoteToken { Symbol }
Liquidity { Usd QuoteReserve UpdatedAt }
Volume { Usd }
}
}
}
Which pools gained or lost the most liquidity in the last hour?
Usd(maximum: Block_Time) returns the liquidity on the newest row and Usd(minimum: Block_Time) on the oldest row of the window. The change has to be computed on your side; the API cannot order by it.
query PoolLiquidityNowVsOneHourAgo {
Trading {
Pairs(
limit: {count: 20}
orderBy: {descendingByField: "now_Usd_maximum"}
where: {
Market: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {hours_ago: 1}}}
Liquidity: {Source: {is: "real"}, Usd: {gt: 50000}}
}
) {
Pool { Address }
Token { Symbol }
QuoteToken { Symbol }
now: Liquidity { Usd(maximum: Block_Time) }
then: Liquidity { Usd(minimum: Block_Time) }
first: Block { Time(minimum: Block_Time) }
last: Block { Time(maximum: Block_Time) }
}
}
}
Which DEX protocols hold the most deep pools?
Count of pools above $100k measured liquidity per protocol, plus the largest pool each one has.
query DexProtocolsWithTheMostDeepPools {
Trading {
Pairs(
limit: {count: 10}
orderBy: {descendingByField: "pools"}
where: {
Market: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Liquidity: {Source: {is: "real"}, Usd: {gt: 100000}}
}
) {
Market { Protocol }
pools: count(distinct: Pool_Address)
Liquidity { Usd(maximum: Liquidity_Usd) }
}
}
}
How fragmented is liquidity: which tokens are spread over the most pools?
Count of pools with at least $10k measured liquidity per token, and the largest pool for each.
query TokenLiquidityFragmentation {
Trading {
Pairs(
limit: {count: 10}
orderBy: {descendingByField: "pools"}
where: {
Market: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Source: {is: "real"}, Usd: {gt: 10000}}
}
) {
Token { Symbol Id }
pools: count(distinct: Pool_Address)
Liquidity { Usd(maximum: Liquidity_Usd) }
}
}
}
Where is ETH's liquidity, chain by chain?
Filtering Tokens by Currency.Id returns one row per ETH representation per chain, each with its own liquidity, source and measured share.
query EthLiquidityByChain {
Trading {
Tokens(
limit: {count: 10}
limitBy: {by: Token_Id, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Currency: {Id: {is: "bid:eth"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
}
) {
Token { Network Symbol Id }
Liquidity { Usd Source RealShare }
Volume { Usd }
}
}
}
What these fields cannot answer
- Is the LP locked or burned? Not in the Trading cube; that is a token-program question on the chain schemas.
- When was the pool created? No creation time here. Use the
DEXPoolscube on the chain schemas for pool-creation events, then come back here for liquidity. - Total liquidity per chain. There is no
sumaggregate onLiquidity.Usd; page throughlimitBy: {by: Pool_Address}and add on your side. - Order by change. The now-vs-then query returns both values; sorting by the difference is yours to do.
Ready to run this in production?
Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.