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

# Message reference

> Schema reference for dist, book, trade, and snapshot channel messages.

Four channel types, one envelope. Every message arrives wrapped in:

```json theme={null}
{"channel": "dist:fomc-2026-04-29", "data": { ... }}
```

The wrapper has exactly two top-level fields: `channel` (string) and `data` (object). Filter your message handler on `channel`, not on a `type` field — there is no `type` field in the wire format.

## Channel types

| Channel      | Subscribe to                 | Description                                           | Tier |
| ------------ | ---------------------------- | ----------------------------------------------------- | ---- |
| **dist**     | `dist:fomc-2026-04-29`       | Cross-venue probability distribution for all outcomes | Free |
| **book**     | `book:fomc-2026-04-29:hold`  | Normalized orderbook updates for one outcome          | Pro  |
| **trade**    | `trade:fomc-2026-04-29:hold` | Trade executions for one outcome                      | Pro  |
| **snapshot** | `snapshot:fomc-2026-04-29`   | Full state reset every 60s for all outcomes           | Pro  |

`dist` and `snapshot` are **event-level** channels — subscribe with just the `event_key`. `book` and `trade` are **per-outcome** channels — append `:{outcome_key}` (use `?expand=channels` on `/feeds/catalog` to get a ready-to-paste list).

`snapshot` payload differs from `dist`: snapshot wraps the per-outcome list under `data.distribution` and adds full orderbook state per outcome. `dist` uses `data.outcomes`.

## Distribution

Shows the market-implied probability for every outcome in an event, combining data from both venues.

```json theme={null}
{
  "event_key": "fomc-2026-04-29",
  "seq": 312,
  "published_ts": 1773892530947,
  "outcomes": [
    {
      "outcome": "hold",
      "label": "Fed maintains rate",
      "kalshi_prob": 0.945,
      "poly_prob": 0.955,
      "prob": 0.9479,
      "kalshi_depth_usd": 4714197.04,
      "poly_depth_usd": 1965879.48
    }
  ],
  "total_kalshi_depth_usd": 4784397.57,
  "total_poly_depth_usd": 2104564.65,
  "reference": {
    "source": "binance",
    "symbol": "BTCUSDT",
    "spot_bid": 68641.30,
    "spot_ask": 68641.31,
    "spot_mid": 68641.30,
    "futures_mark": 68723.51,
    "funding_rate": -0.00002124,
    "volume_24h": 951752117.03,
    "ts": 1774246512319
  }
}
```

| Field                                 | Description                                                                                                                                                          |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prob`                                | Combined probability, weighted by each venue's liquidity. Kalshi at 94.5% with 4.7M USD depth + Polymarket at 95.5% with 2.0M USD depth = 94.79%.                    |
| `kalshi_prob` / `poly_prob`           | Each venue's YES mid-price (best bid + best ask) / 2. Null if that venue has no data.                                                                                |
| `kalshi_depth_usd` / `poly_depth_usd` | Total USD within +/-5c of mid on each venue. Shows how much liquidity backs each probability.                                                                        |
| `reference`                           | External reference data (e.g., Binance spot/futures for crypto events). Only present on enriched feeds. See [crypto feed](/websocket/crypto-feed) for field details. |

## Book update

Normalized orderbook updates from both venues. Prices are contract prices (0-1), sizes are absolute quantities. Derived fields like best bid/ask, mid, spread, and depth are pre-computed on every update.

```json theme={null}
{
  "event_key": "fomc-2026-04-29",
  "outcome": "hold",
  "venue": "polymarket",
  "token": "yes",
  "venue_id": {
    "condition_id": "0x36e8ca2...",
    "token_id": "63586620628..."
  },
  "seq": 4217,
  "exchange_ts": 1773892530351,
  "received_ts": 1773892530360,
  "published_ts": 1773892530363,
  "update_type": "delta",
  "levels": [
    {"side": "bid", "price": "0.955", "size": 8300.00},
    {"side": "ask", "price": "0.965", "size": 0}
  ],
  "best_bid": "0.955",
  "best_ask": "0.965",
  "mid": "0.960",
  "spread": "0.010",
  "bid_depth_usd": 47141.97,
  "ask_depth_usd": 23456.78,
  "reference": { ... }
}
```

| Field                                      | Description                                                                                      |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| `venue_id`                                 | Identifiers to execute on the venue. Kalshi: market ticker. Polymarket: condition ID + token ID. |
| `update_type`                              | "snapshot" = full book replacement. "delta" = only changed levels. Size of 0 = level removed.    |
| `levels`                                   | Price levels with side (bid/ask), price (0-1), and size (absolute quantity after this update).   |
| `best_bid` / `best_ask` / `mid` / `spread` | Pre-computed from full cross-token book state, not just the levels in this update.               |
| `bid_depth_usd` / `ask_depth_usd`          | Total USD within +/-5c of mid on bid and ask sides.                                              |
| `reference`                                | External reference data for enriched feeds. Only present on crypto events. Omitted for macro.    |

## Trade

Every trade execution from both venues, including the specific contract traded, price, quantity, and a venue-provided trade ID.

```json theme={null}
{
  "event_key": "fomc-2026-04-29",
  "outcome": "hold",
  "venue": "kalshi",
  "token": "no",
  "action": "buy",
  "venue_id": {"market_ticker": "KXFEDDECISION-26APR-H0"},
  "seq": 89,
  "exchange_ts": 1773892530000,
  "received_ts": 1773892530008,
  "published_ts": 1773892530010,
  "price": "0.06",
  "qty": 136.00,
  "trade_id": "a4d77927-dafe-5bde-53ed-80f6129cfd19",
  "reference": { ... }
}
```

## Timestamps

Every book and trade message carries four timestamps (Unix ms) for end-to-end latency decomposition.

| Field          | Description                                                                   |
| -------------- | ----------------------------------------------------------------------------- |
| `exchange_ts`  | When the exchange says the event occurred. Null if not provided by the venue. |
| `received_ts`  | When we read the raw message off the venue WebSocket.                         |
| `published_ts` | When the normalized message was published internally.                         |
| `gateway_ts`   | When the gateway sent the message to your WebSocket.                          |
