canonical: https://jentic.com/apis/moviodds.com/moviodds

# MoviOdds bet365 Odds API

The MoviOdds bet365 Odds API returns every market bet365 prices for a match, pre-match and in-play, across soccer, tennis, basketball, American football, ice hockey, baseball, rugby, cricket, Australian rules, and more. Clients load the current board, list catalogued matches to find a fixture id, pull one match's snapshot, and read a selection's recorded price timeline or its pre-match closing line. Outright futures markets and finished-match results with per-period scores are also served, and a keyed Bet Builder route returns bet365's combined price for multi-leg slips. MoviOdds is an independent project and is not affiliated with bet365.

## For AI agents

Read bet365 pre-match and in-play odds, price history, closing lines, outright futures, and match results from MoviOdds, and price Bet Builder slips with an API key.

## Scope

Does not place bets, compare other bookmakers, or provide team statistics and lineups. Use for reading bet365 odds, price history, outrights, and results only.

## Capabilities

- Load the current bet365 odds board for a sport, optionally filtered to in-play matches and chosen market groups
- Find a match's fixture id from the catalogue of pre-match and in-play matches with league and kickoff
- Read a selection's recorded price timeline between from and to timestamps for closing-line and movement analysis
- Get each selection's pre-match close and last recorded price for a fixture
- List outright futures markets such as golf tournament winners, Super Bowl, and league top goalscorer
- Retrieve finished-match results with final and per-period scores by sport and UTC date
- Price Bet Builder slips of 2 to 12 legs from one pre-match match at bet365's combined odds

## Use cases

### AI betting research agent reading live odds

An AI agent answering 'what are the odds for tonight's match' needs a structured board, not a scraped page. Through Jentic the agent searches for 'get current odds for a match', loads the MoviOdds snapshot operation with its input schema, and calls it with the fixture id it found in the catalogue. The response lists every priced selection with odds_dec, odds_frac, side, line, and a suspended flag, so the agent can quote prices and their last-change time accurately.

Example prompt: Call GET /catalog with sport=soccer to find a fixture id, then GET /snapshot with that fi and report the Full Time Result prices

### Closing line value tracking

A bettor measuring whether their picks beat the market compares the price they took with the closing line. MoviOdds returns, for each selection of a fixture, the pre_close point recorded at or before kickoff and the last recorded price, plus a pre_close_basis field explaining how the close was found. The full timeline is available from the history route when the bettor wants to see how the price moved into kickoff.

Example prompt: Call GET /closing with fi set to a fixture id and compare each selection's pre_close odds_dec with a recorded bet price

### Settling bets from match results

A tracker that records bets needs final scores to settle them. MoviOdds serves finished matches with the final score, per-period scores where available (halves, sets, quarters, periods, innings), a status of finished or unknown, and the finish time, filtered by sport and UTC date or a single fixture id.

Example prompt: Call GET /results with sport=tennis and date=2026-11-08 and mark each tracked bet as won or lost from the final set scores

### Pricing correlated Bet Builder slips

A Bet Builder price is not the single odds multiplied together, because bet365 adjusts for linked legs. The MoviOdds Bet Builder route takes up to 50 slips, each with a fixture and 2 to 12 sel_id legs from one pre-match match, and returns bet365's combined price for each slip. It needs an API key sent in the X-API-Key header.

Example prompt: Call GET /snapshot for a fixture to collect three sel_id values, then POST `/betbuilder/price` with slips containing that fixture and those legs

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/odds` | Get every match with current odds |
| GET | `/catalog` | List catalogued matches without odds |
| GET | `/snapshot` | Get one match's current odds |
| GET | `/history` | Get a selection's recorded price timeline |
| GET | `/closing` | Get each selection's closing line |
| GET | `/outrights` | List outright futures markets |
| GET | `/results` | Get finished-match results |
| POST | `/betbuilder/price` | Price Bet Builder slips |

## Key resources

- **Odds board** — Every listed match with current quotes, filterable by sport, in-play status, and market group ids
- **Matches** — Catalogue of pre-match and in-play matches with names, league, and kickoff, plus one-match snapshots
- **Price history and closing lines** — Recorded price points per selection and each selection's pre-match close and last price
- **Outrights and results** — Futures markets for winner questions and finished-match scores with per-period breakdowns
- **Bet Builder** — Combined bet365 price for multi-leg slips from one pre-match match

## 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:** 67 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 100 / 100
  - Developer Experience & Jentic Compatibility: 66 / 100
  - AI-Readiness & Agent Experience: 51 / 100
  - Agent Usability: 94 / 100
  - Security: 50 / 100
  - AI Discoverability: 76 / 100
- **View full report:** https://jentic.com/apis/moviodds.com/moviodds/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 MoviOdds by hand means mapping market group ids like 40 and 1777, joining fixture ids across pre-match and live, respecting per-IP limits, and attaching an X-API-Key only on the Bet Builder route. Through Jentic you install once, import MoviOdds from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** MoviOdds carries the fixture id as a query parameter and the Bet Builder legs in the request body, so rules bound which operations your agent may call, not which match. You choose the operations it may call, so the keyed POST `/betbuilder/price` route is not included unless you add it.
- **Credential handling:** Your MoviOdds Bet Builder 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 'get current odds for a match' or 'price a bet builder slip', and Jentic returns the matching MoviOdds operation with its input schema, including the fi, sport, and groups parameters, so the agent calls the right route directly.

## Related APIs

- **The Odds API** — Odds from many bookmakers across major sports in one feed
- **Odds API** — Sports odds data API covering multiple sportsbooks
- **API-Sports Football** — Football fixtures, lineups, statistics, and standings

## FAQ

### What authentication does the MoviOdds bet365 Odds API use?

Per its OpenAPI spec, the odds, catalogue, snapshot, history, closing, outrights, results, and health routes are open and need no key. POST `/betbuilder/price` is the one route that declares an API key, sent in the X-API-Key header. Through Jentic that key is held by your own instance and attached at call time, so the agent never sees it.

### What are the rate limits for the MoviOdds bet365 Odds API?

The OpenAPI spec states 300 requests per minute per IP on GET /odds and 120 requests per minute per IP on GET /history, and recommends the WebSocket at wss://moviodds.com/ws over polling for live updates. A busy archive read on the history route answers 503 with a Retry-After header. See https://moviodds.com/doc for the stream protocol.

### Can I get in-play odds for only one market with the MoviOdds API?

Yes. GET /odds accepts in_play=1 to return only matches currently in play, and a comma-separated groups filter of market group ids. For soccer Full Time Result the group is 40 before kickoff and 1777 in play, so groups=1777 with in_play=1 returns just live match-result prices.

### How do I read a match's closing line through Jentic?

Search Jentic for 'get the closing odds for a match', load the GET /closing operation, and execute it with fi set to the fixture id from GET /catalog. Each selection comes back with its pre_close and last price points. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the MoviOdds API?

Yes. Write a rule that allows only GET /odds, GET /catalog, and GET /snapshot, and the agent can read boards and single matches but cannot spend your keyed Bet Builder quota on POST `/betbuilder/price.` Every call it makes is logged so you can see which matches it looked up.

### Is MoviOdds an official bet365 API?

No. MoviOdds is an independent project and is not affiliated with or endorsed by bet365. It serves bet365 prices only, so it is not a multi-bookmaker comparison feed, and it does not place bets.
