Skip to main content
This walks through the calls every integration starts with: is the venue up, what is trading, and which asset is it. All are read-scope, so they work with any key. All responses below are real, captured from production.

Is the exchange open?

v1 always returns exchange_active: true. No exchange-wide pause control exists yet, so this field is not a working kill switch, do not gate trading on it. Trading pauses are per-round: when a round’s status leaves trading, new orders are rejected (market_frozen, trading_paused, etc.). Use cancel_on_pause on resting orders, or cancel explicitly before a round freezes. See Pauses and rounds. as_of_seq is the sequencer position the answer was computed at. It appears on every read. Two responses with the same as_of_seq describe exactly the same state, which is what lets you tell “nothing changed” from “I asked too early”.
as_of_seq restarts from a low number when the venue restarts. It is a position within the current session, not a global counter, do not persist it or assume it only ever increases. Use round_number for ordering across restarts.

What is trading right now?

Omnibook runs nine recurring series in parallel — BTC, gold (XAU), and WTI crude, each at 60-second, 5-minute, and 15-minute cadences. One round is open for trading at a time per series, so expect up to nine live markets at once. Do not use GET /v1/rounds?limit=1 as “the live round”. That list is newest round_number first, interleaved across all nine series, and may be frozen or settled while other slots are still trading. Find live slots, then read the round row:
Then the round object:
The fields that matter:
  • market_id, what you pass to order and orderbook endpoints. It is recycled across rounds, so never cache it as an identifier for a round.
  • round_number, monotonic and never reused. This is the stable identity.
  • status - trading accepts orders. frozen does not. settled is done.
  • strike, the price to beat for this round’s asset, in units of 1e-8 USD. The value above is $63,992.40.
  • category, which of the nine series this round belongs to — 1 above is BTC 60-second. This is the only field that tells you the asset; the market object does not carry it. See Series, assets, and categories.
  • winner — null until settlement, then "yes" or "no".
  • tick_size — rest grid. Ticks are pips (2400 = 24.00¢). See Ticks, pips, and subcents.
market_id is drawn from a small recycled pool. Two different rounds will reuse the same market_id over time. Always key your own state on round_number, and re-read the round before acting on a cached market_id.A recycled slot can come back in a different series, so a cached market_id → asset mapping goes stale the same way.

Which asset is which?

category is the series id. Nine of them are live: To pull one series’ history directly, filter the rounds list:
And to read an asset’s live reference price, scope the oracle by feed (0 = BTC, 1 = gold, 2 = WTI):
price: "0" is not an error — it means that feed has no valid tick, which is what a closed session looks like. Gold and crude are not 24/7. See Series, assets, and categories.

Paging

List endpoints return a cursor. Pass it back as ?cursor= to get the next page; an empty cursor means there are no more results.
GET /v1/rounds is useful for history (newest round_number first). For the live book, start from GET /v1/markets?status=trading.

Complete script

Self-contained, paste your key and secret, then run:

Next

Read Ticks, pips, and subcents, then Place your first order.