Resolved Markets logoResolved Markets logo
Abstract blue gradient background with a soft light streakAbstract blue gradient background with a soft light streak
Data

One schema, four coins, four timeframes

BTC, ETH, SOL and XRP across 5m, 15m, 1h and 1d markets, all keyed the same way, all the same snapshot fields. Here is how the dataset is structured so one loader can serve every asset and timeframe.

8 min read · Updated Jun 22, 2026

  • BTC · ETH · SOL · XRPAssets
  • 5m · 15m · 1h · 1dTimeframes
  • UP + DOWN eachTokens
  • UniformSchema

The crypto dataset is a grid: four coins by four timeframes, each cell a stream of full-depth order-book snapshots. The reason a single loader can walk the entire grid is that every market is keyed the same way and every snapshot carries the same fields. Learn the keying once and the whole panel opens up.

A cross-asset panel only works if the pieces fit together without bespoke handling. Here the pieces are uniform by design: BTC, ETH, SOL and XRP each run on 5m, 15m, 1h and 1d cadences, every market resolves to a condition id, and every snapshot has identical fields regardless of which coin or timeframe produced it.

How a market is keyed

conditionId

The canonical 0x identifier for a market. Everything, snapshots, summaries, orderbooks, hangs off this key.

  • 0x condition id
  • Stable across queries
  • The real primary key

UP + DOWN tokens

Each market has two tradable tokens with their own books. You query a side explicitly when pulling history.

  • Two tokens per market
  • side = UP or DOWN
  • Separate ladders

Human-friendly slug

A slug like btc-updown-5m is the readable alias. Resolve it to a conditionId before pulling data.

  • btc-updown-5m
  • by-slug lookup
  • Alias, not the key

The slug is convenient but the conditionId is canonical. A typical loader takes a slug, resolves it once to a conditionId, then issues every subsequent request against that id, so a renamed or re-listed slug never breaks the pull.

Enumerating the grid

You do not hard-code market ids. Two endpoints enumerate the grid for you: one for what is trading now, one for what has already closed. Closed markets stay queryable, so an enumeration over history has no survivorship bias, the markets that resolved and disappeared from the live list are still there to pull.

  1. 1Call /v1/markets/live to enumerate every currently active crypto market across all four coins and timeframes.
  2. 2Call /v1/markets/history/recent to pull markets that have already closed, these remain in the archive, not dropped.
  3. 3For each market, resolve the slug to a conditionId if you started from a slug, then note its UP and DOWN tokens.
  4. 4Iterate the conditionIds, pulling /v1/markets/:id/snapshots per side, the same call shape for every cell of the grid.

Why one loader serves everything

  • best_bidbest_askTouch, identical across coins
  • mid_pricespreadDerived fields, pre-computed
  • bid_depth_totalask_depth_totalResting size per side
  • bids[] · asks[]Full ladder when include_book is set

Because a SOL 1h snapshot has the same columns as a BTC 5m snapshot, the parsing code is written once. The only things that vary between cells of the grid are the conditionId you point at and the cadence of the underlying market. That uniformity is what turns four-by-four into a single tidy panel.

No survivorship bias

Closed markets stay in the archive

Short-dated crypto markets resolve constantly. If only the survivors were queryable, any cross-asset study would be skewed toward markets that happened to stay open. Because closed markets remain queryable through the history endpoint, you can enumerate the full population, winners and losers alike.

Building a cross-asset panel

  • Tag every row with its coin, timeframe and side so the flattened panel stays self-describing after the join.
  • Align across coins on timestamp, all feeds are UTC at millisecond precision, so a common time index lines them up.
  • Treat 5m and 1d markets differently in analysis: they share a schema but a 5m market churns through far more conditionIds over a week.
  • Remember depth is resting size, not executed volume, uniform across coins, but still a proxy for intent, not fills.
Four coins, four timeframes, one schema. The grid is large, but you only ever learn to read one snapshot.

Walk the whole grid

The dashboard shows every live crypto market; the docs cover the enumeration and snapshot endpoints you loop over.

Frequently asked questions