The bookmakerID is williamhill. Not william-hill, not William Hill, not williamHill.
That sounds like a trivia question until you consider how most people build a bookmaker lookup: take the display name, lowercase it, replace the spaces with hyphens, and use that as the key. Do that here and every William Hill request comes back empty. Not an error — empty, which is considerably harder to notice.
Names and IDs are separate fields, and they do not always agree
William Hill is the clearest example in the book list, but it is not the only one. Display names carry spaces, punctuation and capitalisation that the IDs do not, and the two are maintained as separate fields rather than one being derived from the other. A name can be corrected without the ID moving, because the ID is the contract.
So do not derive one from the other in either direction. The bookmakers reference lists every bookmakerID with its display name, which is the list to build your lookup from. If you are storing books in your own database, store the ID as the key and treat the name as a label you render.
This matters more than it looks. A wrong ID in a request parameter returns an empty result rather than a 4xx, so the failure is silent: your comparison table renders, it just quietly has one fewer book in it than you think, on every row, forever.
William Hill on the free plan
The free Amateur plan carries nine of the 85+ books in the feed: FanDuel, Draft Kings, BetMGM, Caesars, ESPN BET, Bovada, Unibet, PointsBet and William Hill.
William Hill is the UK-facing book in that group. Most of the rest are American, which is worth knowing when you are deciding what to test your integration against — a book pricing to a British audience will not always post the same market list as one pricing to a US audience, and the free plan is the cheapest place to find that out.
The Unibet Odds API page covers the other side of that, including how three-way soccer markets are structured, since two of the eight free-plan leagues are soccer competitions.
Where William Hill shows up
Two places worth calling out, both from our own coverage tables:
NFL defensive props. The NFL page lists William Hill in the defence prop row, covering defense_tackles, defense_soloTackles, defense_assistedTackles, defense_combinedTackles, defense_sacks and defense_interceptions. A British book pricing individual tackle counts in American football is not the first thing you would guess, and defensive props are a thinner category than the offensive ones, so the books that do carry them matter more.
Soccer regulation lines. It appears in the coverage for the three-way regulation moneyline across international competitions, which is the market a soccer product is built around.
Requesting William Hill prices
Filter to William Hill alone with bookmakerID=williamhill:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NFL&bookmakerID=williamhill&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
More usefully, request it alongside the other books on the same market:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NFL&bookmakerID=williamhill,draftkings,fanduel,unibet&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
Every book comes back under the same oddID, so comparing them is a lookup rather than a name-matching problem — which is the same reason building against IDs rather than names matters.
What a William Hill price looks like
{
"eventID": "...",
"leagueID": "NFL",
"odds": {
"defense_sacks-PLAYER_ID-game-ou-over": {
"oddID": "defense_sacks-PLAYER_ID-game-ou-over",
"marketName": "Sacks Over/Under",
"statID": "defense_sacks",
"statEntityID": "PLAYER_ID",
"periodID": "game",
"betTypeID": "ou",
"sideID": "over",
"fairOdds": "+135",
"fairOverUnder": "0.5",
"bookOdds": "+125",
"byBookmaker": {
"williamhill": { "odds": "+130", "overUnder": "0.5", "available": true },
"draftkings": { "odds": "+120", "overUnder": "0.5", "available": true }
}
}
}
}
Note the key inside byBookmaker is williamhill, matching the request parameter. Odds and lines are both strings, so +130 keeps its plus sign and "0.5" stays a string rather than becoming a float. fairOdds is the vig-free consensus across every book pricing that market while bookOdds keeps the margin in.
Coverage, honestly
William Hill does not price everything. Read byBookmaker on each odd rather than assuming it is there, and treat its absence as normal rather than as an error — particularly on the narrower prop categories, where the field of books pricing a market thins out considerably. The /markets endpoint returns the supported set by league if you would rather check before requesting odds.
Because an unrecognised bookmakerID also returns nothing, an empty result on its own does not tell you which of the two happened. If a filtered request comes back empty, check the ID against the bookmakers reference before assuming the book is not pricing the market.
Use cases for William Hill data
Prototyping is the honest first one. William Hill is available before you have entered a card, so it is part of the set you can validate an integration against rather than something you read about and hope works after upgrading.
For odds comparison tools, a book aimed at a different audience than the American majors is worth a column, because two books selling to the same customers tend to show the same number.
For player prop tooling, the defensive categories are where a marginal book is worth most, simply because far fewer books price them than price passing and rushing markets.
William Hill API technical specifications
William Hill comes through the standard /v2/events endpoint, with no separate call, credential or schema.
Billing is per event object rather than per market or per book, so a ten-game slate is ten objects whether the response carries four books or eighty, and whether it returns four markets per game or four hundred.
The free Amateur plan gives you 2,500 objects a month at 10 requests a minute on a ten-minute update interval — enough to build against real fixtures, not enough to run anything live. Odds refresh sub-minute on Pro. 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 William Hill?
Is William Hill available on the free plan?
Why did my William Hill request come back empty?
Which markets does William Hill price?
Should I store bookmakers by name or by ID?
Does adding William Hill to a request cost more?
Build against it before you pay anything
William Hill is one of nine books on the free plan. 2,500 objects a month, no card required.