Live events

For markets that settle on what is said, Langbot records the live event and emits each matching phrase with its timestamps, its speaker, Langbot's reading of the market's rules and a receipt.

On this page

Some markets settle on what someone says: an earnings call, a Fed press conference, a rally, a hearing. For those, Langbot records the live event and turns it into a stream of facts, each with millisecond timestamps, matched to the markets whose rules it touches.

How an event is recorded

  1. Sources. Langbot joins every public source for the event it can: a phone dial-in where the call offers one, the public webcast, a broadcast stream, and public text such as official posts. Each source gets its own source_id, and the same event can be recorded from several at once.
  2. Speech to words. A streaming speech model emits each word with its timestamps as the word ends, with the market's phrases boosted. Speakers are separated and, for markets on a named speaker, checked against that speaker's voice (below).
  3. Phrase spotting. Each market's rules text is compiled into what counts: the phrase, its plurals and spellings, who has to say it, whether Q&A counts. A match becomes a phrase_detected event with market_refs set and a verdict: Langbot's reading of whether the hit counts under that market's rules.
  4. The feed. Every event gets a receipt, the source's rights are applied (Data and use), and it is delivered over the WebSocket, SSE, webhooks and MCP, after your plan's delay.
source_kindWhat it is
sipa phone dial-in, typically seconds ahead of the webcast
hlsa public webcast or stream
webrtc, otalow-latency web streams; over-the-air broadcast
textpublic text sources; their items arrive as text_posted events
filea replay of a recording, at its original timestamps

The event

JSON
{
  "id": "evt_01J9ABCDEFGHJKMNPQRSTVWXYZ",
  "type": "phrase_detected",
  "source_id": "src_nvda_q3_2026_dialin",
  "event_id": "ev_nvda_q3_2026",
  "market_refs": ["KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL"],
  "phrase": "blackwell",
  "raw": "Blackwell ramp is ahead of plan",
  "speaker": { "label": "SPK_1", "name": "Jensen Huang", "confidence": 0.91 },
  "confidence": 0.97,
  "t_spoken": 1760050123412,
  "t_detected": 1760050123488,
  "t_emitted": 1760050123491,
  "lag_vs_public_ms": 18740,
  "source_kind": "sip",
  "verdict": { "counts": true, "reason": "mention 1 (1 needed)", "role": null },
  "seq": 48213
}
FieldMeaning
t_spokenwhen the word ended, from the speech model (ms epoch)
t_detectedwhen Langbot matched the phrase
t_emittedwhen the feed sent it; your plan's delay is applied after this
lag_vs_public_mshow far ahead of the public webcast this source heard it; positive is ahead, null when it could not be measured
market_refsthe venue tickers whose rules the phrase matches
verdictLangbot's reading of the rules for this hit: counts, reason, role, mention and needed for count markets. null when there is none
hash, prev_hash, raw_hash, chain_seqthe receipt

A verdict is a reading, not a settlement: the venue decides how its market resolves. On a restricted source raw carries the matched phrase only. Every event type is listed in the REST API.

Follow a market

Subscribe by ticker and the feed listens for that market's phrases on the event that settles it, and keeps them current when the market is re-published.

Terminal
langbot subscribe --market KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL
langbot brief KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL

An unknown ticker is a 404; a market not yet attached to a live event is a 422. Add webhook_url to have hits posted to you, signed. The brief is everything Langbot holds on one market, each block labelled with what it is: the market and its latest book, the event that settles it and its sources, the phrase hits on that event (its facts), the history for the same speaker and phrase (labelled context), and whether you are subscribed.

A market's facts are only the phrase hits heard on its own event. Everything else is context and is labelled that way.

Context, on request

A subscription can also ask for context about its market with context: on_air (the market's speaker is on air on any live source), topic (the talk is near the market's topic), near_miss (a word close to the phrase that does not count) and typed (typed facts, below). Context events carry "class": "context" and never count as a market's facts.

Speakers

A market on a named speaker ("Will the President say tariff this week?") settles on that person's own words, and much of what is broadcast is anchors and reporters. Around every named-speaker hit the voice is scored against an enrolled voiceprint of that speaker, and the result rides on the event:

JSON
"speaker": { "label": "voice", "name": "Donald Trump", "confidence": 0.71, "key": "trump",
             "verified": true, "score": 0.712, "method": "voiceprint", "outcome": "verified" }
outcomeWhenConfidence factor
verifiedthe speaker's voiceprint scores 0.45 or more1.0
unknownno voiceprint, no audio, or a score between 0.25 and 0.450.6
otheranother enrolled voice matches, or the score is under 0.250.3

name is set only when the voice was attributed, never guessed. Voiceprints are never published; GET /v1/speakers lists who is enrolled without any vector.

Typed facts

Some markets settle on what was stated rather than on a word: how many cuts were guided to, how much was returned to shareholders. Typed facts turn the live transcript into structured statements: a fact_extracted event with fact = {kind, subject, predicate, value, unit, quote, speaker}, where kind is number, guidance, stance or claim and quote is at most 25 words. They are context ("class": "context"), delivered only to subscriptions that ask for them, and carry receipts like every event. The quote is withheld on restricted sources.

Latency, measured

Every number on langbot.ai/latency comes from the event stream itself. lag_vs_public_ms is computed by aligning the transcript of the source Langbot listened to with the transcript of the public webcast for the same event, and comparing when the same words were spoken on each. GET /v1/latency publishes the median and 90th percentile per source over the last 24 hours, with the sample count. When it cannot be measured, the field is null.

Models

Two statistics per market on what someone says, computed from Langbot's recordings and the venue's settlements. They describe the record, under a simple stated model; they are not trading signals, and every market comes back with its sample size, its inputs and a list of caveats.

  • Pre-event (GET /v1/models/fair-value?event_id= or ?ticker=): how often the speaker said the market's words per minute in past recorded appearances, scaled to this event's expected length and shrunk toward the venue's base rate, as model_p, beside n_events, base_rate, the latest market_mid and the appearances used and left out.
  • Live (GET /v1/models/live?event_id=): for count markets during the event, the verified count, needed, the minutes elapsed and remaining, and model_p = the probability the count reaches needed under the same model.

Both take a token (each call is one model call of your plan's allowance) or a per-call payment. MCP: get_fair_value, get_live_model.