> The index of these docs, for agents: https://traktor.fun/llms.txt

# 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`](https://traktor.fun/docs/alerts.md#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`.

| Parameter | In | Type | Required | Default | Bounds | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `v` | body | integer | no |  | 1 | Grammar version; send 1, or leave it out. |
| `windowMinutes` | body | integer | no | 60 | 1–1,440 | How old by block time a trade may be and still match. |
| `maxLagSeconds` | body | number | no | 3600 | 0–86,400 | Drops a row whose `ingestedAt` trails its `blockTime` by more; `null` keeps every row. |
| `chains` (or `chain`) | body | list | no |  | solana, robinhood, bnb, base, arc, arbitrum, ethereum, monad, hyperevm, elysium | Chains to include, a JSON array or one comma-separated string; empty means all. A name outside the vocabulary is refused. |
| `platforms` (or `platform`) | body | list | no |  | fomo, gmgn, pump, axiom, coinbase, padre, maestro, bloom, trojan, bonkbot, bankr, photon | Apps to include, a JSON array or one comma-separated string; empty means all. A name outside the vocabulary is refused. |
| `side` | body | enum | no | all | all, buy, sell | Which side of the trade. |
| `minUsd` | body | money | no | none |  | The smallest trade in USD; a row with no USD value never matches. |
| `maxUsd` | body | money | no | none |  | The largest trade in USD; a row with no USD value never matches. |
| `tokens` (or `token`) | body | list | no |  | up to 50 items | Token addresses; empty means any. |
| `wallets` (or `wallet`) | body | list | no |  | up to 50 items | Wallet addresses; empty means any. |

- 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](https://traktor.fun/docs/public-market.md#get-v1-public-market)).

## 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](https://traktor.fun/docs/plans.md) 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](https://traktor.fun/docs/market.md#market-filter).
