Crypto market data at a point in time: what was known then.
A backtest, an audit or a post-mortem needs the market as it could be seen at a moment, not as it is known today. DEBYKO answers that question directly.
A table of last values, rebuilt later, is not what anyone saw.
Values arrive late, feeds stall, venues halt. A history rebuilt from the latest copy of each value mixes readings that arrived after the moment with readings that were already stale at it. The answer looks complete, and it is not what a system running at that moment could have read.
Every answer can be asked as of an instant.
- History is stored as it arrived: each value keeps the venue's own timestamp and the time DEBYKO received it.
- A question as of T uses only what had arrived by T, and judges each value at T by the rule a live answer uses: past its horizon it is stale, with the reason.
- A listing the venue had halted at T is stale with reason halted in every layer, so a frozen quote is never read as a price.
- A period nobody published comes back as a gap with its cause, never filled from the value before it.
- Each answer carries served_at and a receipt_id; asking again with at set to that served_at returns what the answer showed, once the instant is settled.
One listing, two instants, either side of a halt.
Coinbase International stopped trading every perpetual at 09:00:29 UTC on 2026-10-01. Its API kept answering with the last quote, and DEBYKO kept receiving it once a second. Below is the mark price of its BTC-PERP asked as of one minute before the halt and half an hour after it, with POST /v2/snapshots/history on 2026-10-08. Now, at 19:48:34 UTC, the same listing is halted, its mark last dated by the venue 2026-10-01 09:00 UTC, 8 d 10 h ago.
| As of (UTC) | Status | Mark | Index | Venue time | Received | Age |
|---|---|---|---|---|---|---|
| 2026-10-01 08:59:00 | present | 83,613.5 | 83,507.3 | 08:58:58.343 | 08:58:59.272 | 1.7 s |
| 2026-10-01 09:30:00 | stale · halted | — | — | 09:00:29.114 | 09:29:59.185 | 29 m 31 s |
The same question in three places.
The API, with a key:
curl -s https://api.debyko.com/v2/snapshots/history \
-H "authorization: Bearer $DEBYKO_KEY" -H 'content-type: application/json' \
-d '{"where":"venue = COINBASE-INTX and base = BTC","layers":["mark"],"at":["2026-10-01T08:59:00Z","2026-10-01T09:30:00Z"]}'
DQL, on POST /v2/screen. As of 08:59 BTC-PERP matches, with funding_8h 0.0592% from COINBASE-INTX; as of 09:30 the same query returns no instrument, because the halted rate is not counted.
count(venues where funding_8h > 0) >= 1 as of 2026-10-01T08:59:00Z where base = BTC and venue = COINBASE-INTX
MCP, the history tool:
{"where": "venue = COINBASE-INTX and base = BTC", "layers": ["mark"], "at": ["2026-10-01T08:59:00Z", "2026-10-01T09:30:00Z"]}
What it does not do.
- History starts at each listing's first stored value: every answer gives retention_from per layer (this listing's mark: 2026-09-30 21:54 UTC).
- How far back a key may ask depends on its plan: Free 7 days, Mini 30 days, Standard 365 days, Pro and Pro Plus: all of it.
- Order books are not served through history: it keeps the measures taken from the book, not its levels.
- An instant that is too recent is not settled yet: a late arrival can still change the answer, and every answer says settled true or false.