TraktorAPI
Get API key

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.

ChainfomoGMGNAxiomMaestropumpPadreBloomTrojanBONKbotPhotonCoinbase WalletBankr
Robinhoodyesyesyesyespartial
BNByesyesyesyespartial
Baseyesyesyespartialpartial
Arcyesyesyes
Arbitrumyespartial
Ethereumyesyesyes
Monadyesyes
HyperEVMyesyes
Solanayesyesyesyesyesyesyesyesyesyes

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.

  • vintegerbody

    Grammar version; send 1, or leave it out.

    One of: 1

  • windowMinutesintegerbody

    How old by block time a trade may be and still match.

    Default 601–1,440

  • maxLagSecondsnumberbody

    Drops a row whose ingestedAt trails its blockTime by more; null keeps every row.

    Default 36000–86,400

  • chainsor chainlistbody

    Chains 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, elysium

  • platformsor platformlistbody

    Apps 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, photon

  • sideenumbody

    Which side of the trade.

    Default allOne of: all, buy, sell

  • minUsdmoneybody

    The smallest trade in USD; a row with no USD value never matches.

    Default none

  • maxUsdmoneybody

    The largest trade in USD; a row with no USD value never matches.

    Default none

  • tokensor tokenlistbody

    Token addresses; empty means any.

    up to 50 items

  • walletsor walletlistbody

    Wallet addresses; empty means any.

    up to 50 items

  • A list is a JSON array, or one comma-separated string, as in "bnb,base".

  • chains and platforms take the lowercase names listed above, matched exactly. Any other name, such as polygon, BNB or uniswap, is refused rather than dropped: a dropped name would answer a different filter, every chain when it was the only name. The refusal is filter_invalid, with detail.pointer at the key you sent: /filter/chains, or /filter/chain if you spelled it so.

  • tokens and wallets may also be spelled token and wallet, and chains and platforms chain and platform.

  • Each key is read once. Both spellings of one key, such as chain with chains, are refused whatever either holds, empty or null: filter_invalid, with detail.pointer at 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.

  • minUsd and maxUsd are exact dollars: 300 is $300, and k, m or b scales it, as in 5k. A minimum above the maximum is refused with filter_invalid.

  • windowMinutes bounds block time: the stream judges each trade as it arrives and leaves out one whose block is older than the window.

  • maxLagSeconds applies even when you leave it out: its default, shown above, drops a row stored more than that many seconds after its block. Send maxLagSeconds: null to keep every row. It cuts by age and says nothing about whether a chain is live; coverage in GET /v1/alert-capabilities does.

  • The keyless public market's market keys read names leniently: they ignore a chain or app name they do not know, so chain=polygon there 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.

    Filters and coverage · Traktor API