Stream
on-chain activity
in real time.
A single WebSocket connection. Pre-parsed transfers, swaps and exchange events streamed from every Pinax-supported chain — ready to render the moment they confirm.
Replay of real frames captured from the live streams — click any row to view the transaction in its explorer. msgs = billable WebSocket frames · events = trades / transfers unpacked from each frame. Typically one message per block per table — many events inside.
Push, don’t poll.
RPC polling burns requests, capacity and your roadmap. Open one socket, subscribe to what you care about, and let Pinax push fresh data the instant a block lands.
Three lines. Live data.
Pre-parsed streams,
one socket.
Live today: DEX swaps and token transfers across Solana and 8 EVM chains, plus HyperLiquid perp fills and Polymarket prediction-market orders. Each subscription is independently billed only for messages it actually pushes — more stream types coming.
Markets, streamed.
The latest additions to the gateway: HyperLiquid perp fills & liquidations and Polymarket CTF Exchange order flow. Here’s a replay of real events captured from the live streams.

Every fill on Hypercore with direction, size, price and closed PnL — and a dedicated stream that carries liquidations only.

Prediction-market order fills from the CTF Exchange — outcome-token shares, implied odds and USDC notional per trade.
Connect in three lines.
Bring your own client — any standard WebSocket library works. Authenticate with your Pinax API key, send one JSON-RPC subscription, and read messages off the socket.
import WebSocket from "ws"; // Subscribe via path: wss://<host>/ws/<chain>@<topic>?token=<API_KEY> const ws = new WebSocket( `wss://ws.pinax.network/ws/solana@swaps?token=${process.env.PINAX_KEY}` ); ws.on("open", () => console.log("connected")); ws.on("message", (msg) => { const event = JSON.parse(msg.toString()); console.log("swap →", event); });
Cut bandwidth and billing by asking the gateway to drop non-matching events before they reach you — the same Substreams Query Expression language as Firehose substreams run -t. Pass ?filter= (alias ?sqe=) on connect, or send a SET_FILTER message to narrow live. Only matching events are delivered and billed.
- tx_from:0xW || maker:0xW || taker:0xW — track one wallet across every role
- 0xWALLET1 || 0xWALLET2 || … — watch many wallets at once (up to 512 terms)
- protocol:raydium_cpmm && user:<addr> — a single protocol for a single user
field:value is case-insensitive equality on an events[*] column; a bare value matches any column. Combine with || (OR), && or whitespace (AND), ! (NOT) and ( ) grouping.
A better way
to read chains.
For anything resembling real-time, polling is a tax. Here’s what changes when you move to WebSockets.
Pay per message.
Nothing else.
No connection fees. No idle charges. No per-chain markup. You pay only for messages we actually deliver to your socket.
per 10K messages.
$0.00005 per message, billed alongside your other Pinax usage. Every account gets a generous free tier to get started.
- Billed per message, not per event.
- Heartbeats and protocol frames are free.
- Same API key as RPC, Firehose, Token API.
10 chains, day one.
Live across Ethereum, Base, Arbitrum, Optimism, Polygon, BSC, Avalanche, Unichain, Solana and HyperEVM. More chains turn on as their indexers come online.