Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.solanatracker.io/llms.txt

Use this file to discover all available pages before exploring further.

Base URL: https://data.solanatracker.io
Auth: Pass your API key in the x-api-key header.
Values: All monetary amounts are USD. Timestamps are Unix milliseconds unless noted.

Essentials

What PnL V2 Includes

  • Scale. PnL is tracked for around 300–400 million wallets with billions of token positions, updated close to real time.
  • 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, or trading platform.

What PnL V2 Excludes

Stablecoins and SOL are intentionally excluded from PnL positions because they are quote assets. A quote asset is the token used to price a trade, not the position being measured. Arbitrage wallets are excluded by default with excludeArbitrage=true. Arbitrage PnL can be noisy because those wallets often trade for tiny differences across pools. Pass excludeArbitrage=false to include them. 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

Every wallet can carry a structured identity. Supported today:
  • Bots and MEVpotential_bot (heuristic), bot (curated named bots like Mayhem Bot), and arbitrage (confirmed MEV).
  • Platformsaxiom, 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.

PnL Modes

Wallet-summary, positions, single-position, top-trader leaderboard, and position batch endpoints accept ?pnlMode=.
ModeBehavior
strict (default)Safest view. Excludes positions where the sell amount is larger than the buy amount, which usually means the PnL is invalid or misleading.
adjustedKeeps those positions but recalculates realized PnL with an adjusted cost basis. Useful when strict mode hides positions you still want to show.
rawNo filtering. Realized PnL is returned exactly as calculated. Use this when you need the unfiltered numbers.
Endpoints that support pnlMode echo it back in the response. Position rows include both pnl.realized (mode-aware) and pnl.realizedRaw (unfiltered) so your UI can toggle without re-querying. 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.

What is PnL V2?

PnL V2 tracks profit and loss for every Solana wallet. Give it a wallet address and it returns:
  • A summary with total PnL, win rate, and token counts
  • Per-token positions with cost basis, current value, and realized/unrealized PnL
  • Daily history and chart data for equity curves
  • Leaderboards for KOLs and top traders
  • Risk analysis with concentration and exposure metrics
  • Batch lookups for hundreds of wallet-token pairs at once

Wallet Analytics

PnL summaries, positions, daily history, performance, and risk for any wallet.

Token Intelligence

Every trader on a token — who’s profitable, who’s underwater, who bought first.

Leaderboards

KOL and top trader rankings with rolling windows and calendar views.

Batch Operations

Positions for hundreds of wallet+token pairs in one request.

Endpoint Groups

Know the endpoint?

Go straight to the API reference for schemas and parameters.

Building a workflow?

Continue with the step-by-step guides below.

Wallet Endpoints

EndpointWhat it returns
GET /v2/pnl/wallets/{wallet}PnL summary, win rate, token counts
GET /v2/pnl/wallets/{wallet}/positionsAll positions with sorting and filters
GET /v2/pnl/wallets/{wallet}/tokens/{token}Single position detail
GET /v2/pnl/wallets/{wallet}/historyDaily PnL snapshots
GET /v2/pnl/wallets/{wallet}/chartChart data points
GET /v2/pnl/wallets/{wallet}/performanceStreaks, drawdown, best/worst days
GET /v2/pnl/wallets/{wallet}/highlightsBiggest winners, losers, flips
GET /v2/pnl/wallets/{wallet}/riskConcentration and open exposure

Token Endpoints

EndpointWhat it returns
GET /v2/pnl/tokens/{token}/tradersEvery wallet that traded this token
GET /v2/pnl/tokens/{token}/first-buyersEarliest buyers only (sort=first_trade, direction=asc)

Leaderboard Endpoints

EndpointWhat it returns
GET /v2/pnl/leaderboard/kolsKOL rankings (all-time)
GET /v2/pnl/leaderboard/kols/periodKOL rankings for a time window
GET /v2/pnl/leaderboard/kols/calendarDaily KOL performance for a month
GET /v2/pnl/leaderboard/kols/datePer-KOL breakdown for one day
GET /v2/pnl/leaderboard/topSolana Traders Leaderboard over a rolling window

Batch Endpoints

EndpointWhat it returns
POST /v2/pnl/wallets/{wallet}/positions/batchOne wallet → many tokens
POST /v2/pnl/tokens/{token}/positions/batchOne token → many wallets
POST /v2/pnl/positions/batchAny wallet-token pairs
POST /v2/pnl/wallets/batchWallet summaries + tags for up to 100 wallets

Key Concepts

Realized vs Unrealized PnL

Profit or loss from tokens you’ve sold. This is locked in — it doesn’t change.
Paper profit or loss on tokens you still hold. Changes with every price tick.
realized + unrealized. The full picture.

Wallet Coverage

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

Pagination

List endpoints use cursor-based pagination. Grab pagination.nextCursor from the response and pass it as the cursor query parameter to get the next page.
# First page
curl "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions?limit=50" \
  -H "x-api-key: YOUR_API_KEY"

# Next page (use cursor from previous response)
curl "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions?limit=50&cursor=eyJ..." \
  -H "x-api-key: YOUR_API_KEY"

Wallet Identity

Every wallet-scoped response includes a structured identity object. It merges multiple sources so a wallet can carry several labels at once (e.g. ["kol", "developer", "axiom"]). Only populated fields are returned:
TagMeaning
kolTracked KOL wallet. Includes name, twitter, avatar.
botCurated named bot (e.g. Mayhem Bot).
potential_botHeuristically detected bot — softer signal.
arbitrageConfirmed MEV / arbitrage operator.
hackerCurated exploit / scam wallet label. Includes hacker.label.
spam_dustingCurated spam-dusting wallet label. Includes spamDusting.label.
exchangeKnown centralized exchange hot wallet. Includes exchange.name.
poolWallet is a pool vault, authority, LP mint, or bonding curve account. Includes program and poolAddress.
developerWallet is a token creator, pool deployer, or mint authority. Includes via, pools, creationTx, createdAt.
Platform tagsaxiom, bloom, photon. axiom-flash is accepted as a query alias and surfaces as axiom.
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.
When omitted, the endpoint behaves exactly as before with no extra work.

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:
RoomEmitsScope
pnl:{wallet}:{token}tradeUpdate, balanceUpdateOne token position
pnl:{wallet}tradeUpdate, balanceUpdateEvery token the wallet trades
pnl:{wallet}:summaryTotal wallet PnL summaryAggregated realized/unrealized PnL, ROI, counts, averages, and open-position totals
Typical pattern: call GET /v2/pnl/wallets/:wallet once to seed state, then subscribe to pnl:{wallet}:summary to keep it in sync. For the fastest unrealized PnL ticks, combine a PnL room with a price stream — price:aggregated:{token} (cross-pool, recommended) or price-by-token:{token} (primary pool). PnL rooms emit tradeUpdate and balanceUpdate on every fill plus an occasional throttled priceUpdate; the price rooms tick on every market move. Walkthrough in the PnL V2 Datastream guide.