Every trade below is real. Watch how fast you see it with mempool access, how long it takes to be mined on-chainValidators verify the transaction and add it to the Polygon blockchain. Displayed below as "Confirmed"., and when it finally appears on the official Polymarket APIFetched directly in your browser every 1 second from data-api.polymarket.com with a cache-busting parameter to ensure fresh data..
The mempool is where every trade appears after CLOBCentral Limit Order Book — Polymarket's off-chain matching engine that pairs buy and sell orders before submitting them to the blockchain. matched orders together. By the time it reaches the public API, you're already seconds behind.
Trades arrive the instant they enter the Polygon mempool — typically 1.5s before on-chain confirmation and 6–10s before appearing on the Polymarket API.
Wallet, counterparty, size, price, side, role, market, timestamps. Everything you need in a single event.
See every market at once in a single stream. Detect volume surges, whale entries, and coordinated moves as they happen — not after the fact.
See individual trades as they're submitted — not batched after they're mined. Perfect for researching wallet behavior, spotting patterns, and understanding how other traders really operate.
Follow any wallet in real time and react before the price moves. With some price aggression, you may even frontrun leader's maker orders.
Let us know what you'd like to see in the data and we'll consider adding it to your stream. Don't hesitate to reach out — our support team is extremely friendly and always happy to help. Get in touch.
One WebSocket URL with your API key. JSON events flow in real-time. That's it — no SDK, no auth dance, no polling loop.
import asyncio, json, websockets URL = "wss://stream.polyflux.io/polymarket/<your_key>" async def main(): async with websockets.connect(URL) as ws: async for raw in ws: msg = json.loads(raw) if msg.get("type") != "events": continue for t in msg["events"]: if t.get("event_type") != "trade": continue # skip redeems / splits / merges # t.wallet_address, t.size, t.price, # t.operation_type, t.timestamp, ... print(t["wallet_address"], t["operation_type"], t["size"] * t["price"]) asyncio.run(main())
Each event is a single JSON object. Here's exactly what you'll see — and what every field means.
{
"wallet_address": "0xe5ce1a65c210e08d3ffbd94e28a61911700c7f3f",
"asset_id": "8110092957755367409636...34004408",
"operation_type": "buy",
"size": 34.29,
"price": 0.923,
"counterparty": "0x81ff15a2bc16e8bd9e9be99697eff32c94b9eaca",
"wallet_role": "maker",
"tx_hash": "0x0a80f632b59bfb131b8c6820...",
"timestamp": "2026-04-10T14:06:41.068529+00:00",
"source": "pending",
"event_type": "trade",
"block_number": 0,
"block_timestamp": null,
"order_hash": "0xb656965aaaf099364d2128...",
"order_hashes": ["0xb656...", "0x38d6..."],
"fee": 0.0,
"intent_adjusted": false,
"log_index": null,
"exchange": "NegRiskExchange"
}
"buy" or "sell". The action this wallet is taking.null for split / merge / redeem / convert events.null for CTF position events."maker" (resting order) or "taker" (crossing order). null for CTF position events."pending" (from mempool) or "confirmed" (from on-chain logs). Both are streamed."trade" (OrderFilled), "split", "merge", "redeem", or "convert".0 for pending events, populated once confirmed.null for pending events.0.0 for makers.true when the taker's asset/op was flipped to reflect their original order intent.null for pending events."Exchange" or "NegRiskExchange". null if unknown.Pay monthly. Cancel anytime.
pending and confirmed tradesGet a key, paste a URL, see Polymarket move in real time.