---
title: "LP wallets"
method: GET
path: "/chains/solana/lp/top"
tags: ["Solana data"]
---

# LP wallets

`GET /chains/solana/lp/top`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/chains/solana/lp/top`
- Auth: none declared

Wallets ranked over the LP positions active in the window: `fees` (claimed, default), `deposits` or `pnl` (realized). Many leaders are vaults and rebalancing bots; a short window is not a track record. Cached 60 seconds.

The board is **fee-checked**: a wallet whose realized profit is positive while the fees it claimed are under a tenth of that profit earned on the token's price (in practice one-sided liquidity on a token it launched) and is left out; `hidden` counts them. A launchpad account (500 or more positions with a pool of its own for at least every second one: the liquidity of what a launchpad launched) is left out with them; `operators` counts those. `all=1` keeps both in.

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.

## Query parameters

- `sort` 'fees' | 'deposits' | 'pnl' | 'win_rate' | 'ev' | 'positions' | 'avg_age' | 'last_activity'
- `unit` 'usd' | 'native'
- `limit` integer
- `hours` integer
- `all` '0' | '1'

## Response `200`

- object
  - `chain` 'solana'
  - `sort` string
  - `windowHours` integer
  - `since` integer: Unix time, seconds, UTC.
  - `feeChecked` boolean: The fee check was applied.
  - `hidden` integer: Wallets of the window the fee check left out.
  - `operators` integer: Launchpad accounts of the window left out.
  - `rows` object[]
    - `wallet` string, nullable: Solana address, base58, case-sensitive. Never lower-case it.
    - `positions` integer
    - `open` integer
    - `pools` integer
    - `depositedUsd` number
    - `withdrawnUsd` number
    - `feesClaimedUsd` number
    - `realizedPnlUsd` number, nullable
    - `realizedPositions` integer
    - `winRate` number, nullable: 0–1.
    - `evUsd` number, nullable: Mean result of a realized position; null with none.
    - `avgAgeHours` number, nullable: Hours a position stays open, open ones counted to now.
    - `avgDepositUsd` number, nullable
    - `firstTs` integer, nullable: Unix time, seconds, UTC.
    - `lastTs` integer, nullable: Unix time, seconds, UTC.
  - `updatedAt` integer: Unix time, SECONDS, when the Solana box built this answer. Unlike the rest of the API (milliseconds).

## Other responses

- `400`: `BAD_LIMIT` / `BAD_HOURS` / `BAD_SORT` / `BAD_ALL`, or `UNSUPPORTED_CHAIN` (Solana is not public on this deployment and the request has no `X-API-Key`).
- `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)
