API reference · Markets
Get a market brief
GET/v1/markets/{ticker}/brief
Everything Langbot holds on one market that settles on what is said, every block labelled as a fact or as context.
On this page
Auth. An API token: Authorization: Bearer lb_… (create one). Signed-in web sessions work too.
Limits. One history query per call (500 a day on Free; unlimited on Builder and Standard). Served at your plan's delay (+60 s Free, +10 s Builder, +2 s Standard).
Parameters
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
ticker | string | yes | The venue ticker or pm_<id>. |
Request
curl "https://api.langbot.ai/v1/markets/KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL/brief" \
-H "Authorization: Bearer $LANGBOT_API_TOKEN"from langbot import LangbotClient
async with LangbotClient() as lb: # reads LANGBOT_API_TOKEN
brief = await lb.market_brief("KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL")
print(brief.facts_count, brief.history)import { LangbotClient } from "@langbotai/sdk";
const lb = new LangbotClient(); // reads LANGBOT_API_TOKEN
const brief = await lb.marketBrief("KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL");
console.log(brief.facts_count);Response
200 OK
{
"v": 1,
"report": "brief",
"ticker": "KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL",
"market": {
"label": "the market as the venue publishes it",
"ticker": "KXEARNINGSMENTIONNVDA-26OCT-BLACKWELL",
"venue": "kalshi",
"event_id": "ev_nvda_q3_2026",
"title": "Will NVIDIA say \"Blackwell\" on its Q3 earnings call?",
"phrases": ["blackwell"],
"status": "open",
"book": { "label": "context: the venue's latest prices", "ts": 1760050100000, "yes_bid": 0.91, "yes_ask": 0.93 }
},
"event": { "label": "the event that settles this market", "id": "ev_nvda_q3_2026", "status": "live", "rights": "restricted", "sources": [] },
"facts": [
{ "id": "evt_01J9ABCDEFGHJKMNPQRSTVWXYZ", "phrase": "blackwell", "speaker": { "role": "SPK_1", "name": null, "confidence": 0.91 }, "t_spoken": 1760050123412, "receipt": { "hash": "5d0e05c3…", "chain_seq": 48213, "url": "/v1/receipts/evt_01J9ABCDEFGHJKMNPQRSTVWXYZ" } }
],
"facts_count": 1,
"history": { "label": "context, not a prediction", "speaker": "huang", "phrase": "blackwell", "base_rate": { "markets": 4, "yes": 4, "no": 0, "void": 0, "yes_rate": 1.0 }, "last_outcomes": [] },
"related": { "label": "context: other open markets, not facts about this one", "same_event": [], "same_speaker": [] },
"listening": { "subscribed": false, "subscription_ids": [], "webhook": false },
"rights": "restricted",
"delay_ms": 10000,
"generated_at": 1760050130000
}facts are only the phrase hits heard on the market's own event, newest first (up to 50), never the surrounding text. Everything else is labelled context. The venue settles the market; nothing here is a verdict.
Errors
| Status | code | When |
|---|---|---|
| 404 | not_found | No market with that ticker. |
| 401 | auth_required | No token was sent. |
| 401 | token_invalid | The token was not recognised (mistyped, revoked or expired). |
| 422 | validation_error | A parameter failed validation; detail[].loc names it. |
| 429 | quota_exceeded | Today's history queries are spent; quota.resets_at says when they reset. |
| 429 | rate_limited | Over your request budget; wait Retry-After seconds. |
Every error body is {"detail": …, "code": "…"}; branch on code. All codes: Errors.