# Conservative cross-source event mappings

Inspect exact observed event associations between DraftKings via ESPN and native FanDuel metadata, with unmatched and ambiguous records preserved.

Canonical page: https://getoddsapi.com/docs/event-mappings

## 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/docs/event-mappings
Reviewed: 2026-11-07 UTC

Inspect exact observed event associations between DraftKings via ESPN and native FanDuel metadata, with unmatched and ambiguous records preserved.

## Require access to both sources

GET /api/v1/mappings requires one bearer key granted both draftkings and fanduel. Both grants are checked before either source is read. Two separate single-source keys cannot be combined in one request. This metadata read does not require bookmaker price selection and does not change key grants.

A successful page costs one shared credit. Missing source grants return 403; source read failures return an error rather than being presented as unmatched events.

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/mappings?league=NFL&hours=48&limit=10" -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Inspect the exact matching evidence

Matches require unique sport, league, exact UTC scheduled start, and normalized full home and away team names in both stores. Normalization only applies Unicode NFC, lowercase and whitespace collapse. There are no nickname aliases, punctuation removal, fuzzy scores, reversed home/away guesses or start-time tolerance.

FanDuel home and away names must come from two native HOME/AWAY selections on a non-future game moneyline market. Event titles and team abbreviations are not parsed as identities. Conflicting or incomplete supporting market metadata prevents a unique match.

Rows remain matched, unmatched or ambiguous. A matched row provides the native FanDuel event ID and bounded evidence; it does not mint a universal canonical event ID. An unmatched event can still exist upstream under different names or outside the observed window.

## Use bounded windows and pagination

hours accepts 1–72, default 48, and selects future scheduled starts from the captured request time. Both stores must have observations within the preceding 15 minutes. Optional league is an exact code; supported matching correspondences are NBA, NFL, NHL, MLB, NCAAB and NCAAF. EPL and MLS anchors can be returned with unsupported metadata instead of invented matches.

limit accepts 1–100, default 50. Preserve filters and use after=next_after when has_more is true. Matching runs across the complete bounded candidate set before slicing the anchor page, so competing events outside a page still prevent a false unique match. Pages are not a frozen snapshot.

The service caps candidate reads at 2,000 DraftKings events and 5,000 FanDuel markets. A clipped universe returns 422 MAPPING_WINDOW_TOO_LARGE. Narrow the time window; narrowing league can reduce the anchor set. Candidate details in each response are separately bounded and report truncation.

## Separate event identity from market equivalence

canonical_identity=false, market_contract_comparability=false and capture_complete=false remain explicit. A matching game does not prove that two betting contracts share overtime, draw, void, settlement or jurisdiction rules. These associations alone are not an executable arbitrage or value-bet feed.

Observation clocks belong to the source records. The mapping request time does not refresh source evidence, and an exact name/time association is not provider-issued identity certification.

## Questions

### Can one source-only key read mappings?

No. Both DraftKings and FanDuel grants are required before either source is accessed.

### Why are many events unmatched?

The method deliberately avoids aliases and approximate times. Missing or conflicting source metadata remains visible rather than being guessed.

### Does a match establish equivalent betting markets?

No. Event identity evidence and market contract equivalence are separate; market_contract_comparability remains false.

## Sources

- [Gateway OpenAPI](https://getoddsapi.com/openapi.json)
- [FanDuel native market evidence](https://getoddsapi.com/docs/fanduel-markets)
- [DraftKings stored event identity](https://getoddsapi.com/docs/sportsbook)

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.
