TL;DR
- Snapshot net worth and plot the equity curve
- Compute realized and unrealized profit and loss per token
- Compare PnL across multiple wallets on a single token
All requests share the base URL https://public-api.birdeye.so and authenticate with the X-API-KEY header. The snapshot endpoints are Solana only. The PnL endpoints also support twelve EVM chains, selected with the x-chain header.
The three stage pipeline
1
Snapshot net worth and plot the equity curve
The first screen shows two things: what the wallet is worth right now, and how that worth got there.Endpoint: Add
GET /wallet/v2/current-net-worth, GET /wallet/v2/net-worthnet-worth for the equity curve, which returns dated points with a precomputed change.count caps at 90 points. For a longer curve, set time to the oldest timestamp you already hold and keep direction=back, stitching pages onto the front of the series. Unlike total_value on the snapshot call, net_worth here is already a number, not a string.2
Compute realized and unrealized PnL per token
This is the engine of the tracker. One POST call returns both the whole wallet summary and the token by token breakdown.Endpoint:
POST /wallet/v2/pnl/detailsRender the table from
pnl.realized_profit_usd, pnl.unrealized_usd, pnl.total_usd, and pnl.avg_profit_per_trade_usd per token. The wallet header mirrors that shape at summary.pnl.* and summary.unique_tokens, so one call fills both sections.3
Compare wallets on a single token
The final stage flips the question: of everyone holding this token, who is up. Pass one mint and a list of wallets to build a holder leaderboard.Endpoint:
GET /wallet/v2/pnl/multipleWatch your credit budget
A tracker that refreshes on every page view can run up calls quickly, andpnl/details is the heaviest call of the three.
Endpoint: GET /utils/v1/credits
Before you ship
- String fields
total_value,value, andbalanceare parsed to numbers before maths. - Holdings display
amount, not the rawbalance. pnl/detailsis read without asuccessguard, and win rate is taken fromsummary.counts.win_rate.pnl/multipleresults are read withObject.entries(data.data), then sorted bypnl.total_usd.- Responses are cached per wallet, with credits monitored as usage grows.
FAQ
Does the tracker work on EVM chains or only Solana?
Does the tracker work on EVM chains or only Solana?
The snapshot endpoints,
current-net-worth and net-worth, are Solana only. The two PnL endpoints also support twelve EVM chains, selected with x-chain, so the PnL core travels beyond Solana even though the equity curve does not.What is the difference between realized and unrealized PnL here?
What is the difference between realized and unrealized PnL here?
Realized PnL is profit locked in on tokens the wallet has already sold, at
pnl.realized_profit_usd. Unrealized PnL is the paper gain or loss on tokens still held, at pnl.unrealized_usd. pnl.total_usd combines both.How often should the tracker refresh?
How often should the tracker refresh?
Net worth and PnL change only when the wallet trades or prices move, so refreshing every few seconds wastes calls. Cache each wallet’s snapshot and PnL for a short window, refresh the equity curve less often than live price, and let the credits endpoint tell you when to widen those windows.

