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

# Channels

> Three public feeds and one private one.

| Channel           | Needs        | Carries                                 |
| ----------------- | ------------ | --------------------------------------- |
| `orderbook_delta` | `market_ids` | L2 snapshot, then level deltas          |
| `trades`          | `market_ids` | Public tape                             |
| `ticker`          | `market_ids` | Conflated display feed                  |
| `user`            | —            | Your orders, fills, positions, balances |

## `orderbook_delta`

The first message per market is a full `orderbook_snapshot`. After that you get
deltas:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{ "market_id": 66, "side": "yes", "tick": 47, "qty": 1450, "seq_ref": "…" }
```

<Note>
  `qty` is the **new aggregate** at that price level, not a change to apply. Set
  the level to `qty`; do not add. A `qty` of 0 means the level is now empty.

  Per-order data is never published — this is an aggregated L2 book.
</Note>

## `trades`

Public tape entries as they print, including a `path` of `direct`, `mint` or
`merge`. Only `tick_yes` is sent; the NO price is `100 - tick_yes`.

## `ticker`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "market_id": 66,
  "display_tick": 47,
  "best_yes_bid": 46,
  "best_yes_ask": 48,
  "last_tick_yes": 47,
  "volume": "1200",
  "ts": "…"
}
```

Conflated to roughly hundreds of milliseconds.

<Warning>
  `ticker` is a **display feed, not a correctness feed**. It is deliberately
  lossy — intermediate updates are dropped. Never drive trading decisions,
  position accounting or risk checks from it. Use `orderbook_delta` for the book
  and `user` for your own state.
</Warning>

## `user`

The private channel. Subscribe with no `market_ids`; it is scoped to your key's
account automatically, and there is no parameter that could point it at another
user.

It carries order lifecycle events, fills with their ledger entries, position
changes, and balance updates — including the reservation and fee accounting that
the order placement response deliberately omits.

A client that folds this stream holds a correct live copy of its orders,
positions and balances without ever polling. That is the intended way to run a
bot.

Continuity is tracked by a per-user `channel_seq` rather than the envelope
`seq`, and unlike the public channels it supports replay, so a brief
disconnection does not force you to re-read everything over REST.
