# Wire topics

Every topic Kelly Wire defines, what each carries and the snapshot and delta messages it sends.

The definition doesn't say yet which topics publish today; a status on each topic is planned for the API's next contract release (planned, P8, October 16, 2026). Until then this page lists every topic the protocol defines, and some publish nothing yet.

| Topic | What it carries | Status |
| --- | --- | --- |
| [`game:{id}`](#game) | Game topic | live |
| [`market:{market_id}`](#market) | Market topic | live |
| [`player:{id}`](#player) | Player topic | planned (P8, D24; 2026-10-16) |
| [`board:{id}`](#board) | Board topic | planned (P8, D24; 2026-10-16) |
| [`reference:{topic_id}`](#reference) | Reference topic | planned (P8, ADR-K016; 2026-10-16) |
| [`league:{id}`](#league) | League topic | planned (P8, K10-A4; 2026-10-16) |
| [`answer:{id}`](#answer) | Answer topic | planned (P8, D22; 2026-10-16) |

## `game:{id}`
status live

One game's live state: score, clock, possession and Kelly's template-written last play (D16). A final score that changes afterwards arrives as game.corrected, so plans holding the game revalidate (strategy-playbooks.md S15). Kind: state (coalesces to the latest value per key). Entitlement: Anonymous and every plan.

- `id` string  
  A game ID (gm_…).

### `game_snapshot`
Kelly sends. The game topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `game.snapshot`.  
  Always `"game.snapshot"`.
- `topic` string · required  
  A game:{id} topic.  
  pattern ^game:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `game_delta`
Kelly sends. The game topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `game.state`, `game.final`, `game.corrected` (open: new values may be added).
- `topic` string · required  
  A game:{id} topic.  
  pattern ^game:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `market:{market_id}`
status live

One market: its per-book prices (first-party tickets only, D4) and, from K3, the consensus line, no-vig probabilities, break-evens, hold and movement. It replaces K1's market:{game_id}:{market} (K6). Kind: state (coalesces to the latest value per key). Entitlement: Anonymous and every plan; props on API connections are Pro (D24); props in cards and on askkelly.ai for every plan.

- `market_id` string  
  A market ID (mkt_…): any market, futures and props included.

### `market_snapshot`
Kelly sends. The market topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `market.snapshot`.  
  Always `"market.snapshot"`.
- `topic` string · required  
  A market:{market_id} topic.  
  pattern ^market:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0
- `rg_line` string · required  
  The cost line (COMP-1, D19): 21+ and the helpline. Present on every snapshot of a wagering topic (market); show it with anything built on one.

### `market_delta`
Kelly sends. The market topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `market.update`, `market.suspended`, `market.state` (open: new values may be added).
- `topic` string · required  
  A market:{market_id} topic.  
  pattern ^market:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `player:{id}`
status planned (P8, D24; 2026-10-16)

One player's projection, range, injury status and usage as they change. Kind: state (coalesces to the latest value per key). Entitlement: Anonymous and every plan.

- `id` string  
  A player ID (plr_…).

### `player_snapshot`
Kelly sends. The player topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `player.snapshot`.  
  Always `"player.snapshot"`.
- `topic` string · required  
  A player:{id} topic.  
  pattern ^player:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `player_delta`
Kelly sends. The player topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `player.update`, `player.injury` (open: new values may be added).
- `topic` string · required  
  A player:{id} topic.  
  pattern ^player:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `board:{id}`
status planned (P8, D24; 2026-10-16)

One board's ordering and values as they change: pools, rankings and draft boards (K6; publishers arrive with the boards). Kind: state (coalesces to the latest value per key). Entitlement: Anonymous and every plan.

- `id` string  
  A board ID (brd_…): a pool, a ranking or a draft board.

### `board_snapshot`
Kelly sends. The board topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `board.snapshot`.  
  Always `"board.snapshot"`.
- `topic` string · required  
  A board:{id} topic.  
  pattern ^board:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `board_delta`
Kelly sends. The board topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `board.update` (open: new values may be added).
- `topic` string · required  
  A board:{id} topic.  
  pattern ^board:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `reference:{topic_id}`
status planned (P8, ADR-K016; 2026-10-16)

Revisions to one reference entry: a new published version replaces the old (K6; K7's review publishes). Kind: state (coalesces to the latest value per key). Entitlement: Anonymous and every plan.

- `topic_id` string  
  A reference topic ID, such as law/us-ny (GET /v1/reference/{topic_id}).

### `reference_snapshot`
Kelly sends. The reference topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `reference.snapshot`.  
  Always `"reference.snapshot"`.
- `topic` string · required  
  A reference:{topic_id} topic.  
  pattern ^reference:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `reference_delta`
Kelly sends. The reference topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `reference.revised` (open: new values may be added).
- `topic` string · required  
  A reference:{topic_id} topic.  
  pattern ^reference:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `league:{id}`
status planned (P8, K10-A4; 2026-10-16)

The owner's league: live scores, standings and matchup win probabilities. Pro, bound to its owner (published from K10's league resource). Kind: state (coalesces to the latest value per key). Entitlement: Signed-in owner on Pro.

- `id` string  
  A league ID (lg_…) the signed-in person owns.

### `league_snapshot`
Kelly sends. The league topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `league.snapshot`.  
  Always `"league.snapshot"`.
- `topic` string · required  
  A league:{id} topic.  
  pattern ^league:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `league_delta`
Kelly sends. The league topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `league.update` (open: new values may be added).
- `topic` string · required  
  A league:{id} topic.  
  pattern ^league:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

## `answer:{id}`
status planned (P8, D22; 2026-10-16)

One streamed answer: sentences as they are written, citations, then live figure updates while anyone watches (D22). It stays open after answer.completed while anything subscribes. Sentences are never retracted. Kind: event (never coalesces). Entitlement: The answer's own subject; public answers to anyone holding the ID.

- `id` string  
  An answer ID (ans_…).

### `answer_snapshot`
Kelly sends. The answer topic's full state with its last_seq, expected latency and liveness.

- `op` const · required  
  Always `snapshot`.  
  Always `"snapshot"`.
- `type` const · required  
  Always `answer.snapshot`.  
  Always `"answer.snapshot"`.
- `topic` string · required  
  A answer:{id} topic.  
  pattern ^answer:
- `seq` integer · required  
  The topic's last_seq (STR-9): the next delta is last_seq + 1. A topic with no events yet has seq 0 and data null.  
  min 0
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Wire sent the snapshot (Wire's own time).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object · nullable  
  The topic's latest state, every member passed through the rights gate for this connection's surface; null for a topic with no events yet. Clients ignore unknown members.
- `expected_latency` object  
  STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
  - `seconds` integer · required  
    Typical seconds behind the source.  
    min 0
  - `basis` any · required  
    watched_poll: A game someone watches: the odds poller polls it every 30 seconds (D23). scheduled: A batch feed with a published schedule, such as a nightly or hourly sweep. paused: The feed is paused because the month's credits are spent; the figure holds its last value. computed: Computed by Kelly from other topics, so it follows their feeds. test_stream: The recorded Sunday played on a loop (test mode). none: No live feed sits behind this topic.  
    One of: `watched_poll`, `scheduled`, `paused`, `computed`, `test_stream`, `none` (open: new values may be added).
  - `source` string · nullable  
    The feed behind it, if any.
- `liveness` object  
  Whether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
  - `state` any · required  
    live: Updates are arriving within the topic's limit; a live step may rely on it. stale: No update arrived within the topic's limit (expected latency plus stale_seconds). not_tracked: The topic has no live feed (basis scheduled, paused or none); there is nothing to go stale.  
    One of: `live`, `stale`, `not_tracked` (open: new values may be added).
  - `as_of` string · nullable  
    The newest source time Wire has seen on the topic.  
    format date-time
  - `limit_seconds` integer · nullable  
    Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.  
    min 0

### `answer_delta`
Kelly sends. The answer topic's one change; seq is the previous seq + 1.

- `op` const · required  
  Always `delta`.  
  Always `"delta"`.
- `type` any · required  
  Event types this topic carries; ignore unknown values.  
  One of: `answer.started`, `answer.delta`, `answer.citation`, `answer.completed`, `answer.figure`, `answer.changed` (open: new values may be added).
- `topic` string · required  
  A answer:{id} topic.  
  pattern ^answer:
- `seq` integer · required  
  The previous seq + 1. A jump means a gap: apply the gap rule.  
  min 1
- `source_ts` string · nullable  
  When the fact happened upstream.  
  format date-time
- `emit_ts` string · required  
  When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).  
  format date-time
- `source` string · nullable  
  Who produced the data.
- `data` object  
  The event's payload, every member passed through the rights gate. Clients ignore unknown members.

Generated from Kelly Wire 2026-10-05.

---

Generated from Kelly Wire 2026-10-05

Support: support@askkelly.ai · Security and disclosure: https://docs.askkelly.ai/security

Information is the edge. Odds are information, not advice · 21+ · Get help
