Skip to main content
Omnibook runs nine recurring binary series in parallel — BTC, gold, and WTI crude, each at 60-second, 5-minute, and 15-minute cadences. One round is open for trading at a time per series. Understanding when orders are accepted — and when they are cancelled for you — is essential for bot design.

Round timeline

When a round freezes, anything still resting on the book is cancelled for you by the venue. You do not need to cancel manually unless you want out earlier.
Gotchas that look like bugs
Find a live slot:
A status of trading means the round accepts orders. Anything else returns 409 with a market-state error (market_frozen, trading_paused, etc.). GET /v1/rounds?limit=1 is newest round_number first — it may already be frozen. See Rounds and markets.

No exchange-wide kill switch (v1)

GET /v1/exchange/status returns exchange_active: true always in v1. There is no working exchange-wide pause flag yet. Operational pauses are per-round - watch round status, not exchange_active.

Market hours: gold and crude are not 24/7

BTC trades continuously. The commodity series do not. When a session closes, the upstream price feed stops publishing and the venue stops opening new rounds for every series on that feed. The round that was already trading freezes and settles normally — a close never strands an open round or a resting order.
There is no session calendar on the API. GET /v1/exchange/schedule lists venue maintenance windows, not market hours. The venue reacts to the feed actually being dark rather than trusting a hardcoded timetable, which also covers upstream outages.
The liveness check is the zero sentinel on the asset’s feed:
price: "0" is a normal 200, not an error. Treat it as “this asset is not opening rounds right now” and stop expecting new slots in categories 4–6. A bot that runs across assets should gate its per-series loop on this rather than on a clock. See Series, assets, and categories.

cancel_on_pause

Set cancel_on_pause: true on orders you do not want to survive a pause:
Without it, resting orders remain until the round freezes (when the venue cancels them) or you cancel explicitly.

Cancel-all

Cancel every open order across all markets:
The body must be empty. A non-empty body returns 400 unexpected_body, this is deliberate. A batch-cancel request that loses its /batch path segment must not wipe your entire book.
Cancel-all charges one write token per cancelled order (same as individual cancels).

Batch cancel

Cancel up to 20 orders by id:
Body: { "order_ids": ["16777291", "16777292"] }.

WebSocket round events

Subscribe to the global rounds channel for live lifecycle events (create, open, freeze, settle). It carries all nine series on one subscription — filter frames on category. See Channels.