angbot

Build on the record.

Langbot is the data and simulation layer for every market on Kalshi and Polymarket: order-book history with outcomes and rules, the speech, official text and data releases that move them on one clock, and a simulator with real fees. The quickest first call is a stream of phrases from a live event, each with the markets it touches, who said it and whether it counts: get a token, put it in your environment and stream.

Your first stream.

export LANGBOT_API_TOKEN=lb_...
python
# pip install langbot-sdkimport asynciofrom langbot import LangbotClient  # reads LANGBOT_API_TOKEN async def main():    async with LangbotClient() as lb:        async for evt in lb.stream(types=["phrase_detected"]):            print(evt.phrase, evt.market_refs, evt.verdict) asyncio.run(main())
typescript
// npm i @langbot/sdk// export LANGBOT_API_TOKEN=lb_...import { LangbotClient } from "@langbot/sdk"; const lb = new LangbotClient({ token: process.env.LANGBOT_API_TOKEN });for await (const evt of lb.stream({ types: ["phrase_detected"] })) {  console.log(evt.phrase, evt.market_refs, evt.verdict);}
MCP in Claude Code
claude mcp add --transport http langbot https://mcp.langbot.ai/mcp \  --header "Authorization: Bearer lb_..."

What arrives.

A hit as Langbot recorded it: JPMorgan Chase Q3 2026 earnings call, 13 Oct 2026, on the public webcast at 08:46:04.415 ET. Hits from 31 October on also carry a verdict.

phrase_detected
{  "type": "phrase_detected",  "phrase": "buyback",  "market_refs": ["KXEARNINGSMENTIONJPM-26OCT13-BUYB"],  "t_spoken": 1791895564415,  "t_detected": 1791895564493,  "confidence": 0.6,  "source_kind": "hls"}

Every page.