This is a partner tier. Connect to
wss://stream.bravadotrade.com/ws with a
Bravado feed token (provisioned during onboarding). The public
Live Trades feed mirrors the venue’s push feed and
needs no credentials; this feed adds the mempool lead, the settlement-truth
lifecycle, and inline identity. Coverage today is Polymarket.This feed is served directly from the feed edge (
stream.bravadotrade.com), not
proxied through partner-api.bravadotrade.com like the other APIs. That is deliberate:
an extra proxy hop would add relay latency and erode the mempool lead that is the whole
point of this feed. Connect to the edge host directly.Connect
Pass an initial stream set and (optionally) a mode and replay count on the query string, and present your token as aBearer header or a ?token= parameter.
Streams
Subscribe to the firehose or narrow to a token, market, or wallet. One connection may hold 120 streams.A wallet matches a fill if it is any leg’s maker or signer, any leg’s on-chain taker,
or the transaction sender — the operator rotates senders, so identity is never keyed
on the sender alone. Related resolution and collateral streams
(
resolutions:polymarket:*, collateral:polymarket:*) and the
UMA resolution lifecycle (uma:polymarket:*) are available over the
same socket.The fill lifecycle
A fill is not one event — it is a sequence of status transitions for the same transaction. This is the “did it actually settle?” signal no post-block feed can give you.
A
matched signal upgrades to pending when the settle tx hits the mempool, or expires as a ghost fill if it never settles. Track a transaction by tx_hash, and dedupe by (tx_hash, status) — the same tx legitimately arrives once per transition.
The fill frame
string
The lifecycle transition (see the table above).
boolean
false for provisional (matched/pending) amounts from calldata; true once log-derived (mined).boolean
Whether we observed the settle tx in the mempool before the block.
string
Which upstream produced this frame:
polymarket-clob (a matched signal) or mempool.string
The Polygon transaction hash — the key you track a fill by.
integer
Per-stream sequence, increasing within a connection; resets when a stream is re-established (a fresh
status frame marks the reset).integer
First mempool observation (unix ms).
integer
When we emitted the frame (unix ms). Subtract from
ts_seen to measure your own delivery latency.array
integer
On
mined/reverted: how far ahead of the block we saw the tx in the mempool.integer
On
mined/finalized/reverted: the Polygon block.boolean
true if re-sent from the recent buffer because you connected with replay=N. Backfill of what you missed; may interleave with the first live frames — dedupe by (tx_hash, status).Modes.
compact (default) omits from/nonce/gas/source and the per-leg
signer/fee/order_hash/log_index; request mode=full for those. owner is present
in both modes when known.Subscribe, unsubscribe, and replay in band
Beyond the query string, manage subscriptions over the socket.replay=N (0–500) backfills up to N recent fills per stream before live frames — so a reconnecting client recovers what it missed.
Stream health and errors
Astatus frame is sent on subscribe and whenever a stream’s health changes:
state is live or degraded; on degraded, reason is one of upstream_disconnected, heads_stale, pending_silent, reorg_depth_exceeded.
error frames carry a code: TOO_MANY_STREAMS, BAD_STREAM, UNAUTHORIZED, SLOW_CONSUMER, BAD_MESSAGE. A client whose send queue backs up is disconnected (SLOW_CONSUMER, close 1013) rather than buffered — one slow consumer never delays another.
Related
- Live Trades — the public, venue-mirrored trade feed
- UMA Resolution — the
uma:polymarket:*lifecycle over REST + WebSocket - Order Books — live books for outcome tokens
- Trader Data — cross-reference the
ownerwallet’s PnL, positions, and history