# Prediction market odds API: Kalshi and Polymarket sports props in one schema

GetOdds returns Kalshi and Polymarket sports player props in one schema at /api/v1/prediction-markets: each contract's best ask as implied probability, American and decimal odds, the venue no-vig probability, matched BetRivers sportsbook prices and an edge field, plus 14 days of price changes and two MCP tools. Both venues also publish free official APIs; GetOdds saves you the normalization and matching work.

Canonical page: https://getoddsapi.com/prediction-market-odds-api

**Price.** Free development allowance: 1,000 requests per UTC day and 60 per minute per account, with no payment step. Paid: the Developer Bundle at $149 per month, with 10,000 monthly requests or credits on each of four sources. Prediction-market reads count against the same allowance and need no extra grant.

## Free API key

Get a free GetOdds API key: **1,000 requests per UTC day and 60 per minute, no card**. One key covers REST and the hosted MCP server.

Sign up: https://getoddsapi.com/sign-up?ref=ai-claudebot

## Quickstart

1. Create an account at https://getoddsapi.com/sign-up?ref=ai-claudebot, open https://getoddsapi.com/dashboard and issue a key with the sources you need (draftkings, fanduel, betrivers, prizepicks or underdog). Keep it in a server environment variable named GETODDS_API_KEY.
2. Read current DraftKings NBA spreads with curl:

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

3. The same request in Python (standard library only):

```python
import json, os, urllib.request

req = urllib.request.Request(
    "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50",
    headers={"Authorization": "Bearer " + os.environ["GETODDS_API_KEY"]},
)
with urllib.request.urlopen(req) as res:
    rows = json.load(res)["data"]
for row in rows:
    print(row["away"], "at", row["home"], row["side"], row["line"], row["american"], row["observed_at"])
```

4. Check `observed_at`, `age_seconds` and `stale` on every row before using a price. Full reference: https://getoddsapi.com/docs

## Use with Claude (MCP)

```bash
claude mcp add --transport http getodds https://getoddsapi.com/api/mcp \
  --header "Authorization: Bearer $GETODDS_API_KEY"
```

The MCP tools follow the key's source grants and share its allowance. Setup guide: https://getoddsapi.com/use-with-claude

## Pricing

| Plan | Allowance | Price |
| --- | --- | --- |
| Free key | 1,000 requests a day, 60 a minute | $0, no card |
| Developer Bundle | 10,000 requests or credits a month on each of four sources | $149 a month |

Free development allowance: 1,000 requests per UTC day and 60 per minute per account, with no payment step. Paid: the Developer Bundle at $149 per month, with 10,000 monthly requests or credits on each of four sources.
Details: https://getoddsapi.com/bundle

## Facts

- **Venues:** Kalshi, Polymarket
- **Leagues:** NBA, NFL, NHL
- **MCP tools:** get_prediction_markets, get_prediction_market_history
- **History:** 14 days

## One schema for both venues

Create an account at /sign-up and issue a key in /dashboard. Prediction-market reads work on every key, with no extra source grant. Keep the key in a server environment variable named GETODDS_API_KEY and send it as a bearer token, never in a URL or browser code.

Switch venues with the source parameter. Kalshi threshold contracts and Polymarket over/under shares both come back as player, stat, line and side, so the same code reads either.

| Venue | Leagues | Stats | History |
| --- | --- | --- | --- |
| Kalshi | NBA, NFL, NHL | Points, rebounds, assists, threes; receiving, rushing and passing yards, receptions, interceptions; goals | 14 days of changes through the API |
| Polymarket | NBA (NFL when listed) | Points, rebounds, assists over/under | 14 days of changes through the API |

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/prediction-markets?source=kalshi&league=NFL&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"

curl --fail-with-body "https://getoddsapi.com/api/v1/prediction-markets?source=polymarket&league=NBA&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Use it from Claude or another agent

The GetOdds MCP server exposes get_prediction_markets and get_prediction_market_history on every key. An agent can ask for a player's Kalshi and Polymarket prices, compare them with the sportsbook and pull the price history without custom code. Setup is on /use-with-claude.

```bash
claude mcp add --transport http getodds https://getoddsapi.com/api/mcp \
  --header "Authorization: Bearer $GETODDS_API_KEY"
```

## Fields and semantics

Prices are best asks, not mids or last trades. Event names come from the venue when it provides them; Kalshi rows take the matchup from a sportsbook or Polymarket listing for the same player when Kalshi gives only a ticker, and say so in event.name_source.

| Field | Meaning |
| --- | --- |
| source, venue | kalshi or polymarket |
| event.id, event.name, event.starts_at | Venue event ID (a Kalshi ticker or a Polymarket event ID), the matchup and the scheduled start when known |
| player, stat, line, side | For example Devin Booker, Points, 24.5, over |
| price.probability, price.american, price.decimal | The best ask for that side, in dollars per $1 contract, and the same price as American and decimal odds |
| market_no_vig_probability | This side divided by both sides at the venue, when both are stored |
| sportsbook | BetRivers (Pennsylvania) over and under prices for the same player, stat and line, with implied and no-vig probability |
| edge_vs_sportsbook_no_vig | Sportsbook no-vig probability minus the contract price. Positive means the contract is cheaper than the book implies |
| observed_at, changed_at | Last capture of the venue scope, and last time this price changed |

## FAQ

### What is a prediction market odds API?

An API that turns exchange-style contract prices, such as Kalshi or Polymarket shares, into odds formats you can compare with sportsbooks: implied probability, American and decimal.

### Do Kalshi and Polymarket have their own APIs?

Yes, both publish free official APIs. GetOdds is for sports props already normalized and matched to sportsbook prices, with history and MCP.

### Which sports are covered?

NBA, NFL and NHL player props on Kalshi, and NBA player over/unders on Polymarket, with NFL when Polymarket lists them.

### Is the data real time?

Rows come from venue scopes captured in the last 30 minutes, and each row reports observed_at and changed_at. It is not a trading feed.

---

GetOdds is an independent developer product and is not affiliated with any sportsbook or pick’em operator. Prices describe data, not betting advice.
