canonical: https://jentic.com/apis/odds-api.io/odds-api

# Odds-API.io - Real-Time Sports Betting Odds API (v3)

The Odds-API.io API returns pre-match and in-play sports betting odds compared across bookmakers, together with the sports, leagues, events, and participants they belong to. Beyond raw odds for one or many events, it serves odds movements for a market line, dropping odds, value bets for a chosen bookmaker, and pre-match arbitrage opportunities sorted by profit margin. Historical endpoints return finished events, closing odds, and closing lines, and outright markets have their own odds and results. Settlement endpoints return results for events and grade bet selections as won, lost, void, or other outcomes, and native ID mappings link Odds-API.io events and markets to each bookmaker's own identifiers.

## For AI agents

Compare sports betting odds across bookmakers for an event, track odds movements and drops, find value bets and arbitrage opportunities, and grade bet selections against final results.

## Scope

Does not place bets, hold funds, or manage bookmaker accounts. Use for reading sports betting odds, opportunities, historical prices, and settlement results only.

## Capabilities

- Compare odds for an event across the bookmakers you name, or for many events at once with eventIds
- Track a market line's opening price, latest price, and recent moves from one bookmaker with `/odds/movements`
- Find odds that dropped sharply from opening values, filtered by sport, league, and minDrop
- Surface value bets for a bookmaker and pre-match arbitrage opportunities filtered by minProfit
- Pull closing odds and closing lines for finished events for backtesting
- Grade bet selections against final results with POST `/settlements/grade`
- Map Odds-API.io events, markets, and outcomes to a bookmaker's native ids

## Use cases

### Odds comparison assistant

A betting research agent answers 'where is the best price for this match?' with live data. Through Jentic the agent searches for 'compare betting odds for an event', gets the Odds-API.io odds operation with its input schema, and calls it with the required eventId and a bookmakers list. The apiKey query parameter is attached at call time, and the agent reports the best available price per outcome.

Example prompt: Call GET `/events/search` with query 'Arsenal' to find the event id, then call GET /odds with that eventId and bookmakers set to three bookmakers, and return the best price for each outcome

### Arbitrage and value bet scanner

A trading tool watches for mispriced markets. GET /arbitrage-bets returns pre-match opportunities where every leg uses one of the specified bookmakers, sorted by profit margin, and minProfit filters out thin margins. GET /value-bets returns value bets for a single required bookmaker, and GET /dropping-odds lists sharp drops from opening prices.

Example prompt: Call GET /arbitrage-bets with bookmakers set to the user's accounts, sport football, and minProfit 2, then call GET /value-bets with bookmaker set to the user's main bookmaker and summarise both lists

### Line movement monitoring

A model needs to know when the market moves. GET `/odds/movements` returns the opening price, the latest price, and recent changes for one market line of an event from a bookmaker, with eventId, bookmaker, and market required. GET `/odds/updated` returns only the market groups changed since a recent UNIX timestamp for a bookmaker and sport, which keeps polling light.

Example prompt: Call GET `/odds/movements` with eventId, bookmaker, and market set to the target line, then poll GET `/odds/updated` with since, bookmaker, and sport to catch further changes

### Backtesting and bet settlement

A strategy backtest needs closing prices, and a bet tracker needs outcomes. GET `/historical/closing-lines` and GET `/historical/odds` return closing odds for finished events, and GET /settlements returns results for given events. POST `/settlements/grade` takes up to 50 selections and returns won, lost, void, half_won, half_lost, pending, or ungradeable for each one, on paid plans.

Example prompt: Call GET `/historical/closing-lines` with sport football, from and to set to last week in RFC3339 format, and markets set to the market names to backtest, then call POST `/settlements/grade` with the user's selections and report which won

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/events` | Get events for a sport |
| GET | `/odds` | Get odds for an event |
| GET | `/odds/multi` | Get odds for multiple events |
| GET | `/odds/movements` | Get odds movements for a market line |
| GET | `/arbitrage-bets` | Get arbitrage opportunities |
| GET | `/value-bets` | Get value bets |
| GET | `/historical/closing-lines` | Get historical closing lines |
| POST | `/settlements/grade` | Grade bet selections |

## Key resources

- **Events and participants** — Sports, leagues, pre-match and live events, participants, and their logos
- **Odds** — Bookmaker odds per event, summaries, movements, updates since a timestamp, and dropping odds
- **Opportunities** — Value bets for a bookmaker and pre-match arbitrage opportunities
- **History and settlement** — Historical events, closing odds and lines, outright results, settlements, and selection grading

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 39 / 100
- **Maturity:** Non-Ready
- **Dimensions:**
  - Foundational Compliance: 99 / 100
  - Developer Experience & Jentic Compatibility: 74 / 100
  - AI-Readiness & Agent Experience: 23 / 100
  - Agent Usability: 94 / 100
  - Security: 15 / 100
  - AI Discoverability: 77 / 100
- **View full report:** https://jentic.com/apis/odds-api.io/odds-api/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring Odds-API.io by hand means appending the apiKey query parameter to each authenticated call, resolving event ids before fetching odds, and choosing between delta polling and full odds pulls. Through Jentic you install once, import Odds-API.io from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Odds-API.io carries the event and bookmaker in query parameters rather than the URL path, so a rule bounds which operations your agent may call, such as reading odds, rather than which event. You choose the allowed operations, so account changes like bookmaker selection are not included unless you add them.
- **Credential handling:** Your Odds-API.io API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'compare betting odds for an event' or 'find arbitrage bets', and Jentic returns the matching Odds-API.io operation with its input schema, including required parameters like eventId and bookmakers, so the agent calls the right endpoint directly.

## Related APIs

- **The Odds API** — Sports odds from many bookmakers across regions and markets
- **Odds API** — Sports betting odds data API
- **Sportmonks API** — Football data with fixtures, livescores, statistics, and lineups
- **Betfair API** — Betting exchange with market data and order placement

## FAQ

### What authentication does the Odds-API.io API use?

Per its OpenAPI spec, Odds-API.io authenticates with an API key sent as the apiKey query parameter. GET /sports, GET /bookmakers, and GET /markets are open and need no key, while the event, odds, opportunity, history, and settlement operations expect it. Through Jentic the key is held by your own instance and added to the request at call time, so it never appears in the agent's context.

### Can I find arbitrage opportunities with the Odds-API.io API?

Yes. GET /arbitrage-bets requires a bookmakers list and returns pre-match opportunities where each leg uses one of those bookmakers, sorted by profit margin, highest first. Filter with sport, league, markets, and minProfit, and set includeEventDetails to get match info with each result.

### What are the rate limits for the Odds-API.io API?

The OpenAPI spec does not specify rate limits. Check the Odds-API.io pricing and documentation at https://odds-api.io/pricing for the current limits on each plan.

### Can the Odds-API.io API grade my bets?

Yes, on paid plans. POST `/settlements/grade` takes up to 50 selections, each with the event id, market name, side, and, where the market has one, the line and label as served on /odds, and returns won, lost, void, half_won, half_lost, pending, or ungradeable per selection.

### How do I compare odds for a match through Jentic?

Search Jentic for 'compare betting odds for an event', load the Odds-API.io odds operation, and call GET /odds with the eventId and a bookmakers list. Use GET `/events/search` first if you only have a team name. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Is there an Odds-API.io MCP server?

You do not need an MCP server to give your agent Odds-API.io. Jentic connects it directly from the API Directory: import it, store your API key once, and your agent calls the event, odds, and settlement operations it needs on demand.

### Can I limit what my agent is allowed to do with the Odds-API.io API?

Yes. Write a rule that allows the read operations such as GET /events, GET /odds, and GET /value-bets, and the agent can research prices but cannot change your account's bookmaker selection through PUT `/bookmakers/selected/select` or PUT `/bookmakers/selected/clear.` The calls it makes are logged for review.
