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: