Skip to content
Kelly

Developers

askkelly.aiGet a key

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.

TopicWhat it carriesStatus
game:{id}Game topiclive
market:{market_id}Market topiclive
player:{id}Player topicplanned (P8, D24; 2026-10-16)
board:{id}Board topicplanned (P8, D24; 2026-10-16)
reference:{topic_id}Reference topicplanned (P8, ADR-K016; 2026-10-16)
league:{id}League topicplanned (P8, K10-A4; 2026-10-16)
answer:{id}Answer topicplanned (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.

idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always game.snapshot.

Always "game.snapshot".

topicstringrequired

A game:{id} topic.

pattern ^game:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: game.state, game.final, game.corrected (open: new values may be added).

topicstringrequired

A game:{id} topic.

pattern ^game:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

The 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_idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always market.snapshot.

Always "market.snapshot".

topicstringrequired

A market:{market_id} topic.

pattern ^market:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds after as_of at which the topic counts as stale: its expected latency plus stale_seconds.

min 0

rg_linestringrequired

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_deltaLink to this section

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

Show 8 fields
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: market.update, market.suspended, market.state (open: new values may be added).

topicstringrequired

A market:{market_id} topic.

pattern ^market:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

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

idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always player.snapshot.

Always "player.snapshot".

topicstringrequired

A player:{id} topic.

pattern ^player:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: player.update, player.injury (open: new values may be added).

topicstringrequired

A player:{id} topic.

pattern ^player:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

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

idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always board.snapshot.

Always "board.snapshot".

topicstringrequired

A board:{id} topic.

pattern ^board:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: board.update (open: new values may be added).

topicstringrequired

A board:{id} topic.

pattern ^board:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

The 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_idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always reference.snapshot.

Always "reference.snapshot".

topicstringrequired

A reference:{topic_id} topic.

pattern ^reference:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: reference.revised (open: new values may be added).

topicstringrequired

A reference:{topic_id} topic.

pattern ^reference:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

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

idstring

A 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always league.snapshot.

Always "league.snapshot".

topicstringrequired

A league:{id} topic.

pattern ^league:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

Event types this topic carries; ignore unknown values.

One of: league.update (open: new values may be added).

topicstringrequired

A league:{id} topic.

pattern ^league:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

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

idstring

An 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
opconstrequired

Always snapshot.

Always "snapshot".

typeconstrequired

Always answer.snapshot.

Always "answer.snapshot".

topicstringrequired

A answer:{id} topic.

pattern ^answer:

seqintegerrequired

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_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Wire sent the snapshot (Wire's own time).

format date-time

sourcestringnullable

Who produced the data.

dataobjectnullable

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_latencyobject

STR-5: how far behind the real world a topic runs, and why. Nothing claims to be faster than its feed.

Show 3 fields
secondsintegerrequired

Typical seconds behind the source.

min 0

basisanyrequired

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

sourcestringnullable

The feed behind it, if any.

livenessobject

Whether 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
stateanyrequired

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_ofstringnullable

The newest source time Wire has seen on the topic.

format date-time

limit_secondsintegernullable

Seconds 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
opconstrequired

Always delta.

Always "delta".

typeanyrequired

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

topicstringrequired

A answer:{id} topic.

pattern ^answer:

seqintegerrequired

The previous seq + 1. A jump means a gap: apply the gap rule.

min 1

source_tsstringnullable

When the fact happened upstream.

format date-time

emit_tsstringrequired

When Kelly published the fact (a delta keeps its publisher's emit_ts, so lag is measurable).

format date-time

sourcestringnullable

Who produced the data.

dataobject

The event's payload, every member passed through the rights gate. Clients ignore unknown members.

Generated from Kelly Wire 2026-10-05.

Support: support@askkelly.ai · Security and disclosure