Wire topics
Copy page
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 topic | live |
market:{market_id} | Market topic | live |
player:{id} | Player topic | planned (P8, D24; 2026-10-16) |
board:{id} | Board topic | planned (P8, D24; 2026-10-16) |
reference:{topic_id} | Reference topic | planned (P8, ADR-K016; 2026-10-16) |
league:{id} | League topic | planned (P8, K10-A4; 2026-10-16) |
answer:{id} | Answer topic | planned (P8, D22; 2026-10-16) |
game:{id}Link to this section
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.
idstringA game ID (gm_…).
game_snapshotLink to this section
Kelly sends. The game topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways game.snapshot.
Always "game.snapshot".
topicstringrequiredA game:{id} topic.
pattern ^game:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
game_deltaLink to this section
Kelly sends. The game topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: game.state, game.final, game.corrected (open: new values may be added).
topicstringrequiredA game:{id} topic.
pattern ^game:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
market:{market_id}Link to this section
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_idstringA market ID (mkt_…): any market, futures and props included.
market_snapshotLink to this section
Kelly sends. The market topic's full state with its last_seq, expected latency and liveness.
Show 11 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways market.snapshot.
Always "market.snapshot".
topicstringrequiredA market:{market_id} topic.
pattern ^market:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
rg_linestringrequiredThe 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_deltaLink to this section
Kelly sends. The market topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: market.update, market.suspended, market.state (open: new values may be added).
topicstringrequiredA market:{market_id} topic.
pattern ^market:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
player:{id}Link to this section
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.
idstringA player ID (plr_…).
player_snapshotLink to this section
Kelly sends. The player topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways player.snapshot.
Always "player.snapshot".
topicstringrequiredA player:{id} topic.
pattern ^player:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
player_deltaLink to this section
Kelly sends. The player topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: player.update, player.injury (open: new values may be added).
topicstringrequiredA player:{id} topic.
pattern ^player:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
board:{id}Link to this section
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.
idstringA board ID (brd_…): a pool, a ranking or a draft board.
board_snapshotLink to this section
Kelly sends. The board topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways board.snapshot.
Always "board.snapshot".
topicstringrequiredA board:{id} topic.
pattern ^board:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
board_deltaLink to this section
Kelly sends. The board topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: board.update (open: new values may be added).
topicstringrequiredA board:{id} topic.
pattern ^board:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
reference:{topic_id}Link to this section
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_idstringA reference topic ID, such as law/us-ny (GET /v1/reference/{topic_id}).
reference_snapshotLink to this section
Kelly sends. The reference topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways reference.snapshot.
Always "reference.snapshot".
topicstringrequiredA reference:{topic_id} topic.
pattern ^reference:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
reference_deltaLink to this section
Kelly sends. The reference topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: reference.revised (open: new values may be added).
topicstringrequiredA reference:{topic_id} topic.
pattern ^reference:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
league:{id}Link to this section
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.
idstringA league ID (lg_…) the signed-in person owns.
league_snapshotLink to this section
Kelly sends. The league topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways league.snapshot.
Always "league.snapshot".
topicstringrequiredA league:{id} topic.
pattern ^league:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
league_deltaLink to this section
Kelly sends. The league topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent types this topic carries; ignore unknown values.
One of: league.update (open: new values may be added).
topicstringrequiredA league:{id} topic.
pattern ^league:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
answer:{id}Link to this section
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.
idstringAn answer ID (ans_…).
answer_snapshotLink to this section
Kelly sends. The answer topic's full state with its last_seq, expected latency and liveness.
Show 10 fields
opconstrequiredAlways snapshot.
Always "snapshot".
typeconstrequiredAlways answer.snapshot.
Always "answer.snapshot".
topicstringrequiredA answer:{id} topic.
pattern ^answer:
seqintegerrequiredThe 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_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Wire sent the snapshot (Wire's own time).
format date-time
sourcestringnullableWho produced the data.
dataobjectnullableThe 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_latencyobjectSTR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.
Show 3 fields
secondsintegerrequiredTypical seconds behind the source.
min 0
basisanyrequiredwatched_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).
sourcestringnullableThe feed behind it, if any.
livenessobjectWhether a live step may rely on a topic now: sent in every snapshot and, when the state flips, in a feed message.
Show 3 fields
stateanyrequiredlive: 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_ofstringnullableThe newest source time Wire has seen on the topic.
format date-time
limit_secondsintegernullableSeconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.
min 0
answer_deltaLink to this section
Kelly sends. The answer topic's one change; seq is the previous seq + 1.
Show 8 fields
opconstrequiredAlways delta.
Always "delta".
typeanyrequiredEvent 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).
topicstringrequiredA answer:{id} topic.
pattern ^answer:
seqintegerrequiredThe previous seq + 1. A jump means a gap: apply the gap rule.
min 1
source_tsstringnullableWhen the fact happened upstream.
format date-time
emit_tsstringrequiredWhen Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).
format date-time
sourcestringnullableWho produced the data.
dataobjectThe event's payload, every member passed through the rights gate. Clients ignore unknown members.
Generated from Kelly Wire 2026-10-05.