---
title: "One pool's liquidity"
method: GET
path: "/chains/solana/lp/pool/{address}"
tags: ["Solana data"]
---

# One pool's liquidity

`GET /chains/solana/lp/pool/{address}`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/chains/solana/lp/pool/{address}`
- Auth: none declared

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.** `since` is when LP decoding started (2026-10-06 15:53 UTC); windows never start before it. A position opened earlier is `partial: true` and 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` / `upper` are 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.

## Path parameters

- `address` string, required: Solana address, base58, case-sensitive. Never lower-case it.

## Query parameters

- `hours` integer

## Response `200`

- object
  - `chain` 'solana'
  - `pool` string: Solana address, base58, case-sensitive. Never lower-case it.
  - `dex` string: `meteora_dlmm` · `meteora_damm_v2` · `raydium_clmm` · `pumpswap`.
  - `windowHours` integer
  - `since` integer: Unix time, seconds, UTC.
  - `mintA` string, nullable: Solana address, base58, case-sensitive. Never lower-case it.
  - `symbolA` string, nullable: Creator-chosen.
  - `mintB` string, nullable: Solana address, base58, case-sensitive. Never lower-case it.
  - `symbolB` string, nullable: Creator-chosen.
  - `decimalsA` integer
  - `decimalsB` integer
  - `tvlUsd` number, nullable
  - `priceUsd` number, nullable
  - `token` string, nullable: Solana address, base58, case-sensitive. Never lower-case it.
  - `firstLpEvent` integer: Unix time, seconds, UTC.
  - `swapVolumeUsd` number, nullable
  - `depositsUsd` number
  - `withdrawalsUsd` number
  - `netFlowUsd` number
  - `feesClaimedUsd` number
  - `openPositions` integer
  - `openOwners` integer
  - `hourly` object[]
    - `hour` integer: Unix time, seconds, UTC.
    - `depositsUsd` number
    - `withdrawalsUsd` number
    - `feesClaimedUsd` number
    - `adds` integer
    - `removes` integer
    - `claims` integer
    - `opens` integer
    - `closes` integer
    - `lps` integer
  - `providers` object[]: Who added and removed in the window, most active first (up to 50).
    - `wallet` string, nullable: Solana address, base58, case-sensitive. Never lower-case it.
    - `depositsUsd` number
    - `withdrawalsUsd` number
    - `netUsd` number
    - `feesClaimedUsd` number
    - `events` integer
    - `lastTs` integer: Unix time, seconds, UTC.
  - `market` object, nullable
    - `hourly` object[]: The last 7 days, oldest first; hours with no swap are absent.
      - `hour` integer: Unix time, seconds, UTC.
      - `vol` number: Swap volume, dollars.
      - `trades` integer
      - `price` number, nullable: Close of the hour's last priced minute, dollars per token.
      - `open` number, nullable: The hour's candle, from its one-minute candles: a minute price more than 10× away from at least half of the five minutes before it AND half of the five after it is left out; a candle whose open or close is still 10× away from the candles around it is dropped. Null = no candle that hour.
      - `high` number, nullable
      - `low` number, nullable
      - `close` number, nullable
    - `volume24hUsd` number
    - `trades24h` integer
    - `wallets24h` integer, nullable: Null until counted (ask again in a few seconds when `walletsPending`).
    - `candlesDropped` integer: Candles of the series left out as misprints.
  - `updatedAt` integer: Unix time, SECONDS, when the Solana box built this answer. Unlike the rest of the API (milliseconds).

## Other responses

- `400`: `BAD_ADDRESS` / `BAD_HOURS`, or `UNSUPPORTED_CHAIN` (Solana is not public on this deployment and the request has no `X-API-Key`).
- `404`: `POOL_NOT_FOUND`: no liquidity event in this pool since LP decoding started, or its venue is not read.
- `429`: Over the per-minute limit (`RATE_LIMIT_EXCEEDED`). Read `X-RateLimit-Reset` and back off.
- `503`: `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.

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
