Best odds guaranteed (BOG): what it means for your data
OddsRelay · · Updated · 5 min read
A bookmaker offering best odds guaranteed settles a winning bet at the starting price when that price is bigger than the one you took. For a builder, the useful part is narrower: the uplift is paid after the off, so everything a tool can show before the race rests on the fixed price and its exchange lay.
What does best odds guaranteed mean?
You back a horse at a fixed price ahead of the race. When the race goes off, the bookmaker compares that price with the official starting price (SP). If the SP is longer, a winning bet is paid at the SP. If it is shorter, you keep the price you took. The rule only ever moves in the bettor's favour, and only on a winner.
The concession belongs to each bookmaker, and each one writes its own terms. Which races qualify, the time from which it applies, whether each-way bets are covered and any cap on the extra paid all vary. A bookmaker can also withdraw it from an individual account. The glossary entry keeps the definition short.
It is a bookmaker promotion. The exchange side has no equivalent, and a lay bet settles at the price it was matched at, whatever the SP turns out to be.
How does BOG change a matched bet?
It adds upside to one leg only. A qualifying bet is sized the usual way: lay stake = back stake × back odds ÷ (lay odds − commission), with commission at your own exchange rate. The pair then costs the same small amount whichever way the race goes.
Take an illustrative 2% commission. Back a horse for 10 units at 6.0 and lay it at 6.4, and the lay stake is 60 ÷ 6.38 = 9.40 units. If the horse loses, the back stake is gone and the lay returns 9.21 after commission. If it wins at the fixed price, the back bet makes 50 and the lay costs 50.78. Either way the pair ends about 0.78 units down.
Now say the horse wins and its SP is 9.0. BOG pays the back bet at 9.0, so it makes 80 instead of 50. The lay still costs 50.78, because it was struck at 6.4. The pair ends 29.22 units up. If the horse loses, or wins at an SP no bigger than 6.0, the result is the same 0.78 loss as before.
The uplift depends on the SP
On most bets BOG adds nothing, because most horses lose. Treat it as a possible bonus on an ordinary qualifying bet, with the bookmaker's own terms deciding what is paid.
What the BOG board holds
The feed's bog board, GET /v2/odds/bog, holds pre-match win prices for horse races, each from a bookmaker offering best odds guaranteed on that race. Every other bookmaker's price for the same race is on the standard board.
Each outcome carries the bookmakers' back prices, best first, and the exchange lay prices for the same horse, lowest first, from Betfair, Smarkets, Matchbook and BETDAQ. Every lay offer carries available, the money on offer at that price.
The shape is the standard board's shape. A racing event carries venue in place of teams, and the win market carries a back list and a single lay list with no place terms. For code already reading the standard board, a BOG view is a path change. Here is an example, cut from a recorded reply:
{
"meta": { "feed_type": "bog", "region": "uk", "odds_format": "decimal", "processed_at": "2026-09-17T02:27:42.471Z" },
"data": [{
"event_id": "or_evt_58ab94d71497",
"sport_key": "horse_racing",
"sport_title": "Horse Racing",
"commence_time": "2026-09-17T12:30:00Z",
"venue": "Ayr",
"markets": [{
"key": "win",
"outcomes": [{
"name": "Bassrah",
"back": [
{ "bookmaker": "ladbrokes", "price": 4.0, "link": "https://www.ladbrokes.com/en/sports/event/258542357" },
{ "bookmaker": "betfred", "price": 4.0, "link": "https://www.betfred.com/sports/horse-racing/event/36917738" }
],
"lay": [
{ "exchange": "betfair_exchange", "price": 4.3, "available": 17.26, "link": "https://www.betfair.com/exchange/plus/horse-racing/market/1.262474543" },
{ "exchange": "smarkets", "price": 4.5, "available": 90.21, "link": "https://smarkets.com/sport/horse-racing/ayr/2026/09/17/13-30/45322266/" }
]
}]
}]
}]
}The SP is not in the feed
The starting price is set at the off, after the last pre-match price the board carries. A table that shows a BOG payout before the race is guessing. Our view is that a BOG table should rank on the fixed-price pair and show the uplift as a possibility, never as a number.
The reply holds no score and no loss figure. The outcomes are paired against exchange lay and liquidity-gated, and the rating and qualifying loss are simple arithmetic on the pair, which the oddsmatcher widget shows. Doing it on your side means your users' own commission rate goes into it:
// commission is your user's own exchange rate, e.g. 0.02 // stake is the back stake const back = outcome.back[0]; // best back price first const lay = outcome.lay[0]; // lowest lay price first const layStake = (stake * back.price) / (lay.price - commission); const ifItWins = stake * (back.price - 1) - layStake * (lay.price - 1); // at the fixed price const rating = (back.price / lay.price) * 100; const layCovered = lay.available >= layStake;
The last line is the check a racing table needs most, because the money behind a racing lay price can be thin. When available at the top lay price is smaller than the lay stake, the rest has to be laid further down the list, or at a price the reply does not show, and the qualifying loss moves with it.
Narrowing the board to your users
A BOG table is only useful for the bookmakers a user holds accounts with. The matched boards take bookmakers, exchanges and a kick-off window as filters, so a request can ask for one user's books and the next few hours of racing. The matched board filters guide lists them.
GET /v2/coverage, without a key, lists the bookmakers and sports on each product, bog included, and whether each is live. That tells a tool whose prices a BOG table will hold before it asks.
For age, meta.processed_at is the board's time and meta.last_seen gives each venue's last read per sport, so every line in a table can carry an upper bound on how old its prices are. The freshness guide covers both.
Where to go next
The API reference has the full response shape. To call the BOG board on your own key, request access.