> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnibook.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Pauses and rounds

> 60-second rounds, freeze, cancel_on_pause, and cancel-all.

Omnibook runs continuous 60-second binary rounds on the BTC price. 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

| Phase          | `status`                         | Orders accepted? |
| -------------- | -------------------------------- | ---------------- |
| Trading window | `trading`                        | **Yes**          |
| Freeze         | `frozen`                         | No               |
| Settlement     | `proposed` → `settled` or `void` | No               |

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.

<Warning>
  **Gotchas that look like bugs**

  | Situation                          | What actually happens                                                   |
  | ---------------------------------- | ----------------------------------------------------------------------- |
  | Place after freeze                 | `409` (`market_frozen` / `trading_paused` / …) — move to the next round |
  | Rely on `exchange_active`          | Always `true` in v1 — watch round `status` instead                      |
  | Cancel-all with a JSON body        | `400 unexpected_body` — body must be empty                              |
  | Expect resting orders after freeze | Venue cancels them; fold the `user` channel or re-list                  |
</Warning>

Find the active round:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
GET /v1/rounds?limit=1
```

A `status` of `trading` means the round accepts orders. Anything else returns
`409` with a market-state error (`market_frozen`, `trading_paused`, etc.).

## 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`.

## `cancel_on_pause`

Set `cancel_on_pause: true` on orders you do not want to survive a pause:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "client_order_id": "42",
  "market_id": 66,
  "side": "buy",
  "outcome": "yes",
  "type": "limit",
  "tick": 47,
  "qty": 500,
  "tif": "gtc",
  "cancel_on_pause": true
}
```

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:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
DELETE /v1/portfolio/orders
```

<Warning>
  **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.
</Warning>

Cancel-all charges one write token per cancelled order (same as individual
cancels).

## Batch cancel

Cancel up to 20 orders by id:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
DELETE /v1/portfolio/orders/batch
```

Body: `{ "order_ids": ["16777291", "16777292"] }`.

## WebSocket round events

Subscribe to the global `rounds` channel for live lifecycle events (`create`,
`open`, `freeze`, `settle`). See [Channels](/websocket/channels).

## Related

* [Rounds and markets](/concepts/rounds-and-markets) — identifiers and settlement
* [Place your first order](/quickstart/place-order) — order flags and cancel paths
* [Changelog](/changelog) — cancel-all empty-body requirement
