Market
The dashboard's numbers and the market filter that selects them.
GET /v1/market answers several views in one body, and each view is also a route of its own.
A read is answered from the view the public market holds for the same filter, views and page, the one the Board and the market socket read, so an answer can be a few seconds older than the request; meta.asOf says when it was built, and a view kept through a failed rebuild comes with X-Market-Stale: 1. A filter the public market would read differently (a screen between the steps it rounds to, launchpads=other without the families, a minTradeUsd of 0), a tape or wallets page over 120 rows, or a rotation page over 40 or with another withinMinutes, is built for the request instead. The exception is a GET /v1/market/wallets page of up to 500 rows over the whole market's day, the day's windowMinutes with no chains, platforms, wallets, screen, launchpads, dexSignals or stockPairs, and feeSharing left at any. Such a page can come from the day's ranking of its first 500 wallets, made at most once a minute and used only while under three minutes old, so it can be up to three minutes older than the request, and its meta.asOf says when it was ranked.
Views and units
GET /v1/meta/filters publishes each view's units under market.cost. Naming summary in views costs nothing more, since GET /v1/market serves and charges it anyway. whales has only its own route, and takes no window and no screens.
GET /v1/market
Several of the board's views over one market filter, built once.
- Credential
- API key
- REST units
- The sum of the views it serves;
summaryis always one of them.
Also takes the market filter.
viewslistqueryViews to include;
summaryis always added.Default
summaryAny of:summary,tokens,series,tape,rotation,walletslimitintegerqueryToken rows, read only with
tokens.Default
2001–1,000offsetintegerqueryToken rows to skip, read only with
tokens.Default
00–50,000sortenumqueryToken ranking, read only with
tokens.Default
netOne of:volume,net,pressure,turnover,conviction,bought,sold,buyers,trades,avg,price,change15m,change1h,change4h,change24h,mcap,held,fomoPnl,heldPct,liquidity,liqRatio,age,fomoHolders,holderTrend,ath,graduation,holders,topTradersdirenumqueryRanking direction, read only with
tokens.Default
descOne of:asc,desctailbooleanqueryIncludes both ends of the ranking, as the flow map draws net flow; the far end holds only rows that have the ranked figure. Cannot go with
offset.Default
falsenamedbooleanqueryKeeps only tokens with a name.
Default
falsesideenumqueryTrade side, read only with
tape.Default
allOne of:all,buy,sellminTradeUsdmoneyqueryThe smallest trade in USD, read only with
tape.from 0
minWalletBalanceUsdmoneyqueryKeeps wallets holding at least this much, in USD; it must be above 0. Read only with
tapeorrotation.
Limits
- Invalid keys30 a minute, per IP
- Wallets a balance floor may select5,000 wallets, per request
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, data_unavailable, market_busy, market_fold_pending, plan_forbids, filter_too_broad, 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/market?views=summary,tokens&limit=1" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market?views=summary,tokens&limit=1", {
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/market",
params={"views": "summary,tokens", "limit": 1},
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": {
"summary": {
"buyUsd": 9412224.3,
"sellUsd": 9000106.1,
"netUsd": 412118.2,
"volumeUsd": 18412330.4,
"trades": 61204,
"tokens": 182440,
"wallets": 2310884,
"lastTradeAt": "2026-10-03T12:00:00.000Z"
},
"tokens": [
{
"tokenAddress": "0x2222222222222222222222222222222222222222",
"chain": "bnb",
"platform": "fomo",
"ticker": "EXAMPLE",
"logoUrl": null,
"buyUsd": 646119.5,
"sellUsd": 557999.2,
"netUsd": 88120.3,
"volumeUsd": 1204118.7,
"trades": 2412,
"buyers": 1120,
"sellers": 980,
"priceUsd": 0.0033,
"marketCap": 4120000,
"marketPriceUpdatedAt": "2026-10-03T12:00:00.000Z",
"valuationSource": "pool",
"valuationExpiresAt": "2026-10-03T12:05:00.000Z",
"marketPriceConfirmedAt": "2026-10-03T12:00:00.000Z",
"priceChangePct": 12.4,
"launchpad": null,
"launchpadIcon": null,
"graduated": null,
"graduationPct": null,
"pairTokenAddress": null,
"pairTokenTicker": null,
"holderRewards": null,
"dexscreenerSocialsUpdated": null,
"dexscreenerBoosted": null,
"communityTakeover": null,
"leaderboardHolders": [],
"leaderboardHolderCount": 0,
"topTradersBought": 41,
"topTradersHolding": 17,
"topTradersFlow": {
"buyUsd": 61220.4,
"sellUsd": 18904.1,
"buyers": 23,
"sellers": 9,
"holding": 17,
"unpriced": 2,
"apps": [
{
"platform": "fomo",
"buyUsd": 48110.2
},
{
"platform": "axiom",
"buyUsd": 13110.2
}
]
},
"fomoHolders": 312,
"holderCount": 4118,
"heldUsd": 402118.2,
"heldPct": 9.8,
"fomoPnlUsd": 12220.4,
"holderSpark": [
298,
305,
312
],
"athPrice": 0.0041,
"xToAth": 1.24,
"liquidity": 380120.5,
"change15m": 1.2,
"change1h": 4.8,
"change4h": 9.9,
"change24h": 12.4,
"firstSeenAt": "2026-09-28T08:14:00.000Z",
"launchedAt": "2026-09-28T08:11:00.000Z",
"lastTradeAt": "2026-10-03T11:59:58.000Z",
"metadataAt": 1791028680000,
"gmgnAt": 1791028500000,
"spark": [
0,
41220.6,
88120.3
]
}
]
},
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:02.000Z",
"caveats": [
"provider_discovered_partial"
],
"page": {
"limit": 1,
"offset": 0,
"returned": 1,
"total": 1412,
"hasMore": true,
"inflowUsd": 2841220.55,
"outflowUsd": 2610904.12
}
}
}The market filter
The market filter is a grammar apart from the flow filter, read from the query string.
vintegerqueryGrammar version; send 1, or leave it out.
One of:
1chainslistqueryChains to include, comma-separated; empty means all. A name outside the vocabulary is refused.
Any of:
solana,robinhood,bnb,base,arc,arbitrum,ethereum,monad,hyperevm,elysiumplatformslistqueryApps to include, comma-separated; empty means all. A name outside the vocabulary is refused.
Any of:
fomo,gmgn,pump,axiom,coinbase,padre,maestro,bloom,trojan,bonkbot,bankr,photonwalletslistqueryWallet addresses, EVM or Solana, to narrow every view to their own trades; left out means any, and an empty value selects no wallets.
up to 100 items
windowMinutesenumqueryThe window the views summarise, in minutes.
Default
60One of:5,15,30,60,240,1440launchpadslistqueryLaunchpad families, as
market.launchpadsinGET /v1/meta/filterslists them, each optionally chain-qualified, likebnb:flap.dexSignalslistqueryDEX signals; a token with any of them matches.
Any of:
paid,boost,ctofeeSharingenumqueryWhether the token's launchpad shares its fees.
Default
anyOne of:any,shared,not_sharedstockPairslistqueryStock tickers the token pairs with, or
ANY-STOCKfor any stock.up to 12 items
minNetmoneyqueryNet flow at least. A negative floor keeps outflow in view rather than screening it away.
maxNetmoneyqueryNet flow at most — set it negative to find only what is being distributed.
minVolumemoneyqueryTraded volume at least, both sides together.
from 0
minBuyersintegerqueryDistinct buying wallets at least — breadth, where volume is only size.
from 0
minSellersintegerqueryDistinct selling wallets at least.
from 0
minTradesintegerqueryTrades at least.
from 0
minRationumberqueryDollars bought per dollar sold — 2 means twice as much buying as selling.
from 0
minChangenumberqueryPrice move across the window, at least. Negative finds what is falling.
maxChangenumberqueryPrice move across the window, at most.
minTopTradersmoneyqueryWhat the top 10,000 traders by year profit bought in the window, at least. Counted over the Board's six windows alone: on any other window, or for a buy with nothing priced, a token is in no band.
from 0
minMcapmoneyqueryMarket cap at least.
from 0
maxMcapmoneyqueryMarket cap at most. Tokens with no cap yet are kept — a brand-new one is small by definition.
from 0
minLiqmoneyqueryPool depth at least — what the token can absorb before price moves.
from 0
maxLiqmoneyqueryPool depth at most.
from 0
minLiqPctnumberqueryDepth as a share of market cap — how much of the cap there is real money behind.
from 0
minHoldersintegerqueryWallets holding the token on chain, at least, as its data provider last counted them; a token nobody counted is in no band.
from 0
minFomoHoldersintegerqueryWallets on fomo still holding a position.
from 0
minHeldPctnumberqueryShare of circulating supply sitting in fomo wallets — how much of the token the crowd here owns.
from 0
minAthnumberqueryMultiple back to the all-time high, at least — headroom above the current price.
from 0
maxAthnumberqueryMultiple back to the high, at most — near its own top.
from 0
maxAgestringqueryYounger than, in hours since the token launched on chain, or first traded on our tape where that came first or no launch is dated. Takes hours above zero, or a duration such as
30m,4hor3d.minAgestringqueryOlder than, in hours since the token launched on chain, or first traded on our tape where that came first or no launch is dated. Takes hours above zero, or a duration such as
30m,4hor3d.minCurvenumberqueryBonding-curve progress, at least, in percent; a token that has graduated counts as 101.
from 0
maxCurvenumberqueryBonding-curve progress, at most, in percent; 100 keeps only tokens still on their curve.
from 0
A
windowMinutesoutside the windows listed is400 window_out_of_range, with the windows indetails.allowed.summary,tokensandseriesread minute buckets and serve every window on every plan.tape,rotationandwalletsread trades, so a window longer than the plan's history is403 plan_forbids, withdetails.maxHistoryMinutes,details.givenand thedetails.viewsthat read trades.A name outside the vocabulary in
chainsorplatformsis400 invalid_parameter, withdetails.parameteranddetails.value. Neither has a singular spelling here:chainis400 unknown_parameter.A query parameter given twice, a filter key or a route key such as
limit, is400 duplicate_query_parameter, refused before any key is read.A route refuses by name a key it does not read:
400 unknown_parameter, withdetails.parameter,details.routeanddetails.accepts, the keys it reads.GET /v1/marketreads the keys of the views it serves, so a token board key (limit,offset,sort,dir,tailornamed) sent withoutviews=tokensisunknown_parametertoo, withdetails.requires.A floor above its own ceiling, such as
minMcapovermaxMcap, is400 screen_conflict.Beside the families
market.launchpadslists,launchpadstakesotherfor a launchpad outside them andunknownfor a token with none. No view lists a token with none unless it is a stock an issuer verifies, sounknownselects only those, and no view lists a major, such as a stablecoin or a wrapped or bridged coin, whatever its tag;tapeandrotationdrop the other trades and pairs after reading their page, so a page can come back short. A member that names a chain, asbnb:flap, applies on that chain alone and replaces the members without one there; every other chain reads those. Send only members that name a chain and every other chain matches nothing.In
stockPairs,NVDAmatches a token quoted in any issuer's verified NVDA contract, or in a quote token whose own symbol isNVDA.ANY-STOCKmatches only a quote contract an issuer has verified on that chain; a stock-like symbol alone never qualifies for it.GET /v1/meta/filterslists the issuer registries behind the verified contracts undermarket.coverage.stockRegistrySources, each with its ownstatus, so one registry's outage reads as partial coverage, not as missing stocks.dexSignalskeeps a token carrying any of the signals it names:paid, a paid DEX profile and social update;boost, DEX boost spend;cto, a reported community takeover.GET /v1/meta/filterslists them with their labels undermarket.dexSignals.A money key takes exact dollars:
300is $300, andk,morbscales it.A screen leaves out a token whose value it reads was never measured, and only a
maxMcapsent without aminMcapkeeps one: a token with no market cap yet is small. A token row'sliquidityofnullis unread, sominLiq,maxLiqandminLiqPctdrop it, andminLiqPct, liquidity as a percent of the market cap, also drops a token with no market cap or with either at zero.minAthandmaxAthscreen the multiple from the price back to the token's recorded high before the rounding a token row'sxToAthshows, except that a token at or above its high counts as 1 or less wherexToAthisnull; a token with no recorded high or no price, or either at zero, is in no band.minWalletBalanceUsdis resolved to a set of wallets before any view runs, and a floor that selects more wallets than the limit on the view's block is422 filter_too_broad, withdetails.limit,details.parameterand, when the refusal counted them,details.matched: raise the floor.
Pages and meta
The token board is the only paged view, on GET /v1/market/tokens and on GET /v1/market with views=tokens. It ranks by net flow, the most bought first, unless sort and dir say otherwise. Its meta.page holds limit, offset, returned, total and hasMore, and two totals over every token the ranking took in, not the page alone: inflowUsd, the net flow into the tokens that took money in, and outflowUsd, out of those that lost it. The Board's flow map is sort=net&tail=1: the limit largest inflows and the limit largest outflows, with those two totals, which size its two panes. The far end of a tail=1 read holds only rows that have the figure it ranks by, so where fewer rows have it the answer is shorter than twice the limit. Each page is read from its own view of the board, so a row can move between one page and the next; the largest limit takes the most rows from one ranking. A flag takes 0, 1, true or false, tail=1 goes with an offset of zero only, and GET /v1/meta/filters lists the sort keys under market.ranking.
The views that read trades add meta.retention. Every view's meta.caveats qualify the chains and apps its filter selects, whales taking its chains alone, and a minTradeUsd adds usd_amount_nullable. Two look wider: coverage_unread whatever the filter selects, and data_stale for a stale pair on the filter's chains, whatever its app. Each is listed in Caveats. Coinbase Wallet's and Bankr's trades are read with known gaps, so a filter that takes in either app on a chain where it is tracked, as the default filter does, answers with provider_discovered_partial, and that pair's coverageNote in GET /v1/alert-capabilities says what is missed. Inside summary, the tokens and wallets counts take in every token and wallet the index knows, and lastTradeAt is the latest block time in the whole index, whatever the filter selects; every other figure there is the filter's. Those three are read at most a second before the build while the database answers within a tenth of a second, and up to thirty seconds before it while it is slower, so lastTradeAt can trail the newest trade by that much.
Fields and clocks
meta.asOfdates the body: when its view was built, or, where a day'srotationorwalletscome from the board the server keeps of them, the older of the two.A token row dates its enrichment apart from
meta.asOf, in Unix milliseconds:metadataAtandgmgnAtfor its two data providers' last answers. ItslaunchedAtis an ISO time, when the token was created on chain by one data provider's record, else another's, andnullwhere neither dated it;firstSeenAtis its first trade on our tape, andminAgeandmaxAgecount from the earlier of the two.minCurveandmaxCurvescreen the bonding curve's progress in percent, a graduated token counting as 101:maxCurve=100keeps tokens still on their curve,minCurve=101graduated ones, and a token whose progress nobody measured is in no band.A token row's
lastTradeAtis an ISO time, the newest trade we recorded for the token, by any app we track whateverplatformsselects or as a verified swap on a pool we capture, as of the row's build, andnullwhere we have recorded none.liquidityis the USD the market pool itself holds, read on chain while the token trades or is viewed, andnullwhere no on-chain reader covers the market.A token row's
holderCountis every wallet holding the token on chain, as one data provider last counted them, else another's last count, the number the token page's header shows, andnullwhere neither counted;sort=holdersranks by it, andminHolderskeeps tokens whoseholderCountis at least that many, a token neither provider counted in no band.A token row's
fomoHolders,heldUsdandheldPct, and a tape row'sfomoHolders, measure the fomo wallets Traktor indexes, and arenull, not zero, in a view whoseplatformsleave fomo out.heldPctis those wallets' observed positions as a share of the token's whole supply, a data provider's total where the stored supply is a provider's float, and is alsonullwhere that supply is unknown or the share would pass 100%.In
tokens, and inGET /v1/stocks, a token row'stopTradersBoughtcounts the top 10,000 traders by realized year who bought the token on our tape over the last day, andtopTradersHoldingthose of them whose last trade of it was a buy, whatever the window; both arenullwhile unmeasured. Beside them,topTradersFlowis what those traders did in the token over the request's window:buyUsdandsellUsd(what was priced;nullfor a side they traded with nothing priced),buyersandsellers,holding(the window's buyers whose last trade of it was a buy),unpriced(their trades with no price, either way; above zero, a side summed beside it may be partly priced), andapps, their priced buys app by app, the most first, through every app whateverplatformsselects. It isnullwhile unmeasured; a token none of them traded in the window carries zeros and no apps.minTopTraderskeeps tokens whosetopTradersFlow.buyUsdis at least that many dollars: a token none of the top traders bought passesminTopTraders=0and no higher, and one whose flow isnullor whose buys carried no price is in no band. Until the server holds the top traders' count, as for a while after it starts, a read withminTopTradersis503 data_unavailable, as a view still warming up is.
valuationSource says where a row's price and market cap come from: pool for a price observed on chain, swap for the token's last measured swap on its market pool, shown until a later pool reading replaces it and so with no valuationExpiresAt, held for our own pool reading observed after that swap and shown past its freshness, with no valuationExpiresAt (the token's quote and detail date it by marketPriceObservedAt; a row's marketPriceUpdatedAt still moves with its quote's dollar rate, so it understates the reading's age), or null for none. dexscreener, gmgn and codex remain in the schema but no longer appear: no provider's quote prices a token. marketPriceUpdatedAt dates the valuation's input, marketPriceConfirmedAt the confirmed chain head a pool price was read at, null for an unconfirmed observation, and valuationExpiresAt when the valuation stops being served. GET /v1/meta/filters classes each field under market.provenance and lists every source a field can come from under market.provenanceSources.
Every minute of the window has a series point, at zero when nothing traded. A chain where no app of ours is captured, today elysium, reads null in every point, never 0: until 2026-11-08 every chain field was a number, so a client that sums them treats null as unmeasured. Its minute counts minutes since the Unix epoch, and the chain fields and the platforms fields each sum to the minute's net flow as the apps routed it: a Solana token row's netUsd also takes out its exitUsd, which the series does not, so the series over the window can sum to more than the tokens' net.
When a read fails
Three refusals mean the read could not run at that moment, and each is worth retrying:
503 data_unavailable: the data behind the view is still warming up or failed to build;details.reasonsays which. Retry afterRetry-After.503 market_busy: the server is already holding as many reads waiting on a build, or running as many builds for requests of their own, as it allows. A request identical to one in flight joins it instead. Retry shortly.503 market_fold_pending: a committed batch of trades is still being folded into the view. Retry shortly, backing off if it persists.
Every refusal of the query, from a repeated key to plan_forbids, comes before admission and carries no X-Traktor-Cost. One raised once the read has started, filter_too_broad or the three above, gives its units back: X-Traktor-Cost: 0 (Limit headers).
The views
GET /v1/market/summary
The window's buys, sells, net flow, volume and trades, with how many tokens and wallets the index knows and the newest trade. A side whose every trade went unpriced is null, as is the net beside it, and the volume when nothing was priced. On Solana the net also takes out the direct exits its tokens rows take out, the ones a row's exitUsd names; under wallets, or where those were not read, it is buys less sells.
- Credential
- API key
- REST units
- 1 unit
Also takes the market filter.
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, 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/market/summary" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/summary", {
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/market/summary",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": {
"buyUsd": 9412224.3,
"sellUsd": 9000106.1,
"netUsd": 412118.2,
"volumeUsd": 18412330.4,
"trades": 61204,
"tokens": 182440,
"wallets": 2310884,
"lastTradeAt": "2026-10-03T12:00:00.000Z"
},
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:02.000Z",
"caveats": [
"provider_discovered_partial"
]
}
}GET /v1/market/tokens
The board's token rows, ranked and paged by offset. A row's buyUsd or sellUsd is null where that side traded and none of its trades was priced, its netUsd beside it, and its volumeUsd where no trade was; such a figure ranks last either way and clears no screen. Beside a null netUsd the row's spark is empty. A Solana row's netUsd and spark also take out exitUsd, what the apps' own buyers sold on no app's route in the window: null where those were not read and under wallets, whose rows take none out, and absent on other chains. A token whose fee sharing sends every creator fee to OTC desks' rewards wallet adds otcDesk: true; the field is absent otherwise.
- Credential
- API key
- REST units
- 3 units
Also takes the market filter.
limitintegerqueryRows to return.
Default
2001–1,000offsetintegerqueryRows to skip.
Default
00–50,000sortenumqueryThe ranking.
Default
netOne of:volume,net,pressure,turnover,conviction,bought,sold,buyers,trades,avg,price,change15m,change1h,change4h,change24h,mcap,held,fomoPnl,heldPct,liquidity,liqRatio,age,fomoHolders,holderTrend,ath,graduation,holders,topTradersdirenumqueryRanking direction.
Default
descOne of:asc,desctailbooleanqueryIncludes both ends of the ranking, as the flow map draws net flow; the far end holds only rows that have the ranked figure. Cannot go with
offset.Default
falsenamedbooleanqueryKeeps only tokens with a name.
Default
false
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, 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/market/tokens?limit=1" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/tokens?limit=1", {
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/market/tokens",
params={"limit": 1},
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"tokenAddress": "0x2222222222222222222222222222222222222222",
"chain": "bnb",
"platform": "fomo",
"ticker": "EXAMPLE",
"logoUrl": null,
"buyUsd": 646119.5,
"sellUsd": 557999.2,
"netUsd": 88120.3,
"volumeUsd": 1204118.7,
"trades": 2412,
"buyers": 1120,
"sellers": 980,
"priceUsd": 0.0033,
"marketCap": 4120000,
"marketPriceUpdatedAt": "2026-10-03T12:00:00.000Z",
"valuationSource": "pool",
"valuationExpiresAt": "2026-10-03T12:05:00.000Z",
"marketPriceConfirmedAt": "2026-10-03T12:00:00.000Z",
"priceChangePct": 12.4,
"launchpad": null,
"launchpadIcon": null,
"graduated": null,
"graduationPct": null,
"pairTokenAddress": null,
"pairTokenTicker": null,
"holderRewards": null,
"dexscreenerSocialsUpdated": null,
"dexscreenerBoosted": null,
"communityTakeover": null,
"leaderboardHolders": [],
"leaderboardHolderCount": 0,
"topTradersBought": 41,
"topTradersHolding": 17,
"topTradersFlow": {
"buyUsd": 61220.4,
"sellUsd": 18904.1,
"buyers": 23,
"sellers": 9,
"holding": 17,
"unpriced": 2,
"apps": [
{
"platform": "fomo",
"buyUsd": 48110.2
},
{
"platform": "axiom",
"buyUsd": 13110.2
}
]
},
"fomoHolders": 312,
"holderCount": 4118,
"heldUsd": 402118.2,
"heldPct": 9.8,
"fomoPnlUsd": 12220.4,
"holderSpark": [
298,
305,
312
],
"athPrice": 0.0041,
"xToAth": 1.24,
"liquidity": 380120.5,
"change15m": 1.2,
"change1h": 4.8,
"change4h": 9.9,
"change24h": 12.4,
"firstSeenAt": "2026-09-28T08:14:00.000Z",
"launchedAt": "2026-09-28T08:11:00.000Z",
"lastTradeAt": "2026-10-03T11:59:58.000Z",
"metadataAt": 1791028680000,
"gmgnAt": 1791028500000,
"spark": [
0,
41220.6,
88120.3
]
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:02.000Z",
"caveats": [
"provider_discovered_partial"
],
"page": {
"limit": 1,
"offset": 0,
"returned": 1,
"total": 1412,
"hasMore": true,
"inflowUsd": 2841220.55,
"outflowUsd": 2610904.12
}
}
}GET /v1/market/series
Net flow per minute across the window: minute, a field per chain, volume, unpricedBuys and unpricedSells, the trades each side that carried no dollar figure and so are left out of the minute's dollars (a floor), and platforms with a field per app. A chain where no app of ours is captured reads null, never 0.
- Credential
- API key
- REST units
- 2 units
Also takes the market filter.
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, 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/market/series" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/series", {
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/market/series",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"minute": 29850479,
"solana": 0,
"robinhood": 1204.2,
"bnb": 41220.1,
"base": 18002.4,
"arc": 0,
"arbitrum": 0,
"ethereum": 0,
"monad": 0,
"hyperevm": 0,
"elysium": null,
"volume": 412330.4,
"unpricedBuys": 2,
"unpricedSells": 0,
"platforms": {
"fomo": 30118.9,
"gmgn": 22480.4,
"pump": 0,
"axiom": 6623.2,
"coinbase": 1204.2,
"padre": 0,
"maestro": 0,
"bloom": 0,
"trojan": 0,
"bonkbot": 0,
"bankr": 0,
"photon": 0
}
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:02.000Z",
"caveats": [
"provider_discovered_partial"
]
}
}GET /v1/market/tape
The window's newest trades, each with its token's ticker, the market cap now and at the trade, its token's net flow over the window, every wallet's even under wallets, and the app that routed it; a named wallet adds who it is and, where it was measured, its realized profit over the last year with that year's win rate, and a marked one its KOL or smart-money marks. A trade in a token whose fee sharing sends every creator fee to OTC desks' rewards wallet adds otcDesk: true; the field is absent otherwise.
- Credential
- API key
- REST units
- 2 units
Also takes the market filter.
sideenumqueryTrade side.
Default
allOne of:all,buy,sellminTradeUsdmoneyqueryThe smallest trade in USD.
from 0
minWalletBalanceUsdmoneyqueryKeeps wallets holding at least this much, in USD; it must be above 0.
limitintegerqueryRows to return.
Default
1201–500
Limits
- Invalid keys30 a minute, per IP
- Wallets a balance floor may select5,000 wallets, per request
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, data_unavailable, market_busy, market_fold_pending, plan_forbids, filter_too_broad, 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/market/tape" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/tape", {
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/market/tape",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"id": "bnb:0x7f3a9c1e5d2b4a6f8e0c1d3b5a7f9e2c4d6b8a0f1e3c5d7b9a2f4e6c8d0b1a3c:0",
"chain": "bnb",
"platform": "fomo",
"ts": "2026-10-03T12:00:00.000Z",
"wallet": "0x1111111111111111111111111111111111111111",
"tokenAddress": "0x2222222222222222222222222222222222222222",
"ticker": "EXAMPLE",
"logoUrl": null,
"side": "buy",
"usdAmount": 412.5,
"tokenAmount": 125000,
"marketCap": 4120000,
"marketCapAtTrade": 4120000,
"fomoHolders": 312,
"netUsd": 88120.3,
"launchpad": null,
"launchpadIcon": null,
"pairTokenAddress": null,
"pairTokenTicker": null,
"holderRewards": null,
"dexscreenerSocialsUpdated": null,
"dexscreenerBoosted": null,
"communityTakeover": null,
"handle": "example",
"displayName": "Example",
"avatarUrl": "https://example.com/avatars/example.png",
"x": "example_x",
"realizedYearUsd": 48210.6,
"winRateYear": 0.58,
"marks": [
"kol"
]
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:04.210Z",
"caveats": [
"provider_discovered_partial"
],
"retention": {
"horizonHours": 24,
"floorAt": "2026-10-02T12:00:04.210Z",
"truncated": false
}
}
}GET /v1/market/rotation
Which tokens wallets sold to buy which, summed from the sell-then-buy links the indexer pairs at capture.
- Credential
- API key
- REST units
- 5 units
Also takes the market filter.
minWalletBalanceUsdmoneyqueryKeeps wallets holding at least this much, in USD; it must be above 0.
limitintegerqueryRows to return.
Default
401–200withinMinutesintegerqueryHow soon after a sell the next buy must land.
Default
301–240
Limits
- Invalid keys30 a minute, per IP
- Wallets a balance floor may select5,000 wallets, per request
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, data_unavailable, market_busy, market_fold_pending, plan_forbids, filter_too_broad, 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/market/rotation" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/rotation", {
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/market/rotation",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"platform": "fomo",
"from": "0x2222222222222222222222222222222222222222",
"fromTicker": "EXAMPLE",
"to": "0x3333333333333333333333333333333333333333",
"toTicker": "OTHER",
"usd": 61220.4,
"wallets": 14,
"chain": "bnb"
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:04.210Z",
"caveats": [
"provider_discovered_partial"
],
"retention": {
"horizonHours": 24,
"floorAt": "2026-10-02T12:00:04.210Z",
"truncated": false
}
}
}GET /v1/market/wallets
The wallet board: each wallet's buys, sells, net flow and trades in the window, its name and KOL or smart-money marks where a source knows them, and an imported outside opinion where one knows the wallet.
- Credential
- API key
- REST units
- 3 units
Also takes the market filter.
limitintegerqueryRows to return.
Default
1201–500
Limits
- Invalid keys30 a minute, per IP
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, window_out_of_range, screen_conflict, too_many_addresses, filter_version_unsupported, data_unavailable, market_busy, market_fold_pending, plan_forbids, 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/market/wallets" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/wallets", {
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/market/wallets",
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"wallet": "0x1111111111111111111111111111111111111111",
"handle": "example",
"avatarUrl": "https://example.com/avatars/example.png",
"balanceUsd": null,
"buyUsd": 120400.2,
"sellUsd": 98002.7,
"netUsd": 22397.5,
"volumeUsd": 218402.9,
"trades": 61,
"tokens": 9,
"lastTradeAt": "2026-10-03T11:58:12.000Z",
"cieloPnl30dUsd": null,
"cieloRoi30dPct": null,
"cieloWinratePct": null,
"marks": [
"kol"
]
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:04.210Z",
"caveats": [
"provider_discovered_partial"
],
"retention": {
"horizonHours": 24,
"floorAt": "2026-10-02T12:00:04.210Z",
"truncated": false
}
}
}GET /v1/market/whales
Wallets holding at least a balance floor, by holdings rather than by window. meta.asOf is when the positions were read, which can be up to five minutes before the request.
- Credential
- API key
- REST units
- 3 units
vintegerqueryGrammar version; send 1, or leave it out.
One of:
1chainslistqueryChains to include, comma-separated; empty means all.
Any of:
solana,robinhood,bnb,base,arc,arbitrum,ethereum,monad,hyperevm,elysiumminWalletBalanceUsdmoneyrequiredqueryKeeps wallets holding at least this much, in USD; it must be above 0.
limitintegerqueryRows to return.
Default
1201–500
Limits
- Invalid keys30 a minute, per IP
- Wallets a balance floor may select5,000 wallets, per request
Errors
invalid_parameter, unknown_parameter, duplicate_query_parameter, limit_out_of_range, filter_version_unsupported, filter_too_broad, 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/market/whales?minWalletBalanceUsd=50k" \
-H "Authorization: Bearer $TRAKTOR_API_KEY"const response = await fetch("https://api.traktor.fun/v1/market/whales?minWalletBalanceUsd=50k", {
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/market/whales",
params={"minWalletBalanceUsd": "50k"},
headers={"Authorization": f"Bearer {os.environ['TRAKTOR_API_KEY']}"},
)
print(response.json()){
"data": [
{
"wallet": "0x1111111111111111111111111111111111111111",
"chain": "bnb",
"balanceUsd": 1204330.1,
"tokens": 3,
"top": [
{
"ticker": "EXAMPLE",
"tokenAddress": "0x2222222222222222222222222222222222222222",
"usd": 802118.4
}
],
"lastTradeAt": "2026-10-03T11:40:00.000Z"
}
],
"meta": {
"requestId": "req_01m40t5ek8b3x7r2mh5q",
"generatedAt": "2026-10-03T12:00:04.210Z",
"asOf": "2026-10-03T12:00:04.210Z",
"caveats": [
"provider_discovered_partial"
]
}
}