> ## Documentation Index
> Fetch the complete documentation index at: https://docs.odds-api.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Dropping Odds

> Track significant odds movements from sharp bookmakers to identify where the market is moving before recreational books adjust.

## What are Dropping Odds?

Dropping odds occur when bookmakers significantly lower the odds on a particular outcome, indicating increased confidence that the outcome will happen. We track these movements from sharp bookmakers only, filtering out the noise from recreational books to give you a reliable picture of where the market is actually moving.

## Why Sharp Bookmakers?

Not every odds change is meaningful. Soft books adjust lines for all sorts of reasons: liability balancing, promos, copying other books. Sharp books move because the market moved.

Our dropping odds come from a curated panel of sharp bookmakers. These are high-limit operators with tight margins that accept professional-level stakes. Their lines get tested by sharp bettors constantly, so when they move a price, it usually means something real happened: confirmed team news, injury updates, or significant money entering the market.

By filtering to these operators, the data shows you where the smart money is going rather than noise from recreational books.

## Fetching Dropping Odds

Use the `/v3/dropping-odds` endpoint to get current dropping odds:

<CodeGroup>
  ```javascript JavaScript theme={null}
  const apiKey = process.env.ODDS_API_KEY;

  const response = await fetch(
    `https://api.odds-api.io/v3/dropping-odds?apiKey=${apiKey}&sport=football&minDrop=10&includeEventDetails=true`
  );

  const droppingOdds = await response.json();
  console.log(droppingOdds);
  ```

  ```python Python theme={null}
  import requests
  import os

  api_key = os.environ['ODDS_API_KEY']

  response = requests.get(
      'https://api.odds-api.io/v3/dropping-odds',
      params={
          'apiKey': api_key,
          'sport': 'football',
          'minDrop': 10,
          'includeEventDetails': True
      }
  )

  dropping_odds = response.json()
  print(dropping_odds)
  ```
</CodeGroup>

## Response Format

```json theme={null}
[
  {
    "eventId": 69455182,
    "event": {
      "home": "Manchester City",
      "away": "Arsenal",
      "date": "2025-10-15T15:00:00Z",
      "sport": { "name": "Football", "slug": "football" },
      "league": { "name": "England - Premier League", "slug": "england-premier-league" }
    },
    "market": { "name": "Spread", "hdp": -1.5 },
    "betSide": "home",
    "odds": {
      "opening": 2.05,
      "current": 1.52,
      "drop": {
        "sinceOpening": 25.9,
        "12h": 8.4,
        "24h": 12.3,
        "48h": null
      }
    },
    "lastMovedAt": 1775851240182,
    "updatedAt": 1775854172851
  },
  {
    "eventId": 61301179,
    "market": { "name": "Player Passes", "hdp": 34.5, "label": "Carlos Baleba" },
    "betSide": "over",
    "odds": {
      "opening": 3.75,
      "current": 1.5,
      "drop": { "sinceOpening": 60, "12h": null, "24h": null, "48h": null }
    },
    "lastMovedAt": 1776281915401,
    "updatedAt": 1776283503652
  }
]
```

For player prop markets, `market.label` contains the player name (e.g. `"Carlos Baleba"`). It is omitted for non-player-prop markets.

## Understanding Drop Values

The `drop` object shows the percentage decrease across different time windows:

| Field          | Description                                               |
| -------------- | --------------------------------------------------------- |
| `sinceOpening` | Total drop since the opening odds were first recorded     |
| `12h`          | Drop in the last 12 hours (null if no 12h data available) |
| `24h`          | Drop in the last 24 hours                                 |
| `48h`          | Drop in the last 48 hours                                 |

A drop of 25.9% means the odds went from 2.05 to 1.52. The market now considers this outcome significantly more likely.

## Query Parameters

| Param                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | Default     |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `sport`               | Sport slug (e.g. `football`, `basketball`)                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | All sports  |
| `league`              | League slug (requires `sport`). e.g. `england-premier-league`. Mutually exclusive with `leagues`.                                                                                                                                                                                                                                                                                                                                                                                                                     | All leagues |
| `leagues`             | Comma-separated league slugs to filter by multiple leagues at once. e.g. `england-premier-league,spain-la-liga`. Mutually exclusive with `league`.                                                                                                                                                                                                                                                                                                                                                                    | All leagues |
| `markets`             | Comma-separated market names to filter by. Case-insensitive. e.g. `Spread,Totals`. Supported: `ML`, `Spread`, `Totals`, `Spread HT`, `Totals HT`, `Totals 1Q`, `Spread 1Q`, `Team Total Home`, `Team Total Away`, `Corners Spread`, `Corners Totals`, `Corners Spread HT`, `Corners Totals HT`, `Bookings Spread`, `Bookings Totals`, `Player Props`. Using `Player Props` returns all player prop markets across all sports — for football this includes `Anytime Goalscorer`, `Player Passes`, `Player Shots`, etc. | All markets |
| `timeWindow`          | Sort/filter by time window: `opening`, `12h`, `24h`, `48h`                                                                                                                                                                                                                                                                                                                                                                                                                                                            | `opening`   |
| `sort`                | Sort order: `drop` (highest %), `recent` (latest movement), `kickoff` (soonest event)                                                                                                                                                                                                                                                                                                                                                                                                                                 | `drop`      |
| `minDrop`             | Minimum drop percentage to include                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | `0`         |
| `limit`               | Results per page (max 200)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | `50`        |
| `page`                | Page number (1-indexed)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | `1`         |
| `includeEventDetails` | Include event details (home, away, date, sport, league)                                                                                                                                                                                                                                                                                                                                                                                                                                                               | `false`     |

## Pagination

Results are paginated. Metadata is returned in response headers:

| Header          | Description                             |
| --------------- | --------------------------------------- |
| `X-Total-Count` | Total number of matching entries        |
| `X-Page`        | Current page number                     |
| `X-Per-Page`    | Results per page                        |
| `X-Updated-At`  | Timestamp of last data update (Unix ms) |

## Use Cases

### Steam Moves

Track large, sudden movements to catch "steam" (when sharp bettors flood a market):

```javascript theme={null}
const response = await fetch(
  `https://api.odds-api.io/v3/dropping-odds?apiKey=${apiKey}&timeWindow=12h&minDrop=15&sport=football`
);
const steamMoves = await response.json();

steamMoves.forEach(move => {
  console.log(`🔥 ${move.event.home} vs ${move.event.away}`);
  console.log(`   ${move.market.name} ${move.betSide}: ${move.odds.opening} → ${move.odds.current} (↓${move.odds.drop['12h']}% in 12h)`);
});
```

### Pre-Match Line Shopping

Combine with the odds endpoint to find bookmakers that haven't adjusted yet:

```javascript theme={null}
// 1. Get dropping odds
const drops = await fetch(
  `https://api.odds-api.io/v3/dropping-odds?apiKey=${apiKey}&minDrop=10&limit=20`
).then(r => r.json());

// 2. For interesting drops, check all bookmaker odds
for (const drop of drops) {
  const odds = await fetch(
    `https://api.odds-api.io/v3/odds?apiKey=${apiKey}&eventId=${drop.eventId}`
  ).then(r => r.json());

  // Find bookmakers still offering higher odds
  // (they haven't caught up to the sharp move yet)
}
```

## Best Practices

<AccordionGroup>
  <Accordion title="Focus on 12h and 24h Windows">
    The `sinceOpening` window can be noisy for events listed far in advance. The 12h and 24h windows capture more actionable, recent movements.
  </Accordion>

  <Accordion title="Combine with Value Bets">
    A dropping odd on a sharp book often creates value on soft bookmakers that haven't adjusted yet. Use `/value-bets` alongside `/dropping-odds` for the best opportunities.
  </Accordion>

  <Accordion title="Filter by Market">
    Moneyline drops are the most common. Spread and totals drops can be more significant since they indicate specific information (e.g. a key player being ruled out affecting the handicap).
  </Accordion>

  <Accordion title="Monitor Close to Kick-off">
    The most informative drops happen in the final 1-6 hours before an event starts, when team news is confirmed and sharp bettors act on confirmed information.
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Value Bets" icon="chart-line" href="/guides/value-bets">
    Find edges using the same sharp bookmaker methodology
  </Card>

  <Card title="Fetching Odds" icon="magnifying-glass" href="/guides/fetching-odds">
    Get full odds data across all bookmakers
  </Card>
</CardGroup>
