# Recently observed in-play events

Read FanDuel native game events with recent stored in-play observations and explicit source clocks.

Canonical page: https://getoddsapi.com/docs/live-events

## 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/live-events
Reviewed: 2026-11-07 UTC

Read FanDuel native game events with recent stored in-play observations and explicit source clocks.

## Read observation evidence

GET /api/v1/events/live uses source=fanduel by default. Your bearer key must grant FanDuel access. Bookmaker price selection is not required because this response contains no selection prices. A successful page costs one credit.

An event qualifies only when a non-future market was open or suspended, marked in_play=true, and observed within the last 15 minutes. Future-dated observations are excluded. This is evidence of a recent in-play observation, not assurance the event is currently live. An absent event may be stale or unobserved; absence never implies completion.

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/events/live?league=NFL&sport=football&limit=20" -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Native IDs and exact filters

Optional event_id, league and sport filters match exactly and case sensitively. Collector leagues include NFL, NBA, NHL, MLB, NCAAF and NCAAB; sports include football, basketball, hockey and baseball. These are source-native identifiers and labels, not cross-book entity matches.

limit accepts 1–100, default 50. Follow next_after only when has_more is true, preserving filters. Pagination orders native event IDs bytewise rather than numerically and does not freeze state across pages.

## Clocks and metadata disagreement

qualifying_market_observed_at is the newest eligible persisted observation; unchanged markets may refresh their persisted timestamp at five-minute intervals. qualifying_market_changed_at is that market’s last change, not an inferred event-state transition. event_read_at is a separate board-read clock and cannot make a stale market qualify.

Event metadata comes from the latest qualifying market. metadata_ambiguous=true reports disagreement in name, league, sport or starts_at across qualifying records; the service does not silently merge conflicting names. No scores, completion results, prices or settlement claims are fabricated.

## Questions

### Can I treat an empty list as no live sports?

No. It means no matching recent stored observations met this endpoint’s explicit criteria.

### Does clearing FanDuel prices disable this metadata endpoint?

No. FanDuel key scope is required, but price selection is separate.

### Are these IDs shared with other bookmakers?

No. Event IDs are native to the FanDuel store; matching them to another source needs independent identity verification.

## Sources

- [Bookmaker source selection](https://getoddsapi.com/docs/bookmaker-selection)
- [API contract](https://getoddsapi.com/openapi.json)
- [FanDuel market clocks](https://getoddsapi.com/docs/fanduel-markets)

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.
