Bet365 prices around a third of the markets in our feed, which puts it third by market count behind DraftKings and FanDuel. The reason to carry it anyway is where that coverage sits: it leads every book we cover on NBA markets, and it turns up in the categories where the field thins out — soccer corner kicks, individual innings, MLB pitching and batting props, and team and game specials.
That is the argument for carrying it, and it is a different argument from the one for a prop-heavy book.
Breadth, not prop depth
Bet365's gaps are worth knowing, because they are not random. It is absent from several of the mainstream US player prop categories — NFL passing props, NFL rushing and receiving props, MLB batting props and NBA combo props — which are exactly the rows where the other major US books, the DFS operators and the prop specialists appear instead. ESPN BET, for one, covers both of the NFL prop categories Bet365 does not.
On the team and game specials rows the position reverses. There Bet365 is listed next to Pinnacle and Circa rather than the mainstream books — and a market only those three post is one most feeds will not carry at all.
So the shape is the opposite of a book like Fanatics, which is concentrated in the prop rows and lighter elsewhere. If you are building prop comparison, Bet365 is not the book that fills your gaps. If you are building anything that reaches past the headline markets — period splits, corner markets, inning-by-inning baseball, the specials — it usually is.
The /markets endpoint returns the supported set by league from live data, which is the authoritative version of all of this.
Which plan includes Bet365
Bet365 is available on the Pro plan and above, in the same group as Circa, Fanatics, Pinnacle and PrizePicks. Neither the free Amateur tier nor the Rookie plan carries it.
This matters more than it sounds. A request filtered to bet365 on a plan that does not carry it returns an empty result rather than an error — a 200 with nothing in it. If you are evaluating on the free tier and your Bet365 request comes back blank, that is the plan gate, not a bug in your code. Pricing lists the books on each tier.
If you want the widest coverage available without a paid plan, DraftKings is the book to test against — it carries more markets than any other book in the feed, Bet365 included, and it is on the free Amateur tier.
Requesting Bet365 prices
Filter to Bet365 alone with bookmakerID=bet365:
curl "https://api.sportsgameodds.com/v2/events?leagueID=EPL&bookmakerID=bet365&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
In practice you want it next to the books you are comparing against:
curl "https://api.sportsgameodds.com/v2/events?leagueID=EPL&bookmakerID=bet365,draftkings,betmgm,pinnacle&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
Every book in the response sits under the same oddID, so comparing them is a lookup rather than a name-matching exercise.
What a Bet365 price looks like
Here is a corners total, one of the categories where fewer books compete:
{
"eventID": "...",
"leagueID": "EPL",
"odds": {
"cornerKicks-all-game-ou-over": {
"oddID": "cornerKicks-all-game-ou-over",
"marketName": "Total Corners Over/Under",
"statID": "cornerKicks",
"statEntityID": "all",
"periodID": "game",
"betTypeID": "ou",
"sideID": "over",
"fairOdds": "-110",
"fairOverUnder": "10.5",
"bookOdds": "-115",
"byBookmaker": {
"bet365": { "odds": "-108", "overUnder": "10.5", "available": true },
"draftkings": { "odds": "-120", "overUnder": "10.5", "available": true }
}
}
}
}
Game-level markets use all as the statEntityID rather than a team or player ID, following the same {statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID} pattern as everything else. Odds and lines both arrive as strings, so -108 stays "-108" and "10.5" does not quietly become a float.
fairOdds is the vig-free consensus across every book pricing that market and bookOdds keeps the margin in, which gives you a benchmark without computing one.
Coverage, honestly
Bet365 does not price everything, and no single book does. Read byBookmaker on each odd rather than assuming it is there, and treat its absence as normal rather than as an error.
Coverage is not static either. Books add and drop markets, so anything you hardcode is a bug waiting for a quiet week. Query /markets if you would rather check up front than handle it at runtime. Every book we carry, and the plan each one is on, is listed on the bookmakers index.
Use cases for Bet365 data
Odds comparison is the direct one, and Bet365's breadth means it fills rows on your comparison grid that would otherwise be empty.
For live and in-play products, the period and half markets are carried pre-match and live, which is where most in-play products actually operate.
For arbitrage and positive EV work, the markets outside the headline lines are where prices disagree most, simply because fewer books are watching them.
Bet365 API technical specifications
Bet365 comes through the standard /v2/events endpoint, with no separate call, credential or schema for any individual book.
Billing is per event object rather than per market or per book, so a ten-match weekend is ten objects whether you ask for Bet365 alone or Bet365 alongside eighty others. Adding books to a request you were already making costs response size and nothing else.
Odds refresh sub-minute on Pro. Scores and settlement data ship alongside the odds, so there is no separate results integration — see bet tracking and settlement. The API documentation covers authentication, pagination and the full parameter list, handling odds covers reading byBookmaker in code, and there are SDKs for TypeScript, Python, Ruby, Go and Java.
Frequently asked questions
What is the bookmakerID for Bet365?
Which plans include Bet365?
Which leagues and markets does Bet365 cover?
Is Bet365 a good source for player props?
Does Bet365 have a public odds API?
Are live in-play Bet365 odds available?
Does adding Bet365 to a request cost more?
Reach past the headline markets
Bet365 and every other book we carry on the same oddID, in one request.