Skip to content

Best liquidity providers

GET
/lp/leaderboard
curl --request GET \
--url 'https://api.getchord.xyz/v1/lp/leaderboard?chain=5042&unit=usd&sort=profit&limit=48&all=0&minIn=20'

LP wallets from the ledger: win rate, fees, pools, expected value per position, average age / invested / monthly profit, profit over 7 / 30 days / all time, the last seven days of profit and what they provide to. Every filter bound is inclusive; unset = off.

The board is fee-checked: a wallet whose profit is positive while the fees it collected are under a tenth of that profit made it on the token’s price (liquidity on a launch pulled into the buyers), not by providing, and is left out; hidden counts them and all=1 keeps them in. The check reads the window the board ranks by (profit_7d → 7 days, profit_30d → 30 days, every other sort → all time). Every sort ranks inside the 400 most profitable wallets of its window that pass the filters; total is that count. A window sort lists only wallets with a position that ended or was touched in the window.

chain
required
integer
Allowed values: 5042 4663 143

Chain id: 5042 Arc · 4663 Robinhood Chain · 143 Monad.

unit
string
default: usd
Allowed values: usd native

native = every money field of the answer in the chain’s own coin (ETH on Robinhood Chain, MON on Monad; Arc’s coin is USDC), each deposit, withdrawal and fee converted at the coin’s price of its own hour, and live values at the price now. The fields keep their …Usd names; unit and unitSymbol in the answer say what they carry. The row rules (the $20 floor, the 20x bound) stay in dollars, so both units score the same positions. 503 UNIT_NOT_READY while a chain’s ledger is being rebuilt with these figures; another value is 400 BAD_UNIT.

sort
string
default: profit
Allowed values: profit profit_7d profit_30d win_rate avg_age positions pools ev avg_invested monthly_profit fees last_activity

profit = all time. An unknown value is 400 BAD_SORT.

limit
integer
default: 48 >= 1 <= 200
all
string
Allowed values: 0 1

1 = keep the wallets the fee check leaves out.

minIn
number
default: 20

Ignore positions under this many dollars.

minPositions
integer
minAgeHours
number
minWinRate
number

Percent.

minEv
number
minProfit
number
minMonthly
number
maxFirstTs

Unix time, seconds, UTC.

integer

Only wallets active before this time.

lastActiveDays
number
minFees
number

Fees collected, all time.

Media typeapplication/json
object
chain
integer
sort
string
minIn
number
filters
object
key
additional properties
any
feeCheck

The fee check was applied.

boolean
hidden

Wallets passing the filters that the fee check left out.

integer
total

Wallets the board ranks.

integer
rows
Array<object>
object
wallet

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
winRatePct
number | null
feesUsd
number
pools
integer
evUsd

Expected value per position.

number | null
avgAgeHours
number | null
avgInvestedUsd
number | null
avgMonthlyProfitUsd
number | null
windows

Per window: the positions that ended or were last touched in it, the profit they made and the fees they collected over their life.

object
d7
object
positions
integer
profitUsd
number
feesUsd
number
d30
object
positions
integer
profitUsd
number
feesUsd
number
all
object
positions
integer
profitUsd
number
feesUsd
number
open
integer
closed
integer
wins
integer
firstTs

Unix time, seconds, UTC.

integer | null
lastTs

Unix time, seconds, UTC.

integer
daily

Last 7 days.

Array<object>
object
day

YYYY-MM-DD

string
profitUsd
number
tokens

What the wallet provides to, by dollars in.

Array<object>
object
address

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
symbol
string | null
logo
string | null
inUsd
number
positions
integer
updatedAt

Unix time, milliseconds — when the server built this answer.

integer
Example
{
"chain": 5042,
"sort": "profit",
"minIn": 20,
"filters": {},
"rows": [
{
"wallet": "0x50550bf5c09b38e5c574c190cef88b859694a44a",
"winRatePct": 75,
"feesUsd": 13516.447234,
"pools": 5,
"evUsd": 55.95264399437404,
"avgAgeHours": 53.940039682539684,
"avgInvestedUsd": 8802.035202296884,
"avgMonthlyProfitUsd": 54574.16597590998,
"windows": {
"d7": {
"positions": 7,
"profitUsd": 13643.541493977495
},
"d30": {
"positions": 7,
"profitUsd": 13643.541493977495
},
"all": {
"positions": 7,
"profitUsd": 13643.541493977495
}
},
"open": 3,
"closed": 4,
"wins": 3,
"firstTs": 1789524227,
"lastTs": 1789695131,
"daily": [
{
"day": "2026-09-14",
"profitUsd": 0
},
{
"day": "2026-09-15",
"profitUsd": 0
}
],
"tokens": [
{
"address": "0xbc43ce8dec648ea298c4275559b81d6261c90b67",
"symbol": "TOLLY",
"logo": "https://cdn.dexscreener.com/cms/images/LquZIzWeLJoeUE4x?width=800&height=800&quality=95&format=auto",
"inUsd": 56621.88931640096,
"positions": 4
},
{
"address": "0xa163d7624da3b5d9182c50eab5b8cd247ae861bb",
"symbol": "Minara",
"logo": "https://static.minara.ai/minara-fun/token-logos/1a464bd3cbb6e0db661556f18b784344754785730da3bf9752e383e7e5a2605a.png",
"inUsd": 13303.485575872332,
"positions": 1
}
]
},
{
"wallet": "0x4705173e07dc8acde8a826a96883848d0a4bb2cf",
"winRatePct": null,
"feesUsd": 12121.658648,
"pools": 1,
"evUsd": null,
"avgAgeHours": 50.736111111111114,
"avgInvestedUsd": 1585.3021168837654,
"avgMonthlyProfitUsd": 48486.634592,
"windows": {
"d7": {
"positions": 5,
"profitUsd": 12121.658648
},
"d30": {
"positions": 5,
"profitUsd": 12121.658648
},
"all": {
"positions": 5,
"profitUsd": 12121.658648
}
},
"open": 5,
"closed": 0,
"wins": 0,
"firstTs": 1789644774,
"lastTs": 1789742574,
"daily": [
{
"day": "2026-09-14",
"profitUsd": 0
},
{
"day": "2026-09-15",
"profitUsd": 0
}
],
"tokens": [
{
"address": "0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b",
"symbol": "CRCL",
"logo": "https://cdn.dexscreener.com/cms/images/Y-swLma-R46hqFvc?width=800&height=800&quality=95&format=auto",
"inUsd": 7926.5105844188265,
"positions": 5
}
]
}
],
"updatedAt": 1789891861738
}

Invalid parameters — error names the check that failed (INVALID_PARAMS, BAD_ADDRESS, BAD_LIMIT, BAD_HOURS, …).

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
Example
{
"error": "INVALID_PARAMS",
"message": "amount must be an integer string in the token's smallest unit"
}