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

# Overview

A map of the API, from its base URLs and routes to the shape of its answers.

Make your first request in the [Quickstart](https://traktor.fun/docs/quickstart.md): [create a key](https://traktor.fun/profile?tab=api), call the signal feed, then open the stream.

The Traktor API serves the trades Traktor indexes, and the market views its dashboard shows, over REST and two WebSockets.

## Base URL

REST lives under `https://api.traktor.fun/v1` and answers JSON. The trade stream connects at `wss://api.traktor.fun/v1/stream`, the market stream at `wss://api.traktor.fun/v1/market/stream`.

Every `GET` route here also answers `HEAD`, at the same cost, and a script on any origin may call REST: every route answers the browser's CORS preflight.

## What it serves

| Surface | Routes | Credential | Pages |
| --- | --- | --- | --- |
| Trades | `WS /v1/stream` | API key | [Stream](https://traktor.fun/docs/stream.md) |
| Market views | `GET /v1/market` and its views | API key | [Market](https://traktor.fun/docs/market.md) |
| Tokens | `GET /v1/tokens/{chain}/{address}` and its signals, `GET /v1/search` | API key | [Tokens](https://traktor.fun/docs/tokens.md) |
| Signals | `GET /v1/signals`, `GET /v1/signals/board` | API key | [Signals](https://traktor.fun/docs/signals.md) |
| Accounts leaderboard | `GET /v1/leaderboard` | API key | [Leaderboard](https://traktor.fun/docs/leaderboard.md) |
| Traders | `GET /v1/traders/directory`, `GET /v1/traders/{wallet}` and its portfolio | API key | [Traders](https://traktor.fun/docs/traders.md) |
| Stocks | `GET /v1/stocks`, `GET /v1/stocks/registry` | API key | [Stocks](https://traktor.fun/docs/board-reads.md) |
| The API itself | `GET /v1/plans`, `GET /v1/meta/filters`, `GET /v1/stream/position`, `GET /v1/usage` | None for the first two, an API key for the rest | [Meta and usage](https://traktor.fun/docs/meta-and-usage.md) |
| Alerts and notifications | `/v1/alerts`, `GET /v1/alert-capabilities`, `/v1/notifications`, `/v1/webhooks`, `/v1/telegram/link-codes`, `/v1/telegram/links` | API key, browser session or Traktor sign-in; none for `GET /v1/alert-capabilities`, and only a Traktor sign-in for `POST /v1/telegram/link-codes` | [Alerts](https://traktor.fun/docs/alerts.md), [Notifications](https://traktor.fun/docs/notifications.md) |
| Browser sessions | `POST /v1/browser-sessions/exchange`, `GET` and `DELETE /v1/browser-sessions/current` | API key to open one, then the session | [Authentication](https://traktor.fun/docs/authentication.md#account-routes) |
| Public market and search | `GET /v1/public/market`, `GET /v1/public/search`, `WS /v1/market/stream` | None, or a key on the market stream | [Public market and search](https://traktor.fun/docs/public-market.md), [Market stream](https://traktor.fun/docs/market-stream.md) |

No route places, changes or cancels an order: trading happens in the Traktor app, Solana and grid orders included.

[Authentication](https://traktor.fun/docs/authentication.md) covers each credential, and [Every limit](https://traktor.fun/docs/plans.md#every-limit) lists each route's limits on one page.

## Answers

A REST answer puts its result in `data`, and its request id, times and caveats in `meta`:

```json
{
  "data": [],
  "meta": {
    "requestId": "req_01m40t5ceg7k2q9xv4ra",
    "generatedAt": "2026-10-03T12:00:02.000Z",
    "asOf": "2026-10-03T12:00:01.500Z",
    "caveats": []
  }
}
```

- `asOf` dates the data, and the `X-Traktor-As-Of` header repeats it. `generatedAt` dates the answer. An answer that dates no data, such as the plans, has `asOf: null` and no header.
- `caveats` qualify the whole answer; [Caveats](https://traktor.fun/docs/trades.md#caveats) lists each one.
- A paged answer adds `meta.page`. The signal feed, and the market views that read raw trades (tape, rotation, wallets), add `meta.retention`.
- Each answer carries an `ETag` over its data and what `meta` says of it, never over `requestId`, `generatedAt` or `asOf`. Send it back as `If-None-Match`, and an unchanged answer is a `304` with no body: it draws no units and still counts as a request. `GET /v1/plans`, the market views and the token, signal, trader and stock reads answer `304` while their data stands still. `GET /v1/meta/filters` carries what the answering server itself read, and the API runs on several servers, so its `304` comes only from that server, until it reads again. `GET /v1/usage`, `GET /v1/stream/position`, `GET /v1/alert-capabilities` and the alert, notification, Telegram and session routes ignore `If-None-Match` and answer in full.
- A failure is never a `200`: it is an [error](https://traktor.fun/docs/errors.md) with a stable `code`.

`GET /v1/public/market` and `GET /v1/public/search` answer with the resource's own JSON, outside this envelope.

## Coverage

The table is read live from `GET /v1/meta/filters` and shows which apps the API 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.
