A sportsbook's market list is not purely a commercial decision. What a book is allowed to offer depends in part on who licenses it, which is why two books covering the same match can publish quite different sets of markets.
BetOnline is not tied to a single regulated market the way a US state-licensed book is. That shows up in the data as a different coverage shape rather than as more coverage, and it is the reason to carry it.
Where BetOnline shows up in the coverage tables
The Premier League coverage table on our EPL page lists a different set of books for each market category. BetOnline appears in one of them: shots and attacking props — shots, shots_onGoal, shots_assisted, dribbles_attempted and assists.
The books named for that category are not the same ones named for the headline match lines. Moneylines, spreads and totals list DraftKings, FanDuel, BetMGM, Caesars and the rest of the majors. Shots and attacking props list bet365, FanDuel, BetRivers, BetOnline, PrizePicks, Novig and Ballybet.
That gap is the whole point. On a Premier League moneyline you have more books than you need and they mostly agree. On shots on goal for a specific midfielder, the field thins out fast, and a book that prices it is worth more to you than the tenth book pricing the moneyline.
The same pattern holds across the tables generally: headline markets are crowded, the long tail is not, and the books in the long tail are rarely the biggest names.
Which plan includes BetOnline
BetOnline is available on the Rookie plan and above. The free Amateur tier carries a shorter list of nine books that does not include it, so a request filtered to betonline on that plan returns an empty result rather than an error. Pricing lists the books on each tier.
Requesting BetOnline prices
Filter to BetOnline alone with bookmakerID=betonline:
curl "https://api.sportsgameodds.com/v2/events?leagueID=EPL&bookmakerID=betonline&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
In practice you want it alongside the books it complements rather than on its own:
curl "https://api.sportsgameodds.com/v2/events?leagueID=EPL&bookmakerID=betonline,bet365,fanduel,prizepicks&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 BetOnline price looks like
Player props use the player's ID as the statEntityID, following the same {statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID} pattern as every other market:
{
"eventID": "...",
"leagueID": "EPL",
"odds": {
"shots_onGoal-PLAYER_ID-game-ou-over": {
"oddID": "shots_onGoal-PLAYER_ID-game-ou-over",
"marketName": "Shots On Goal Over/Under",
"statID": "shots_onGoal",
"statEntityID": "PLAYER_ID",
"periodID": "game",
"betTypeID": "ou",
"sideID": "over",
"fairOdds": "+118",
"fairOverUnder": "1.5",
"bookOdds": "+110",
"byBookmaker": {
"betonline": { "odds": "+120", "overUnder": "1.5", "available": true },
"bet365": { "odds": "+105", "overUnder": "1.5", "available": true }
}
}
}
}
Odds and lines both arrive as strings, so +120 stays "+120" with the plus sign intact and "1.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
BetOnline does not price everything, and its coverage is less predictable than a major book's. Read byBookmaker on each odd rather than assuming it is there, and treat its absence as normal rather than as an error. The /markets endpoint returns the supported set by league if you would rather check up front.
This is also a book where availability genuinely varies for your end users depending on where they are. If you are building a product that surfaces a price and then sends someone to a book, that is worth handling in your interface rather than assuming every line you can read is a line your user can act on.
Use cases for BetOnline data
Odds comparison is the direct one, with the caveat above about what you present to whom. The value is concentrated in the markets where fewer books compete rather than in the headline lines.
For arbitrage tools, books outside the main cluster turn up on one leg more often than their size suggests, simply because they are not watching the same competitors as closely.
For positive EV work and modelling generally, a book with a different market list gives you markets to price that the crowded books never post, which is usually more useful than another opinion on a spread you already have twenty views of.
BetOnline API technical specifications
BetOnline 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 BetOnline alone or BetOnline alongside eighty others. Adding books to a request you were already making costs response size and nothing else.
Odds refresh sub-minute on Pro, with a longer interval on Rookie. The API documentation covers authentication, pagination and the full parameter list, and handling odds covers reading byBookmaker in code.
Frequently asked questions
What is the bookmakerID for BetOnline?
Which plans include BetOnline?
Why carry BetOnline when I already have the major books?
Which markets does BetOnline price?
Is BetOnline available to all of my users?
Does adding BetOnline to a request cost more?
Cover the markets the big books skip
BetOnline and every other book we carry on the same oddID, in one request.