Skip to content

One wallet's LP record

GET
/lp/wallet/{address}
curl --request GET \
--url 'https://api.getchord.xyz/v1/lp/wallet/example?chain=5042&unit=usd'

Everything the wallet board knows about one wallet, whether it is ranked or not: win rate, fees, profit, expected value per position, average invested / age / monthly profit and the 7-day / 30-day / all-time windows (summary); one row per UTC day on which a position ended, with the profit and the fees that landed on it (history; an open position counts its fees on the day it was last touched); the pools it provided to (pools, up to 60, by number of positions).

The figures use the board’s row rules, so a wallet opened from /lp/leaderboard shows the same numbers: unscored says how many ledger positions were left out and why (each under the first reason that fits), and ledger counts every position, scored or not. operator: true = 500 or more scored positions, an account the board does not rank. truncated: true = the wallet holds more than 20,000 positions and the figures cover the newest 20,000.

Use it for: a wallet page, “is this LP worth following”, a PnL calendar.

address
required

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/

Not a 0x address is 400 BAD_WALLET.

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.

Media typeapplication/json
object
chain
integer
wallet

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
unit

usd or native: the unit of every money field in this answer.

string
Allowed values: usd native
unitSymbol

USD, or the chain’s coin (ETH, MON, USDC).

string
summary
object
positions

Scored positions.

integer
open
integer
closed
integer
wins
integer
winRatePct
number | null
pools
integer
feesUsd
number
profitUsd
number
evUsd

Expected value per position.

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

Profit to date over the months since the first position, never less than one week.

number | null
windows
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
firstTs

Unix time, seconds, UTC.

integer | null
lastTs

Unix time, seconds, UTC.

integer | null
history

Oldest first; days with nothing are absent.

Array<object>
object
day

YYYY-MM-DD, UTC

string
profitUsd
number
feesUsd
number
positions

Positions that ended (or, open, were last touched) on the day.

integer
pools
Array<object>
object
pool

A pool: a 20-byte contract address (V2 / V3) or a 32-byte Uniswap V4 pool id.

string
/^0x([a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/
token

EVM address, hex, case-insensitive.

string | null
/^0x[a-fA-F0-9]{40}$/
anchor

EVM address, hex, case-insensitive.

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

Every position the ledger holds for the wallet.

object
positions
integer
open
integer
closed
integer
unscored
object
small

Under minIn dollars.

integer
jit

Opened and closed inside a minute.

integer
unreconciled

Far more dollars out than the index saw go in.

integer
partial

Opened before the index started.

integer
unlistedPool

On a pool the pool list hides as thin or suspect.

integer
minIn
number
truncated
boolean
operator
boolean
updatedAt

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

integer
Example
{
"chain": 5042,
"wallet": "0x5db28691cbfc2ceeca1d919f0749b64013c25432",
"summary": {
"positions": 2,
"open": 0,
"closed": 2,
"wins": 1,
"winRatePct": 50,
"pools": 1,
"feesUsd": 1473.5195824012221,
"profitUsd": 898.4072651256388,
"evUsd": 449.2036325628194,
"avgAgeHours": 85.54625,
"avgInvestedUsd": 2485.7135485602826,
"avgMonthlyProfitUsd": 1220.1586855458952,
"windows": {
"d7": {
"positions": 0,
"profitUsd": 0,
"feesUsd": 0
},
"d30": {
"positions": 2,
"profitUsd": 898.4072651256388,
"feesUsd": 1473.5195824012221
},
"all": {
"positions": 2,
"profitUsd": 898.4072651256388,
"feesUsd": 1473.5195824012221
}
},
"firstTs": 1789922677,
"lastTs": 1790521219
},
"history": [
{
"day": "2026-09-22",
"profitUsd": 1767.3683024312918,
"feesUsd": 556.5679612124811,
"positions": 1
},
{
"day": "2026-09-27",
"profitUsd": -868.961037305653,
"feesUsd": 916.9516211887411,
"positions": 1
}
],
"pools": [
{
"pool": "0xf53f02d9041d00bbd92235b4c902b9f350c554a8ed2dc64fa0a4585aac413f09",
"token": "0x8faae5592b9acc27a79fca745c6b872adf514a5d",
"anchor": "0x3600000000000000000000000000000000000000",
"positions": 2,
"open": 0,
"inUsd": 4971.427097120565,
"profitUsd": 898.4072651256388,
"feesUsd": 1473.5195824012221,
"symbol": "MURMUR",
"anchorSymbol": "USDC",
"logo": "https://cdn.dexscreener.com/cms/images/QUq-IqT1GLQNkxMx?width=800&height=800&quality=95&format=auto"
}
],
"ledger": {
"positions": 2,
"open": 0,
"closed": 2
},
"unscored": {
"small": 0,
"jit": 0,
"unreconciled": 0,
"partial": 0,
"unlistedPool": 0,
"cluster": 0
},
"minIn": 20,
"truncated": false,
"operator": false,
"updatedAt": 1791831176348
}

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"
}