---
title: "Pools ranked for a liquidity provider"
method: GET
path: "/lp/pools"
tags: ["Liquidity"]
---

# Pools ranked for a liquidity provider

`GET /lp/pools`

## Request

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

Every indexed pool with volume by window, fees (volume × the pool's fee tier), TVL, fee/TVL and an annualised yardstick, LP adds / removes / providers in 24 hours, trader counts, and a 0–100 health score. Pools under $10k TVL are hidden unless `small=1`; wash and launch-farm pools are hidden unless `flagged=1` (they come back with `suspect: true`). `category=stocks` keeps the pools with a tokenized stock or ETF on one side (Robinhood Chain only: `400 BAD_CATEGORY` elsewhere, `503 CATEGORY_UNAVAILABLE` while the token list cannot be read).

**Use it for**: an LP screener, "where are the fees on Arc", a pool picker for a token.

## Query parameters

- `chain` 5042 | 4663 | 143, required
- `sort` 'fee_tvl' | 'vol_24h' | 'vol_1h' | 'tvl' | 'fees_24h' | 'first_seen' | 'lp_net_24h' | 'trades_24h' | 'score'
- `interval` '1h' | '6h' | '24h'
- `minTvl` number
- `quote` string
- `dex` string
- `search` string
- `small` 0 | 1
- `flagged` 0 | 1
- `category` 'stocks'
- `maxTvl` number
- `minVol` number
- `maxVol` number
- `minFees` number
- `maxFees` number
- `minAgeH` number
- `maxAgeH` number
- `minFeePct` number
- `maxFeePct` number
- `limit` integer
- `offset` integer

## Response `200`

- object
  - `chain` integer
  - `sort` string
  - `interval` string
  - `minTvl` number
  - `flagged` boolean
  - `category` string: Present when the list was narrowed to a category.
  - `hidden` integer: Rows removed by the filters.
  - `total` integer
  - `limit` integer
  - `offset` integer
  - `pools` PoolListRow[]
    - `pool` string: A pool: a 20-byte contract address (V2 / V3) or a 32-byte Uniswap V4 pool id.
    - `dex` string
    - `kind` 'v2' | 'clmm' | 'v4'
    - `feeBps` number, nullable
    - `hooks` string, nullable: EVM address, hex, case-insensitive.
    - `lpAccess` 'open' | 'hooked' | 'unknown': `hooked` = a V4 hook can refuse adds.
    - `tickSpacing` integer, nullable
    - `token0` TokenLite: A token as it appears inside a pool row.
      - `address` string: EVM address, hex, case-insensitive.
      - `symbol` string, nullable: Symbol from the contract, or null while unresolved.
      - `decimals` integer, nullable: ERC-20 decimals.
      - `logo` string, nullable: Logo URL, or null.
      - `impostor` boolean: True when the symbol copies the chain's anchor (a token called USDC that is not the USDC predeploy). Flagged, never hidden.
    - `token1` TokenLite: A token as it appears inside a pool row.
      - `address` string: EVM address, hex, case-insensitive.
      - `symbol` string, nullable: Symbol from the contract, or null while unresolved.
      - `decimals` integer, nullable: ERC-20 decimals.
      - `logo` string, nullable: Logo URL, or null.
      - `impostor` boolean: True when the symbol copies the chain's anchor (a token called USDC that is not the USDC predeploy). Flagged, never hidden.
    - `tokenSide` integer, nullable: Which side is the non-anchor token (0 or 1).
    - `tvlUsd` number, nullable
    - `tvlSrc` string, nullable: Where TVL came from (`onchain`, `dexscreener`, …).
    - `tvlAt` integer, nullable: Unix time, seconds, UTC.
    - `vol` object
      - `h1` number
      - `h6` number
      - `h24` number
      - `d7` number
    - `fees` object: volume × the pool's fee tier.
      - `h1` number, nullable
      - `h6` number, nullable
      - `h24` number, nullable
    - `feeTvlPct` object: fees ÷ TVL, percent.
      - `h1` number, nullable
      - `h6` number, nullable
      - `h24` number, nullable
    - `aprPct` number, nullable: 24h fee/TVL × 365 — a full-range yardstick, not a promise.
    - `trades24h` integer
    - `wallets24h` integer
    - `priceUsd` number, nullable
    - `lpAdd24h` number
    - `lpRemove24h` number
    - `providers24h` integer
    - `firstSeenTs` integer: Unix time, seconds, UTC.
    - `createdTs` integer, nullable: Unix time, seconds, UTC.
    - `lastTradeHour` integer
    - `turnover24h` number, nullable: 24h volume ÷ TVL.
    - `suspect` boolean: Wash or launch-farm printing (volume without traders, dust TVL under real volume, turnover no honest pool reaches). Hidden by default; `flagged=1` shows them.
    - `score` integer: 0–100 health score (traders, TVL, yield sanity, LP flow, age, penalties).
    - `marketCapUsd` number, nullable: The tracked token's price × its total supply on this chain (for a bridged token: what was bridged here). On the list only; `null` when the pool tracks neither side, the tracked side is the native coin, or the supply is not on record yet.
  - `updatedAt` integer: Unix time, milliseconds — when the server built this answer.

## Other responses

- `400`: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
- `503`: The lane behind this endpoint is not ready or not enabled here (`NOT_READY`, `CHAIN_NOT_ENABLED`, `NOT_ENABLED`, `*_UNAVAILABLE`). 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)
