curl --request GET \
--url https://public-api.birdeye.so/token/v1/holder-positions \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/token/v1/holder-positions"
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/token/v1/holder-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"wallet_address": "Ddh8bLNrt44uRttF7wTZcZQAy5LH4vBEJiPHinasW6Ee",
"hold_amount": "29071167.107303",
"percent_of_supply": 2.90729,
"buy_volume": "29071167.107303",
"sell_volume": "0",
"buy_volume_usd": "503.7999904930808",
"sell_volume_usd": "0",
"avg_buy_price": "0.00001733",
"pnl": "-402.7013196418882",
"buy_count": 8,
"sell_count": 0,
"first_trade_at": "2026-03-30T17:09:53Z",
"labels": [
"bundler",
"sniper"
]
}
]
}{
"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"
}Token - Holder Positions
Retrieve a paginated list of wallet positions for a specified token, filtered by holder tags. Returns per-wallet trading data including PnL, volumes, and associated labels.
curl --request GET \
--url https://public-api.birdeye.so/token/v1/holder-positions \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/token/v1/holder-positions"
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/token/v1/holder-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"wallet_address": "Ddh8bLNrt44uRttF7wTZcZQAy5LH4vBEJiPHinasW6Ee",
"hold_amount": "29071167.107303",
"percent_of_supply": 2.90729,
"buy_volume": "29071167.107303",
"sell_volume": "0",
"buy_volume_usd": "503.7999904930808",
"sell_volume_usd": "0",
"avg_buy_price": "0.00001733",
"pnl": "-402.7013196418882",
"buy_count": 8,
"sell_count": 0,
"first_trade_at": "2026-03-30T17:09:53Z",
"labels": [
"bundler",
"sniper"
]
}
]
}{
"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
Wallet-level positions behind holder labels.
- Use
labelsto filter wallets bybundler,sniper,insider,dev,smart_trader, andkol. - If
labelsis omitted, the default label isbundler. - Each row includes wallet address, held amount, supply share, buy/sell volume, average buy price, PnL, trade counts, first trade time, and labels.
include_zero_balance=trueincludes wallets that traded the token but no longer hold it.sort_by=amountranks wallets by held amount;order_typecontrols ascending or descending order.
- Standard
- Lite
- Starter
- Premium
- Business
- Enterprise
Solana
Compute Unit ⚙️
Compute Unit ⚙️
- This endpoint consumes
25 CUper request.
Wallet Tag Definitions 🏷️
Wallet Tag Definitions 🏷️
- dev — The wallet that created the token: the mint creator from the initialize-mint transaction.
- sniper — A wallet that bought within the first
nblocks of the token, counted from the token’s first swap. On Solana,n = 5; a buy qualifies when its slot is withinfirst_trade_slot + 5.
- bundler — Coordinated buying detected in either level:
- Level 1: at least 4 buy transactions in the same slot.
- Level 2: at least 3 distinct wallets buying across adjacent slots, where max slot gap is 1.
- insider — A wallet that received the token directly from the Chef wallet via token transfer, not via a swap.
- smart_trader — A non-bot wallet ranked in Top Realized PnL over the last 90 days with realized PnL > $10,000. Wallets identified as bots are excluded before ranking and never receive this tag.
- kol — A tracked key-opinion-leader wallet label for this token when Birdeye classification identifies the wallet as a KOL cohort member.
Use Cases 💡
Use Cases 💡
- Move from cohort summary to wallet-level evidence: inspect exactly which labeled wallets hold supply, how they traded, and where their PnL stands.
- Build investigative tables for bundlers, snipers, insiders, developers, smart traders, and KOL wallets behind a token.
- Rank tagged wallets by holding size to find the highest-impact actors still exposed to the token.
- Combine buy/sell volume, average buy price, first trade time, and PnL to separate conviction from extraction.
- Power moderation, listing review, and risk workflows that need wallet-level proof behind holder-profile signals.
How to Use 🛠️
How to Use 🛠️
- Provide a Solana
token_address. - Use
labels=bundler,sniper,insider,dev,smart_trader,kolto choose the wallet cohorts you want to inspect. - Set
sort_by=amount&order_type=descto see the largest labeled holders first. - Use
offsetandlimitto page through the result set. - Set
ui_amount_mode=rawfor raw token amounts orui_amount_mode=scaledfor Solana Token-2022 scaled UI amounts when the token supports scaled UI amount extension.
Best Practices ✅
Best Practices ✅
- Start from holder-profile to identify suspicious or important cohorts, then use holder-positions to inspect the exact wallets.
- Sort by amount descending when reviewing supply risk, then inspect PnL and buy/sell volume to understand behavior.
- Include zero-balance wallets when investigating extraction, exits, or early washout behavior.
- Combine first trade time with current holdings to distinguish early conviction from late accumulation.
Limitations ⚠️
Limitations ⚠️
- Solana only.
sort_bycurrently supportsamount.- Supported
order_typevalues areascanddesc. - Results are paginated with offset up to 10,000 and limit up to 50.
- Holder labels depend on available indexing and classification coverage.
Authorizations
API key for authentication
Headers
Solana network only.
solana Query Parameters
Token mint address
"J3Dhvhga7QwgLWUGn43caDJtaoUTkDLmiMGqstS2Dw8A"
Comma-separated list of holder tags to filter by. Default: bundler
bundler, sniper, insider, dev, smart_trader, kol ["bundler", "sniper"]
Field to sort by. Default: amount
amount Sort direction. Default: desc
asc, desc Display mode for token amounts. Default: raw
scaled, raw Include wallets that have traded the token but no longer hold it (zero balance). Default: true
Specify the offset for pagination. Filter for records with offset greater than the specified offset value, including those with offset equal to the specified offset.
Number of items per page.
1 <= x <= 50Was this page helpful?

