Filters and coverage
Which chains and apps are tracked, and the flow filter's keys and score.
The flow filter chooses the trades a stream subscription delivers, and the market views take a grammar of their own.
Coverage
The table is read live from GET /v1/meta/filters and marks each app Traktor tracks on each chain.
| Chain | fomo | GMGN | Axiom | Maestro | pump | Padre | Bloom | Trojan | BONKbot | Photon | Coinbase Wallet | Bankr |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Robinhood | yes | yes | yes | yes | partial | |||||||
| BNB | yes | yes | yes | yes | partial | |||||||
| Base | yes | yes | yes | partial | partial | |||||||
| Arc | yes | yes | yes | |||||||||
| Arbitrum | yes | partial | ||||||||||
| Ethereum | yes | yes | yes | |||||||||
| Monad | yes | yes | ||||||||||
| HyperEVM | yes | yes | ||||||||||
| Solana | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Trades are kept 24 hours and minute buckets 48 hours. A partial pair is measured on its verified routes only.
A tracked pair can still be down. coverage in GET /v1/alert-capabilities says whether each pair is live, stale or down: read it before you take an empty answer to mean there were no trades. An answer built from the trades traktor captures, whether a market, token, trader, stock board or signal answer, carries provider_discovered_partial when its scope takes in a pair marked partial, even while that pair is live.
The flow filter
The stream reads these keys from a subscription's filter.
vintegerbodyGrammar version; send 1, or leave it out.
One of:
1windowMinutesintegerbodyHow old by block time a trade may be and still match.
Default
601–1,440maxLagSecondsnumberbodyDrops a row whose
ingestedAttrails itsblockTimeby more;nullkeeps every row.Default
36000–86,400chainsorchainlistbodyChains to include, a JSON array or one comma-separated string; empty means all. A name outside the vocabulary is refused.
Any of:
solana,robinhood,bnb,base,arc,arbitrum,ethereum,monad,hyperevm,elysiumplatformsorplatformlistbodyApps to include, a JSON array or one comma-separated string; empty means all. A name outside the vocabulary is refused.
Any of:
fomo,gmgn,pump,axiom,coinbase,padre,maestro,bloom,trojan,bonkbot,bankr,photonsideenumbodyWhich side of the trade.
Default
allOne of:all,buy,sellminUsdmoneybodyThe smallest trade in USD; a row with no USD value never matches.
Default none
maxUsdmoneybodyThe largest trade in USD; a row with no USD value never matches.
Default none
tokensortokenlistbodyToken addresses; empty means any.
up to 50 items
walletsorwalletlistbodyWallet addresses; empty means any.
up to 50 items
A list is a JSON array, or one comma-separated string, as in
"bnb,base".chainsandplatformstake the lowercase names listed above, matched exactly. Any other name, such aspolygon,BNBoruniswap, is refused rather than dropped: a dropped name would answer a different filter, every chain when it was the only name. The refusal isfilter_invalid, withdetail.pointerat the key you sent:/filter/chains, or/filter/chainif you spelled it so.tokensandwalletsmay also be spelledtokenandwallet, andchainsandplatformschainandplatform.Each key is read once. Both spellings of one key, such as
chainwithchains, are refused whatever either holds, empty ornull:filter_invalid, withdetail.pointerat the plural,/filter/chains. A key repeated inside one JSON object is not refused: its last value is read, so send each key once.A key the grammar does not know is refused with
filter_invalid.EVM addresses are lowercased before they are matched. Solana addresses keep their case, so send them exactly as written.
minUsdandmaxUsdare exact dollars:300is $300, andk,morbscales it, as in5k. A minimum above the maximum is refused withfilter_invalid.windowMinutesbounds block time: the stream judges each trade as it arrives and leaves out one whose block is older than the window.maxLagSecondsapplies even when you leave it out: its default, shown above, drops a row stored more than that many seconds after its block. SendmaxLagSeconds: nullto keep every row. It cuts by age and says nothing about whether a chain is live;coverageinGET /v1/alert-capabilitiesdoes.The keyless public market's market keys read names leniently: they ignore a chain or app name they do not know, so
chain=polygonthere answers for every chain (Public market and search).
What a filter scores
Each subscription is weighed by its filter: a filter scores 1 for each of chains, platforms and side it sets, and 2 for each of minUsd, maxUsd, tokens and wallets it sets and for a maxLagSeconds number other than its default; it scores at least 1. A connection's subscriptions together may not score more than the plan's filter score: a subscribe that would answers filter_too_broad. A tokens or wallets list longer than the table allows answers filter_invalid, and one within it but longer than the plan's addresses per list answers filter_too_large.
GET /v1/meta/filters publishes the rule under cost.ws. Plans and limits shows each plan's filter score.
Market filters
GET /v1/market and its views take a grammar of their own, with windows, screens and launchpads, described with the views.