# One pool's liquidity

`GET https://api.getchord.xyz/v1/chains/solana/lp/pool/{address}`

Source: https://getchord.xyz/docs/api-reference/operations/sollppool/

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.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `address` | path | yes | string | Pool address, base58. |
| `hours` | query | no | integer (default `24`) | Window in hours, never before `since`. |

## Response 200

Example (captured from the live API):

```json
{
  "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
}
```

- **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.
