# Odds comparison API: compare matching markets

Build comparisons around exact event, market, period, line and settlement identities. Keep pick’em thresholds separate from sportsbook prices.

Canonical page: https://getoddsapi.com/odds-comparison-api

## 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

## Guide


Canonical: https://getoddsapi.com/odds-comparison-api
Reviewed: 2026-11-07 UTC

Build comparisons around exact event, market, period, line and settlement identities. Keep pick’em thresholds separate from sportsbook prices.

## A join is a product decision

Match events using verified provider-to-canonical mappings. Names alone are insufficient: dates, competitions, participant identities and venue conventions can differ. Unmatched rows should remain unmatched and observable rather than being joined by fuzzy player name.

## Use a complete market identity

For priced outcomes, retain event ID, market type, period, line, selection, participant ID where applicable, settlement rules and quote time. Two totals at 45.5 and 46.5 are different contracts. Regulation-only and overtime-inclusive markets cannot be assumed equivalent.

## Keep thresholds and prices separate

A PrizePicks line of 22.5 points is a threshold. It has no standalone American price in the GetOdds gateway. Do not convert the threshold into odds or treat a pick’em payout as the price of an independent single bet. Compare like-for-like sportsbook offers only after obtaining verified prices and rules.

## What is available now

GetOdds provides calculators for supplied prices and an authenticated PrizePicks market sample. It does not currently advertise a multi-book comparison endpoint. Use the tutorial to implement arithmetic on verified comparable offers; the presence of a tutorial is not evidence of live arbitrage opportunities.

## Questions

### Can I join on player names?

Names can collide or change. Use verified participant and event mappings, with explicit unmatched states.

### Does a higher decimal price always mean a better offer?

Only for the same contract and after checking freshness, eligibility, commission and settlement rules.

### How should I handle unmatched events?

Keep them unmatched, retain provider IDs and investigate the mapping; do not manufacture equivalent events.

## Sources

- [Arbitrage tutorial](https://getoddsapi.com/guides/python-arbitrage)
- [Player props API guide](https://getoddsapi.com/player-props-api)
- [GetOdds developer documentation](https://getoddsapi.com/docs)

Independent product; not affiliated with the operators named. No picks or predicted profits.

---

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