Pools API
One pool by its address
One liquidity pool by its own address: which two tokens it holds and which way round, how deep it is, the price there, and how old it is.
/api/external/pool-analysis/pool-detail/{chain}/{pool}What it returns
One liquidity pool, addressed by the POOL rather than by a token in it. Answers which two tokens it holds and which way round, how deep it is, what the base token costs there, how much has traded through it in 24 hours, and when it was created. Served on all seven chains, each measured live against a populated pool. THE POOL IDENTIFIER IS NOT ALWAYS AN ADDRESS: on Uniswap v4 venues it is a 32-byte pool ID, so do not validate it as a 20-byte contract address. A well-formed identifier this surface has no pool for returns 404, never a body of nulls — "no such pool here" and "this pool is empty" are different answers and a pool-keyed resource keeps them apart. EVERY FIGURE DESCRIBES THIS POOL ALONE: nothing is summed across the token's other pools, so liquidityUsd here is smaller than the token-wide liquidity resource and that is not a disagreement. A 0 is a real measurement everywhere it appears — a liquidityUsd of 0 means DRAINED, and only null means no data. THE SWAP FEE IS NOT PUBLISHED HERE: it costs a second upstream call and the token-keyed pool resource already carries it, so the field is absent rather than always null. On SOL a pool the first source cannot resolve is answered by a second one that does not carry the quote token's name and symbol, 24-hour volume, 24-hour buy and sell counts, the 24-hour price change or FDV: those are null in that answer, never zero. includeTokens=true adds tokens, the project profile of both tokens (links, categories, holder count), for one more upstream call.
Chains
- Solana SOL
- BNB Chain BNB
- Ethereum ETH
- Stable STABLE
- Base BASE
- Robinhood Chain RHC
- Arc ARC
Request
Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.
curl -H "x-dex-data-key: $DEXDATA_API_KEY" \ "https://api.dexdata.io/api/external/pool-analysis/pool-detail/SOL/<pool>"
| Parameter | Description |
|---|---|
includeTokensquery · boolean · optional | Whether to add tokens: each token's name, symbol, decimals, website, X/Twitter, Telegram, categories and holder count. Off by default: it is one more upstream call. |
chainpath · string · required | The chain the pool lives on. CELO, ARB, OP and SCROLL return 400 here. |
poolpath · string · required | The pool identifier — a pool/pair address on most venues, or a 32-byte pool ID where the venue uses one (Uniswap v4). It identifies the POOL, not a token traded in it. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
pool | string | The pool this response describes, in the canonical casing the data source uses — not an echo of what was sent. EVM identifiers are case-insensitive, so compare them case-insensitively rather than against the string you supplied. Never null: a pool that could not be resolved is a 404. |
dexId | string | null | The venue this pool lives on, e.g. raydium, pancakeswap, uniswap. |
dexLabel | string | null | The AMM version label, e.g. v2, v3, v4, CPMM. null means UNLABELLED, which is NOT the same as v2 — measured absent on 19 of 67 pools sampled. The version decides whether a pool even has a burnable LP token, so treating a missing label as v2 would turn "unknown" into a safety claim. |
baseTokenAddress | string | null | The BASE token — the one priceUsd, marketCapUsd, fdvUsd, priceChange24hPct and liquidityBase are all about. Read this before reading any of them: the pool does not care which of its two tokens you were interested in. |
baseTokenName | string | null | The base token's name. |
baseTokenSymbol | string | null | The base token's symbol. |
quoteTokenAddress | string | null | The QUOTE token — what the base is priced against, and the unit of liquidityQuote. The ZERO ADDRESS is a REAL value here, not a gap: it is how a pool quoted in the chain's native coin is reported. |
quoteTokenName | string | null | The quote token's name. |
quoteTokenSymbol | string | null | The quote token's symbol. |
priceUsd | number | null | What the BASE token costs in USD, in this pool alone. A thin pool can price a token far from the rest of the market; that is a fact about the pool, not an error. |
priceNative | number | null | What the BASE token costs in units of the QUOTE token, in this pool alone. Equal to priceUsd when the quote is a dollar stablecoin, which is not a bug. |
liquidityUsd | number | null | Total depth of this pool in USD — BOTH sides. A real 0 means the pool has been DRAINED and is published as 0; only null means no figure was reported. This is one pool, so it is smaller than the token-wide liquidity resource by construction. |
liquidityBase | number | null | How much of the BASE token sits in the pool, in that token's own units. Can be null while the pool's USD depth is present: not every answer carries the token amounts. |
liquidityQuote | number | null | How much of the QUOTE token sits in the pool, in the QUOTE token's units — not USD. Never compare or sum this across pools: two pools can quote against different assets. Can be null while the pool's USD depth is present, like liquidityBase. |
volume24hUsd | number | null | USD traded through THIS pool in the last 24 hours. A real 0 is common (5 of 67 pools sampled) and means nothing traded — it is not null. |
buys24h | number | null | Buy count in this pool over 24 hours. A real 0 is common and is not null. |
sells24h | number | null | Sell count in this pool over 24 hours. A real 0 is common and is not null. |
priceChange24hPct | number | null | Percentage change in the BASE token's price over 24 hours, in this pool. Legitimately NEGATIVE — -54.04 was a real reading in the sample — and a 0 means unchanged, not unknown. |
fdvUsd | number | null | Fully diluted valuation of the BASE token in USD, as this pool prices it. |
marketCapUsd | number | null | Market cap of the BASE token in USD, as this pool prices it. |
createdAt | integer | null | When the pool was created, in Unix SECONDS (not milliseconds). Pool age is the cheapest rug signal there is: a pool minutes old with deep liquidity is a different proposition from the same numbers on a year-old pool. |
lockedLiquidityPct | number | null | Percent (0-100) of this pool's total liquidity under a KNOWN lock protocol, EXCLUDING burned LP (see burnedLiquidityPct). From a SECOND, best-effort source, independent of every other field on this response: null far more often means "not measured" than "confirmed zero" — measured sparse on a small sample, only 1 of 4 pools sampled across 4 chains answered at all. |
burnedLiquidityPct | number | null | Percent (0-100) of this pool's total liquidity sent to a burn address specifically — a permanent commitment, reported separately from lockedLiquidityPct because a burn and a revocable third-party lock are different guarantees. Same sparse-source caveat as lockedLiquidityPct. |
tokens | object | null | Only with includeTokens=true, absent otherwise. The project profile of the base and quote token. null when no profile of this pool is known; a side is null when that token has no profile. |
tokens.base | object | null | |
tokens.base.address | string | The token address, as the pool lists it. |
tokens.base.name | string | null | |
tokens.base.symbol | string | null | |
tokens.base.decimals | integer | null | |
tokens.base.website | string | null | The project's website URL. |
tokens.base.twitter | string | null | The project's X/Twitter URL. |
tokens.base.telegram | string | null | The project's Telegram URL. |
tokens.base.categories | string[] | Categories the token is listed under, e.g. Meme; empty when none. |
tokens.base.holderCount | integer | null | Wallets holding the token when last counted. A count, refreshed every few hours. |
tokens.base.holderCountAt | string | null | When holderCount was counted (ISO 8601). |
tokens.quote | object | null | |
tokens.quote.address | string | The token address, as the pool lists it. |
tokens.quote.name | string | null | |
tokens.quote.symbol | string | null | |
tokens.quote.decimals | integer | null | |
tokens.quote.website | string | null | The project's website URL. |
tokens.quote.twitter | string | null | The project's X/Twitter URL. |
tokens.quote.telegram | string | null | The project's Telegram URL. |
tokens.quote.categories | string[] | Categories the token is listed under, e.g. Meme; empty when none. |
tokens.quote.holderCount | integer | null | Wallets holding the token when last counted. A count, refreshed every few hours. |
tokens.quote.holderCountAt | string | null | When holderCount was counted (ISO 8601). |
Start building with DexData today
Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.
Get a free API key