Freshness and cadence
Every value of a snapshot layer says how long it is good for. Past that, it is not returned as a value.
What a value states
Section titled “What a value states”| field | what it says |
|---|---|
received_at |
when the platform received it |
venue_ts |
the venue’s own timestamp, when it sends one |
age_ms |
how old it is: the instant asked about minus its anchor — venue_ts where the horizon counts from the venue’s clock, received_at otherwise |
venue_age_ms |
how old it is by the venue’s clock, whatever the anchor: the instant minus venue_ts; null without one |
valid_until |
the instant after which it is no longer treated as current |
horizon_source |
where valid_until comes from (below) |
anchor |
which clock the horizon counts from: venue (its own timestamp) or receipt (ours) |
There is one definition of age, and age_ms, age(F) in DQL, a query’s freshness bound and every page of the
site use it: a value is as old as the venue’s own timestamp says wherever the venue dates the value, and as old as
our receipt only where it does not. Where the venue’s timestamp dates the publication of the value (or, for a
settled rate, its settlement), the horizon and the age count from it (anchor: "venue"): a quote whose timestamp
stops advancing grows old and goes stale however often we poll it — COINBASE-INTX’s quotes stood on one timestamp
from 2026-10-01 09:00:29 UTC for a week while we read them every two seconds. Where the venue sends no time, or its
time dates something else, both count from our receipt (anchor: "receipt") and venue_ts stays what the venue
said, with its own age: Aster’s open interest carries the instant the venue last changed the figure, so for a quiet
symbol venue_age_ms is how long the figure has stood still, tens of minutes, while age_ms is how long ago the
platform read it. The pairs that count from our receipt are listed below.
horizon_source |
meaning |
|---|---|
venue_declared |
the venue said when the next value comes: a settled funding rate and the interval it publishes with it |
measured |
a cadence the platform measured |
documented |
the venue’s documentation |
assumed |
a cadence the platform assumes. It is written down below, with what it rests on |
connection |
the venue pushes only when the value changes: the value holds while the connection that delivered it is alive, up to its pair’s no-update threshold (valid_until) |
| null | no fact covers the value: it is stale, horizon_unknown |
How long a value is good for
Section titled “How long a value is good for”- Polled or streamed: twice the longer of its interval and the history window it is kept at (a second to a minute by the listing’s group and the layer, the table below; funding never less than ten seconds). A stored reading is the last of its window, so a horizon shorter than two windows would make every stored reading of a fast feed stale the moment it is kept.
- Settled (a funding rate the venue has fixed): until the next settlement is due — the listing’s own funding
interval (1 h, 4 h, 8 h, from the registry, and only from it: a listing without one has no horizon,
horizon_unknown) after the settlement the rate belongs to — and five minutes more, twice the longest a settlement was measured to take to reach us. Its age is the settlement’s: forty minutes into an hourly period a current rate is forty minutes old, so askstatus(funding) = present, notage(funding) < 2m. - Pushed only on change: while the connection lives, and no longer than its pair’s no-update threshold
after its anchor (the table below). A quiet socket means “nothing changed”, for a while: past the threshold —
longer than any listing of the pair was measured to stay quiet while alive — a value whose timestamp has not moved
is stale,
no_update, though its connection lives. The value stops being current the moment the platform records a disconnection of that venue, a collector going down or restarting, a bus outage, or its own projection lagging, and for the last only while the lag lasts: once State has caught up, a value that did not change is as current as it was, unless a disconnection, a collector going down or a bus outage was recorded inside the lag’s window. A socket on which nothing at all arrives — no data, no reply, no heartbeat — for longer than its venue guarantees it speaks is a disconnection too: the collector drops it and reconnects, and every value on it isconnection_lost. The platform never sends a fake heartbeat to keep such a value fresh. A disconnection is recorded for the venue as a whole, not for one socket, so any reconnect ends every such value of that venue until the next value arrives (on Kraken, about 0.07 % of the time, never more than about two seconds at once, measured 2026-09-29). - A value no fact covers is stale. No proof, no value.
At valid_until itself the value is still current. A query’s own freshness bound can only make a value stale
sooner; it never extends a horizon.
A stale value is not a value
Section titled “A stale value is not a value”Past valid_until the layer’s status is stale and the value is not in the value field: values is empty
(value is null on a DQL value object), and the reading is still dated — received_at, age_ms and
valid_until say what it was and when it stopped being current. The value itself is written under a separate
key, withheld, only when the request sets allow_stale: true (allow_stale=true on GET /v2/stream). The
default is false. withheld is for post-mortems; do not feed it into a live decision.
| reason | why the value is stale |
|---|---|
horizon_passed |
no new value within its horizon |
connection_lost |
the connection that delivered it was recorded lost — a disconnection, or a socket on which nothing at all arrived for longer than its venue guarantees it speaks |
no_update |
it is pushed only on change, its connection lives, and its timestamp has not moved for longer than its pair’s no-update threshold (the table below) |
state_lag |
our live projection fell behind; the venue and the connection were fine |
source_error |
the venue refused our requests for this layer (an error status, not a rate limit) since the value arrived, so nothing newer could come |
horizon_unknown |
no fact covers it, or the connection’s liveness could not be read |
freshness_bound |
older (age_ms) than the bound the query set itself |
halted |
the venue said, at the instant asked about, that it does not trade the listing: its figures are its last, not a market, in every layer (it outranks every other reason) |
The five states stay distinct everywhere — the live answer, history, DQL: present, stale, missing,
not_published, off. None of them becomes another, or a zero, or the previous value.
In DQL a stale value compares as unknown, and/or/not treat it as unknown, any and all give
unknown, count does not count it, and status(F) = stale is true and never unknown.
Series over values pushed on change
Section titled “Series over values pushed on change”A sampled series (last at 1m) over a value pushed only on change carries the value into the periods in which
it did not change, as long as its connection lived — and says so: carried: true on the history row and on the
series value, and carried(S, n) in DQL, the number of the last n periods whose value was carried rather than
observed. carried(last, 1) = 0 is true only when the newest period was observed. Candles are never carried.
Replay
Section titled “Replay”A replay with as_of = served_at reads the facts and the connection breaks as they were recorded by that
instant, so a value withheld in an answer is withheld in its replay, with the same reason and valid_until. A
fact corrected later changes what is read from then on, never the past.
How often history keeps a value
Section titled “How often history keeps a value”Every tick of every layer is in the live answer, whatever follows. History keeps the last value of each window of a fixed length, and the length depends on the listing’s group:
core— the five main instruments of every venue (what the owner calls the majors);top-100— the hundred busiest listings of the rest by 24 h turnover, chosen once a day. A listing enters when it is busier than the weakest member by a margin and leaves when it is not, so one on the border does not change places every morning; a listing that moves keeps what was already stored, under the window it was stored at;tail— everything else the platform collects.
Every stored row says the window it was sampled at (cadence on the row), so a series’ spacing is data, never
inferred. A window in which a layer was not observed has no row: the absence is what a query reads as stale.
| layer | core |
top-100 |
tail |
|---|---|---|---|
| ticker, book prices | 10s, kept 6 months |
1s, kept 1 week |
15s, kept 1 month |
| mark | 10s, kept 6 months |
1s, kept 1 week |
1m, kept 1 month |
| funding | 1m, kept 2 years |
15s, kept 1 month |
1m, kept 1 month |
| oi | 10s, kept 6 months |
15s, kept 1 month |
1m, kept 1 month |
| stats | 10s, kept 6 months |
15s, kept 1 month |
1m, kept 1 month |
| book bands | 10s, kept 6 months |
15s, kept 1 month |
not collected |
| venue_depth | 10s, kept 6 months |
15s, kept 1 month |
1m, kept 1 month |
| trade | every event, kept 1 week | every event, kept 7 days | not collected |
| candles | every event, kept 1 year | every event, kept 1 month | every event, kept 1 month |
| liquidation | every event, kept 2 years | every event, kept 2 years | every event, kept 2 years |
live answer (md.state, /v2/stream, “now”) |
every tick | every tick | the last tick of each second, as it was received |
| raw order book | raw book kept 4 hours | raw book kept 1 hour | none |
A layer that is not collected for a group is off in its answers (policy: "off"): the tail’s book bands are not collected at all.
The tail’s trades and raw book are collected only where a venue’s ticker is made of them: BINANCE-USDM, ASTER-PERP, BINANCE-SPOT, HYPERLIQUID publish
no ticker until they have seen a trade, so the tail keeps the trade stream there (and stores none of it); EDGEX-PERP, DYDX-PERP, NADO-PERP, SYNTHETIX-PERP, WEEX-FUTURES make
the ticker of the book, so the tail keeps its raw book for an hour. On every other venue the ticker comes whole on its own channel and the tail
has neither. The same is said per listing and layer by history_cadence on GET /v2/instruments.
Retention, and what a question beyond it is told
Section titled “Retention, and what a question beyond it is told”What is kept is the kept of the table, per group and layer: the core six months (funding two years, candles a year, liquidations two years), the
top-100 a week of its second-level ticker and mark, a month of the rest and seven days of its trades, the tail a month. The trades of the
top-100 are stored in partitions of a day and dropped seven days after the day’s end, so a trade is on disk seven to eight days (the
weekly classes keep a row seven to fourteen). The length is a class of the policy, not of the code. A layer’s retention_from on GET /v2/instruments
says since when it is kept for that listing. A question that reaches back past it — an as_of, a window, a history row — is not answered with
silence and is not answered as a quiet market: the layer is missing with the reason not_retained. A layer kept for longer, asked at the same
instant, is only empty (no_value) where nothing was recorded. A listing that moves between groups keeps what it was already stored, each row for
as long as the class it was written under.
Every pair, and what its horizon rests on
Section titled “Every pair, and what its horizon rests on”117 pairs today, 46 of them on an assumed cadence and
35 living on their connection. GET /v2/instruments states the same fact
per layer (horizon), as known at the instant asked about.
| venue | dataset (layer) | mode | interval | label | venue time dates | what it rests on |
|---|---|---|---|---|---|---|
| ASTER-PERP | depth-derived (book bands) | stream | 10 s | assumed | publication | the same feed as Binance (depth20@100ms), not cited for Aster; rows 10/10 s; git ba64921 |
| ASTER-PERP | funding (funding) | stream | 3 s | measured | publication | the same markPrice frame (r and T), every 3 s, live 2026-09-30, dated by E; was REST every 15 s; git 3703db0 |
| ASTER-PERP | mark (mark) | stream | 3 s | measured | publication | WS {symbol}@markPrice: a frame every 3 s, live 2026-09-30 (aster-perp.md, Датасеты), dated by E; was REST every 15 s; git 3703db0 |
| ASTER-PERP | open-interest (oi) | poll | 300 s | measured | none | REST openInterest every 300 s, through a CloudFront cache (Age header 1-4 s); the response’s time is when the figure last moved, not when the venue published it: DOTUSDT 12-28 minutes old with the same value in all 44 reads, TRXUSDT 17-32 minutes, BTCUSDT 12-33 s behind each change (live 2026-10-01 11:44-11:59Z, five symbols every 20 s); counted from it a figure read seconds ago stood stale (8 symbols in 14 minutes, at ages of 24-296 s), so the horizon counts from our receipt and venue_age_ms still says how old the figure is; 0048 read the lag as the cache’s; git ba64921 |
| ASTER-PERP | stats (stats) | on change | — | measured | publication | WS {symbol}@ticker and !ticker@arr: a frame only after a trade in the symbol (the venue’s trade counter n rose in 3 524 of 3 555 consecutive frames) and no heartbeat; live 2026-10-01 11:24-11:49Z, 26 symbols: BTCUSDT every 4.2 s on average (longest silence 28 s), ASTERUSDT 2.0 s (50 s), the quiet tail minutes apart (DOTUSDT first frame after 447 s, LTCUSDT after 491 s, TRXUSDT two frames in 25 minutes); dated by E; 0060 stated a frame every 1000 ms (the stream of Binance’s protocol, no rate cited for Aster), which no symbol sends; git 3703db0; no_update after 6 h: the longest spell without a new value, no break of the connection and no restart in it, 7 681 s (TRXUSDT, the least traded of 26 at USD 61 thousand a day, 2026-10-03 02:38-04:46Z; 59 spells over 30 minutes of TRXUSDT alone, and every spell that long is of a listing under USD 1.5 million a day; BTCUSDT and ETHUSDT none over 65 s), 2026-10-01 to 10-08; twice it is 4.3 h |
| ASTER-PERP | ticker (ticker, book prices) | on change | — | measured | publication | aster-perp.md:78: frames only on change, 11–54 in 8 s; git ba64921; no_update after 1 h: the longest quiet spell 1 595 s (TRXUSDT, the least traded, 2026-10-04 02:31-02:58Z; DOTUSDT, the next, 240 s), 2026-10-01 to 10-08; twice it is 53 minutes |
| AVANTIS-PERP | funding (funding) | poll | 20 s | assumed | none | REST /v2/trading every 20 s; the SDK says the snapshot is rebuilt ≈ every 30 min (venue card :34-37, :185-186); no venue time; git 52077ac |
| AVANTIS-PERP | open-interest (oi) | poll | 20 s | assumed | none | REST /v2/trading every 20 s; the SDK says the snapshot is rebuilt ≈ every 30 min (venue card :34-37, :185-186); no venue time; git 52077ac |
| AVANTIS-PERP | venue-depth (venue_depth) | poll | 20 s | assumed | none | REST /v2/trading every 20 s; the SDK says the snapshot is rebuilt ≈ every 30 min (venue card :34-37, :185-186); no venue time; git 52077ac |
| BINANCE-SPOT | depth-derived (book bands) | on change | — | measured | none | WS depth20@100ms, the partial book, pushed at most every 100 ms and not while the top twenty is unchanged; no venue time in the frame; binance-spot.md: 780 frames in 80 s on BTCUSDT, mean 100 ms, longest silence 0.38 s, 474 on ADAUSDT, 1.20 s, 537 on LINKUSDT, 1.0 s; measured on one machine, not on production; git c55d9a9; no_update after 5 min, as the ticker: the top twenty moves whenever the best level does (it is the same book), so it is never quieter than the book ticker; its bands are not kept in history at the listings’ group to measure apart |
| BINANCE-SPOT | stats (stats) | on change | — | measured | publication | WS ticker, at most once a second (docs web-socket-streams: update speed 1000 ms) and silent while a pair does not move; binance-spot.md: 78 frames in 80 s on BTCUSDT, longest silence 1.16 s, 70 on ADAUSDT, 5.0 s, 73 on LINKUSDT, 2.0 s; measured on one machine, not on production; git c55d9a9; no_update after 5 min: the longest spell without a new value 115 s (HYPEUSDC, the least traded of 12, 2026-10-07 22:54Z), no break in it, 2026-10-05 to 10-08; twice it is 230 s |
| BINANCE-SPOT | ticker (ticker, book prices) | on change | — | measured | none | WS bookTicker, real-time on every change of the best level (docs web-socket-streams: update speed real-time), with the last price of the trade stream; no venue time in the frame; binance-spot.md: 9448 frames in 80 s on BTCUSDT, longest silence 0.76 s, 1795 on ADAUSDT, 5.59 s, 1749 on LINKUSDT, 2.08 s; measured on one machine, not on production; git c55d9a9; no_update after 5 min: the longest spell 103 s, inside a bus outage (2026-10-07 12:19Z), 74 s without one (HYPEUSDC, the least traded of 12), 2026-10-05 to 10-08; twice it is 206 s |
| BINANCE-USDM | depth-derived (book bands) | stream | 100 ms | documented | publication | WS depth20@100ms: binance-usdm.md:236-237; git 1520761 |
| BINANCE-USDM | funding (funding) | stream | 3 s | documented | publication | the same markPrice frame (r and T), every 3 s, documented, dated by E; was REST every 15 s; git 3703db0 |
| BINANCE-USDM | mark (mark) | stream | 3 s | documented | publication | WS {symbol}@markPrice: every 3 s by default, documented (binance-usdm.md, Mark / Funding), dated by E; was REST every 15 s; git 3703db0 |
| BINANCE-USDM | open-interest (oi) | poll | 300 s | measured | publication | REST openInterest every 300 s; rows 300/301.6 s; git 1520761 |
| BINANCE-USDM | stats (stats) | stream | 1 s | documented | publication | WS {symbol}@ticker: every 1000 ms, documented (binance-usdm.md, Stats), dated by E; was REST every 15 s; git 3703db0 |
| BINANCE-USDM | ticker (ticker, book prices) | on change | — | assumed | publication | WS bookTicker: cadence undocumented, a frame on change; git 1520761; no_update after 5 min: the longest spell without a new value 58 s over 44 listings (BCHUSDC, the least traded at USD 6 million a day, among them), 2026-10-05 to 10-08; twice it is 116 s |
| BITGET-PERP | depth-derived (book bands) | stream | 100 ms | measured | publication | WS books: a snapshot, then an update every 100 ms (bitget-perp.md, depth-raw; 223 updates of two symbols in 12 s, live 2026-09-30); was REST merge-depth every 300 s; git f24877b |
| BITGET-PERP | funding (funding) | stream | 10 s | assumed | publication | WS ticker, the adapter’s comment (:12-13); git c4b1eda |
| BITGET-PERP | mark (mark) | stream | 10 s | assumed | publication | the WS ticker frame that carries the venue’s ticker, open-interest, stats and funding (markPrice and indexPrice, dated by its ts): their fact, not measured apart from them; git 7642462 |
| BITGET-PERP | open-interest (oi) | stream | 10 s | assumed | publication | WS ticker “several times a second”: only the adapter’s comment (:12-13); rows 10.0/10.1 s; git c4b1eda |
| BITGET-PERP | stats (stats) | stream | 10 s | assumed | publication | WS ticker “several times a second”: only the adapter’s comment (:12-13); rows 10.0/10.1 s; git c4b1eda |
| BITGET-PERP | ticker (ticker, book prices) | stream | 10 s | assumed | publication | WS ticker “several times a second”: only the adapter’s comment (:12-13); rows 10.0/10.1 s; git c4b1eda |
| BYBIT-PERP | depth-derived (book bands) | stream | 190 ms | measured | publication | bybit-perp.md:209-210: the book ≈5.3 frames/s; git 9136b4c |
| BYBIT-PERP | funding (funding) | stream | 10 s | assumed | publication | WS tickers: cadence undocumented (bybit-perp.md:68-73); rows 10.0/10.5 s (10 s window); git 9136b4c |
| BYBIT-PERP | mark (mark) | stream | 10 s | assumed | publication | WS tickers: cadence undocumented (bybit-perp.md:68-73); rows 10.0/10.5 s (10 s window); git 9136b4c |
| BYBIT-PERP | open-interest (oi) | stream | 10 s | assumed | publication | WS tickers: cadence undocumented (bybit-perp.md:68-73); rows 10.0/10.5 s (10 s window); git 9136b4c |
| BYBIT-PERP | stats (stats) | stream | 10 s | assumed | publication | WS tickers: cadence undocumented (bybit-perp.md:68-73); rows 10.0/10.5 s (10 s window); git 9136b4c |
| BYBIT-PERP | ticker (ticker, book prices) | stream | 10 s | assumed | publication | WS tickers: cadence undocumented (bybit-perp.md:68-73); rows 10.0/10.5 s (10 s window); git 9136b4c |
| BYBIT-SPOT | depth-derived (book bands) | stream | 200 ms | measured | publication | WS orderbook.1000 every 200 ms (docs websocket/public/orderbook: spot level 1000 push frequency 200 ms); bybit-spot.md: 380 frames in 75 s on BTCUSDT, mean 201 ms; git f83d0fc |
| BYBIT-SPOT | stats (stats) | on change | — | measured | publication | WS tickers, snapshot-only and pushed only when a field changes, at most every 50 ms (docs websocket/public/ticker); bybit-spot.md: 135 frames in 75 s on BTCUSDT, mean 0.56 s, longest silence 2.0 s; measured on one machine, not on production; git f83d0fc; no_update after 5 min: the longest spell 79 s, inside a bus outage (2026-10-06 13:20Z), none over 65 s (the history window) without one, the least traded of 10 included, 2026-10-05 to 10-08; twice it is 158 s |
| BYBIT-SPOT | ticker (ticker, book prices) | on change hb | 3 s | documented | publication | WS orderbook.1 (the best level) on every change and again after 3 s without one (docs websocket/public/orderbook; bybit-spot.md: 531 frames in 75 s, longest silence 2.99 s), dated by its ts, with the last price of tickers (longest silence 2.0 s); git f83d0fc |
| COINBASE-INTX | funding (funding) | settle | the listing’s (registry) | measured | settlement | a settled rate, good until the next settlement: source_time is the settlement, the venue publishes the interval (funding_interval, measured 1 h, coinbase-perp.md:243) |
| COINBASE-INTX | mark (mark) | poll | 2 s | assumed | publication | published by the 2 s quote loop that carries the ticker (the declared 30 s loop only repeats it); the interval is the adapter’s, not measured on production; task 128 |
| COINBASE-INTX | open-interest (oi) | poll | 15 s | measured | publication | REST /instruments every 15 s; rows 15.0/15.8 s; git 5076512 |
| COINBASE-INTX | stats (stats) | poll | 60 s | assumed | publication | REST bulk /instruments row (qty_24hr, notional_24hr, dated by its quote timestamp) read by the 60 s loop the adapter declares; not measured on production; git 37647d0 |
| COINBASE-INTX | ticker (ticker, book prices) | poll | 2 s | assumed | publication | REST quote every 2 s, 24 listings at 12 requests a second against a budget of 20 (the one-second loop of 0048 needed 24 a second); the interval is the adapter’s, not measured on production; task 128 |
| DERIBIT-PERP | depth-derived (book bands) | on change | — | measured | publication | Public book channel emits full top-10 snapshots with venue update id change_id and a timestamp. The id may jump and does not count intervening updates or link deltas. Top-10 is not full-depth. |
| DERIBIT-PERP | funding (funding) | on change | — | documented | publication | Coinbase/Deribit migration documentation: continuous accrual and 8-hour-normalized published rate; no next settlement instant. |
| DERIBIT-PERP | mark (mark) | on change | — | measured | publication | Official Coinbase Derivatives ticker publishes mark_price and index_price with venue timestamps; mark is dated by that publication. |
| DERIBIT-PERP | open-interest (oi) | on change | — | measured | publication | Official Coinbase Derivatives public ticker carries open_interest and a venue timestamp. |
| DERIBIT-PERP | stats (stats) | on change | — | measured | publication | Official Coinbase Derivatives public ticker carries trailing 24-hour stats and a venue timestamp. |
| DERIBIT-PERP | ticker (ticker, book prices) | on change | — | measured | publication | Official Coinbase Derivatives public ticker channel observed on the authenticated-free gateway; venue timestamps are published with updates. 5-minute no-update threshold is conservative and not a venue guarantee. |
| DYDX-PERP | depth-derived (book bands) | stream | 250 ms | documented | none | WS v4_orderbook batches every 250 ms: dydx-perp.md:229; git c338165 |
| DYDX-PERP | funding (funding) | settle | the listing’s (registry) | measured | settlement | a settled rate, good until the next settlement: hourly settlement measured (dydx-perp.md:103), source_time is the settlement’s effectiveAt |
| DYDX-PERP | open-interest (oi) | on change | — | measured | none | WS v4_markets: the trading update comes every 30 s (49 in 25 minutes, 27.1-32.4 s, live 2026-10-01 11:24-11:49Z) but lists only the markets whose field changed: openInterest was listed for 4 of 25 assigned markets in 25 minutes, for the other 21 never after the reply; the value holds while the connection lives; no venue time in the frame; 0062 (on_change_hb, 30 s) rested on an adapter that republished the held value at each update, a forward fill under the tick’s clock, rolled back the same day (the republishing commit was f4ccb90); no_update after 24 h: a market’s figure is named only when it moves, and the quiet markets stand for hours with the connection alive: the longest spell without a new value, no break of the markets socket and no restart in it, 38 828 s (AVAX-USD, 2026-10-04 08:57-19:44Z), PEPE-USD (the least traded, USD 1 thousand a day) 35 045 s, BTC-USD 5 530 s, 2026-10-01 to 10-08; twice it is 21.6 h |
| DYDX-PERP | stats (stats) | on change | — | measured | none | the same trading update, carrying volume24H (the 24 h notional in USD): listed for 10 of 25 assigned markets in 25 minutes, for 15 never after the reply; the value holds while the connection lives; no venue time in the frame; was on_change_hb in 0062, see open interest; no_update after 36 h: the longest quiet spell 54 096 s (XLM-USD, USD 7 thousand a day, 2026-10-04 11:44Z to 10-05 02:45Z), UNI-USD 51 271 s, BTC-USD 1 834 s, 2026-10-01 to 10-08; twice it is 30.1 h |
| DYDX-PERP | ticker (ticker, book prices) | derived from depth-derived | — | documented | none | the host assembles the ticker from the book; git c338165 |
| EDGEX-PERP | depth-derived (book bands) | on change | — | measured | none | docs/engineering/venues/edgex-perp.md: 30-second BTC/ETH WS capture; no publication timestamp or fixed cadence. No-update threshold assumed 5 minutes, longer than the 30-second socket watchdog; not a measured guarantee. |
| EDGEX-PERP | funding (funding) | settle | the listing’s (registry) | documented | settlement | docs/engineering/venues/edgex-perp.md: metadata fundingRateIntervalMin per listing; settled ticker rate dated by fundingTime. |
| EDGEX-PERP | mark (mark) | on change | — | measured | none | docs/engineering/venues/edgex-perp.md: 30-second BTC/ETH WS capture; no publication timestamp or fixed cadence. No-update threshold assumed 5 minutes, longer than the 30-second socket watchdog; not a measured guarantee. |
| EDGEX-PERP | open-interest (oi) | on change | — | measured | none | docs/engineering/venues/edgex-perp.md: 30-second BTC/ETH WS capture; no publication timestamp or fixed cadence. No-update threshold assumed 5 minutes, longer than the 30-second socket watchdog; not a measured guarantee. |
| EDGEX-PERP | stats (stats) | on change | — | measured | none | docs/engineering/venues/edgex-perp.md: 30-second BTC/ETH WS capture; no publication timestamp or fixed cadence. No-update threshold assumed 5 minutes, longer than the 30-second socket watchdog; not a measured guarantee. |
| EDGEX-PERP | ticker (ticker, book prices) | derived from depth-derived | — | documented | none | docs/engineering/venues/edgex-perp.md: recorded ticker updates omit quotes; existing host builds ticker from live book and tape. Verified by 30-second live gate on five symbols, including reconnect. |
| GATE-PERP | depth-derived (book bands) | stream | 100 ms | measured | publication | WS futures.order_book, 100 levels without aggregation: a full book on each change, about every 100 ms (gate-perp.md, depth-raw; live 2026-09-30), dated by t; was REST order_book every 300 s; git d20998a |
| GATE-PERP | funding (funding) | stream | 13 s | assumed | publication | WS futures.tickers ≈1/s by the adapter (:14-15), not in the venue card; rows (OI) 10/13 s; git c4b1eda |
| GATE-PERP | mark (mark) | stream | 13 s | assumed | publication | the WS futures.tickers frame that carries the venue’s funding and open-interest (mark_price and index_price, dated by its t): their fact, ≈1/s by the adapter, not in the venue card; git 8599467 |
| GATE-PERP | open-interest (oi) | stream | 13 s | assumed | publication | WS futures.tickers ≈1/s by the adapter (:14-15), not in the venue card; rows (OI) 10/13 s; git c4b1eda |
| GATE-PERP | stats (stats) | stream | 13 s | assumed | publication | the WS futures.tickers frame that carries the venue’s funding, open-interest and mark (volumes, high, low, change, dated by its t): their fact, ≈1/s by the adapter, not in the venue card; git fbf7eb4 |
| GATE-PERP | ticker (ticker, book prices) | on change | — | assumed | publication | WS futures.book_ticker: every change of the best level (adapter :14); git c4b1eda; no_update after 10 min: the longest spell without a new value 185 s (TRX_USDT, the least traded of 25, 2026-10-06 15:16-15:19Z), no break in it, 2026-10-05 to 10-08; twice it is 370 s |
| GMX-PERP | funding (funding) | poll | 15 s | documented | none | REST arbitrum.gmxapi.io every 15 s, venue cache 0.3–1 s: gmx-perp.md:54; no venue time; git b49e1ee |
| GMX-PERP | mark (mark) | poll | 15 s | assumed | none | markPrice of the /markets/tickers message that carries the ticker, REST every 15 s (the adapter’s SnapshotIntervalSeconds): its fact (gmx-perp.md:54), not measured apart; no venue time; git 81af140 |
| GMX-PERP | open-interest (oi) | poll | 15 s | documented | none | REST arbitrum.gmxapi.io every 15 s, venue cache 0.3–1 s: gmx-perp.md:54; no venue time; git b49e1ee |
| GMX-PERP | stats (stats) | poll | 15 s | documented | none | REST arbitrum.gmxapi.io every 15 s, venue cache 0.3–1 s: gmx-perp.md:54; no venue time; git b49e1ee |
| GMX-PERP | ticker (ticker, book prices) | poll | 15 s | documented | none | REST arbitrum.gmxapi.io every 15 s, venue cache 0.3–1 s: gmx-perp.md:54; no venue time; git b49e1ee |
| HYPERLIQUID | depth-derived (book bands) | stream | 6 s | measured | publication | hyperliquid.md:97-101: the book per block, measured ≈5 s; rows 5/6 s; git 7724303 |
| HYPERLIQUID | funding (funding) | poll | 60 s | assumed | none | activeAssetCtx + REST predictedFundings every 60 s; its next_funding_at is in the past (a known defect) and is not used; git 7724303 |
| HYPERLIQUID | mark (mark) | on change | — | assumed | none | activeAssetCtx: cadence undocumented, looks like on change; no venue time in the frame; git 7724303; no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| HYPERLIQUID | open-interest (oi) | on change | — | assumed | none | activeAssetCtx: cadence undocumented, looks like on change; no venue time in the frame; git 7724303; no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| HYPERLIQUID | stats (stats) | on change | — | assumed | none | activeAssetCtx: cadence undocumented, looks like on change; no venue time in the frame; git 7724303; no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| HYPERLIQUID | ticker (ticker, book prices) | stream | 2500 ms | measured | publication | hyperliquid.md:64: bbo ≈7.9/s; production 24 h: rows 1.01/2.50 s (1 s window); git 7724303 |
| KRAKEN-FUTURES | depth-derived (book bands) | stream | 1 s | measured | publication | kraken-futures.md:151: ≈847 book frames/s; the host publishes depth-derived at most once a second; rows 1.00/1.00 s; git 2dfea5a |
| KRAKEN-FUTURES | funding (funding) | on change | — | measured | publication | the same ticker frame (kraken-futures.md:149), only on change; git 6ac5963; no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | mark (mark) | on change | — | measured | publication | the same ticker frame (kraken-futures.md:149), only on change; git 6ac5963; no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | open-interest (oi) | on change | — | measured | publication | the same ticker frame (kraken-futures.md:149), only on change; git 6ac5963; no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | stats (stats) | on change | — | measured | publication | the same ticker frame (kraken-futures.md:149); git 35c7fe7; no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | ticker (ticker, book prices) | on change | — | measured | publication | kraken-futures.md:149: the ticker frame, ≈3.25/s, only on change; production 24 h to 2026-09-29: rows 1.06/2.28 s; git d7f4d61; no_update after 10 min, as the rest of the ticker frame: the longest quiet spell 111 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 434 s inside the outage of 2026-10-06 07:00-07:08Z; the least traded none over 65 s, 2026-10-05 to 10-08 |
| LIGHTER-PERP | depth-derived (book bands) | on change | — | measured | publication | docs/engineering/venues/lighter-perp.md: Host-derived from snapshot/deltas: BTC 466 and ETH 436 updates in 30 seconds. No-update threshold assumed 5 minutes, longer than the 90-second watchdog; not a measured guarantee. |
| LIGHTER-PERP | funding (funding) | settle | the listing’s (registry) | documented | settlement | docs/engineering/venues/lighter-perp.md: https://docs.lighter.xyz/trading/funding: hourly settlement; funding_timestamp is its source time. |
| LIGHTER-PERP | mark (mark) | on change | — | measured | publication | docs/engineering/venues/lighter-perp.md: 30-second market_stats capture: BTC 30 and ETH 28 updates; no guaranteed fixed interval. No-update threshold assumed 5 minutes, longer than the 90-second watchdog; not a measured guarantee. |
| LIGHTER-PERP | open-interest (oi) | poll | 15 s | assumed | none | docs/engineering/venues/lighter-perp.md: REST orderBookDetails every 15 seconds, native quantity; no publication timestamp. |
| LIGHTER-PERP | stats (stats) | on change | — | measured | publication | docs/engineering/venues/lighter-perp.md: 24-hour statistics on the same captured market_stats channel. No-update threshold assumed 5 minutes, longer than the 90-second watchdog; not a measured guarantee. |
| LIGHTER-PERP | ticker (ticker, book prices) | on change | — | measured | publication | docs/engineering/venues/lighter-perp.md: 30-second WS capture: BTC 322 and ETH 492 ticker updates; no guaranteed fixed interval. No-update threshold assumed 5 minutes, longer than the 90-second watchdog; not a measured guarantee. |
| MEXC-PERP | depth-derived (book bands) | stream | 250 ms | measured | publication | WS sub.depth.full, 50 levels: a full book about every 250 ms (mexc-perp.md, live 2026-09-30); was REST every 600 s; git 5f61088 |
| MEXC-PERP | funding (funding) | on change hb | 60 s | measured | publication | WS sub.funding.rate: the first frame about 20 s after the subscription, then once a minute or on change (mexc-perp.md, live 2026-09-30), dated by the frame’s ts; was REST every 60 s; git 5f61088 |
| MEXC-PERP | mark (mark) | stream | 11400 ms | assumed | publication | the WS sub.ticker frame that carries the venue’s ticker (fairPrice and indexPrice, dated by the frame’s timestamp): its fact; git e473ed5 |
| MEXC-PERP | open-interest (oi) | stream | 11400 ms | assumed | publication | the WS sub.ticker frame that carries the venue’s ticker (holdVol, dated by the frame’s timestamp): its fact; git e473ed5 |
| MEXC-PERP | stats (stats) | stream | 11400 ms | assumed | publication | the WS sub.ticker frame that carries the venue’s ticker, mark and open-interest (volume24, amount24, high, low, dated by the frame’s timestamp): their fact; git ccb0c59 |
| MEXC-PERP | ticker (ticker, book prices) | stream | 11400 ms | assumed | publication | WS sub.ticker “several times a second”: the adapter (:12-13); rows 10.8/11.4 s; git f2cf05b |
| NADO-PERP | depth-derived (book bands) | stream | 12 s | assumed | publication | WS: undocumented; rows 10/12 s; git e071473 |
| NADO-PERP | funding (funding) | stream | 20 s | documented | none | recomputed ≈ every 20 s: nado-perp.md:210; source_time is the last settlement, so the value is dated by receipt; git e071473 |
| NADO-PERP | mark (mark) | poll | 15 s | assumed | none | REST /v2/contracts every 15 s (the adapter’s MarkPollIntervalSeconds); the page carries no venue time; not measured on production; git c4ce646 |
| NADO-PERP | open-interest (oi) | poll | 15 s | assumed | none | REST /v2/contracts every 15 s, the one cycle of mark, open interest and stats (the adapter’s ContractsPollIntervalSeconds); the page carries no venue time; not measured on production; was every 60 s; git 3d3a1b9 |
| NADO-PERP | stats (stats) | poll | 15 s | assumed | none | REST /v2/contracts every 15 s, the page that carries mark and open interest (the adapter’s ContractsPollIntervalSeconds); the page carries no venue time; not measured on production; git 3d3a1b9 |
| NADO-PERP | ticker (ticker, book prices) | derived from depth-derived | — | assumed | publication | the host assembles the ticker from the book; git e071473 |
| OKX-PERP | depth-derived (book bands) | stream | 130 ms | measured | publication | okx-perp.md:79: 148 frames in ≈19 s; git 187383c |
| OKX-PERP | funding (funding) | stream | 90 s | measured | publication | okx-perp.md:89,92: every 30–90 s; rows 60/86 s; git 187383c |
| OKX-PERP | mark (mark) | on change hb | 10 s | documented | publication | okx-perp.md:90-91: within 200 ms of a change, otherwise every 10 s; git 187383c |
| OKX-PERP | open-interest (oi) | stream | 20 s | assumed | publication | WS open-interest: undocumented; rows 13.2/20.0 s; git 187383c |
| OKX-PERP | stats (stats) | stream | 150 ms | assumed | publication | the tickers channel that carries the venue’s ticker (vol24h, open24h, high24h, low24h, dated by the frame’s ts): its fact (okx-perp.md:71, ≈6.5 frames/s), not measured apart; git 6765c89 |
| OKX-PERP | ticker (ticker, book prices) | stream | 150 ms | measured | publication | okx-perp.md:71: ≈6.5 frames/s; git 187383c |
| OKX-SPOT | depth-derived (book bands) | on change | — | documented | publication | WS books: incremental data is pushed every 100 ms for the changes in the order book during that period (docs ws order book channel), a book that did not change pushes nothing; okx-spot.md: 620 frames in 75 s on BTC-USDT, mean 119 ms, longest silence 0.60 s; git 926ab2d; no_update after 5 min, as the ticker: the book moves whenever its best level does, so it is never quieter than the ticker; its bands are not kept in history at the listings’ group to measure apart |
| OKX-SPOT | stats (stats) | on change | — | documented | publication | the same tickers frame as the ticker layer (okx-spot.md), only on change; git 926ab2d; no_update after 5 min: the longest spell 74 s, inside a bus outage (2026-10-07 19:42Z), none over 65 s (the history window) without one, the least traded of 10 included, 2026-10-05 to 10-08; twice it is 148 s |
| OKX-SPOT | ticker (ticker, book prices) | on change | — | documented | publication | WS tickers: the fastest rate is 1 update per 100 ms and there is no update when nothing triggered one, a trade or a change of the best bid or ask (docs ws tickers channel); okx-spot.md: 468 frames in 75 s on BTC-USDT, longest silence 0.48 s, 370 on LINK-USDT, 0.70 s; git 926ab2d; no_update after 5 min: the longest spell without a new value 41 s over 10 listings, the least traded (LTC-USDT) included, 2026-10-05 to 10-08; twice it is 82 s |
| SYNTHETIX-PERP | depth-derived (book bands) | stream | 35 s | assumed | publication | WS: undocumented, a thin book; rows 10/35 s; git 6756c33 |
| SYNTHETIX-PERP | funding (funding) | stream | 1 s | measured | publication | WS marketPrices ≈1/s: synthetix-perp.md:96; git 6756c33 |
| SYNTHETIX-PERP | mark (mark) | stream | 1 s | measured | publication | WS marketPrices ≈1/s: synthetix-perp.md:96; git 6756c33 |
| SYNTHETIX-PERP | open-interest (oi) | poll | 15 s | measured | publication | REST every 15 s; rows 15.0/15.3 s; git e3c946c |
| SYNTHETIX-PERP | stats (stats) | poll | 15 s | measured | publication | REST every 15 s; rows 15.0/15.3 s; git e3c946c |
| SYNTHETIX-PERP | ticker (ticker, book prices) | derived from depth-derived | — | assumed | publication | the host assembles the ticker from a thin book; git 6756c33 |
| WEEX-FUTURES | depth-derived (book bands) | stream | 10 s | assumed | publication | WS depth200: undocumented; rows 10/10 s (10 s window); git 581b41f |
| WEEX-FUTURES | funding (funding) | poll | 60 s | measured | none | REST every 60 s (F-01); rows 60/61 s; git f4e309c |
| WEEX-FUTURES | mark (mark) | stream | 10 s | assumed | publication | moved from the REST /tickers poll to the ticker channel that carries stats (m and i, dated by E), so it has the fact of stats: a frame about every 0.6 s (weex-futures.md), interval as depth-derived, not measured on production; git ed1c5f2 |
| WEEX-FUTURES | open-interest (oi) | poll | 300 s | measured | none | REST every 300 s; rows 300/304 s; git 581b41f |
| WEEX-FUTURES | stats (stats) | stream | 10 s | assumed | publication | the ticker channel of the v3 socket (weex-futures.md: a frame about every 0.6 s, dated by E); interval as the venue’s other push layer, depth-derived (the 10 s history window), not measured on production; git 0cf2f5a |
| WEEX-FUTURES | ticker (ticker, book prices) | derived from depth-derived | — | assumed | publication | the host assembles the ticker from the book; git 43a01e7 |
Values pushed only on change
Section titled “Values pushed only on change”35 pairs come only when the value changes, and their horizon is the connection. Each has a no-update
threshold: how long its anchor (anchor above) may stand still on a live connection before the value is stale,
no_update. It is measured on production per pair, from the longest spell any listing of the pair went without a new
value over several days — breaks of the connection set aside — and checked against the least traded listings
collected, so that a quiet market that is alive is not called stale; what each rests on is in its row. The socket a
value comes on is watched as well: when nothing at all arrives on it — no data, no reply, no heartbeat of the venue, no
answer to our keepalive — for longer than the venue guarantees it speaks (silent socket after), the collector treats
it as lost and reconnects, and every value on it is connection_lost, not no_update. A protocol-level ping of the
venue does not count: it never reaches the collector. —: the socket is not watched.
| venue | dataset (layer) | no-update threshold | silent socket after | what the threshold rests on |
|---|---|---|---|---|
| ASTER-PERP | stats (stats) | 6 h | 60 s | no_update after 6 h: the longest spell without a new value, no break of the connection and no restart in it, 7 681 s (TRXUSDT, the least traded of 26 at USD 61 thousand a day, 2026-10-03 02:38-04:46Z; 59 spells over 30 minutes of TRXUSDT alone, and every spell that long is of a listing under USD 1.5 million a day; BTCUSDT and ETHUSDT none over 65 s), 2026-10-01 to 10-08; twice it is 4.3 h |
| ASTER-PERP | ticker (ticker, book prices) | 1 h | 60 s | no_update after 1 h: the longest quiet spell 1 595 s (TRXUSDT, the least traded, 2026-10-04 02:31-02:58Z; DOTUSDT, the next, 240 s), 2026-10-01 to 10-08; twice it is 53 minutes |
| BINANCE-SPOT | depth-derived (book bands) | 5 min | 60 s | no_update after 5 min, as the ticker: the top twenty moves whenever the best level does (it is the same book), so it is never quieter than the book ticker; its bands are not kept in history at the listings’ group to measure apart |
| BINANCE-SPOT | stats (stats) | 5 min | 60 s | no_update after 5 min: the longest spell without a new value 115 s (HYPEUSDC, the least traded of 12, 2026-10-07 22:54Z), no break in it, 2026-10-05 to 10-08; twice it is 230 s |
| BINANCE-SPOT | ticker (ticker, book prices) | 5 min | 60 s | no_update after 5 min: the longest spell 103 s, inside a bus outage (2026-10-07 12:19Z), 74 s without one (HYPEUSDC, the least traded of 12), 2026-10-05 to 10-08; twice it is 206 s |
| BINANCE-USDM | ticker (ticker, book prices) | 5 min | 60 s | no_update after 5 min: the longest spell without a new value 58 s over 44 listings (BCHUSDC, the least traded at USD 6 million a day, among them), 2026-10-05 to 10-08; twice it is 116 s |
| BYBIT-SPOT | stats (stats) | 5 min | 60 s | no_update after 5 min: the longest spell 79 s, inside a bus outage (2026-10-06 13:20Z), none over 65 s (the history window) without one, the least traded of 10 included, 2026-10-05 to 10-08; twice it is 158 s |
| DERIBIT-PERP | depth-derived (book bands) | 5 min | 60 s | — |
| DERIBIT-PERP | funding (funding) | 5 min | 60 s | — |
| DERIBIT-PERP | mark (mark) | 5 min | 60 s | — |
| DERIBIT-PERP | open-interest (oi) | 5 min | 60 s | — |
| DERIBIT-PERP | stats (stats) | 5 min | 60 s | — |
| DERIBIT-PERP | ticker (ticker, book prices) | 5 min | 60 s | — |
| DYDX-PERP | open-interest (oi) | 24 h | 120 s | no_update after 24 h: a market’s figure is named only when it moves, and the quiet markets stand for hours with the connection alive: the longest spell without a new value, no break of the markets socket and no restart in it, 38 828 s (AVAX-USD, 2026-10-04 08:57-19:44Z), PEPE-USD (the least traded, USD 1 thousand a day) 35 045 s, BTC-USD 5 530 s, 2026-10-01 to 10-08; twice it is 21.6 h |
| DYDX-PERP | stats (stats) | 36 h | 120 s | no_update after 36 h: the longest quiet spell 54 096 s (XLM-USD, USD 7 thousand a day, 2026-10-04 11:44Z to 10-05 02:45Z), UNI-USD 51 271 s, BTC-USD 1 834 s, 2026-10-01 to 10-08; twice it is 30.1 h |
| EDGEX-PERP | depth-derived (book bands) | 5 min | 30 s | — |
| EDGEX-PERP | mark (mark) | 5 min | 30 s | — |
| EDGEX-PERP | open-interest (oi) | 5 min | 30 s | — |
| EDGEX-PERP | stats (stats) | 5 min | 30 s | — |
| GATE-PERP | ticker (ticker, book prices) | 10 min | 60 s | no_update after 10 min: the longest spell without a new value 185 s (TRX_USDT, the least traded of 25, 2026-10-06 15:16-15:19Z), no break in it, 2026-10-05 to 10-08; twice it is 370 s |
| HYPERLIQUID | mark (mark) | 5 min | 90 s | no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| HYPERLIQUID | open-interest (oi) | 5 min | 90 s | no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| HYPERLIQUID | stats (stats) | 5 min | 90 s | no_update after 5 min: the longest spell 120 s, every listing at once (2026-10-08 17:58-18:00Z), none over 65 s (the history window) otherwise, the least traded of 25 (TRX) included, 2026-10-05 to 10-08; twice it is 240 s |
| KRAKEN-FUTURES | funding (funding) | 10 min | 60 s | no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | mark (mark) | 10 min | 60 s | no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | open-interest (oi) | 10 min | 60 s | no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | stats (stats) | 10 min | 60 s | no_update after 10 min: the longest spell without a new value, no break and no restart in it, 157 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 462 s inside the outage of 2026-10-06 07:00-07:08Z (bus_unavailable, ws_disconnected); the least traded (PF_GBPUSD, PF_CHFUSD, no volume) none over 65 s, 2026-10-05 to 10-08; twice it is 314 s |
| KRAKEN-FUTURES | ticker (ticker, book prices) | 10 min | 60 s | no_update after 10 min, as the rest of the ticker frame: the longest quiet spell 111 s (PF_USDCUSD, 2026-10-05 02:44Z) over 198 listings, 434 s inside the outage of 2026-10-06 07:00-07:08Z; the least traded none over 65 s, 2026-10-05 to 10-08 |
| LIGHTER-PERP | depth-derived (book bands) | 5 min | 90 s | — |
| LIGHTER-PERP | mark (mark) | 5 min | 90 s | — |
| LIGHTER-PERP | stats (stats) | 5 min | 90 s | — |
| LIGHTER-PERP | ticker (ticker, book prices) | 5 min | 90 s | — |
| OKX-SPOT | depth-derived (book bands) | 5 min | 45 s | no_update after 5 min, as the ticker: the book moves whenever its best level does, so it is never quieter than the ticker; its bands are not kept in history at the listings’ group to measure apart |
| OKX-SPOT | stats (stats) | 5 min | 45 s | no_update after 5 min: the longest spell 74 s, inside a bus outage (2026-10-07 19:42Z), none over 65 s (the history window) without one, the least traded of 10 included, 2026-10-05 to 10-08; twice it is 148 s |
| OKX-SPOT | ticker (ticker, book prices) | 5 min | 45 s | no_update after 5 min: the longest spell without a new value 41 s over 10 listings, the least traded (LTC-USDT) included, 2026-10-05 to 10-08; twice it is 82 s |
Ages counted from our receipt
Section titled “Ages counted from our receipt”31 pairs count a value’s age from our receipt, because the venue’s timestamp, where it sends one, dates
something other than the value (venue time dates: none above): ASTER-PERP open-interest, AVANTIS-PERP funding, AVANTIS-PERP open-interest, AVANTIS-PERP venue-depth, BINANCE-SPOT depth-derived, BINANCE-SPOT ticker, DYDX-PERP depth-derived, DYDX-PERP open-interest, DYDX-PERP stats, DYDX-PERP ticker, EDGEX-PERP depth-derived, EDGEX-PERP mark, EDGEX-PERP open-interest, EDGEX-PERP stats, EDGEX-PERP ticker, GMX-PERP funding, GMX-PERP mark, GMX-PERP open-interest, GMX-PERP stats, GMX-PERP ticker, HYPERLIQUID funding, HYPERLIQUID mark, HYPERLIQUID open-interest, HYPERLIQUID stats, LIGHTER-PERP open-interest, NADO-PERP funding, NADO-PERP mark, NADO-PERP open-interest, NADO-PERP stats, WEEX-FUTURES funding, WEEX-FUTURES open-interest.
Every other pair counts from the venue’s timestamp, and falls back to our receipt only for a value that arrives
without one.
The -SPOT venues are collected and shown in the site and /v2 market-data endpoints. Since change set 37,
/v2/venues, /v2/instruments and measurement requests support kind=spot or kind=all; DQL and Agent
remain perpetual-only. The retired public market-data /v1 routes no longer serve these rows.
The history before 2026-09-26 is covered by facts reconstructed from the platform’s own record of how each venue was collected, labelled assumed; the page shows the version in force now.