Skip to main content
Omnibook runs nine recurring series in parallel — BTC, gold, and WTI crude, each at 60-second, 5-minute, and 15-minute cadences. Every series is an independent book. A round fixes a strike, trades for its cadence, then freezes and settles against a TWAP of that series’ oracle feed. Which series a round belongs to is its category (1–9). See Series, assets, and categories for the full table and the discovery calls.

Lifecycle

Anything still resting when a round freezes is cancelled for you.

Cadence

Cadence is per series, not global: 60 seconds, 5 minutes, or 15 minutes depending on category. Rounds are aligned to the wall clock, not to their own open. A 60-second round opens in the first few seconds of a Unix minute (:00) and freezes when the clock enters the next minute — not at open_ts + 60s. If an open lands a few milliseconds after :00.000, freeze is still the following :00.000. The 5-minute and 15-minute series work the same way against their own boundaries. Do not derive the cadence from open_ts deltas. Map it from category.

round_number vs market_id

market_id is recycled. round_number is not.The venue draws market_id from a small pool and reuses values as rounds complete, so the same market_id will refer to a different round later. It is the parameter that order and orderbook endpoints take, but it is not an identity.Key your own state, open orders, positions, PnL history, on round_number, which is monotonic and never reused. Re-read the round before acting on a cached market_id, or you will eventually place an order on the wrong round.

Prices

strike and settle_price are integers in units of 1e-8 USD, as decimal strings. A strike of 6399240000000 is 63,992.40(BTC);‘424518000000‘is63,992.40 (BTC); `424518000000` is 4,245.18 (gold); 6231000000 is $62.31 (crude). The magnitudes differ by orders of magnitude across assets, so scale by 1e8 and never infer the asset from the size of the number. Contract prices are different: integer pip ticks from 1 to 9999 (0.01¢). 3500 is 35.00¢. Cash and max_cost are pips too. See Ticks, pips, and subcents.

Settlement

At freeze, the round’s settle price is a true time-weighted average (TWAP) of the sequenced oracle price for that round’s own feed over the last N seconds of the round (default N = 10; the window is per-series and each round row exposes the resolved twap_window_secs). A gold round settles against gold, never against BTC. winner becomes "yes" if that TWAP is strictly above the strike, "no" otherwise (exact equality settles "no"). Winning contracts pay 10,000 pips ($1); losing ones pay 0. yes_payout is 0 or 100 — cents of a $1 contract, not a pip tick. fresh_source_count_at_freeze reports how many independent price sources were live at freeze, useful if you want to weight your confidence in a settlement.

Reading rounds

GET /v1/rounds?limit=1 is not “the current round”. The list is newest round_number first, interleaved across all nine series, so the top row is whichever series opened most recently — and it may already be frozen or settled while other slots are still trading. Prefer GET /v1/markets?status=trading.

Categories

category groups rounds into series — nine of them, three assets × three cadences: It is on every round object and every rounds WebSocket frame, and it filters GET /v1/rounds?category=. category: 0 means unclassified, not “all” — omit the parameter to ask for everything.
The market object has no category. To learn which series a market_id belongs to, read its round. Full details and the matching oracle feed ids are in Series, assets, and categories.