Skip to main content
Two channels share one socket. pools sends a tick for every swap on the pools you filter for. prices sends a USD price whenever a token you watch is repriced. Messages on this endpoint are camelCase. Every client field also accepts its snake_case spelling.

Welcome

The server speaks first, so limits are discoverable:

Subscribe to pools

The filter is (pools OR mints) AND dex. An empty filter is an error; ask for all: true if you want everything. Unknown venue names and unparseable mints are reported back in the acknowledgement and do not fail the subscription.

Subscribe to prices

mints takes up to 100 tokens. minChangeBps suppresses updates smaller than that move.

Data frames

  • price is quote per base from the last swap on that pool, and signature is the transaction that set it. txIndex and signature are left out when unknown.
  • usdPrice is the same value /v1/price returns, from the same computation, so the two never disagree.
  • The prices channel is event driven. A token is repriced when a pool it sits on trades.

Control

Omit channel on unsubscribe to drop both. Ping answers {"type":"pong","ts":…,"id":"4"}. The server also pings every 30 s.
A consumer that falls behind gets lagged and should re-snapshot from /v1/pools/{mint}. Error codes and close codes are listed under Errors.

Limits

With intervalMs: 0 a subscription on SOL alone produces a few hundred frames per second at busy times. Set an interval if you would rather have fewer, larger frames.