Kalshi is the first CFTC-regulated exchange listing sports event contracts in the US. Binary outcomes. Regulated settlement. But contract prices are still set by order flow, not oddsmakers. TheOddsAPI gives you the oddsmaker-grade benchmark: Pinnacle-anchored fair odds from 50 sportsbooks that tell you exactly when a Kalshi contract is mispriced.
CFTC
Regulated exchange
$0.01
Per-contract fee
50
Sportsbook pricing anchors
NFL Week 14 — Sunday 1:00 PM ET
The "Dolphins Yes" contract is underpriced. A buyer at $0.29 when fair value is $0.353 captures 6.3 cents of expected value per contract. At $0.01 per-side fee, net edge is 5.3 cents.
Kalshi is a regulated exchange, not a sportsbook. The contracts are priced by participants, not by professional oddsmakers. That structural gap creates systematic mispricing.
Every Kalshi contract must pass CFTC review before listing. By the time a sports event contract goes live, the sportsbook market has already been pricing it for days or weeks. Early Kalshi contract prices often reflect where sportsbook odds were at listing time, not where they are now.
TheOddsAPI shows you the current sportsbook consensus so you can identify contracts still trading at stale prices.
NFL playoff games and NBA Finals get deep order books on Kalshi. Regular season MLB, mid-week NHL, and early-round tennis matches are much thinner. Fewer participants means wider bid-ask spreads and more room for contract prices to deviate from fair value.
These are the events where sportsbook fair odds give you the clearest signal of where the contract should trade.
Every Kalshi sports contract corresponds to a market type that sportsbooks have priced for years. Understanding the mapping is the foundation for systematic pricing.
"Will the Chiefs beat the Raiders?" is a moneyline bet expressed as a binary contract. TheOddsAPI h2h market gives you the same outcome priced by 50 bookmakers. Strip the vig with the fair odds endpoint and you have the benchmark probability for the Kalshi contract.
"Will the Lakers win by 7+ points?" maps to a spread market. Sportsbooks price spreads at various lines (3.5, 7.5, 10.5). TheOddsAPI spreads market shows you where the sharp consensus sits for each line. If Kalshi lists a margin contract that aligns with a common spread number, you have direct pricing comparison.
"Will the combined score exceed 45.5?" is an over/under that sportsbooks have priced since the markets opened. TheOddsAPI totals market returns the exact same structure: the line number and odds for over/under from 50 books. Converting to implied probability and comparing against the Kalshi contract price identifies mispricings.
"Will the Yankees win the World Series?" corresponds to sportsbook futures markets. TheOddsAPI outrights market covers championship and tournament winners across major sports. These contracts often have the widest mispricings because futures markets on Kalshi attract less sophisticated flow than game-level contracts.
01
Determine if the Kalshi contract maps to h2h, spreads, or totals. Check the settlement rules for overtime inclusion. This tells you which TheOddsAPI market to query.
02
Call TheOddsAPI with the matching sport and market type. Use the fair odds endpoint to get Pinnacle-anchored vig-free probability for the exact outcome the contract covers.
03
Subtract the Kalshi contract price from fair probability. Positive difference means the "No" side is underpriced. Negative means "Yes" is underpriced. Score the edge in cents per contract.
04
Subtract Kalshi fees ($0.01/side) and estimated slippage from the gross edge. Only execute when net edge exceeds your minimum threshold. TheOddsAPI refreshes every 30 seconds so you can wait for wider gaps.
Real edge captured by The Odds API 30 minutes before puck drop. Not a hypothetical, not backtested. Pulled directly from the live edge_snapshots feed.
Colorado Avalanche vs Minnesota Wild
A Kalshi "Avalanche Win" contract priced at $0.55 (matching the soft book consensus of ~54.6% implied probability) was mispriced by 11 cents relative to TheOddsAPI fair odds via Pinnacle (65.8%). A trader buying "Yes" at $0.55 collected $1.00 at settlement. After Kalshi's $0.01 per-side fee, net profit was $0.43 per contract on a position with 11 cents of expected edge.
TheOddsAPI flagged Pinnacle at -192 while 10 European soft books (Unibet, LeoVegas, Marathonbet, Coolbet, Tipico, Winamax, 1xBet) were still pricing Avalanche between -115 and -125. The edge writer surfaced the divergence at the 19:40 ET snapshot, 30 minutes before puck drop. Pinnacle anchoring is what made the gap visible. A naive average across soft books would have priced the Avalanche at the same wrong number.
Map Kalshi contracts to sportsbook fair value with a few lines of code.
import requests
# Configuration
API_KEY = "YOUR_KEY"
SPORT = "americanfootball_nfl"
MIN_EDGE_CENTS = 3 # minimum edge after fees
KALSHI_FEE = 0.01 # $0.01 per contract per side
# Step 1: Pull odds from 50 bookmakers
response = requests.get(
f"https://api.theoddsapi.com/v4/sports/{SPORT}/odds",
params={
"apiKey": API_KEY,
"regions": "us,eu,uk,au",
"markets": "h2h",
"oddsFormat": "decimal"
}
)
events = response.json()
for event in events:
# Step 2: Find Pinnacle (sharpest book) or use consensus
pinnacle = next(
(b for b in event["bookmakers"] if b["key"] == "pinnacle"), None
)
if not pinnacle:
continue
outcomes = pinnacle["markets"][0]["outcomes"]
# Step 3: Strip vig to get true probability
raw_probs = [1 / o["price"] for o in outcomes]
overround = sum(raw_probs)
fair_probs = [p / overround for p in raw_probs]
# Step 4: Compare against Kalshi contract prices
# Replace with actual Kalshi API contract lookup
kalshi_contracts = {
outcomes[0]["name"]: 0.71, # "Yes" price for team A
outcomes[1]["name"]: 0.29, # "Yes" price for team B
}
for outcome, fair_prob in zip(outcomes, fair_probs):
contract_price = kalshi_contracts.get(outcome["name"], 0)
if not contract_price:
continue
gross_edge = fair_prob - contract_price
net_edge = abs(gross_edge) - (KALSHI_FEE * 2) # buy + sell fees
if net_edge > (MIN_EDGE_CENTS / 100):
side = "SELL" if gross_edge < 0 else "BUY NO"
print(f"{event['away_team']} @ {event['home_team']}")
print(f" Contract: {outcome['name']} Yes @ ${contract_price}")
print(f" Fair value: {fair_prob:.1%} | Edge: {gross_edge*100:+.1f}c gross, {net_edge*100:.1f}c net")
print(f" Action: {side}")
// Monitor multiple sports for Kalshi mispricing opportunities
const SPORTS = ["americanfootball_nfl", "basketball_nba", "baseball_mlb", "icehockey_nhl"];
const MIN_NET_EDGE = 0.03; // 3 cents minimum after fees
const KALSHI_FEE_PER_SIDE = 0.01;
async function scanKalshiEdges(kalshiPositions) {
const opportunities = [];
for (const sport of SPORTS) {
const res = await fetch(
`https://api.theoddsapi.com/v4/sports/${sport}/odds?apiKey=YOUR_KEY®ions=us,eu&markets=h2h&oddsFormat=decimal`
);
const events = await res.json();
for (const event of events) {
const pinnacle = event.bookmakers.find(b => b.key === "pinnacle");
if (!pinnacle) continue;
const outcomes = pinnacle.markets[0].outcomes;
const rawProbs = outcomes.map(o => 1 / o.price);
const overround = rawProbs.reduce((a, b) => a + b, 0);
const fairProbs = rawProbs.map(p => p / overround);
fairProbs.forEach((prob, i) => {
const matchKey = `${event.home_team} vs ${event.away_team} - ${outcomes[i].name}`;
const contractPrice = kalshiPositions[matchKey];
if (!contractPrice) return;
const grossEdge = prob - contractPrice;
const netEdge = Math.abs(grossEdge) - (KALSHI_FEE_PER_SIDE * 2);
if (netEdge > MIN_NET_EDGE) {
opportunities.push({
event: `${event.away_team} @ ${event.home_team}`,
outcome: outcomes[i].name,
fairProb: (prob * 100).toFixed(1) + "%",
contractPrice: "$" + contractPrice.toFixed(2),
netEdgeCents: (netEdge * 100).toFixed(1),
side: grossEdge < 0 ? "SELL YES" : "BUY YES",
});
}
});
}
}
return opportunities.sort((a, b) => b.netEdgeCents - a.netEdgeCents);
}
// Run every 60 seconds
setInterval(async () => {
const edges = await scanKalshiEdges(myKalshiContractPrices);
edges.forEach(e => console.log(
`${e.side} ${e.outcome} (${e.event}) | Fair: ${e.fairProb} Contract: ${e.contractPrice} | Net edge: ${e.netEdgeCents}c`
));
}, 60000);
Kalshi's CFTC designation changes the risk profile compared to offshore prediction markets. For systematic traders, this matters as much as the edge itself.
As a CFTC-regulated DCM, Kalshi holds customer funds in segregated accounts. Settlement is guaranteed by the exchange. There is no counterparty risk on winning positions. For traders running systematic strategies with larger capital, this eliminates a category of risk that offshore platforms cannot.
Every Kalshi contract has published settlement criteria before it goes live. The data source, the timing, and the conditions are all defined upfront. This means you can validate your sportsbook odds comparison against the exact settlement definition. If Kalshi settles on regulation time only, make sure you are comparing against regulation-time fair odds, not full-game including overtime.
Kalshi issues 1099-B forms for US traders. Gains and losses are reported. For anyone running a systematic trading operation, this is a feature: you have auditable records of every contract trade. It also means you can potentially offset gains against losses, depending on how your tax situation applies (consult a tax professional).
TheOddsAPI edge detection endpoint returns pre-computed deviations from the Pinnacle-anchored baseline. For Kalshi traders, this eliminates the need to compute fair odds yourself.
{
"event": "Bills vs Dolphins",
"market": "h2h",
"edges": [
{
"bookmaker": "fanduel",
"outcome": "Buffalo Bills",
"odds": 1.52,
"fair_odds": 1.55,
"edge_points": 1.3,
"implied_fair_prob": 0.645
}
]
}
The implied_fair_prob of 0.645 means sportsbook sharp consensus gives the Bills
a 64.5% chance. If the Kalshi "Bills Win" contract trades at $0.71, the contract is
6.5 cents overpriced. You would sell "Yes" (or buy "No") and pocket the difference
at settlement.
The edge detection endpoint scans all active events across your subscribed sports every 30 seconds on Business tier. You do not need to poll individual events or do the vig removal math yourself. Filter the response for edges above your threshold and cross-reference against live Kalshi contract prices.
| Kalshi | Polymarket | Sportsbooks (TheOddsAPI) | |
|---|---|---|---|
| Regulation | CFTC-regulated DCM | Offshore, unregulated in US | Varies by jurisdiction |
| US access | Legal for US residents | Restricted in US | State-by-state |
| Fees | $0.01/contract/side, no fee on losses | 0.75% on sports | 3-5% vig (stripped by fair odds) |
| Listing speed | Slow (CFTC approval required) | Fast (community-created) | Immediate (sportsbooks set lines) |
| Liquidity | Growing, thin on non-headlines | Deeper on major events | Deep (billions in annual handle) |
| Settlement | Published rules, exchange-guaranteed | Resolution oracle | N/A (pricing source only) |
Regulated does not mean risk-free. Understanding the structural risks protects capital.
Some Kalshi contracts include overtime in settlement. Some do not. Sportsbook moneyline odds typically include overtime for basketball and football but not for soccer. If your sportsbook fair odds include overtime but the Kalshi contract settles on regulation only, your edge calculation is wrong. Always read the contract specification and match it to the correct odds source.
An edge only matters if you can execute at the displayed price. Thin Kalshi order books mean your order may move the market. For contracts with less than $10K in available liquidity at the desired price, size your position accordingly. The theoretical edge from TheOddsAPI pricing is your upper bound, not your guaranteed return.
Kalshi enforces position limits per contract. For sports events, these limits cap your maximum exposure. Even with a large edge, you cannot concentrate unlimited capital into a single contract. Systematic traders need to spread across many events to deploy meaningful size. TheOddsAPI covers 24 sports and hundreds of daily events, giving you a large universe to scan.
Free tier includes 25 requests/day. Business plan unlocks fair odds, edge detection, and 30-second refresh for production contract pricing.