curl --request GET \
--url https://public-api.birdeye.so/wallet/v2/pnl/chart \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/wallet/v2/pnl/chart"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://public-api.birdeye.so/wallet/v2/pnl/chart', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"timestamp": "2026-05-30T23:59:59Z",
"realized_pnl": 0,
"total_volume_usd": 64.447324224148,
"total_token_traded": 13,
"total_tx_count": 13
},
{
"timestamp": "2026-05-31T23:59:59Z",
"realized_pnl": 0.014336242978757942,
"total_volume_usd": 159.60189124804634,
"total_token_traded": 18,
"total_tx_count": 48
},
{
"timestamp": "2026-06-01T23:59:59Z",
"realized_pnl": 0.006014134550233186,
"total_volume_usd": 220.32103859032927,
"total_token_traded": 22,
"total_tx_count": 75
}
]
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}Wallet - PnL Chart
Retrieve the realized PnL chart of a wallet.
curl --request GET \
--url https://public-api.birdeye.so/wallet/v2/pnl/chart \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/wallet/v2/pnl/chart"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://public-api.birdeye.so/wallet/v2/pnl/chart', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"timestamp": "2026-05-30T23:59:59Z",
"realized_pnl": 0,
"total_volume_usd": 64.447324224148,
"total_token_traded": 13,
"total_tx_count": 13
},
{
"timestamp": "2026-05-31T23:59:59Z",
"realized_pnl": 0.014336242978757942,
"total_volume_usd": 159.60189124804634,
"total_token_traded": 18,
"total_tx_count": 48
},
{
"timestamp": "2026-06-01T23:59:59Z",
"realized_pnl": 0.006014134550233186,
"total_volume_usd": 220.32103859032927,
"total_token_traded": 22,
"total_tx_count": 75
}
]
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}- Usage Note
- Accessibility
- Chain Supported
Realized PnL time series for one wallet.
position_scopesupportsduration_onlyandcumulative.pnl_methodsupportsnetcashandwacso the chart can follow the same realized-PnL accounting method as your backend.time_fromandtime_tomust useYYYY-MM-DD HH:mm:ssin UTC.- If omitted, the backend fills a default window bounded to at most 100 days.
- The time range from
time_fromtotime_tomust not exceed 100 days.
- Lite
- Starter
- Premium
- Business
- Enterprise
SVM ⛓️ ✨
EVM ⛓️ ✨
Compute Unit ⚙️
Compute Unit ⚙️
- This endpoint consumes
30 CUper request.
Use Cases 💡
Use Cases 💡
- Plot realized PnL over time for one wallet.
- Compare cumulative versus duration-only profit behavior.
- Support trader-performance charts and recent-versus-all-time performance analysis.
How to Use 🛠️
How to Use 🛠️
- Set the supported PnL chain in
x-chain. - Pass the wallet address in
wallet. - Provide
time_fromandtime_toin UTC when you need an explicit window. - Choose
position_scopebased on whether you want isolated interval behavior or cumulative progression. - Pass
pnl_methodexplicitly when the chart must match summary and detail views exactly.
Best Practices ✅
Best Practices ✅
- Use explicit windows for reporting jobs so charts are reproducible.
- Keep chart labels clear about whether the series is cumulative or duration-only.
- Pair the PnL chart with wallet summary metrics so users can reconcile line shape with total outcomes.
Limitations ⚠️
Limitations ⚠️
- Maximum chart range is 100 days.
Authorizations
API key for authentication
Headers
The chain support PNL data.
solana, ethereum, arbitrum, avalanche, bsc, optimism, polygon, base, zksync, monad, hyperevm, mantle, megaeth, robinhood Query Parameters
The wallet of the account.
Calculation mode for PnL. duration_only calculates PnL only for each selected time bucket. cumulative calculates realized_pnl cumulatively from the start time, while unrealized_pnl is based on the all-time open position. Defaults to duration_only.
duration_only, cumulative Specify the start time in YYYY-MM-DD HH:mm:ss format. Defaults to 100 days before the current time. The time range between time_from and time_to must not exceed 100 days.
Specify the start time in YYYY-MM-DD HH:mm:ss format. Defaults to the current time.
PNL calculation method. wac (Weighted Average Cost): calculates PNL for each sell against the average cost of the position held at the time of the sell. Buys only re-average the cost of the remaining inventory, and previously realized sell PNL is not affected by later trades. netcash (Net Cash): calculates PNL across the full trade history using the spread between cumulative average sell price and cumulative average buy price. The buy average includes all buys and is not reduced by sells, so later buys can change the reported PNL.
wac, net_cash Was this page helpful?

