Markets, prices, and cross-venue arbitrage candidates from Kalshi and Polymarket — normalized into a single clean schema. REST or MCP.
GET /markets
Search & filter open markets across both venues with one consistent shape.
GET /markets/{venue}/{id}
Full normalized detail: outcomes, prices, volume, close time, status.
GET /matching-markets
Same real-world event on both venues, with the price spread — your arbitrage radar.
# the whole point, in one call curl https://api.bellwether.markets/matching-markets # → [{ event, kalshi:{yes:0.62}, polymarket:{yes:0.58}, spread:0.04 }, ...]
Kalshi speaks RSA-signed REST; Polymarket speaks on-chain CLOB with a Polygon wallet. Two auth models, two schemas, two sets of edge cases. We normalize all of it.
The reason to build on a unified feed is the same contract priced differently on each venue. We surface those matches and spreads directly — no stitching required.
The one YC-backed cross-platform API was acquired and pulled in-house in early 2026. Independent builders need a feed that stays independent.
Same data as plain JSON for your app, or as native MCP tools so an AI agent can query markets and spreads directly.
# run locally pip install -r requirements.txt uvicorn bellwether.api:app --reload # or as an MCP server python -m bellwether.mcp_server