{"id":3648,"date":"2026-08-18T10:00:00","date_gmt":"2026-08-18T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3648"},"modified":"2026-08-29T15:03:05","modified_gmt":"2026-08-29T15:03:05","slug":"sbobet-api-odds-access","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/","title":{"rendered":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap"},"content":{"rendered":"<p>SBOBet does not publish an API. There is no developer portal, no key, no docs page. The route people describe on forums runs through an agent account, and an agent account is a credit line with a person attached, not a data feed you can point a script at.<\/p>\n<p>You can still read SBOBet&#8217;s prices in Python. This post shows how, and then shows what the numbers say about the book once you have them, because SBOBet prices very differently from the US retail books sitting next to it in the same payload.<\/p>\n<p>One number frames the whole post. On a Brasileiro Serie A fixture two days out, SBOBet quoted <strong>14 markets<\/strong>. DraftKings quoted 96. BetParx quoted 140. SBOBet was still the tightest sportsbook on the handicap.<\/p>\n<h2>Why there is no SBOBet API<\/h2>\n<p>SBOBet runs an Asian-style operation. It takes large stakes on a narrow menu and it does not chase recreational volume through affiliate widgets or public data partnerships. A US book publishes odds feeds because odds feeds send traffic back. SBOBet&#8217;s business does not work that way, so the feed never got built.<\/p>\n<p>That leaves three options, and two of them are bad.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Route<\/th>\n<th>What it costs you<\/th>\n<th>What you get<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Agent account<\/td>\n<td>Credit terms, a human intermediary, settlement risk<\/td>\n<td>Prices you can bet, no machine-readable feed<\/td>\n<\/tr>\n<tr>\n<td>Scraping<\/td>\n<td>Session handling, Cloudflare, per-region markup, ongoing breakage<\/td>\n<td>One book, brittle<\/td>\n<\/tr>\n<tr>\n<td>OddsPapi<\/td>\n<td>A query parameter<\/td>\n<td>SBOBet plus 350+ other books in one JSON response, with free historical price history<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>OddsPapi carries SBOBet under the slug <code>sbobet<\/code>. Same call, same shape, same parse as Pinnacle or Bet365. Everything below runs on the free tier.<\/p>\n<h2>What SBOBet actually covers<\/h2>\n<p>Soccer is the core. Sampling one fixture per competition across the top of the board on 7 August 2026, SBOBet priced 12 of 14: LaLiga, Eredivisie, Liga Portugal, 2. Bundesliga, Ligue 2, EFL Cup, Chinese Super League, Brasileiro Serie B, Liga Profesional, Leagues Cup, Austrian Bundesliga, Armenian Premier League. It skipped J.League and a UEFA Conference League tie that only three books had opened.<\/p>\n<p>Down in the tail it thins out. Across 30 lower-division and amateur competitions sampled the same day, SBOBet appeared on 11. Pinnacle appeared on 20. If you assumed the Asian sharp goes deeper than Pinnacle into obscure leagues, the data says the opposite.<\/p>\n<p>Other sports, five fixtures sampled each:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Sport<\/th>\n<th>sportId<\/th>\n<th>Fixtures with odds (7 days)<\/th>\n<th>SBOBet present<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Tennis<\/td>\n<td>12<\/td>\n<td>200<\/td>\n<td>4 of 5<\/td>\n<\/tr>\n<tr>\n<td>Handball<\/td>\n<td>22<\/td>\n<td>18<\/td>\n<td>4 of 5<\/td>\n<\/tr>\n<tr>\n<td>Ice Hockey<\/td>\n<td>15<\/td>\n<td>15<\/td>\n<td>3 of 4<\/td>\n<\/tr>\n<tr>\n<td>Volleyball<\/td>\n<td>23<\/td>\n<td>4<\/td>\n<td>3 of 4<\/td>\n<\/tr>\n<tr>\n<td>Basketball<\/td>\n<td>11<\/td>\n<td>67<\/td>\n<td>2 of 5<\/td>\n<\/tr>\n<tr>\n<td>American Football<\/td>\n<td>14<\/td>\n<td>8<\/td>\n<td>1 of 5<\/td>\n<\/tr>\n<tr>\n<td>Baseball<\/td>\n<td>13<\/td>\n<td>154<\/td>\n<td>0 of 5<\/td>\n<\/tr>\n<tr>\n<td>Cricket<\/td>\n<td>27<\/td>\n<td>100<\/td>\n<td>0 of 5<\/td>\n<\/tr>\n<tr>\n<td>MMA<\/td>\n<td>20<\/td>\n<td>32<\/td>\n<td>0 of 5<\/td>\n<\/tr>\n<tr>\n<td>CS2<\/td>\n<td>17<\/td>\n<td>46<\/td>\n<td>0 of 5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Write your MLB and UFC code against other books. The catalogue also flags <code>sbobet<\/code> with <code>liveOdds: false<\/code>, so treat this slug as a pre-match source and build in-play features on books that carry them.<\/p>\n<h2>The 14-market menu<\/h2>\n<p>Here is the entire SBOBet menu on Botafogo v Fluminense (<code>id1000032566886900<\/code>), pulled 7 August 2026 with kick-off two days out:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Market ID<\/th>\n<th>Name<\/th>\n<th>Prices<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>101<\/td>\n<td>Full Time Result<\/td>\n<td>2.33 \/ 3.18 \/ 2.79<\/td>\n<\/tr>\n<tr>\n<td>1072<\/td>\n<td>Asian Handicap 0<\/td>\n<td>1.775 \/ 2.12<\/td>\n<\/tr>\n<tr>\n<td>1070<\/td>\n<td>Asian Handicap -0.25<\/td>\n<td>2.14 \/ 1.765<\/td>\n<\/tr>\n<tr>\n<td>1010<\/td>\n<td>Over Under 2.5<\/td>\n<td>1.995 \/ 1.875<\/td>\n<\/tr>\n<tr>\n<td>10170<\/td>\n<td>Over Under 2.25<\/td>\n<td>1.705 \/ 2.19<\/td>\n<\/tr>\n<tr>\n<td>10208<\/td>\n<td>First Half Result<\/td>\n<td>2.99 \/ 2.13 \/ 3.15<\/td>\n<\/tr>\n<tr>\n<td>10216<\/td>\n<td>First Goal<\/td>\n<td>1.86 \/ 2.06 \/ 10.0<\/td>\n<\/tr>\n<tr>\n<td>10219<\/td>\n<td>Last Goal<\/td>\n<td>1.86 \/ 2.06 \/ 10.0<\/td>\n<\/tr>\n<tr>\n<td>10222<\/td>\n<td>Odd \/ Even<\/td>\n<td>1.915 \/ 1.975<\/td>\n<\/tr>\n<tr>\n<td>10336<\/td>\n<td>Correct Score<\/td>\n<td>25 outcomes<\/td>\n<\/tr>\n<tr>\n<td>101902<\/td>\n<td>Double Chance<\/td>\n<td>1.37 \/ 1.52 \/ 1.29<\/td>\n<\/tr>\n<tr>\n<td>101919<\/td>\n<td>Half Time \/ Full Time<\/td>\n<td>9 outcomes<\/td>\n<\/tr>\n<tr>\n<td>102462<\/td>\n<td>Correct Score 1st Half<\/td>\n<td>16 outcomes<\/td>\n<\/tr>\n<tr>\n<td>102526<\/td>\n<td>Correct Score 2nd Half<\/td>\n<td>16 outcomes<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>That same list came back on all five fixtures I pulled, across five competitions on three continents. No both-teams-to-score. No corners. No team totals. No player props. No alt ladder. Every other book on that fixture quoted BTTS; SBOBet quoted zero corner markets while BetParx quoted 54.<\/p>\n<p>The handicaps and totals are the tell. SBOBet posted two handicap rungs and two goal lines. Pinnacle posted nine handicap rungs and eight goal lines. SBOBet publishes its estimate of the true number and takes bets on either side of it. The menu is the opinion.<\/p>\n<h2>Step 1: authenticate and confirm the slug<\/h2>\n<p>The API key rides as a query parameter. It is never a header.<\/p>\n<pre class=\"wp-block-code\"><code>import requests, time\n\nAPI_KEY  = \"YOUR_API_KEY\"\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\n\ndef api(path, **params):\n    params[\"apiKey\"] = API_KEY\n    for _ in range(5):\n        r = requests.get(f\"{BASE_URL}\/{path}\", params=params, timeout=120)\n        if r.status_code == 200:\n            return r.json()\n        retry = r.json().get(\"error\", {}).get(\"retryMs\", 1500) \/ 1000\n        time.sleep(retry + 0.3)\n    r.raise_for_status()\n\nbooks = api(\"bookmakers\")\nprint(len(books), \"bookmakers\")\nprint([b for b in books if b[\"slug\"] == \"sbobet\"])<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>348 bookmakers\n[{'bookmakerName': 'SBOBET', 'slug': 'sbobet', 'liveOdds': False, 'cloneOf': None}]<\/code><\/pre>\n<p>The retry block matters. The free tier rate-limits per endpoint and returns HTTP 429 with a <code>retryMs<\/code> value in the body. That body is valid JSON, so code that checks for a <code>bookmakerOdds<\/code> key without checking the status code reads a rate-limit response as &#8220;no coverage&#8221; and reports that SBOBet prices nothing.<\/p>\n<h2>Step 2: find a fixture SBOBet is pricing<\/h2>\n<p><code>\/fixtures<\/code> takes a sport and a date range up to 10 days wide. Only fixtures with <code>hasOdds: true<\/code> return a price payload.<\/p>\n<pre class=\"wp-block-code\"><code>fixtures = api(\"fixtures\", sportId=10, **{\"from\": \"2026-08-08\", \"to\": \"2026-08-10\"})\nlive = [f for f in fixtures if f[\"hasOdds\"]]\n\nfor f in live[:5]:\n    print(f[\"fixtureId\"], f[\"tournamentName\"],\n          f[\"participant1Name\"], \"v\", f[\"participant2Name\"])<\/code><\/pre>\n<p>Team names live on <code>participant1Name<\/code> and <code>participant2Name<\/code>. Do not query <code>\/odds<\/code> with the <code>bookmakers<\/code> filter set to <code>sbobet<\/code> until you know SBOBet is on the fixture. That filter zeroes the entire response if any requested slug is missing, which looks identical to a book with no prices.<\/p>\n<h2>Step 3: parse the menu<\/h2>\n<p>Market IDs are integers and the names live in <code>\/markets<\/code>. Build the lookup once and reuse it. The catalogue is global rather than per-sport, so <code>sportId<\/code> on that endpoint changes nothing; read the market IDs off the live payload and use the catalogue to name them.<\/p>\n<pre class=\"wp-block-code\"><code>catalog = api(\"markets\", sportId=10)\nMARKET  = {m[\"marketId\"]: m for m in catalog}\nOUTCOME = {(m[\"marketId\"], o[\"outcomeId\"]): o[\"outcomeName\"]\n           for m in catalog for o in m.get(\"outcomes\", [])}\n\ndef quotes(book, market_id):\n    \"\"\"Live two-sided prices for one market on one book.\"\"\"\n    market = book[\"markets\"].get(str(market_id))\n    if not market:\n        return {}\n    live = {}\n    for outcome_id, outcome in market[\"outcomes\"].items():\n        price = outcome[\"players\"].get(\"0\")\n        if price and price.get(\"active\") is not False and price.get(\"price\", 0) &gt; 1:\n            live[int(outcome_id)] = price[\"price\"]\n    return live\n\nFIXTURE = \"id1000032566886900\"\nboard   = api(\"odds\", fixtureId=FIXTURE)[\"bookmakerOdds\"]\nsbobet  = board[\"sbobet\"]\n\nprint({slug: len(b[\"markets\"]) for slug, b in sorted(board.items())})\n\nfor market_id in sorted(sbobet[\"markets\"], key=int):\n    mid  = int(market_id)\n    meta = MARKET.get(mid, {})\n    name = meta.get(\"marketName\", \"?\")\n    if meta.get(\"handicap\"):\n        name += f\" {meta['handicap']}\"\n    priced = quotes(sbobet, mid)\n    if len(priced) &lt;= 4:\n        print(f\"{mid:&gt;7}  {name:34s} \" +\n              \"  \".join(f\"{OUTCOME.get((mid, o), o)} {p}\" for o, p in priced.items()))\n    else:\n        print(f\"{mid:&gt;7}  {name:34s} ({len(priced)} outcomes)\")<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>{'ballybet': 131, 'bet365': 56, 'betmgm': 72, 'betparx': 140, 'betrivers': 131,\n 'borgata': 72, 'caesars': 57, 'draftkings': 96, 'fanduel': 110, 'fourwinds': 75,\n 'hardrockbet': 94, 'kalshi': 27, 'pinnacle': 88, 'pointsbet.com.au': 33,\n 'polymarket': 60, 'sbobet': 14, 'williamhill': 57}\n\n    101  Full Time Result                   2 2.79  X 3.18  1 2.33\n   1010  Over Under Full Time 2.5           Under 1.875  Over 1.995\n   1070  Asian Handicap -0.25               2 1.765  1 2.14\n   1072  Asian Handicap                     1 1.775  2 2.12\n  10170  Over Under Full Time 2.25          Under 2.19  Over 1.705\n  10208  First Half Result                  1 2.99  X 2.13  2 3.15\n  ...<\/code><\/pre>\n<p>The <code>players<\/code> dict is keyed <code>\"0\"<\/code> on game lines. On player-prop markets it is keyed by player ID instead, which is why hardcoding <code>players[\"0\"]<\/code> makes prop markets look empty. SBOBet ships no props, so <code>\"0\"<\/code> is safe for this book.<\/p>\n<h2>Step 4: match SBOBet&#8217;s line at other books<\/h2>\n<p>This is the part that breaks naive line shopping. Every handicap and every goal line has <strong>its own market ID<\/strong>. Over\/Under 2.5 is market 1010, Over\/Under 2.25 is 10170, Over\/Under 2.75 is 10172. If you hardcode 1010 and call it &#8220;the total&#8221;, SBOBet vanishes on most fixtures, because it often does not quote 2.5 at all.<\/p>\n<p>Across the five fixtures I sampled, SBOBet&#8217;s goal lines were 2.25 alone, then 2.25 and 2.5, then 2.5 and 2.75, then 3 and 3.25, then 2.75 and 3. Two of five included 2.5. On the Eredivisie fixture SBOBet sat on 3 and 3.25 while Caesars, William Hill, BetMGM and FanDuel all quoted 2.5 and nothing near 3.25.<\/p>\n<p>Resolve by name and handicap, then compare like for like.<\/p>\n<pre class=\"wp-block-code\"><code>def lines(book, market_name, period=\"fulltime\"):\n    \"\"\"{handicap: (market_id, prices)} for one market name on one book.\"\"\"\n    found = {}\n    for market_id in book[\"markets\"]:\n        meta = MARKET.get(int(market_id))\n        if meta and meta[\"marketName\"] == market_name and meta.get(\"period\") == period:\n            priced = quotes(book, market_id)\n            if len(priced) == 2:\n                found[meta[\"handicap\"]] = (int(market_id), priced)\n    return found\n\ndef margin(prices):\n    return sum(1 \/ p for p in prices.values()) - 1\n\nfor line, (mid, priced) in sorted(lines(sbobet, \"Over Under Full Time\").items()):\n    print(f\"\\nline {line} (market {mid})\")\n    for slug, book in sorted(board.items()):\n        other = lines(book, \"Over Under Full Time\").get(line)\n        if other:\n            print(f\"  {slug:18s} {other[1]}  margin {margin(other[1])*100:5.2f}%\")<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>line 2.25 (market 10170)\n  ballybet           {10170: 1.72, 10171: 2.1}    margin  5.76%\n  betparx            {10170: 1.72, 10171: 2.1}    margin  5.76%\n  betrivers          {10171: 2.1, 10170: 1.72}    margin  5.76%\n  draftkings         {10170: 1.667, 10171: 2.05}  margin  8.77%\n  pinnacle           {10170: 1.709, 10171: 2.19}  margin  4.18%\n  sbobet             {10171: 2.19, 10170: 1.705}  margin  4.31%\n\nline 2.5 (market 1010)\n  ...\n  fanduel            {1010: 2.02, 1011: 1.81}     margin  4.75%\n  pinnacle           {1011: 1.9, 1010: 1.97}      margin  3.39%\n  sbobet             {1011: 1.875, 1010: 1.995}   margin  3.46%\n  ...<\/code><\/pre>\n<p>Six of 17 books quoted the 2.25 line. Sixteen quoted 2.5. Quarter lines are an Asian-market convention and most US books skip them, so a cross-book comparison built on 2.5 alone throws away the line SBOBet and Pinnacle think is right.<\/p>\n<h2>The margin split: wide on the three-way, tight on the handicap<\/h2>\n<p>Run the margins across both market types on the same fixture and SBOBet looks like two different books.<\/p>\n<pre class=\"wp-block-code\"><code>for slug in (\"sbobet\", \"pinnacle\", \"draftkings\", \"bet365\", \"fanduel\"):\n    book = board.get(slug)\n    three = quotes(book, 101)\n    ah    = lines(book, \"Asian Handicap\")\n    best  = min((margin(p) for _, p in ah.values()), default=None)\n    tail  = f\"best AH {best*100:6.2f}% ({len(ah)} rungs)\" if best else \"no AH\"\n    print(f\"{slug:12s} 1X2 {margin(three)*100:6.2f}%   {tail}\")<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>sbobet       1X2  10.21%   best AH   3.39% (2 rungs)\npinnacle     1X2   4.42%   best AH   3.04% (9 rungs)\ndraftkings   1X2   6.74%   best AH   8.85% (7 rungs)\nbet365       1X2   7.15%   no AH\nfanduel      1X2   6.02%   best AH   7.63% (2 rungs)<\/code><\/pre>\n<p>SBOBet charges 10.21% on the three-way and 3.39% on its handicap. Its own margin drops by a factor of three depending on which market you click. DraftKings runs the opposite way: 6.74% on the three-way and 8.85% on the handicap.<\/p>\n<p>Widen the sample to five fixtures across the Champions League qualifiers, Brasileiro Serie A, the English Championship, the Eredivisie and Liga Portugal, and the pattern holds. Median margin per book:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Book<\/th>\n<th>1X2<\/th>\n<th>Tightest handicap<\/th>\n<th>Tightest goal line<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SBOBet<\/td>\n<td>10.50%<\/td>\n<td><strong>3.17%<\/strong><\/td>\n<td>3.46%<\/td>\n<\/tr>\n<tr>\n<td>Pinnacle<\/td>\n<td>6.14%<\/td>\n<td>4.42%<\/td>\n<td>4.92%<\/td>\n<\/tr>\n<tr>\n<td>Hard Rock Bet<\/td>\n<td>7.30%<\/td>\n<td>5.46%<\/td>\n<td>6.66%<\/td>\n<\/tr>\n<tr>\n<td>Caesars \/ William Hill<\/td>\n<td>7.92%<\/td>\n<td>6.82%<\/td>\n<td>5.98%<\/td>\n<\/tr>\n<tr>\n<td>FanDuel<\/td>\n<td>8.10%<\/td>\n<td>7.63%<\/td>\n<td>4.89%<\/td>\n<\/tr>\n<tr>\n<td>BetMGM<\/td>\n<td>5.91%<\/td>\n<td>8.78%<\/td>\n<td>4.72%<\/td>\n<\/tr>\n<tr>\n<td>DraftKings<\/td>\n<td>6.91%<\/td>\n<td>9.11%<\/td>\n<td>7.50%<\/td>\n<\/tr>\n<tr>\n<td>Bet365<\/td>\n<td>8.54%<\/td>\n<td>quotes none<\/td>\n<td>2.24%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>SBOBet posts the worst three-way price in the field and the best handicap price in the field. Benchmark your model against its handicap. Ignore its 1X2, or use it as a demonstration of what a book charges on a market it does not want. We ran the full version of this study across nine Premier League fixtures in <a href=\"https:\/\/oddspapi.io\/blog\/why-sharps-bet-asian-handicap\/\">Why Sharps Bet Asian Handicap<\/a>, and the ratios came out the same.<\/p>\n<h2>De-vig the handicap<\/h2>\n<p>Two outcomes, one line, no draw. Multiply each price by the overround and you have SBOBet&#8217;s fair number.<\/p>\n<pre class=\"wp-block-code\"><code>mid, priced = min(lines(sbobet, \"Asian Handicap\").values(), key=lambda v: margin(v[1]))\noverround   = 1 + margin(priced)\n\nprint(f\"market {mid} ({MARKET[mid]['handicap']}), margin {margin(priced)*100:.2f}%\")\nfor outcome_id, price in priced.items():\n    fair = price * overround\n    print(f\"  {OUTCOME[(mid, outcome_id)]}: {price}  ->  fair {fair:.3f}  ({100\/fair:.1f}%)\")<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>market 1070 (-0.25), margin 3.39%\n  2: 1.765  ->  fair 1.825  (54.8%)\n  1: 2.14   ->  fair 2.212  (45.2%)<\/code><\/pre>\n<p>Fluminense at 54.8% on a quarter-ball line, from a book with a 3.39% cut. Compare that to what you get de-vigging a 10% three-way and the reason Asian syndicates live on the handicap becomes obvious. For the settlement mechanics of quarter lines, see the <a href=\"https:\/\/oddspapi.io\/blog\/asian-handicap-calculator-python\/\">Asian Handicap calculator<\/a>. For three-way de-vigging methods, see <a href=\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\">No-Vig Odds<\/a>.<\/p>\n<h2>Free historical odds: where SBOBet&#8217;s attention goes<\/h2>\n<p><code>\/historical-odds<\/code> returns the full snapshot history on the free tier, up to three bookmakers per call. The response key is <code>bookmakers<\/code>, not <code>bookmakerOdds<\/code>, and <code>players[\"0\"]<\/code> is a list rather than a dict.<\/p>\n<pre class=\"wp-block-code\"><code>hist = api(\"historical-odds\", fixtureId=FIXTURE, bookmakers=\"sbobet,pinnacle\")\n\nfor slug, book in hist[\"bookmakers\"].items():\n    print(f\"\\n{slug}: {len(book['markets'])} markets with history\")\n    for market_id in (\"101\", \"1072\"):\n        for outcome_id, outcome in book[\"markets\"][market_id][\"outcomes\"].items():\n            snaps   = outcome[\"players\"][\"0\"]\n            changes = sum(1 for a, b in zip(snaps, snaps[1:]) if a[\"price\"] != b[\"price\"])\n            print(f\"  market {market_id} outcome {outcome_id}: \"\n                  f\"{len(snaps):&gt;4} snapshots, {changes:&gt;4} price changes, \"\n                  f\"{snaps[0]['price']} -&gt; {snaps[-1]['price']}\")<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>pinnacle: 88 markets with history\n  market 101  outcome 101 :   33 snapshots,   23 price changes, 2.51  -> 2.52\n  market 1072 outcome 1072:   33 snapshots,   23 price changes, 1.793 -> 1.769\n\nsbobet: 14 markets with history\n  market 101  outcome 101 :   74 snapshots,    3 price changes, 2.44  -> 2.33\n  market 1072 outcome 1072:  284 snapshots,  226 price changes, 1.87  -> 1.775<\/code><\/pre>\n<p>Over five days SBOBet moved its three-way price three times and its handicap 226 times. Pinnacle repriced both at the same rate. Count price changes rather than snapshots, because the feed records on a cadence and most snapshots repeat the previous price.<\/p>\n<p>That 75-to-1 ratio is the cleanest evidence in the payload of where a book&#8217;s opinion lives. If you are building a steam detector or a closing-line study on SBOBet, watch market 1072 and ignore market 101. See the <a href=\"https:\/\/oddspapi.io\/blog\/steam-move-detector-python\/\">steam move detector<\/a> for the alerting side of that.<\/p>\n<h2>Four things that will bite you<\/h2>\n<ul>\n<li><strong>SBOBet publishes no limits and no <code>bookmakerChangedAt<\/code>.<\/strong> Both come back <code>null<\/code> on every outcome. Pinnacle published 600 and 780 on the same fixture. Null-check before any arithmetic on <code>limit<\/code>, and use <code>changedAt<\/code> if you need a timestamp.<\/li>\n<li><strong>The <code>bookmakers<\/code> filter is all-or-nothing.<\/strong> Ask for <code>sbobet,betway<\/code> on a fixture where Betway is absent and you get an empty response, not a partial one.<\/li>\n<li><strong>Duplicate feeds sit in the same payload.<\/strong> BetMGM and Borgata quote identically; so do BallyBet, BetParx and FourWinds; so do Caesars and William Hill. Dedupe on the price tuple before you average anything into a consensus. SBOBet is independent of all of them.<\/li>\n<li><strong>Pace your calls.<\/strong> One second between same-endpoint requests keeps you clean. Parallelising <code>\/odds<\/code> across fixtures gets almost everything rate-limited at any worker count.<\/li>\n<\/ul>\n<h2>Where this leaves you<\/h2>\n<p>SBOBet is worth pulling for one reason: it prices the Asian handicap tighter than any sportsbook in the feed, on quarter lines most books never quote, and it tells you through its repricing frequency exactly which of its own numbers it believes. It is a poor source for three-way prices, carries nothing on baseball or MMA, and offers no props or corners at all.<\/p>\n<p>So pull it alongside the rest. One <code>\/odds<\/code> call returns SBOBet next to Pinnacle, Bet365, the US retail books and the prediction markets, and the comparison writes itself. Start with <a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">the free odds API guide<\/a>, then <a href=\"https:\/\/oddspapi.io\/blog\/asian-handicap-api-cross-book-odds\/\">cross-book Asian handicap<\/a> and <a href=\"https:\/\/oddspapi.io\/blog\/singbet-api-asian-handicap-odds-guide\/\">Singbet<\/a> for the other half of the Asian market, or <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">line shopping<\/a> to fold it into a best-price scanner.<\/p>\n<p><strong>Stop hunting for an agent. <a href=\"https:\/\/oddspapi.io\/\">Get a free API key<\/a> and read SBOBet&#8217;s handicap in your next script.<\/strong><\/p>\n<h2>FAQ<\/h2>\n<h3>Does SBOBet have an official API?<\/h3>\n<p>No. SBOBet publishes no developer portal, API key or documentation. Data access runs through agent accounts, which are betting relationships rather than feeds. OddsPapi aggregates SBOBet&#8217;s prices under the slug <code>sbobet<\/code> and serves them as JSON alongside 350+ other bookmakers.<\/p>\n<h3>What sports does SBOBet cover on OddsPapi?<\/h3>\n<p>Soccer is the deepest by a wide margin, covering 12 of 14 top-tier competitions sampled in August 2026. Tennis, handball, ice hockey and volleyball appeared on most sampled fixtures. Basketball was patchy. Baseball, cricket, MMA and CS2 returned nothing across five sampled fixtures each.<\/p>\n<h3>Why does SBOBet quote so few markets?<\/h3>\n<p>SBOBet posted 14 markets per soccer fixture in every sample, against 96 for DraftKings and 140 for BetParx. It carries no both-teams-to-score, no corners, no player props and no alternate ladders, and it posts one or two handicap rungs instead of nine. The narrow menu goes with the pricing: it charges 3.17% on the handicap and 10.50% on the three-way.<\/p>\n<h3>Is SBOBet sharper than Pinnacle?<\/h3>\n<p>On the Asian handicap, yes, in this sample. SBOBet&#8217;s tightest handicap line ran a 3.17% median margin across five fixtures against Pinnacle&#8217;s 4.42%. On the three-way SBOBet was the widest book measured at 10.50%. Pinnacle also quotes nine handicap rungs to SBOBet&#8217;s two and covers far more lower-division soccer.<\/p>\n<h3>Can I get historical SBOBet odds for free?<\/h3>\n<p>Yes. <code>\/v4\/historical-odds<\/code> returns the full snapshot history on the free tier, up to three bookmakers per call. One Brasileiro fixture returned 74 snapshots on SBOBet&#8217;s three-way and 284 on its handicap over five days.<\/p>\n<h3>Does SBOBet offer in-play odds through the API?<\/h3>\n<p>The bookmaker catalogue flags <code>sbobet<\/code> with <code>liveOdds: false<\/code>, so treat it as a pre-match source. Build in-play features against books that carry live prices, and use the WebSocket feed for push updates.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\": \"Question\", \"name\": \"Does SBOBet have an official API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. SBOBet publishes no developer portal, API key or documentation. Data access runs through agent accounts, which are betting relationships rather than feeds. OddsPapi aggregates SBOBet's prices under the slug sbobet and serves them as JSON alongside 350+ other bookmakers.\"}},\n    {\"@type\": \"Question\", \"name\": \"What sports does SBOBet cover on OddsPapi?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Soccer is the deepest by a wide margin, covering 12 of 14 top-tier competitions sampled in August 2026. Tennis, handball, ice hockey and volleyball appeared on most sampled fixtures. Basketball was patchy. Baseball, cricket, MMA and CS2 returned nothing across five sampled fixtures each.\"}},\n    {\"@type\": \"Question\", \"name\": \"Why does SBOBet quote so few markets?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"SBOBet posted 14 markets per soccer fixture in every sample, against 96 for DraftKings and 140 for BetParx. It carries no both-teams-to-score, no corners, no player props and no alternate ladders, and it posts one or two handicap rungs instead of nine. The narrow menu goes with the pricing: it charges 3.17% on the handicap and 10.50% on the three-way.\"}},\n    {\"@type\": \"Question\", \"name\": \"Is SBOBet sharper than Pinnacle?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"On the Asian handicap, yes, in this sample. SBOBet's tightest handicap line ran a 3.17% median margin across five fixtures against Pinnacle's 4.42%. On the three-way SBOBet was the widest book measured at 10.50%. Pinnacle also quotes nine handicap rungs to SBOBet's two and covers far more lower-division soccer.\"}},\n    {\"@type\": \"Question\", \"name\": \"Can I get historical SBOBet odds for free?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. \/v4\/historical-odds returns the full snapshot history on the free tier, up to three bookmakers per call. One Brasileiro fixture returned 74 snapshots on SBOBet's three-way and 284 on its handicap over five days.\"}},\n    {\"@type\": \"Question\", \"name\": \"Does SBOBet offer in-play odds through the API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The bookmaker catalogue flags sbobet with liveOdds: false, so treat it as a pre-match source. Build in-play features against books that carry live prices, and use the WebSocket feed for push updates.\"}}\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: sbobet api\nSEO Title: SBOBet API: Access SBOBet Odds in Python (No Official API)\nMeta Description: SBOBet has no public API. Pull its Asian handicap prices in Python from OddsPapi alongside 350+ bookmakers. Free tier, free historical odds.\nSlug: sbobet-api-odds-access\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SBOBet charges 10.5% on the three-way and 3.2% on the Asian handicap of the same match. Pull both in Python and see why sharps bet only one of them.<\/p>\n","protected":false},"author":2,"featured_media":3649,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[24,8,9,11,83,10],"class_list":["post-3648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-asian-handicap","tag-free-api","tag-odds-api","tag-python","tag-sbobet","tag-sports-betting-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"SBOBet charges 10.5% on the three-way and 3.2% on the Asian handicap of the same match. Pull both in Python and see why sharps bet only one of them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-18T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-29T15:03:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1429\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Odds API Writer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/oddspapi.io\/logo-v2.webp\" \/>\n<meta name=\"twitter:creator\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:site\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odds API Writer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap\",\"datePublished\":\"2026-08-18T10:00:00+00:00\",\"dateModified\":\"2026-08-29T15:03:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\"},\"wordCount\":1912,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp\",\"keywords\":[\"Asian Handicap\",\"Free API\",\"Odds API\",\"Python\",\"SBOBet\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\",\"name\":\"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp\",\"datePublished\":\"2026-08-18T10:00:00+00:00\",\"dateModified\":\"2026-08-29T15:03:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"SBOBet API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"name\":\"OddsPapi\",\"description\":\"Sports Odds API Tutorials &amp; Guides\",\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"alternateName\":\"Odds Papi\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oddspapi.io\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\",\"name\":\"OddsPapi\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png\",\"width\":135,\"height\":135,\"caption\":\"OddsPapi\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/oddspapiapi\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\",\"name\":\"Odds API Writer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g\",\"caption\":\"Odds API Writer\"},\"url\":\"https:\/\/oddspapi.io\/blog\/author\/andy-lavelle\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/","og_locale":"en_US","og_type":"article","og_title":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog","og_description":"SBOBet charges 10.5% on the three-way and 3.2% on the Asian handicap of the same match. Pull both in Python and see why sharps bet only one of them.","og_url":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-08-18T10:00:00+00:00","article_modified_time":"2026-08-29T15:03:05+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp","type":"image\/webp"}],"author":"Odds API Writer","twitter_card":"summary_large_image","twitter_image":"https:\/\/oddspapi.io\/logo-v2.webp","twitter_creator":"@oddspapiapi","twitter_site":"@oddspapiapi","twitter_misc":{"Written by":"Odds API Writer","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap","datePublished":"2026-08-18T10:00:00+00:00","dateModified":"2026-08-29T15:03:05+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/"},"wordCount":1912,"commentCount":1,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp","keywords":["Asian Handicap","Free API","Odds API","Python","SBOBet","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/","url":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/","name":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp","datePublished":"2026-08-18T10:00:00+00:00","dateModified":"2026-08-29T15:03:05+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/sbobet-api-odds-access-scaled.webp","width":2560,"height":1429,"caption":"SBOBet API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/sbobet-api-odds-access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"SBOBet API: 10.5% on the Three-Way, 3.2% on the Handicap"}]},{"@type":"WebSite","@id":"https:\/\/oddspapi.io\/blog\/#website","url":"https:\/\/oddspapi.io\/blog\/","name":"OddsPapi","description":"Sports Odds API Tutorials &amp; Guides","publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"alternateName":"Odds Papi","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oddspapi.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/oddspapi.io\/blog\/#organization","name":"OddsPapi","url":"https:\/\/oddspapi.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png","width":135,"height":135,"caption":"OddsPapi"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/oddspapiapi"]},{"@type":"Person","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13","name":"Odds API Writer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g","caption":"Odds API Writer"},"url":"https:\/\/oddspapi.io\/blog\/author\/andy-lavelle\/"}]}},"_links":{"self":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/comments?post=3648"}],"version-history":[{"count":3,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3648\/revisions"}],"predecessor-version":[{"id":3858,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3648\/revisions\/3858"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3649"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}