Aggregated book
Client-configured aggregated multi-exchange books, computed merge-on-read over the gateway’s book folds and conflated at the topic’s mandatory tier (composites have no raw lane).
URL wss://marketdata.immix.xyz/
Topic agg_book.{name}.{tier}
Request parameters
Response parameters
Push data parameters
Behaviour
Subscribed with an OBJECT entry in params.topics carrying the composition (sources with optional per-side bps margins, optional maxDepth); the per-topic ack echoes the resolved output priceScale/qtyScale, which bound every number the topic can carry. The name is the client’s handle, scoped per session; config binds to (name, tier) at first subscribe — an identical re-subscribe is an idempotent re-ack, a different config without “replace”: true answers name_in_use, and “replace”: true swaps the config atomically (full validation first: a failing replace answers its error code and leaves the old config live; the subscription survives, the ack re-echoes the possibly-changed scales, the next frame renders the new config; the tier is topic identity and cannot be replaced). Frames are full images at each tick — idempotent, no chain semantics, sides always present ([] for a one-sided market) — with merged levels as objects: the effective price that ordered the level, total quantity at the output scales, and per-venue src attribution (venue-native raw prices at each venue’s own scales). Sources that cannot be served (a stale book) leave the merge and status frames announce the transitions: degraded/recovered name the sources, and when every enabled source is out the topic behaves as the book channel’s stale — marker, then silence, then the healing image; between transitions the current exclusion set is always the configured sources minus those visible in src. Reasons served: fx_expired for a MID source whose index pair lapsed the 30 s consumer window, precision for a source whose book is stated finer than the topic’s output scales, stale for any other unservable-book transition; delisted is reserved vocabulary. precision is the one exclusion announced for a source that never entered the merge: a source merely not synced yet is covered by the ack’s syncing promise and joins in silence, but a precision source holds a servable book and stays out until the catalog or the venue moves, so its degraded frame is sent once whether it left the merge or was never in it — and when that leaves no source included, ahead of the stale posture’s silence (the frame then carries no ts, names every source that left with it, and a topic that has not served yet gets no stale marker after it: syncing still stands). precision is also the one reason said over another: a source already announced stale or fx_expired whose exclusion turns into precision is named again, in a degraded frame carrying the new reason, because the first word promised a heal within a restate interval or a rate tick and this one waits on the catalog; no other change of reason is re-announced. The output scales are the pair the ack echoed; they can change under a live subscription when a source’s reference record restates its scales, and a status rescaled frame carrying the new priceScale and qtyScale says so before the first frame rendered at them. Unsubscribe is by the topic string alone, byte-identical to the echo — the config is never re-sent. Nothing survives the socket: on reconnect, resubscribe with the full config and the ack + immediate image behave as a first subscribe.