Skip to main content
Every server-to-client push uses the same canonical envelope:
Use sid to route inside your client; use id to identify which specific subscribed entity the event belongs to.

Event catalog

user_orders (/ws/user, no id)

user_fills (/ws/user, no id)

vault_positions (/ws/user, ids = vault address[])

vault_position_balance_changed.reason is a 4-byte ASCII tag from the upstream chain producer. Known values: "OUTF" (output filled — trade-side credit), "INFL" (non-trade inflow), "SPLT" / "MERG" / "REDM" (split / merge / redeem), "XFER" (direct ERC-1155 transfer). The list is open-ended; treat unknown tags as a generic balance change.

token_trade_matches (/ws/market, id = tokenId)

Fires the moment the matcher prints a trade — fastest tape feed.

token_trade_settlements (/ws/market, id = tokenId)

Fires when chain-watcher indexes the on-chain OrderFilled event for the matched trade. Use this for accounting-grade trade confirmations. Example:

token_book (/ws/market, id = tokenId)

seq is monotonically increasing. After subscribe the server pushes one book_snapshot (depth 100), then book_update events. book_delta is emitted only when local book state is contiguous — the gateway will not emit a divergent delta on a missed frame. If your client sees a book_delta gap (delta.prevSeq != last_seen_seq) or no updates for a market you’d expect to be active, issue get_book_snapshot to force a fresh snapshot. See Reconnect — orderbook resync. Both book_snapshot and book_update envelopes carry a hash field (16-hex truncated SHA-256 over canonical (bids, asks) — price + quantity only, count excluded). The same hash function is applied to the REST orderbook response. A client that maintains its own book view can hash it the same way and compare against the envelope hash to detect drift between the WS-applied state and the authoritative server view. book_delta envelopes omit hash because applying a delta does not produce a state snapshot — instead, compare your post-apply local hash against the next book_update.hash.

token_ohlc (/ws/market, id = tokenId)

Rolling 5-second candles emitted by the matcher whenever a trade prints inside the active window. isClosed: false while the bar is still accumulating; isClosed: true is the final tick of the bar.

condition_lifecycle (/ws/market, id = conditionId)

market_paused / market_unpaused / market_resolved are chain-anchored transitions (one push per on-chain change, with txHash evidence). market_status is the current-state mirror — emitted on subscribe and on every status change. Route by what you need: audit trail → transitions; UI badge → market_status.

market_lifecycle (/ws/market, id = market symbol)

Market-scoped counterpart of condition_lifecycle (which is keyed by conditionId). Optional fields are omitted when absent rather than sent as null.

crypto_price_tick (/ws/market, id = instrumentId)

The underlying-asset price for crypto markets, keyed by instrument (btc-usd). price is an unscaled integer as a decimal string — render as price / 10 ** decimals with a bigint or decimal helper. at is the observation time and the point’s x-coordinate; src is "datastreams" (~1/s live spot) or "candlestick" (~1/min candle close). See Crypto price feeds. Example:

system (/ws/market, id = "platform_status")

Example: