Skip to main content
GET
GET /v1/wallet/closed-positions · 2 credits Every position a wallet has fully exited: total bought and sold (USD and native), realized PnL in absolute and percent, buy/sell counts and last trade time. The realized counterpart of /v1/wallet/positions - the realized PnL of every position lands in exactly one of the two. EVM and Solana.
On Solana, USD figures are valued at the SOL price at the time of each trade; on EVM chains, at the current native price. decimals is the token’s decimals. buyFeesUsd, sellFeesUsd and totalFeesUsd are the fees paid trading the token (network fees, tips and platform fees, in USD at the time of each transaction); null when not available for the position. realizedPnlPercent is realized PnL over total USD bought. meta.hasMore signals another page; meta.oldestAt is the last row’s exit time; meta.asOf is the moment the holdings were read on-chain, shared by every page of the same snapshot.
tokens= scopes the response to 1 to 50 token addresses: the realized PnL of a fully-exited token in one call, without paging the wallet. A token whose bag is fully sold but still shows a residual balance is listed here with its realized PnL, and on /v1/wallet/positions as a holding with buys and sells at 0.

Authorizations

Authorization
string
header
required

Your raw API key (not needed on the demo server).

Query Parameters

wallet
string
required

Wallet address (EVM hex, case-insensitive; Solana base58).

chain
string

Public chain id - evm:<id> or solana. Omit for all EVM chains.

tokens
string

Comma-separated token addresses (1-50) to scope the response to: the realized PnL of those tokens, without paging the whole wallet.

limit
integer
default:30
required

1-100. Default 30.

Required range: 1 <= x <= 100
offset
integer
default:0
required

Rows to skip. Default 0.

Required range: x >= 0
sort
enum<string>
default:lastTradeAt

lastTradeAt (default) or pnl.

Available options:
lastTradeAt,
pnl

Response

200

Standard { data, meta } envelope.