The data, as JSON.
Everything the screener shows is available as plain JSON, free, no key. Rate limit 120 requests per minute per IP. Responses are gzip-compressed when you accept it. Please cache; the feed changes every 45 seconds, not faster.
Live
GET /api/pairsEvery matched event with outcomes, both venues' bid/ask/mid, gap (Kalshi − Polymarket), fee-adjusted cross-venue edge, flags (thin, lopsided, liveOrPast), 24h volume, deep links, and a short gap trend. Supports
If-None-Match with the returned ETag.{ "updatedAt": "…", "count": 330, "pairs": [ { "id": "nfl:KXNFLGAME-26SEP09NESEA", "kind": "game", "league": "nfl",
"title": "Patriots vs. Seahawks", "start": 1789000000000, "gap": 0.02, "arb": { "net": -0.021, "fees": 0.0175, "desc": "…" },
"thin": false, "lopsided": false, "liquidity": 12345, "focusIdx": 1, "trend": [0.01, 0.015, 0.02],
"outcomes": [ { "name": "Seahawks", "kalshi": { "bid": 0.62, "ask": 0.63, "mid": 0.625 }, "poly": { "bid": 0.6, "ask": 0.61, "mid": 0.605 }, "gap": 0.02 } ],
"kalshi": { "url": "…", "vol24": 39850 }, "poly": { "url": "…", "vol24": 1620 } } ] }GET /api/healthVenue reachability and latency, last refresh, process stats.
GET /api/scoreboardSettlement scoreboard: on settled games, which venue's closing price was closer, Brier scores per venue and per league.
History
GET /api/history?id=<pair id>&days=3Snapshots (every 10 minutes) of both venues' bid/ask per outcome for one event, up to 7 days.
GET /api/days · GET /api/export?day=YYYY-MM-DD&format=csv|jsonlWhole-day dumps for analysis. CSV is one row per outcome snapshot.
Pages and feeds
/c/<category> · /reports/<date> · /feed.xml · /embed.jsServer-rendered category tables, the daily report archive, an RSS feed of daily reports, and an embeddable widget:
<script src="/embed.js" data-league="nfl" data-n="6"></script>.Method and terms
Games are matched by league, team codes and date, then each Kalshi team market is aligned to the Polymarket moneyline outcome. Multi-outcome events are matched by outcome name. Polymarket prices come from its live order book, Kalshi from its public API. Gap is Kalshi mid minus Polymarket mid. Edge is $1 minus the two asks minus taker fees (Kalshi ⌈0.07·P·(1−P)⌉, Polymarket 0.05·P·(1−P) on sports). Data is provided as-is, free for any use with attribution; nothing here is advice and nothing here places orders.