Skip to main content
Dropping Odds API: Track Sharp Line Movements in Real Time
Back to Blog

Dropping Odds API: Track Sharp Line Movements in Real Time

James Whitfield

James Whitfield

9 min read

Using sharp bookmakers as the source of truth for benchmark odds is a betting strategy which has been fruitful for years. If you know where sharp money is going, you can capitalise on books which are slow to update their prices. The Odds-API dropping odds endpoint gives you exactly that: sharp line movements only, pre-computed across multiple time windows, and refreshed every 30 seconds.

What Is a Dropping Odds API?

A dropping odds API is an endpoint that returns odds movements in real time, tracking when the price on a betting outcome falls from where it opened. The useful version filters that data to sharp bookmakers only.

Sharp books operate with high limits and low margins, welcoming all kinds of bettors, including winners. It is these winners that help sharpen the lines. When a sharp book drops a price significantly, it is usually because confirmed team news, injury updates, or substantial professional money has entered the market. Other books tend to follow that movement rather than generate it. A dropping odds API built on sharp data lets you see where the market is going before the rest of the books catch up.

The /v3/dropping-odds endpoint on Odds-API is built on exactly that principle. Every result in the feed comes from a curated panel of sharp bookmakers, with soft book noise filtered out entirely.

What the Endpoint Returns

Each result represents a single bet side on a single market for a single event. The structure is consistent across all sports and market types.

Event details: when includeEventDetails=true, each result includes the home team, away team, kickoff date, sport name and slug, and league name and slug.

Market and bet side: every result specifies the market name (ML, Spread, Totals, and others), the handicap value (hdp), and which side of the bet is dropping. A single event can return multiple results across different markets and sides.

Odds object: opening price, current price, and a drop object with percentage movements since opening, over the last 12 hours, 24 hours, and 48 hours. Where a time window has not yet elapsed, the value returns as null.

Timestamps: lastMovedAt and updatedAt are returned as Unix milliseconds, so you can calculate exactly how fresh a movement is and deduplicate results when polling.

Pagination metadata is returned in response headers: X-Total-Count, X-Page, X-Per-Page, and X-Updated-At.

A Live Response Example

Here is a real result from the Odds-API dropping odds endpoint, from a USL League 2 match:

{
  "eventId": 72135672,
  "event": {
    "home": "Union Macomb",
    "away": "Lansing City Football",
    "date": "2026-06-23T23:00:00.000Z",
    "sport": { "name": "Football", "slug": "football" },
    "league": { "name": "USA - USL League 2", "slug": "usa-usl-league-two" }
  },
  "market": { "name": "ML", "hdp": 0 },
  "betSide": "away",
  "odds": {
    "opening": 8.33,
    "current": 4.07,
    "drop": {
      "sinceOpening": 51.1,
      "12h": null,
      "24h": null,
      "48h": null
    }
  },
  "lastMovedAt": 1782220107875,
  "updatedAt": 1782220108807
}

Lansing City Football opened at 8.33 on the moneyline and are now priced at 4.07, a drop of 51.1% since opening. The 12h, 24h, and 48h values are null because this market has not been open long enough to populate those windows. A price halving on the away side of a match result market is exactly the kind of sharp signal this dropping odds API is designed to surface.

The same event also returns a Totals result, with the under on a 3.75 line dropping 24.4% from 1.892 to 1.431. Two different markets on the same fixture, both moving in the same session, returned as separate results in the same feed.

Endpoint Reference

Base URL: https://api.odds-api.io/v3/dropping-odds

Authentication: Pass your API key as the apiKey query parameter.

Plan requirement: Starter plan or above. Free plan accounts receive a 403 response. Get a plan HERE

The key parameters to understand:

sport and league control the data source. Providing both queries a league-specific dataset. Providing sport only returns the top 200 results for that sport. Providing neither returns the top 500 globally. Note that league and leagues are mutually exclusive: leagues accepts a comma-separated list and filters server-side from the broader sport or global dataset, while league queries a dedicated league dataset directly.

timeWindow sets which drop percentage is used for sorting and filtering. Options are opening, 12h, 24h, and 48h. Default is opening. Use 12h or 24h to focus on recent momentum rather than total movement from open.

minDrop sets a minimum drop percentage for the selected time window. minDrop=5 with timeWindow=opening returns only results with at least a 5% drop since opening. This is the most effective filter for removing noise from the feed.

sort accepts three values: drop (highest drop percentage first, default), recent (latest movement first), and kickoff (soonest event first). For alert-style integrations, recent is usually most useful. For leaderboard-style dashboards, drop is the right choice.

markets filters by market type. Accepts a comma-separated list, case-insensitive. Supported values include ML, Spread, Totals, Spread HT, Totals HT, Totals 1Q, Spread 1Q, Team Total Home, Team Total Away, Corners Spread, Corners Totals, and Player Props.

limit and page handle pagination. Default is 50 results per page, maximum is 200.

includeEventDetails adds the full event object to each result. Set to true for any integration that needs team names, leagues, or kickoff times.

Example Request

curl -X GET \
  'https://api.odds-api.io/v3/dropping-odds?apiKey=YOUR_API_KEY&sport=football&markets=ML,Spread,Totals&timeWindow=opening&minDrop=5&sort=recent&limit=200&includeEventDetails=true' \
  -H 'accept: application/json'

What to Build With the Dropping Odds API

The endpoint is a data feed, and the use cases are broad. A few of the most popular ways developers are using it:

Integrate it into a website or application to give users access to live sharp line movements. Dropping odds is a well-established, proven betting strategy, and surfacing it inside your own product adds immediate value for any betting audience.

Build an odds screen that displays real-time sharp movements across sports, leagues, and markets. Filter by drop percentage, time window, or market type to create a focused, professional-grade tool.

Run a Telegram bot that monitors the feed and pushes alerts to subscribers whenever a significant sharp drop is detected. The lastMovedAt timestamp makes it straightforward to catch new movements and avoid sending duplicate notifications.

If you want to see the consumer-facing version of this data before building, the OddsHub dropping odds terminal shows live sharp line movements for free, no account required.

Getting Access

The dropping odds endpoint is available on Starter plans and above at Odds-API. Full parameter reference and interactive testing are available in the API documentation.

FAQs

What is a dropping odds API?
A dropping odds API is an endpoint that returns real-time odds movement data, tracking when prices on betting outcomes fall from their opening values. The most useful implementations filter this data to sharp bookmakers only, since those are the books whose movements reflect genuine market signals rather than internal liability management.

Why does the Odds-API dropping odds endpoint filter to sharp bookmakers only?
Sharp bookmakers price based on information flow and adjust in response to professional betting action. Soft bookmakers often follow that movement rather than generate it. Filtering to sharp books means the drops you see reflect genuine market signals rather than noise.

How often does the Odds-API dropping odds endpoint update?
Every 30 seconds. The X-Updated-At response header tells you exactly when the dataset was last refreshed.

What does a null value in the drop object mean?
It means there is no data for that time window yet. A market that opened two hours ago will have a valid sinceOpening value but null for 12h, 24h, and 48h because those windows have not elapsed.

What is the difference between league and leagues?
league queries a dedicated league-level dataset and requires the sport parameter. leagues accepts multiple league slugs as a comma-separated string and filters from the broader sport or global dataset. They cannot be used together in the same request.

Can I filter by multiple markets?
Yes. The markets parameter accepts a comma-separated list, for example ML,Spread,Totals. Values are case-insensitive.

What plan do I need to access the dropping odds endpoint?
Starter plan or above. Free plan accounts will receive a 403 error when calling this endpoint.

Useful Links