TL;DR
- List every pool a token trades on, ranked by liquidity
- Price each pool in the same currency
- Anchor against a consolidated price
- Confirm the gap holds across several candles
All requests share the base URL https://public-api.birdeye.so, authenticate with the X-API-KEY header, and select the network with the x-chain header, defaulting to solana.
This is a price intelligence layer, not an automated arbitrage bot. It tells you where a token is priced correctly across its pools and where it has drifted. What you do with that, routing an order or refusing a stale quote, stays your call. Pair-level pricing is Solana only, so this scanner targets Solana.
The four stage pipeline
1
List every pool by liquidity
A token can sit on a single deep pool or be scattered across a dozen thin ones. The first call resolves the token into the venues actually worth watching.Endpoint:
GET /defi/v2/markets2
Normalize every pool to a USD price
A pool quoted in SOL and a pool quoted in USDC can show wildly different numbers for the same token. This stage prices every pool in dollars before any comparison happens.Endpoint:
GET /defi/v3/pair/overview/single3
Anchor against a consolidated price
A wide spread between two pools tells you they disagree, but not which one is wrong. This stage adds a third reference point built from activity across every pool.Endpoint:
GET /defi/priceMeasure each pool’s percent deviation from this consolidated price, not from whichever pool happens to look cheapest. Use
check_liquidity to exclude pools too thin to be trusted from the consolidated figure. The response can come back null for a token Birdeye Data does not yet track, so guard against treating a missing price as zero.4
Confirm the gap holds
A pool can look mispriced for one ugly tick and then snap back a minute later. Before acting on a flagged spread, confirm it survives more than a single candle.Endpoint:
GET /defi/v3/ohlcv/pairWatch your credit budget
Pricing several pools per token across a watchlist adds up faster than a single token check does. Endpoint:GET /utils/v1/credits
Before you ship
- The market list is sorted by
liquidity, and pools too thin to fill a real trade are dropped. priceon the pair overview endpoint is treated as base in quote, never as USD, until converted.- Deviation is measured against the consolidated price from
/defi/price, not against whichever pool looks cheapest. - A flagged spread is confirmed across several candles before being treated as real.
- A candle with
vandv_usdnear zero is discarded as noise, not confirmation.
FAQ
Is this an arbitrage bot?
Is this an arbitrage bot?
No. It is a price intelligence layer that tells you where a token is priced correctly and where it has drifted, which is the input an arbitrage system would need, not the system itself. Real arbitrage on Solana is contested by fast automated traders, so treat this as a way to find the best price to trade at and to catch stale quotes.
Why is the price field on the pair overview endpoint not in USD?
Why is the price field on the pair overview endpoint not in USD?
A pool only knows the ratio between its two tokens, so
price reports the base token in terms of the quote token, whatever that quote happens to be. Multiply by the quote token’s own USD price to get a comparable figure, and invert first if the token you care about sits in quote rather than base.What if a token only trades on one pool?
What if a token only trades on one pool?
The scanner still runs, it just has nothing to compare against. With a single pool there is no spread to compute in Step 2, so lean on Step 3 instead: compare that pool’s price against the consolidated mark to catch drift from fair value even without a second venue to triangulate against.

