Wallets
The wallets endpoints let you query any Solana wallet’s trading performance, trade history, open positions, and behavioral labels.
GET /v1/wallets/{address}/performance
Returns aggregate trading statistics for a wallet over a time window.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
address (path) | string | — | Solana wallet address |
window (query) | string | 7d | Time window: 1d, 7d, or 30d |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallets/7xKXtg.../performance?window=30d"Response
{
"wallet_address": "7xKXtg...",
"total_trades": 142,
"wins": 89,
"losses": 53,
"win_rate": 0.6267,
"total_pnl_usd": 12450.32,
"total_volume_usd": 98230.50,
"total_fees_usd": 142.80,
"avg_hold_time_seconds": 3420.5,
"cash_pnl_usd": 11200.00
}Understanding the Fields
- win_rate: Ratio from 0.0 to 1.0. A wallet with 89 wins out of 142 trades has a 62.67% win rate.
- total_pnl_usd: Sum of realized PnL across all closed trades. This is the “paper” number.
- cash_pnl_usd: Net SOL flow converted to USD. This is what actually hit the wallet. The difference from
total_pnl_usdreflects token positions that were entered but not fully exited in SOL terms. - avg_hold_time_seconds: Average time between entry and exit. A sniper might hold for 30 seconds; a swing trader for hours.
If the wallet has no trades in the given window, all numeric fields return 0.
GET /v1/wallets/{address}/trades
Returns paginated trade history with entry/exit details and realized PnL for each round-trip.
Live stream available: Subscribe to
wallet:{address}:pnlvia WebSocket to receive realized PnL events the instant a trade closes. CONYR is the only Solana API that streams realized PnL in real-time.
Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
address (path) | string | — | — | Solana wallet address |
limit (query) | integer | 50 | max 200 | Results per page |
offset (query) | integer | 0 | — | Pagination offset |
token (query) | string | — | — | Filter by token mint address |
Example
# Get last 20 trades for a specific token
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallets/7xKXtg.../trades?limit=20&token=EPjFWd..."Response
{
"trades": [
{
"wallet_address": "7xKXtg...",
"token_mint": "EPjFWd...",
"entry_signature": "5vGk...",
"exit_signature": "3mPq...",
"entry_timestamp": "2026-03-05 14:30:00",
"exit_timestamp": "2026-03-05 15:45:00",
"hold_time_seconds": 4500,
"entry_price_usd": 0.00234,
"exit_price_usd": 0.00312,
"realized_pnl_usd": 78.50,
"realized_pnl_sol": 0.52,
"percentage_gain": 33.33,
"position_type": "long",
"exit_type": "full",
"exit_dex": "raydium",
"entry_dex": "raydium"
}
],
"limit": 20,
"offset": 0
}Each trade represents a completed round-trip: an entry (buy) matched to an exit (sell) using FIFO accounting. If a wallet bought 1M tokens and sold them in 3 batches, you’ll see 3 trade records with the same entry_signature.
Live PnL Stream
Instead of polling this endpoint, subscribe to real-time PnL events via WebSocket:
{"op": "subscribe", "channels": ["wallet:7xKXtg...:pnl"]}Every time this wallet closes a trade (partial or full exit), you’ll receive an event with the realized PnL, hold time, entry/exit prices, and percentage gain — with no delay.
GET /v1/wallets/{address}/unrealized-pnl
Returns mark-to-market unrealized PnL for every open position a wallet holds, calculated using vetted live prices.
Live stream available: Subscribe to
wallet:{address}:unrealized-pnlvia WebSocket to receive unrealized PnL updates as prices move.
Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
address (path) | string | — | — | Solana wallet address |
token (query) | string | — | — | Filter by token mint address |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallets/7xKXtg.../unrealized-pnl"Response
{
"wallet_address": "7xKXtg...",
"total_unrealized_pnl_usd": 2450.80,
"positions": [
{
"token_mint": "EPjFWd...",
"entry_price_usd": 0.00234,
"current_price_usd": 0.00312,
"token_amount": 500000.0,
"cost_basis_usd": 1170.00,
"current_value_usd": 1560.00,
"unrealized_pnl_usd": 390.00,
"unrealized_pnl_sol": 2.58,
"percentage_gain": 33.33,
"entry_timestamp": 1709654400,
"entry_dex": "pumpfun"
}
]
}Each position shows the difference between entry cost basis and current market value. Prices are sourced from vetted live feeds — not stale or self-reported data.
Live Unrealized PnL Stream
Subscribe to real-time unrealized PnL updates via WebSocket:
{"op": "subscribe", "channels": ["wallet:7xKXtg...:unrealized-pnl"]}Combined with the wallet:{address}:pnl channel for realized trades, you get the complete picture: locked-in profits and current open exposure.
GET /v1/wallets/{address}/positions
Returns the wallet’s current token positions, tracked using first-in-first-out (FIFO) accounting.
Live stream available: Subscribe to
wallet:{address}:positionsvia WebSocket to receive position updates (opened, partially closed, fully closed) in real-time.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
address (path) | string | — | Solana wallet address |
status (query) | string | all | Filter: open, closed, or all |
Example
# Get only open positions
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallets/7xKXtg.../positions?status=open"Response
{
"positions": [
{
"wallet_address": "7xKXtg...",
"token_mint": "EPjFWd...",
"entry_signature": "5vGk...",
"entry_timestamp": 1709654400,
"entry_price_usd": 0.00234,
"original_amount": 1000000.0,
"remaining_amount": 500000.0,
"price_per_token": 0.00000234,
"status": "PARTIAL",
"exit_count": 2,
"entry_dex": "pumpfun"
}
]
}Position Status
| Status | Meaning |
|---|---|
OPEN | Full position held, no exits yet |
PARTIAL | Some tokens sold, position partially closed |
CLOSED | Entire position has been exited |
Returns up to 100 positions, ordered by entry_timestamp descending.
GET /v1/wallets/{address}/labels
Returns behavioral classification labels for a wallet, computed by the analytics pipeline.
Parameters
| Parameter | Type | Description |
|---|---|---|
address (path) | string | Solana wallet address |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallets/7xKXtg.../labels"Response
{
"wallet": "7xKXtg...",
"trader_type": "sniper",
"performance_level": "elite",
"size_class": "shark",
"exit_style": "quick_flip",
"automation_label": "bot",
"primary_terminal": "photon",
"primary_tool": "photon",
"primary_tool_pct": 0.85,
"funded_by_farm": 0
}Returns null if the wallet hasn’t been classified yet (not enough data or not yet processed by the analytics pipeline).
Label Taxonomy
| Field | Values | What It Means |
|---|---|---|
trader_type | sniper, swing, scalper, … | Trading style classification |
performance_level | elite, profitable, breakeven, losing | Performance tier |
size_class | whale, shark, dolphin, fish | Typical position sizes |
exit_style | quick_flip, holder, ladder_out | Exit behavior pattern |
automation_label | bot, semi-automated, manual | Detected automation level |
funded_by_farm | 0 or 1 | Whether SOL came from a known farm/airdrop wallet |