Open data

We record Kalshi prices before events resolve and archive every settlement. Joining the two answers questions that cannot be answered any other way, and cannot be reconstructed after the fact at any price: you either wrote the price down before the event or you did not.

All of it is free. JSON over HTTP, CORS-open, CSV on request, cached hourly. Build a dashboard, cite it in a write-up, feed a model’s priors. The only ask: attribute with a link.

Calibration · what each price level actually settled
GET https://www.contracttax.com/api/public/calibration
Rows of { category, bucket, n, yes_wins } where bucket 0–9 is the price decile (bucket 9 = 90–99¢) at our recorded ~24h-pre-event price. yes_wins / n is the measured YES settle rate. Methodology on the Truth Machine page.
Momentum · what happens after markets move
GET https://www.contracttax.com/api/public/momentum
Rows of { zone, move, n, yes_wins } where zone 0–4 is the 20¢ price band at ~24h out and move is up / down / flat for the prior 24h (±8¢ threshold). Compare movers to the flat baseline within a zone. Methodology on the Momentum Machine page.
Our own track record · every call we made, scored
GET https://www.contracttax.com/api/public/signals
Every market we publicly flagged as mispriced, recorded before the event settled, joined to what actually happened. Each row carries what we said, what it settled at, and the P&L in cents with Kalshi’s taker fee deducted. A call we said was overpriced is scored as buying NO, at the NO price and the NO fee, because we do not get credit for being “directionally right” about a trade nobody could place. The losers are in here. Publishing the data behind your own claims lets anyone check whether they hold, which is precisely the point: if the method has no edge, this endpoint is the thing that proves it. Method on the Fair Value Board, results on the Receipts.
Kalshi vs Polymarket · the same question, two exchanges
GET https://www.contracttax.com/api/public/cross-venue
Matched pairs: a Kalshi market and a Polymarket market we are confident ask the same question, with both prices at the moment we recorded them. Add ?scored=1 for one row per market joined to the settled outcome, with a Brier score for each exchange and a summary of which crowd forecasts better. As far as we know this is the only public dataset that can answer “when the two exchanges disagree, which one is right?” It cannot be built retroactively: it needs both prices, on matched questions, recorded before the questions resolved. Matching rules and confidence scoring are published on the source page.
Terms, short version: free for any use with visible attribution linking to the source page (each response carries its own source URL). Datasets are early and compound daily; small-n cells are noisy, so respect the sample sizes. Prices are our scanner’s observations, not exchange data resale. No uptime guarantee, cached one hour. Not affiliated with Kalshi. Not financial advice.
Quick start: curl -s https://www.contracttax.com/api/public/signals | jq '.summary' to see whether our own calls are actually working. Every endpoint takes ?format=csv.