wss://partner-api.bravadotrade.com/stream/polymarket/partner/trades using a
Market Data key with stream.read and HMAC authentication.
The server sends recent history, then every new trade across Polymarket markets.
No subscription message is needed.
The legacy Terminal /trade-feed/ws route has a separate access contract. New Console integrations must use the authenticated route above; adding an API key header to a different route does not select this usage-accounted feed.
Coverage today is Polymarket. The feed carries every trade on every market, not a selection of the active ones, and the rate varies with market activity — on the order of tens of trades per second (samples measured 20–50/s). Size your buffers and your UI for the whole hose, and filter client-side for the markets you care about. To follow a specific market’s book instead, use the Order Books feed.
Connect with usage tracking
Your organisation needs an eligible paid plan with WebSockets access. Keep the secret on your server; browser-native WebSocket clients cannot set HMAC headers. Create a Market Data credential in Console. Save its key and secret locally asBRAVADO_API_KEY and BRAVADO_API_SECRET.
Node.js
ws client responds automatically.
Frames
Every message is a JSON object with atype field.
snapshot
Sent once, immediately on connect, so the feed does not start empty. It carries the last 200 trades as an array, newest first.
The buffer is a fixed-count ring, not a time window. At the rates we have measured (20–50 trades per second) 200 trades is roughly four to ten seconds of history, and less than that when the market is busier — nowhere near thirty seconds, and not a fixed span you can rely on.
trade
Sent for every new fill after the snapshot.
trade frame and every element of the snapshot array share the same shape:
Keep-alive and reconnect
The authenticated route sends heartbeat pings; clients must respond with protocol pongs (most libraries do this automatically). This trade route does not accept subscription commands. If the socket drops, reconnect to receive a freshsnapshot; authenticated reconnects require a fresh timestamp and signature.
Dedupe against trades already on screen using transactionHash, not id. id is built from a counter that lives in the serving process: it restarts from zero when the process does, and two instances give the same fill different ids. transactionHash identifies the fill itself.
Health
Related
- Order Books WebSocket, live depth for a specific asset.
- Market Data overview.
- Data API, enrich the wallets you see trading.