Skip to main content
For API integrations with Console usage and credit tracking, connect to 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 as BRAVADO_API_KEY and BRAVADO_API_SECRET.
Node.js
Snapshot and trade payloads use WebSocket credits for enrolled organisations: 1 credit per 100,000 uncompressed UTF-8 bytes. Heartbeats and errors are not charged. Usage updates during an open connection; allow about a minute for batching, then refresh Console. The authenticated route sends heartbeat pings; Node’s ws client responds automatically.

Frames

Every message is a JSON object with a type 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.
The trade object in a trade frame and every element of the snapshot array share the same shape:
assetId links the two feeds. Watch the trade stream to discover which outcome tokens are active right now, then pass those IDs to the Order Books feed to see depth for them. And trader links Market Data to Data API: take a wallet you see filling and pull its PnL, positions, and history.

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 fresh snapshot; 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

Returns whether the upstream source is connected, total trades emitted, recent-buffer size, and connected-client count.