Server clients may send an Authorization header. Browsers should pass the key as a subprotocol. The first accepted message is {"type":"ready","version":"swap.v1"}. URL filters accept dex and mint.
const ws = new WebSocket(
"wss://YOUR_DOMAIN/v1/swaps?dex=PumpSwap",
["echox-api-key", "ex_live_YOUR_KEY"]
);
ws.onmessage = ({ data }) => console.log(JSON.parse(data));
Event
Each event includes its ID, schema version, signature, event index, slot, block time, DEX, pool, mints, trader, side, amounts, SOL price, and optional liquidity, holder concentration, and pool creation time.
Errors and quotas
HTTP and WebSocket share the Stream event quota. Paid plans reset at the subscription boundary; Free resets at the start of each UTC calendar month. HTTP usage.periodStart and usage.resetsAt report the current boundaries.
400: invalid limit or cursor.
401: invalid or revoked API key.
403: cursor exceeds the plan lookback window.
429 api_rate_limit_exceeded: wait for Retry-After; each key is limited to 600 requests per minute.
429 stream_quota_exceeded: current event quota period exhausted.
WebSocket 4401: invalid key; 4408: connection or event quota exceeded.
Inspect public data freshness at GET /api/health/data. HTTP responses include event usage, limit, period start, and reset time.
DEVELOPER · SWAP.V1
API Swap Events в реальном времени
Получайте нормализованные сделки Solana через HTTP или WebSocket. Секрет API-ключа показывается в консоли только один раз.
Все суммы передаются десятичными строками. Доставка выполняется не менее одного раза: удаляйте дубликаты по id и храните ключ в защищённой среде.
HTTP
Передавайте Bearer-ключ. limit принимает 1-1000. Доступны фильтры dex и mint; значение nextCursor передавайте как after.
Серверные клиенты используют Authorization. В браузере передайте ключ как подпротокол.
const ws = new WebSocket(
"wss://YOUR_DOMAIN/v1/swaps?dex=PumpSwap",
["echox-api-key", "ex_live_YOUR_KEY"]
);
Событие
Содержит ID, версию, подпись, индекс, slot, время блока, DEX, пул, токены, трейдера, сторону, объёмы, цену SOL и необязательные метрики ликвидности и держателей.
Ошибки и лимиты
HTTP и WebSocket используют общий лимит событий Stream. Платные тарифы обновляются на границе подписки, Free — в начале календарного месяца UTC. Поля HTTP usage.periodStart и usage.resetsAt показывают границы периода.
400: неверный limit или cursor.
401: ключ недействителен или отозван.
403: cursor старше доступной истории тарифа.
429 api_rate_limit_exceeded: подождите согласно Retry-After; не более 600 запросов в минуту на ключ.
429 stream_quota_exceeded: лимит текущего периода исчерпан.