Stale dataSnapshot at 19:46:55 UTC

Stale market data is answered as stale.

A venue that stops publishing does not stop answering. DEBYKO tells a current value from a frozen one by the venue's own timestamp, and says which it is.

The problem

A frozen quote looks like a live one.

When a venue halts trading or its feed stalls, its API often keeps returning the last values. A collector that polls every two seconds receives them every two seconds, so by its own clock they are fresh. Shown as live, the frozen venue ends up at the edge of every cross-venue comparison: the highest funding, the widest spread.

How DEBYKO behaves

One age, one status, one reason.

  • Age is counted from the venue's own timestamp, and from DEBYKO's receipt only where the venue publishes none.
  • Each layer has a horizon. Polled layers: twice their interval. Layers a venue pushes only when they change: a quiet limit per venue, past which the value is no_update. Funding: its next settlement plus the grace period. Past its horizon a value is stale and leaves the value field.
  • Every value has one of five statuses: present, stale, missing, not_published, off. A stale value says why: horizon_passed, connection_lost, no_update, state_lag, source_error, horizon_unknown, freshness_bound or halted.
  • A stale value takes no part in a comparison: max, min and count across venues leave it out.
  • allow_stale returns the value under withheld, for a post-mortem, never in the value field.
Live example

COINBASE-INTX, halted since 2026-10-01 09:00 UTC.

COINBASE-INTX stopped trading its 24 collected listings at 2026-10-01 09:00 UTC. Its values are still there; below is what DEBYKO holds for its BTC-PERP right now, layer by layer, as the snapshot gives it. Every layer is stale, with the reason, and no layer is shown as a price.

COINBASE-INTX · BTC-PERPGET /v1/snapshot at 19:46:55 UTC
LayerStatusReasonAge, from the venue's timeLast dated by the venue
fundingstalehalted8 d 10 h2026-10-01 09:00 UTC
markstalehalted8 d 10 h2026-10-01 09:00 UTC
oistalehalted8 d 10 h2026-10-01 09:00 UTC
statsstalehalted8 d 10 h2026-10-01 09:00 UTC
tickerstalehalted8 d 10 h2026-10-01 09:00 UTC
The venue's API still answers with these values. A collector that polls it receives them every few seconds, so by its own clock they are fresh; by the venue's own timestamp they are days old.
Every venue · GET /v1/statusStatus at 19:46:55 UTC
VenueValues presentValues staleStale reasonsListings halted
ASTER-PERP14977 connection_lost0
AVANTIS-PERP1350—0
BINANCE-USDM2183434 state_lag0
BITGET-PERP1500—0
BYBIT-PERP2580—0
COINBASE-INTX00—24
DYDX-PERP1250—0
GATE-PERP1440—0
GMX-PERP2160—0
HYPERLIQUID1440—0
KRAKEN-FUTURES5880—0
MEXC-PERP2640—0
NADO-PERP1200—2
OKX-PERP1740—0
SYNTHETIX-PERP5822 horizon_passed0
WEEX-FUTURES1620—0
A value is one layer of one collected listing. A halted listing is counted apart: its values are not stale by accident, the venue stopped them.
API, DQL and MCP

What the API says about it.

The API, with a key. The rate is not in the answer, only its status, reason and dates (an answer of 2026-10-09):

curl -s https://api.debyko.com/v2/snapshots \
  -H "authorization: Bearer $DEBYKO_KEY" -H 'content-type: application/json' \
  -d '{"where":"venue = COINBASE-INTX and base = BTC","layers":["funding"]}'

"funding": {"status": "stale", "reason": "halted", "venue_ts": "2026-10-01T09:00:00Z",
            "valid_until": "2026-10-01T10:05:00Z", "anchor": "venue", "values": {}}

DQL: the BTC and ETH perpetuals where at least one venue's funding is stale.

any(venues where status(funding) = stale) where base in (BTC, ETH)

MCP, the snapshots tool:

{"where": "venue = COINBASE-INTX and base = BTC", "layers": ["funding"]}
Limits

What it does not do.

  • DEBYKO does not guess that a venue is down. It reads each value's timestamp and the venue's own word on the listing; a venue that keeps sending new timestamps with unchanged values is current.
  • Where a venue publishes no timestamp for a layer, age is counted from receipt, so a frozen value it keeps answering to polls looks current until its requests fail. Those venues and layers are listed on Freshness and cadence.
  • The horizons are the platform's. A query can be stricter with freshness, which gives freshness_bound.
Notes

From our notes.