# Real-time odds API integration: snapshots, streams and recovery

Choose a current sample or a branded change stream, preserve cursors and source timestamps, and handle reconnects without claiming instantaneous or complete coverage.

Canonical page: https://getoddsapi.com/real-time-odds-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/real-time-odds-api
Reviewed: 2026-11-07 UTC

Choose a current sample or a branded change stream, preserve cursors and source timestamps, and handle reconnects without claiming instantaneous or complete coverage.

## Choose delivery separately from data coverage

GetOdds currently provides an HTTP PrizePicks sample through /api/v1/markets. It does not expose a GetOdds streaming endpoint. For continuous change delivery, use the separately authenticated stream offered by the branded service for your dataset.

Real-time describes delivery behavior, not zero latency. Collection cadence, upstream caching, plan delays, connection health and replay retention all affect what your application sees.

## Two documented SSE integration paths

SSE is a server-to-client event stream over HTTP. It is not interchangeable with a WebSocket protocol. Read the exact provider contract before implementing a consumer.

| Service | Endpoint | Recovery contract |
| --- | --- | --- |
| PrizePicksAPI | https://prizepicksapi.com/api/v1/stream | Bearer header; Last-Event-ID resume; plan history window and connection limit apply |
| DraftKingsAPI | https://draftkingsapi.com/api/v1/stream | Take /api/v1/stream/snapshot first and resume with its documented cursor; start=latest explicitly opts out of a baseline |

## Respect entitlement and replay boundaries

PrizePicksAPI applies a plan-dependent stream delay and concurrent-connection limit. Credit-plan connections have their own cost. A resume cursor outside the accessible history window may be limited, and consumers must handle plan_limit, reconnect and error events.

DraftKingsAPI stream availability is gated by service configuration and account access. Follow its snapshot/cursor protocol and current delivery documentation. Neither branded credential is replaced by a GetOdds gateway key.

## A production consumer should recover deliberately

Persist only the last successfully applied event cursor. Process events idempotently, display source observation time separately from receipt time, and refresh a snapshot when replay cannot cover a gap. Bound retries with jitter and honor server retry instructions.

Handle heartbeats without treating them as market updates. Stop on credential or plan refusals. Keep keys in server-side Authorization headers; do not append them to a stream URL or expose them in a public browser EventSource. For a first HTTP integration, use the GetOdds Node quickstart before implementing a stream consumer.

## Questions

### Is there a GetOdds WebSocket or SSE endpoint?

No GetOdds stream is enabled in the current gateway. The separate branded APIs have their own delivery contracts.

### Can I reconnect without a baseline?

Only if the documented provider option deliberately permits it. DraftKingsAPI start=latest discards the initial baseline; it must not be presented as a complete current state.

### Does a heartbeat prove fresh odds?

No. It confirms a connection message, not that the upstream market was recently observed or updated.

## Sources

- [PrizePicksAPI stream contract](https://prizepicksapi.com/openapi.json)
- [PrizePicksAPI pricing and access](https://prizepicksapi.com/pricing)
- [DraftKingsAPI delivery contract](https://draftkingsapi.com/openapi.json)
- [DraftKingsAPI delivery status](https://draftkingsapi.com/status)
- [GetOdds Node quickstart](https://getoddsapi.com/docs/node)

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.
