One pool's liquidity
const url = 'https://api.getchord.xyz/v1/chains/solana/lp/pool/example?hours=24';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.getchord.xyz/v1/chains/solana/lp/pool/example?hours=24'Deposits, withdrawals, net flow and claimed fees over the window, and by hour; open positions and their owners; the pair with decimals, TVL estimate and swap volume. Cached 20 seconds.
Liquidity on Solana from Chord’s own tape: adds, removes, fee claims, position opens and closes, decoded from the same blocks as the swaps. No key needed.
- Venues. Meteora DLMM, Meteora DAMM v2, Raydium CLMM and PumpSwap. Orca Whirlpools, Raydium CPMM / v4 and Meteora dynamic pools are not read yet.
- Since.
sinceis when LP decoding started (2026-10-06 15:53 UTC); windows never start before it. A position opened earlier ispartial: trueand carries no PnL. - Fees are claimed fees. An LP’s fees appear when it claims them, so a window’s fees understate what the pool earned, and one claim can hold days of fees.
- Positions. One row per position account (DLMM / DAMM v2 position, Raydium CLMM position NFT, PumpSwap LP token account), rebuilt from all its events.
lower/upperare DLMM bin ids or Raydium CLMM ticks; null = full range. Realized PnL = withdrawn + fees claimed − deposited, only for a position seen from its open to its close with every amount priced. An open position’s current value is not in the events: none is given. - Amounts are whole tokens in the pool’s own order (
mintA/mintB); USD is valued when the event happened. Each add / remove / claim is checked against the pool vaults’ balance changes in the same transaction (verified). - Addresses are base58 and case-sensitive, as on the other Solana routes.
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Solana address, base58, case-sensitive. Never lower-case it.
Pool address, base58.
Query Parameters
Section titled “Query Parameters”Window in hours, never before since.
Responses
Section titled “ Responses ”object
Solana address, base58, case-sensitive. Never lower-case it.
meteora_dlmm · meteora_damm_v2 · raydium_clmm · pumpswap.
Unix time, seconds, UTC.
Solana address, base58, case-sensitive. Never lower-case it.
Creator-chosen.
Solana address, base58, case-sensitive. Never lower-case it.
Creator-chosen.
Solana address, base58, case-sensitive. Never lower-case it.
Unix time, seconds, UTC.
object
Unix time, seconds, UTC.
Unix time, SECONDS, when the Solana box built this answer. Unlike the rest of the API (milliseconds).
Example
{ "chain": "solana", "pool": "HTvjzsfX3yU6BUodCjZ5vZkUrAxMDTrBs3CJaq43ashR", "dex": "meteora_dlmm", "windowHours": 24, "since": 1791301995, "mintA": "So11111111111111111111111111111111111111112", "symbolA": "SOL", "decimalsA": 9, "mintB": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "symbolB": "USDC", "decimalsB": 6, "tvlUsd": null, "priceUsd": 120.90833585378545, "token": "So11111111111111111111111111111111111111112", "firstLpEvent": 1791302002, "swapVolumeUsd": 657350.330032, "depositsUsd": 46262.672679370095, "withdrawalsUsd": 12314.010901404514, "netFlowUsd": 33948.66177796558, "feesClaimedUsd": 25.931564176688006, "openPositions": 22, "openOwners": 17, "hourly": [ { "hour": 1791298800, "depositsUsd": 30397.05064594894, "withdrawalsUsd": 7196.542626796252, "feesClaimedUsd": 0.370617802409548, "adds": 52, "removes": 28, "claims": 30, "opens": 24, "closes": 0, "lps": 10 }, { "hour": 1791302400, "depositsUsd": 15865.622033421156, "withdrawalsUsd": 5117.468274608262, "feesClaimedUsd": 25.56094637427846, "adds": 56, "removes": 35, "claims": 36, "opens": 27, "closes": 0, "lps": 15 } ], "updatedAt": 1791303661}BAD_ADDRESS / BAD_HOURS, or UNSUPPORTED_CHAIN (Solana is not public on this deployment and the request has no X-API-Key).
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}POOL_NOT_FOUND: no liquidity event in this pool since LP decoding started, or its venue is not read.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}Over the per-minute limit (RATE_LIMIT_EXCEEDED). Read X-RateLimit-Reset and back off.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}CHAIN_DATA_UNAVAILABLE (the Solana store did not answer in time) or CHAIN_NOT_ENABLED (the lane is off on this deployment). Retry later; do not treat it as an empty answer.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}