# Sportsbook event search, batch odds and price movement

Search retained events, request odds for multiple event IDs, filter changes since a timestamp, and inspect same-line price decreases through scoped GetOdds endpoints.

Canonical page: https://getoddsapi.com/docs/sportsbook-search

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

Search retained events, request odds for multiple event IDs, filter changes since a timestamp, and inspect same-line price decreases through scoped GetOdds endpoints.

## One source, explicit request bounds

These HTTP endpoints use a GetOdds key with DraftKings access. They read retained DraftKings sportsbook prices captured via ESPN. They share the customer’s request allowance and successful-read accounting with the rest of the gateway. They are separate from DraftKings Pick6 player thresholds at /api/v1/markets.

Unless noted otherwise, limit ranges from 1 to 200 and offset from 0 to 10,000. A page can be empty. Pages are not frozen snapshots, and a successful request does not prove complete league, bookmaker or historical coverage. These query operations are available through HTTP, Node/Python/R 0.4.0 clients and scoped MCP tools.

## Search an event, then use its exact ID

GET /api/v1/events/search requires q with 2–100 characters. Search matches a case-insensitive literal substring in home and away names; optional sport narrows the results. Percent and underscore characters are literal search text, not SQL wildcard operators. Results can include past events.

GET /api/v1/events/{id} returns one retained source event in a data array or 404 EVENT_NOT_FOUND. Encode the ID when constructing a URL. Source IDs are not asserted to match another provider’s identities.

```bash
curl --fail-with-body --get https://getoddsapi.com/api/v1/events/search \
  --data-urlencode "q=Lakers" --data-urlencode "sport=NBA" --data-urlencode "limit=5" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Combine up to twenty event IDs

GET /api/v1/odds/multi requires event_ids: a comma-separated list of 1–20 distinct source IDs. It returns one combined page, not up to limit rows per event. Unknown IDs contribute no rows. Optional sport and market filters narrow the read; fresh_only=true excludes captures older than 15 minutes.

Take IDs from a prior event response and retain the returned event_id on every quote. A missing event or market must stay explicit in your interface; do not fill it with another event’s price.

```bash
# Set EVENT_IDS to comma-separated IDs returned by an event request.
curl --fail-with-body --get https://getoddsapi.com/api/v1/odds/multi \
  --data-urlencode "event_ids=$EVENT_IDS" --data-urlencode "fresh_only=true" --data-urlencode "limit=20" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Find offers with retained changes since a timestamp

GET /api/v1/odds/updated requires since as an ISO timestamp with a timezone, within the preceding seven days. It finds retained changes strictly after that time and returns each matching offer’s current stored state. changed_at identifies its latest retained change in the queried window.

This operation is not an ordered replay log. Retention gaps remain gaps, current offers can change between pages, and repeated calls may return the same offer. Use exact history reads when you need the retained sequence for one event or offer. Repeated polling consumes the shared allowance.

```bash
# Set SINCE to an ISO timestamp within the last seven days.
curl --fail-with-body --get https://getoddsapi.com/api/v1/odds/updated \
  --data-urlencode "since=$SINCE" --data-urlencode "sport=NBA" --data-urlencode "limit=20" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Inspect same-line decimal-price decreases

GET /api/v1/dropping-odds compares the latest two retained changes within 24 hours for the same event, market, period, side and line. It requires an upcoming event, a current capture no older than 15 minutes and a current price matching the latest retained change. A changed handicap or total line is excluded from that comparison.

The decrease is 100 × (previous_decimal − current_decimal) / previous_decimal. min_drop_pct defaults to 1 and accepts values from 0.1 up to, but not including, 100. For example, a move from 2.00 to 1.80 is a 10% decrease in decimal price. That is not a ten-percentage-point change in true win probability.

Responses preserve the current quote timestamp, changed_at, previous_observed_at, previous_decimal and drop_pct. A decrease is an observation, not evidence of value, arbitrage or a recommended bet. If no comparable retained pair exists, no signal is manufactured.

```bash
curl --fail-with-body --get https://getoddsapi.com/api/v1/dropping-odds \
  --data-urlencode "sport=NBA" --data-urlencode "min_drop_pct=5" --data-urlencode "limit=10" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Questions

### Does this compare different bookmakers?

No. These operations read the single stored DraftKings-via-ESPN sportsbook source. Player thresholds from other sources do not supply independent sportsbook prices.

### Is the changed-since endpoint a replay cursor?

No. It filters offers using retained changes and returns current states. There is no complete, durable replay guarantee.

### Do these endpoints require a different key?

Use a GetOdds key with DraftKings access. Existing keys without that source grant are rejected; branded-service keys remain separate.

## Sources

- [OpenAPI contract](https://getoddsapi.com/openapi.json)
- [Base sportsbook endpoints](https://getoddsapi.com/docs/sportsbook)
- [Line movement viewer](https://getoddsapi.com/line-movement)

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.
