Skip to content

A wallet's positions

GET
/lp/positions
curl --request GET \
--url 'https://api.getchord.xyz/v1/lp/positions?chain=5042&unit=usd&owner=example&status=open&limit=100&offset=0'

Every managed position a wallet holds or held: dollars in and out, fees collected, live value and uncollected fees (V3), in-range, PnL on the liquidity leg, age, and the JIT / unreconciled flags; with a summary (open, closed, wins, realized PnL, fees, open value).

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.

owner
required

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
status
string
default: all
Allowed values: open closed all
token

EVM address, hex, case-insensitive.

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

Only positions holding this token.

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})$/

Only positions in this pool.

limit
integer
default: 100 >= 1 <= 200
offset
integer
0 <= 20000

Rows to skip, newest first: page through a wallet’s closed positions. Out of range is 400 BAD_OFFSET.

Media typeapplication/json
object
chain
integer
owner

EVM address, hex, case-insensitive.

string
/^0x[a-fA-F0-9]{40}$/
status
string
positions
Array<object>
object
manager

EVM address, hex, case-insensitive.

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

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

string | null
/^0x([a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/
dex
string | null
kind
string
Allowed values: v3 v4
owner

EVM address, hex, case-insensitive.

string | null
/^0x[a-fA-F0-9]{40}$/
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}$/
tickLower
integer | null
tickUpper
integer | null
symbol
string | null
anchorSymbol
string | null
logo
string | null
inUsd

Dollars added.

number
outUsd

Dollars removed.

number
feesUsd

Fees collected.

number
adds
integer
removes
integer
collects
integer
openedTs

Unix time, seconds, UTC.

integer | null
lastTs

Unix time, seconds, UTC.

integer
closedTs

Unix time, seconds, UTC.

integer | null
burned
boolean
status
string
Allowed values: open closed
valueUsd

Live value of the liquidity (open positions).

number | null
uncollectedUsd

Uncollected fees (V3).

number | null
inRange
boolean | null
pnlUsd

Liquidity leg only.

number | null
pnlPct
number | null
ageHours
number | null
edgePct

Distance from the price to the nearest range edge, percent.

number | null
jit

Opened and closed within seconds — a swap trick, shown but not scored.

boolean
unreconciled

Dollars out exceed dollars in by far — the tape missed an add; shown, never scored.

boolean
summary
object
open
integer
closed
integer
wins
integer
winRatePct
number | null
realizedPnlUsd
number
feesUsd
number
openValueUsd
number
updatedAt

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

integer
Example
{
"chain": 5042,
"owner": "0xb145400da27a2497d9fc2cd5621f2bfd37617af4",
"status": "all",
"positions": [],
"summary": {
"open": 0,
"closed": 0,
"wins": 0,
"winRatePct": null,
"realizedPnlUsd": 0,
"feesUsd": 0,
"openValueUsd": 0
},
"updatedAt": 1789891871406
}

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