What you’ll build
A list of every liquidity pool on one network that contains a given token, busiest first, with paging that walks the whole list. That list is the input for three common jobs:- Picking the pool to read a token’s price or OHLCV history from
- Watching where a token’s volume moves between DEXes
- Building a per-token dashboard that shows every venue at once
GET /networks/{network}/pools/search with a token_address parameter.
The call
Every Solana pool that contains wrapped SOL, three busiest first:
The network is part of the path, so the address is looked up on that chain only. Every other search filter combines with
token_address using AND: add liquidity_usd_min to skip thin pools, dex_name with the dex_id slug from a response to stay on one DEX, created_after to see only new venues. The pool filtering tutorial lists them all.
order_by accepts volume_usd_24h, volume_usd_7d, volume_usd_30d, liquidity_usd, txns_24h, created_at, price_usd, price_change_percentage_24h, price_change_percentage_6h, price_change_percentage_1h and price_change_percentage_5m.The response
The call above returned three rows. Here is one of them, with the other two cut for length; they have the same shape:idis the pool address.dex_idis the DEX slug anddex_nameits label.tokenslists the pool’s tokens byidonly. A search row carries no symbol or name. When you needSOL/USDCrather than two addresses, call pool details for thatid; itstokensarray carriessymbol,nameanddecimals.queryechoes what the API applied. Read it after every call. It is how you knowtoken_addresswas honoured and whichorder_byran.transactions_24his the trade count andliquidity_usdthe pool’s depth. Both are per pool, not per token.
Rules that are easy to miss
An unknown address is not an error. A wrong or mistyped address returns
200 with "results": [], "has_next_page": false and an empty next_cursor, and query still echoes the address you sent. An empty list usually means the address is wrong for that network, so check both before concluding the token has no pools. The same token has a different address on every chain.Volume and depth are different lists. The busiest pool by
volume_usd_24h can be a day-old pool with almost no liquidity. When you want the pool to price against, add a floor:Paging with the cursor
The response above ended with"has_next_page": true and a next_cursor. Pass that value back as cursor, with every other parameter unchanged:
has_next_page and a fresh next_cursor, and every row still contains the token. Keep going until has_next_page is false. There are no page numbers.
Each page is one request and one credit, however many pools it returns. A base asset like SOL sits in millions of pools by the count token details reports under summary.pools, so raise limit for fewer pages, add liquidity_usd_min to cut the tail, and stop at a page count you chose rather than at the end of the list. A free API key from console.dexpaprika.com raises the limits on these calls; pricing has the current quotas and the rate limits page explains how they are counted.
Moving off the removed endpoint
Before:410 Gone with a body that names the replacement:
The removed endpoint’s reference page keeps the same table next to the old spec.
Full example
The single call in curl, and a paged walk in Python and JavaScript that collects the busiest pools and prints what each one is paired with:Next steps
Pool filtering
Every search filter, and how to combine them into a screener
Pool details
Symbols, reserves and price stats for one pool id
Pool search reference
Every parameter and the full response schema
Historical data
OHLCV history for the pool you picked
FAQs
Can I list a token's pools on every network in one call?
Can I list a token's pools on every network in one call?
No. The
token_address filter works on GET /networks/{network}/pools/search only. The cross-network GET /pools/search accepts the parameter and ignores it. Fetch the network list and make one per-network call for each chain the token lives on.Why do the rows show token addresses but no symbols?
Why do the rows show token addresses but no symbols?
Search rows carry each token’s
id and chain only. Call pool details with the pool id to get symbol, name and decimals for both tokens.How do I find the pool for a token pair?
How do I find the pool for a token pair?
Filter on one token and check the
tokens array for the other in your own code. Repeating token_address does not narrow the list to a pair. The API keeps one value, and which one is not guaranteed by order.The list came back empty. Is the token unsupported?
The list came back empty. Is the token unsupported?
An unknown address returns
200 with an empty results array rather than a 404, so an empty list usually means the address does not exist on that network. Check that the address belongs to the chain in the path; the same token has a different address on each chain.What happened to /networks/{network}/tokens/{token_address}/pools?
What happened to /networks/{network}/tokens/{token_address}/pools?
It was removed and returns
410 Gone. Use GET /networks/{network}/pools/search?token_address={address}. The page parameter became cursor, order_by=volume_usd became order_by=volume_usd_24h, and the address pair filter and reorder flag have no equivalent.