Traders
The Traders page under a key: the directory, one wallet's page and its portfolio.
The trader routes answer with the same views Traktor's Traders page and trader pages read, in the v1 envelope and drawn from your plan's units.
GET /v1/traders/directory
Every named trader and each chain's best by a year's realized profit, ranked and screened, a page at a time. With any of the market filter's token screens, only traders with a year who traded a passing token in the window are listed, their window counted in those tokens alone.
- Credential
- API key
- REST units
- 3 units
sortenumqueryThe ranking.
Default
volumeOne of:volume,net,bought,sold,buyShare,trades,avgTrade,holdings,pnl,pnlMonth,pnlWeek,winRate,active,recent,firstSeen,rankdirenumqueryRanking direction.
Default
descOne of:desc,ascchainlistqueryChains to include; empty means all.
Any of:
solana,robinhood,bnb,base,arc,arbitrum,ethereum,monad,hyperevm,elysiumwindowenumqueryThe activity window, in minutes.
Default
1440One of:5,15,30,60,240,1440qstringqueryA name, handle or address to search for.
sideenumqueryTraders net buying or net selling in the window.
Default
allOne of:all,buying,sellingminVolumenumberqueryA floor on
volume.minTradesnumberqueryA floor on
trades.minHoldingsnumberqueryA floor on
holdings.minPnlnumberqueryA floor on
pnl.minWinRatenumberqueryA floor on
winRate.minAvgTradenumberqueryA floor on
avgTrade.minActiveHoursnumberqueryA floor on
activeHours.launchpadlistqueryLaunchpad families, as
market.launchpadsinGET /v1/meta/filterslists them, each optionally chain-qualified, likebnb:flap; a bareotherorunknownis dropped and never narrows the list, thoughbnb:otheris kept, and a name outside the catalogue is ignored.dexlistqueryDEX signals; a token with any of them matches, and a name outside the vocabulary is ignored.
Any of:
paid,boost,ctofeesenumqueryWhether the token's launchpad shares its fees.
Default
anyOne of:any,shared,not_sharedpairlistqueryStock tickers the token pairs with, or
ANY-STOCKfor any stock.up to 12 items
minMcapnumberqueryMarket cap at least. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
maxMcapnumberqueryMarket cap at most. Tokens with no cap yet are kept — a brand-new one is small by definition. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minLiqnumberqueryPool depth at least — what the token can absorb before price moves. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
maxLiqnumberqueryPool depth at most. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minLiqPctnumberqueryDepth as a share of market cap — how much of the cap there is real money behind. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minHoldersnumberqueryWallets holding the token on chain, at least, as its data provider last counted them; a token nobody counted is in no band. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minFomoHoldersnumberqueryWallets on fomo still holding a position. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minHeldPctnumberqueryShare of circulating supply sitting in fomo wallets — how much of the token the crowd here owns. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minAthnumberqueryMultiple back to the all-time high, at least — headroom above the current price. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
maxAthnumberqueryMultiple back to the high, at most — near its own top. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
maxAgenumberqueryYounger than, in hours since the token launched on chain, or first traded on our tape where that came first or no launch is dated. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minAgenumberqueryOlder than, in hours since the token launched on chain, or first traded on our tape where that came first or no launch is dated. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
minCurvenumberqueryBonding-curve progress, at least, in percent; a token that has graduated counts as 101. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
maxCurvenumberqueryBonding-curve progress, at most, in percent; 100 keeps only tokens still on their curve. A plain number, read exactly, on the Board's day, where a token it does not list yet is left out.
0–1,000,000,000,000,000
offsetintegerqueryRows to skip.
Default
00–5,000limitintegerqueryRows per page; 0 reads as the default, 100.
Default
1000–200
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, route_not_found, data_unavailable, market_busy, market_fold_pending, missing_credentials, invalid_key, key_revoked, subscription_inactive, key_in_query, method_not_allowed, rate_limited, quota_exhausted, rate_limit_unavailable, internal_error
curl -s "https://api.traktor.fun/v1/traders/directory" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/traders/directory", {
headers: { Authorization: `Bearer ${process.env.TRAKTOR_API_KEY}` },
});
const body = await response.json();import os
import requests
response = requests.get(
"https://api.traktor.fun/v1/traders/directory",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json())GET /v1/traders/{wallet}
One wallet's page: its account where one is linked, its positions and its day, from Traktor's own store.
- Credential
- API key
- REST units
- 2 units
walletaddressrequiredpathAn EVM or Solana wallet address.
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, route_not_found, data_unavailable, market_busy, market_fold_pending, missing_credentials, invalid_key, key_revoked, subscription_inactive, key_in_query, method_not_allowed, rate_limited, quota_exhausted, rate_limit_unavailable, internal_error
curl -s "https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222", {
headers: { Authorization: `Bearer ${process.env.TRAKTOR_API_KEY}` },
});
const body = await response.json();import os
import requests
response = requests.get(
"https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json())GET /v1/traders/{wallet}/portfolio
One wallet's account holdings and value, read from a data provider at most once a refresh.
- Credential
- API key
- REST units
- 10 units
walletaddressrequiredpathAn EVM or Solana wallet address.
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, route_not_found, data_unavailable, market_busy, market_fold_pending, missing_credentials, invalid_key, key_revoked, subscription_inactive, key_in_query, method_not_allowed, rate_limited, quota_exhausted, rate_limit_unavailable, internal_error
curl -s "https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222/portfolio" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222/portfolio", {
headers: { Authorization: `Bearer ${process.env.TRAKTOR_API_KEY}` },
});
const body = await response.json();import os
import requests
response = requests.get(
"https://api.traktor.fun/v1/traders/0x2222222222222222222222222222222222222222/portfolio",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json())Each answer is the view the server last built for that question, shared with every other reader of it, and meta.asOf dates that build.
The directory is rebuilt about once a minute. It lists every trader a source names, and, among the wallets that traded through the apps Traktor tracks, each chain's best traders by a year's realized profit, then every other one of them whose year Traktor holds, for that year alone. A row for one of those carries
idcodex:<wallet>, and where no source names the wallet itshandleis the wallet's own address andnameis null.A row listed for its year alone whose wallet traded in the last day carries that day's figures as null, never zero, as Traktor reads the day only for the traders the sources name:
volumeUsd,netUsd,buyUsd,sellUsd,trades,sparkandactiveHours. It clears no screen on the day, a floor of zero or a side included, and sorts last on any of those figures.On any row,
buyUsdorsellUsdis also null where that side traded in the window and none of those trades had a dollar figure, as far as Traktor's count of unpriced trades (a floor) shows, and where some were priced it is the priced trades' dollars alone;netUsdis null beside a null side, andvolumeUsdwhere no trade was priced. Such a figure sorts last whichever way its column is turned, and thebuySharesort puts a row with a null side last, as theavgTradesort does one with a null volume. A nullnetUsdclears nosidescreen and nets its trader neither way in the summary'sbuyersandsellers, and a nullvolumeUsdclears nominAvgTradescreen nor aminVolumeabove 0 (aminVolumeof 0 is no floor where the day was read). The summary's dollars and each row'ssparkadd the priced trades alone.The day's busiest wallets that pump.fun, Axiom, a wallet-label source or an X account names are rows too,
idnamed:<wallet>, under that name.A wallet's page is read from Traktor's own store. The portfolio comes from a data provider, and a cold read can make a request there, which its units reflect. It names the account the wallet belongs to, the fomo account fomo's matcher links it to, else the fomo account whose handle a wallet label gives the wallet, and reads that account's wallet of the other kind with it.
A wallet a row of the all-time Leaderboard names is read alone on its own page and
accountis null: the page never names a Traktor account.A labelled handle whose account Traktor does not know names that wallet alone:
account.sourceisfomo,handlethe fomo handle,nameandavatarUrlnull andprofileUrlits fomo page.Where none of those names it, the wallet's own pump.fun profile does, for that wallet alone:
account.sourceispump,handleits pump.fun username,namenull andprofileUrlits pump.fun page.Where no pump.fun profile names it either, Axiom's KOL or pump.fun list does, for that wallet alone:
account.sourceisaxiom,handlethe handle Axiom gives (a KOL's X handle or a pump.fun username),namethe list's display name or null, and noprofileUrl.
With any of the market filter's token screens (minMcap, launchpad, dex and the rest), the directory lists only the traders whose year Traktor holds and who traded a token the screens pass in the window: volumeUsd, netUsd, buyUsd, sellUsd, trades, spark, activeHours and the summary count those tokens' trades alone, and codex, holdings, firstSeenAt and lastTradeAt stay the account's. A trader with no year Traktor holds, and every row listed for its year alone, is left out while one is set. The body's generatedAt is then the instant the trades were read to, at most two minutes before the answer was built, which meta.asOf dates.
Every query key and the wallet in the path are checked before the request is admitted. A key the route does not take, or a value its grammar refuses, is a 400 with no X-Traktor-Cost.
A view still being built, or one that failed with nothing kept, is 503 data_unavailable, with details.reason warming or unavailable, and its units come back, as on the Tokens page.