API reference · Consolidated
List consolidated groups
GET/v1/consolidated
Groups of equivalent markets across Kalshi and Polymarket, each with its consolidated YES probability, venues and venue gap.
On this page
Auth. None. Without a token the call is served as Free (the Free delay and request budget, shared per IP); send Authorization: Bearer lb_… for your plan's.
Limits. Its own per-minute limit: 20 anonymous or on Free, 120 on Builder, 600 on Standard. Not counted against any allowance.
Parameters
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
q | string | no | Words in the question, or tickers. |
category | string | no | A category. |
ticker | string | no | Only groups that contain this market. |
limit | integer | no | Page size. 1 to 200. Default 50. |
cursor | string | no | next_cursor from the previous page. |
Request
curl "https://api.langbot.ai/v1/consolidated?limit=1"from langbot import LangbotClient
async with LangbotClient() as lb:
page = await lb.consolidated(limit=1)
for g in page["groups"]:
print(g["group_id"], g["p"], g["venue_gap"])import { LangbotClient } from "@langbotai/sdk";
const lb = new LangbotClient();
const page = await lb.consolidated({ limit: 1 });
console.log(page.groups);Response
200 OK
{
"ts": 1793685859494,
"method": {
"version": 1,
"stale_after_ms": 300000,
"max_spread": 0.1,
"volume_window_ms": 86400000,
"weights": "mean(depth share, 24h volume share)",
"fees": "not included",
"doc": "https://langbot.ai/docs/consolidated/"
},
"count": 1594,
"next_cursor": "1",
"groups": [
{
"group_id": "cq_kxtime-26-ale",
"title": "Will Alexandria Ocasio-Cortez be TIME Person of the Year 2026?",
"category": "culture",
"p": null,
"ts": 1793685840000,
"venue_gap": null,
"included": 0,
"computed": false,
"verified": true,
"members": ["KXTIME-26-ALE", "pm_5262639"],
"venues": [
{
"ticker": "KXTIME-26-ALE",
"venue": "kalshi",
"title": "Will Alexandria Ocasio-Cortez be Time Person of the Year in 2026?",
"subtitle": "Alexandria Ocasio-Cortez",
"url": "https://kalshi.com/markets/kxtime",
"mid": 0.03,
"bid": 0.02,
"ask": 0.04,
"spread": 0.02,
"depth_usd": 62.28,
"volume_24h_usd": null,
"weight": 0.0,
"quote_ts": 1793684508879,
"age_s": 1332.1,
"source": "orderbook_snaps",
"included": false,
"excluded": "stale"
},
{
"ticker": "pm_5262639",
"venue": "polymarket",
"title": "Will Alexandria Ocasio-Cortez be TIME Person of the Year 2026?",
"subtitle": "Alexandria Ocasio-Cortez",
"url": "https://polymarket.com/event/time-person-of-the-year-2026",
"mid": 0.031,
"bid": 0.02,
"ask": 0.042,
"spread": 0.022,
"depth_usd": 2.85,
"volume_24h_usd": null,
"weight": 0.0,
"quote_ts": 1793675977256,
"age_s": 9863.8,
"source": "venue_api",
"included": false,
"excluded": "stale"
}
]
}
],
"disclaimer": "The Langbot consolidated probability is a published measurement: a liquidity-weighted average of the YES mids of markets on different venues that resolve on…",
"licence": "Free to read and cite with attribution (\"Langbot consolidated probability\"). Bulk access, redistribution, commercial feeds and embeds at scale are licensed:…"
}A real response from the API; long lists are cut to their first items.
p is the liquidity-weighted YES mid of the included venues (fees not included); venues[].excluded says why a quote was left out (stale, one_sided, crossed, wide). The method is in Consolidated prices. A measurement, not advice.
Errors
| Status | code | When |
|---|---|---|
| 401 | token_invalid | A token was sent and not recognised. Send a valid one, or none to call anonymously. |
| 422 | validation_error | A parameter failed validation; detail[].loc names it. |
| 429 | rate_limited | Over your request budget; wait Retry-After seconds. |
Every error body is {"detail": …, "code": "…"}; branch on code. All codes: Errors.