event | string | Yes | vol_book |
topic | string | Yes | |
seq | string | Yes | the stream position at render — the global sequence of the last event dispatched before this frame rendered: provenance, not a per-topic chain (gaps between a topic’s frames are expected and meaningless) |
seqTs | string | Yes | sequencer epoch-ns of that event, as a decimal string |
ts | string | No | the newest included source’s exchangeTsNs, written by one rule on every form: present when an included source carries one, absent otherwise — never “0”; and always absent on rescaled |
status | string | No | status frames only; data is absent. degraded, recovered and stale are source transitions; rescaled says the topic’s output scales changed (a source’s reference record now states another scale pair, so the gateway rebound the composite) — the pair the subscribe ack echoed no longer bounds the numbers on the topic, and the frame carries the pair that does. Every frame after it is rendered at the new pair. One of degraded, recovered, rescaled, stale. |
priceScale | integer | No | rescaled frames only — the topic’s new output price scale: the same number the subscribe ack’s priceScale carried, restated |
qtyScale | integer | No | rescaled frames only — the topic’s new output quantity scale |
excluded | array of objects | No | degraded frames — the sources that just left the merge, and for precision also a source that cannot enter it (announced once, even if the topic has never shown it in src) or whose announced reason became precision |
> s | string | Yes | the source’s refdata canonical symbol |
> reason | string | Yes | the closed vocabulary, complete so consumers bind once; fx_expired = the source’s MID pair has no current index rate, precision = the source’s book is stated at more decimal places than the topic’s output scales hold, so its levels cannot enter the merge without dropping digits (it rejoins, as recovered, once its book is within the topic’s scales again — the topic was rescaled wide enough, or the venue’s next snapshot states a coarser scale; a rescale that widens only part of the way leaves it out), stale = any other unservable book; delisted and disabled are reserved. One of stale, fx_expired, precision, delisted, disabled. |
included | array of objects | No | recovered frames — the sources that just rejoined |
> s | string | Yes | |
data | object | No | |
> name | string | Yes | the client-chosen composite name |
> pricingModel | string | Yes | the configured model, echoed on every image. One of VWAP, BEST, WORST. |
> buckets | array of objects | Yes | ascending by size |
> > size | string | Yes | the cumulative threshold at qtyScale |
> > bid | object | No | one side of one bucket — absent entirely when the book has no levels on that side (one-sided markets publish what they have) |
> > > cum | string | Yes | the achieved cumulative quantity at qtyScale — the bucket’s size when filled, the side’s whole depth when exhausted |
> > > px | string | Yes | the model price before the bucket margin, at priceScale |
> > > adjPx | string | Yes | the model price with the bucket’s directional margin applied — bid floors, ask ceils |
> > > notional | string | Yes | the EXACT swept cost (sum of effective price x quantity taken) at scale priceScale + qtyScale — the VWAP numerator, equally meaningful under BEST/WORST. Can exceed a 64-bit integer: parse as an arbitrary-precision decimal |
> > > filled | boolean | Yes | whether the side reached this bucket’s threshold |
> > ask | object | No | one side of one bucket — absent entirely when the book has no levels on that side (one-sided markets publish what they have) |
> > > cum | string | Yes | the achieved cumulative quantity at qtyScale — the bucket’s size when filled, the side’s whole depth when exhausted |
> > > px | string | Yes | the model price before the bucket margin, at priceScale |
> > > adjPx | string | Yes | the model price with the bucket’s directional margin applied — bid floors, ask ceils |
> > > notional | string | Yes | the EXACT swept cost (sum of effective price x quantity taken) at scale priceScale + qtyScale — the VWAP numerator, equally meaningful under BEST/WORST. Can exceed a 64-bit integer: parse as an arbitrary-precision decimal |
> > > filled | boolean | Yes | whether the side reached this bucket’s threshold |
> > spreadBps | string | No | (ask adjPx - bid adjPx) over the adjusted mid, in bps at a fixed two-decimal scale, nearest with ties away from zero — present whenever both sides price the bucket (partial fills included: the spread of the achieved prices is what the quoted numbers say) and the adjusted mid is nonzero (a maximal bid margin can floor a sub-tick-scale price to an adjusted zero; the field is omitted rather than divided by zero), and negative when independent venues cross |