API ReferenceWallets (Legacy)

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

ParameterTypeDefaultDescription
address (path)stringSolana wallet address
window (query)string7dTime 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_usd reflects 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}:pnl via 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

ParameterTypeDefaultConstraintsDescription
address (path)stringSolana wallet address
limit (query)integer50max 200Results per page
offset (query)integer0Pagination offset
token (query)stringFilter 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-pnl via WebSocket to receive unrealized PnL updates as prices move.

Parameters

ParameterTypeDefaultConstraintsDescription
address (path)stringSolana wallet address
token (query)stringFilter 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}:positions via WebSocket to receive position updates (opened, partially closed, fully closed) in real-time.

Parameters

ParameterTypeDefaultDescription
address (path)stringSolana wallet address
status (query)stringallFilter: 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

StatusMeaning
OPENFull position held, no exits yet
PARTIALSome tokens sold, position partially closed
CLOSEDEntire 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

ParameterTypeDescription
address (path)stringSolana 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

FieldValuesWhat It Means
trader_typesniper, swing, scalper, …Trading style classification
performance_levelelite, profitable, breakeven, losingPerformance tier
size_classwhale, shark, dolphin, fishTypical position sizes
exit_stylequick_flip, holder, ladder_outExit behavior pattern
automation_labelbot, semi-automated, manualDetected automation level
funded_by_farm0 or 1Whether SOL came from a known farm/airdrop wallet