Skip to main content
user_orders and user_fills are event-driven only — no snapshot. Seed current state from REST, then attach the stream for live events.

Step 1 - seed from REST

Step 2 - subscribe (wallet-keyed → use user, not market)

Step 3 - apply lifecycle events.

user_orders frames have type ∈ {"placed", "resized", "canceled"}. Maintain an order map keyed by orderId:

Step 4 - attribute fills

Each user_fills frame is one maker fill against your resting order. makerFee is signed, a leading - means a rebate. Join a fill to its placement via sequenceNumber: a fill at seq S belongs to the latest placedresized for the same (side, price) with sequenceNumber <= S.
Privacy: there’s no identity proof, subscribing to any wallet returns exactly what you’d read from chain yourself. Use it to show a customer their own data; it is not a private feed. For every wallet’s LO activity on a market instead of one wallet, subscribe to the market-keyed limit_orders channel, same payload, plus a top-level maker, minus the per-wallet filtering.