Skip to content

Pools

Browse, filter, and inspect on-chain liquidity pools across all major Solana DEXes.

All token parameters accept both symbols (SOL, BTC) and mint addresses.

Free Endpoints (no auth)

Anonymous callers are rate-limited and may see short-lived cached responses. API key holders get higher limits.

GET /v1/pools

Paginated pool list with optional filters.

Query parameters:

ParamDescriptionExample
tokenPools containing this token?token=SOL
tokensPools containing ANY of these tokens?tokens=SOL,USDC,BTC
pairPools for a specific pair?pair=SOL,USDC
dexFilter by DEX?dex=orca-whirlpool
limitResults per page (max 200)?limit=50
offsetPagination offset?offset=100

Response:

json
{
  "pools": [
    {
      "address": "HJPjoWUrhoZzkNfRpHuieeFk9AnbVjTk9Gc5SJRqsQTK",
      "dex": "orca-whirlpool",
      "mintA": "So11111111111111111111111111111111111111112",
      "mintB": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "symbolA": "SOL",
      "symbolB": "USDC",
      "decimalsA": 9,
      "decimalsB": 6,
      "feeBps": 1,
      "price": 80.31,
      "baseSymbol": "SOL",
      "quoteSymbol": "USDC",
      "reserveA": "1234567890",
      "reserveB": "98765432100",
      "sqrtPrice": "1234567890123456789",
      "tickCurrent": -32768,
      "cacheAgeMs": 150,
      "tvlUsd": 12450000.42,
      "volume24hUsd": 8740000.18
    }
  ],
  "count": 50,
  "total": 284,
  "offset": 0,
  "limit": 50
}

Pool Object Fields:

FieldTypeDescription
addressstringBase58 pool account address
dexstringDEX identifier (orca-whirlpool, raydium-clmm, meteora-dlmm, etc.)
mintA, mintBstringBase58 mint addresses for the two pool sides
symbolA, symbolBstring | nullTracked symbols (null for unrecognised mints)
decimalsA, decimalsBnumberToken decimals
feeBpsnumberPool fee in basis points
pricenumber | nullImplied price (baseSymbol per quoteSymbol)
baseSymbol, quoteSymbolstring | nullNormalised base/quote pair (when one side is a stablecoin)
reserveA, reserveBstring | nullToken reserves in raw units (CLMM pools may be null)
sqrtPricestring | nullCLMM-only: Q64.64 sqrt price
tickCurrentnumberCLMM-only: current tick
cacheAgeMsnumberMilliseconds since the last on-chain state update for this pool (-1 if never observed)
tvlUsdnumber | nullTVL in USD (enriched from GeckoTerminal, may be null)
volume24hUsdnumber | null24h trading volume in USD (enriched from GeckoTerminal, may be null)

GET /v1/pools/:token

All pools for a token.

GET /v1/pools/SOL
GET /v1/pools/So11111111111111111111111111111111111111112

GET /v1/pools/:tokenA/:tokenB

Pools for a specific pair.

GET /v1/pools/SOL/USDC
GET /v1/pools/JUP/SOL

Additional Endpoints

GET /v1/pool/:address

Decoded single pool state with full details.

GET /v1/pool/HJPjoWUrhoZzkNfRpHuieeFk9AnbVjTk9Gc5SJRqsQTK

Returns reserves, sqrtPrice, tick, implied price, fee, DEX type, cache age.

GET /v1/pools/new

Recently discovered pools. Snapshot endpoint backed by the recent discovery ring buffer, newest first.

This endpoint is free and does not require an API key. API keys still bypass the anonymous cache and get higher limits.

Query parameters:

  • limit — Max results (default 50, max 200)

Response:

json
{
  "pools": [
    {
      "address": "...",
      "dex": "raydium-cpmm",
      "symbolA": "NEWTOKEN",
      "symbolB": "SOL",
      "discoveredAt": 1712000000000,
      ...
    }
  ],
  "count": 50
}

The API keeps the most recent 500 discovered pools in memory and returns the newest entries first.

Starter+ only: GET /v1/stream/pools

The realtime new-pool SSE stream is a paid surface and requires starter or pro tier.

GET /v1/pools/seed

Bulk pool export for seeding your own pool database. Higher page size (500 vs 200).

Same filters as /v1/pools: ?token, ?tokens, ?pair, ?dex, ?limit, ?offset

GET /v1/pools/dead

Coming soon — Dedpool: dead/suspicious pool detection and safety scoring.

Rate Limits

See Plans & Rate Limits for the authoritative tier table.