Skip to main content
PnL V2 measures wallet returns from indexed Solana trades. Before comparing wallets, choose the same calculation mode, currency, and time window. This page explains those choices and links to the query guides.
Base URL: https://data.solanatracker.io
Auth: Pass your API key in the x-api-key header.
Values: Monetary amounts default to USD. Wallet summary, history, and performance accept ?currency=usd|sol|eur. Timestamps are Unix milliseconds unless noted.

Essentials

What PnL V2 includes

  • Token coverage. Every SPL token is supported except stablecoins and SOL.
  • Wallet endpoints. Use wallet endpoints for any wallet, even if it is not on a leaderboard.
  • Identity tags. Wallets can include an identity object with labels such as KOL, bot, exchange, pool, developer, trading platform, or SNS primary .sol domain.

What PnL V2 excludes

SOL and stablecoins serve as quote assets and are excluded from PnL positions. excludeArbitrage=true is the default on endpoints that expose this filter. Set it to false when your analysis needs arbitrage wallets. The top-traders leaderboard covers the top 500k wallets per period. If a wallet is outside that ranked set, query it directly with the wallet endpoints.

Identity tags

An identity object can contain several labels:
  • Bots and MEV — potential_bot (heuristic), bot (curated named bots like Mayhem Bot), and arbitrage (confirmed MEV).
  • Platforms — axiom, bloom, and photon. The API also accepts axiom-flash as an axiom alias.
  • Safety / infrastructure tags — curated hacker, spam_dusting, and exchange labels when known.
  • Pool and developer roles are automatically resolved on token-scoped endpoints.
  • SNS: primary .sol domain via Ridge (identity.sns, sns tag). See SNS Primary Domain.

PnL modes

Wallet-summary, positions, single-position, top-trader leaderboard, and position batch endpoints accept ?pnlMode=. Supported endpoints echo pnlMode in the response. Position rows expose mode-aware pnl.realized and unfiltered pnl.realizedRaw; read the selected mode when comparing results. The KOL leaderboards, history, chart, performance, highlights, risk, token-traders, first-buyers, and wallet-summary batch endpoints do not take pnlMode; they return the API’s fixed server-side view for that dataset.

Currency denomination

Wallet summary, history, and performance accept an optional ?currency= query parameter: Conversion rules:
  • History and performance — each day’s USD values are divided by that day’s historical reference rate.
  • Wallet summary — converted with current spot (getSolanaPrice() for SOL; latest 1m candle for EUR).
  • Counts, percentages, timestamps, and ROI are not converted.
  • Field names stay the same (e.g. activity.volume.costUsd); check the top-level currency field for denomination.
  • Invalid values (e.g. ?currency=btc) return 400: { "error": "Invalid currency. Options: usd, sol, eur" }.

Endpoint groups

Wallet endpoints

Token endpoints

Leaderboard endpoints

Batch endpoints

Key concepts

Realized vs unrealized PnL

Profit or loss attributed to completed sales.
The current value of open positions minus their remaining cost basis.
realized + unrealized.

Wallet coverage

PnL V2 covers all Solana wallets from December 2023 onward. Wallets are not indexed on request.

Pagination

For paginated responses, pass pagination.nextCursor unchanged as cursor in the next request. Keep the other filters the same.

Wallet identity

When available, identity combines wallet labels from multiple sources. For example, a wallet may have ["kol", "developer", "axiom"]. Only populated fields are returned: On token-scoped endpoints (/tokens/:token/traders, /first-buyers, /tokens/:token/positions/batch) the pool and developer roles are resolved for the exact token in the path, so you can spot devs, LPs, and snipers inline without extra requests. See the Solana Wallet Tags guide for the full supported tag list.

Enrichment on /tokens/:tokenAddress/holders

The classic holders endpoint accepts an optional ?enrich= parameter:
  • ?enrich=identity — adds pool / developer / platform identity per holder.
  • ?enrich=walletPnl — adds lifetime wallet PnL plus per-token PnL per holder.
  • ?enrich=all — both.
Omit enrich when you only need the base holder response.

Real-time via Datastream

Pair these REST endpoints with the Datastream PnL V2 WebSocket rooms for live updates. Available on Premium, Business, and Enterprise plans: Typical pattern: call GET /v2/pnl/wallets/:wallet once to seed state, then subscribe to pnl:{wallet}:summary to keep it in sync. For valuations between position events, combine a PnL room with price:aggregated:{token} or price-by-token:{token}. Use PnL events for balances and cost basis, and price events for the displayed market value. Follow the live PnL guide.