{"id":5053,"date":"2026-10-21T10:00:00","date_gmt":"2026-10-21T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=5053"},"modified":"2026-10-14T13:19:42","modified_gmt":"2026-10-14T13:19:42","slug":"moneyline-odds-api","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/","title":{"rendered":"Moneyline Odds API: Find the Winner Market in 59 Sports"},"content":{"rendered":"<p>Looking for a moneyline odds API that runs the same code on the NFL, the NHL and the Premier League? OddsPapi defines the match winner market for 59 sports and serves it through one endpoint, and you can compute its market ID without a lookup table: take the sport ID, multiply by 10, add 1. NFL is sport 14, so the NFL moneyline is market 141. NHL is 15, so its moneyline is 151. The two outcome IDs follow the same rule: 141 is participant 1 and 142 is participant 2.<\/p>\n<p>We pulled 28 pregame boards across eight in-season sports on 14 October 2026, between 13:10 and 13:15 UTC. Each NFL board carried the moneyline from 229 to 252 bookmakers, every quote with the decimal price and the American price side by side. Soccer is the one sport where the formula lands on a three-way market, and four US sports ship a second, three-way &#8220;regulation time&#8221; market next to the moneyline that settles on a different clock. This guide shows how to resolve the right ID, pull the board, and keep the two clocks apart.<\/p>\n<h2>The Moneyline Across Eight Sports<\/h2>\n<p>Each row is the median over the boards we pulled for that tournament. &#8220;Distinct prices&#8221; counts unique price pairs after we removed duplicate feeds, because many slugs are skins of one feed and quote byte-identical prices. Margins are the median overround across those distinct pairs. The last two columns cover the twin market: the three-way regulation-time result in the US sports, and Draw No Bet for soccer. Do not merge a twin into the moneyline (Step 4).<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Sport (boards)<\/th>\n<th>Moneyline ID<\/th>\n<th>Books<\/th>\n<th>Distinct prices<\/th>\n<th>Median margin<\/th>\n<th>Pinnacle margin<\/th>\n<th>Twin market<\/th>\n<th>Twin books \/ margin<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>NFL (4)<\/td>\n<td>141<\/td>\n<td>244.5<\/td>\n<td>71.5<\/td>\n<td>5.00%<\/td>\n<td>3.04%<\/td>\n<td>143<\/td>\n<td>70 \/ 8.82%<\/td>\n<\/tr>\n<tr>\n<td>NHL (2)<\/td>\n<td>151<\/td>\n<td>234.5<\/td>\n<td>68<\/td>\n<td>5.22%<\/td>\n<td>2.41%<\/td>\n<td>153<\/td>\n<td>229 \/ 7.80%<\/td>\n<\/tr>\n<tr>\n<td>MLB postseason (2)<\/td>\n<td>131<\/td>\n<td>230.5<\/td>\n<td>63.5<\/td>\n<td>5.27%<\/td>\n<td>2.27%<\/td>\n<td>133<\/td>\n<td>40.5 \/ 10.36%<\/td>\n<\/tr>\n<tr>\n<td>NBA preseason (4)<\/td>\n<td>111<\/td>\n<td>212<\/td>\n<td>57<\/td>\n<td>6.14%<\/td>\n<td>6.28%<\/td>\n<td>113<\/td>\n<td>51 \/ 9.84%<\/td>\n<\/tr>\n<tr>\n<td>UFC (4)<\/td>\n<td>201<\/td>\n<td>210.5<\/td>\n<td>47<\/td>\n<td>5.38%<\/td>\n<td>3.87%<\/td>\n<td>203<\/td>\n<td>47.5 \/ 8.03%<\/td>\n<\/tr>\n<tr>\n<td>Premier League (4)<\/td>\n<td>101 (3-way)<\/td>\n<td>254.5<\/td>\n<td>n\/a<\/td>\n<td>6.02%<\/td>\n<td>3.3%<\/td>\n<td>10214 Draw No Bet<\/td>\n<td>212.5 \/ 7.02%<\/td>\n<\/tr>\n<tr>\n<td>WTA Wuhan (4)<\/td>\n<td>121<\/td>\n<td>178.5<\/td>\n<td>44<\/td>\n<td>5.98%<\/td>\n<td>2.94% (1 board)<\/td>\n<td>none<\/td>\n<td>n\/a<\/td>\n<\/tr>\n<tr>\n<td>Counter-Strike 2 (4)<\/td>\n<td>171<\/td>\n<td>102.5<\/td>\n<td>19<\/td>\n<td>7.83%<\/td>\n<td>7.25% (2 boards)<\/td>\n<td>none quoted<\/td>\n<td>n\/a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Three things stand out. Pinnacle runs at 43% to 61% of the board&#8217;s median margin on the NFL, NHL and MLB moneylines, so it stays the fair-value anchor there. On NBA preseason it sits level with the median, which tells you the preseason line is still soft at the sharp end too. And the three-way twin costs you 2.6 to 5.1 points of extra margin in the four US sports, because it adds a draw leg that the books price wide.<\/p>\n<h2>Why a Cross-Sport Moneyline Trips Up Most Code<\/h2>\n<p>A moneyline sounds like the simplest market there is. Two participants, two prices, pick the winner. The trouble starts when the same code has to run on more than one sport:<\/p>\n<ul>\n<li><strong>Every sport has its own market ID.<\/strong> Hardcode 141 and your NHL job returns nothing. Most feeds make you look each one up.<\/li>\n<li><strong>&#8220;Winner&#8221; has two clocks.<\/strong> In the NFL, NBA, MLB and NHL the moneyline includes overtime or extra innings. A second market, Regular Time Result, settles on the score at the end of regulation and pays a draw. On a Capitals v Canadiens board, 229 books priced that 60-minute market.<\/li>\n<li><strong>Soccer flips the default.<\/strong> The soccer &#8220;moneyline&#8221; a US bettor means is the three-way 1X2. The two-way equivalent is Draw No Bet, a different market with a different ID.<\/li>\n<li><strong>Book counts lie.<\/strong> 252 books quoted the Broncos v Seahawks moneyline, but only 76 distinct price pairs existed. Average over 252 and you count the biggest white-label family 21 times.<\/li>\n<\/ul>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Job<\/th>\n<th>Per-book APIs or a single-sport feed<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Find the moneyline market<\/td>\n<td>A different key, name or endpoint per book and per sport<\/td>\n<td><code>sportId * 10 + 1<\/code>, confirmed by name from <code>\/v4\/markets<\/code><\/td>\n<\/tr>\n<tr>\n<td>Coverage<\/td>\n<td>One sportsbook, or one league<\/td>\n<td>350+ bookmakers in the catalogue; 229 to 252 on each NFL moneyline we pulled<\/td>\n<\/tr>\n<tr>\n<td>American odds<\/td>\n<td>Convert yourself<\/td>\n<td><code>priceAmerican<\/code> on every quote: 11,046 of 11,046 legs on our 28 boards<\/td>\n<\/tr>\n<tr>\n<td>Sharp reference<\/td>\n<td>Separate account<\/td>\n<td>Pinnacle on the same board, with its stake <code>limit<\/code><\/td>\n<\/tr>\n<tr>\n<td>Closing lines for backtests<\/td>\n<td>Paid add-on or none<\/td>\n<td><code>\/v4\/historical-odds<\/code> on the free tier<\/td>\n<\/tr>\n<tr>\n<td>Live updates<\/td>\n<td>Polling<\/td>\n<td>WebSocket push on every price change<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>Step 1: Resolve the Moneyline ID for Any Sport<\/h2>\n<p>The formula gets you a candidate. Confirm it against <code>\/v4\/markets<\/code> by name before you trust it, and resolve the three-way twin by name as well, because the twin does not sit at a fixed offset. In Counter-Strike 2 the 1X2 market is 178077, nowhere near 171.<\/p>\n<pre class=\"wp-block-code\"><code>import os, requests\n\nAPI_KEY = os.environ[&quot;ODDSPAPI_API_KEY&quot;]\nBASE = &quot;https:\/\/api.oddspapi.io\/v4&quot;\n\nsports = requests.get(f&quot;{BASE}\/sports&quot;, params={&quot;apiKey&quot;: API_KEY}).json()\nmarkets = requests.get(f&quot;{BASE}\/markets&quot;, params={&quot;apiKey&quot;: API_KEY}).json()\nby_id = {m[&quot;marketId&quot;]: m for m in markets}\n\ndef moneyline(sport_id):\n    &quot;&quot;&quot;The match winner is market sportId * 10 + 1. Confirm it by name, never trust the formula alone.&quot;&quot;&quot;\n    m = by_id.get(sport_id * 10 + 1)\n    if not m or m[&quot;sportId&quot;] != sport_id:\n        return None\n    if not (m[&quot;marketName&quot;].startswith(&quot;Winner&quot;) or m[&quot;marketName&quot;] == &quot;Full Time Result&quot;):\n        return None\n    return m\n\ndef regulation_twins(sport_id):\n    &quot;&quot;&quot;Three-way markets that settle the same match on a different clock. Resolve by name.&quot;&quot;&quot;\n    return sorted(m[&quot;marketId&quot;] for m in markets\n                  if m[&quot;sportId&quot;] == sport_id and m[&quot;marketName&quot;] in (&quot;Regular Time Result&quot;, &quot;1X2&quot;)\n                  and m[&quot;handicap&quot;] == 0 and m[&quot;period&quot;] in (&quot;fulltime&quot;, &quot;result&quot;) and not m[&quot;playerProp&quot;])\n\nfound = {s[&quot;sportId&quot;]: moneyline(s[&quot;sportId&quot;]) for s in sports}\nprint(sum(1 for m in found.values() if m and m[&quot;marketLength&quot;] == 2), &quot;sports ship a two-way winner at sportId*10+1&quot;)\nfor sid in (10, 11, 12, 13, 14, 15, 17, 20):\n    m = found[sid]\n    outs = sorted(o[&quot;outcomeId&quot;] for o in m[&quot;outcomes&quot;])\n    print(f&quot;{sid:&gt;3} {m[&#x27;marketId&#x27;]:&gt;4} {m[&#x27;marketName&#x27;][:38]:38} legs={m[&#x27;marketLength&#x27;]} &quot;\n          f&quot;outcomes={outs} period={m[&#x27;period&#x27;]:8} twins={regulation_twins(sid)}&quot;)<\/code><\/pre>\n<p>Output on 14 October 2026:<\/p>\n<pre class=\"wp-block-code\"><code>59 sports ship a two-way winner at sportId*10+1\n 10  101 Full Time Result                       legs=3 outcomes=[101, 102, 103] period=fulltime twins=[]\n 11  111 Winner (incl. overtime)                legs=2 outcomes=[111, 112] period=result   twins=[113]\n 12  121 Winner                                 legs=2 outcomes=[121, 122] period=result   twins=[]\n 13  131 Winner (incl. extra innings)           legs=2 outcomes=[131, 132] period=result   twins=[133]\n 14  141 Winner (incl. overtime)                legs=2 outcomes=[141, 142] period=result   twins=[143]\n 15  151 Winner (incl. overtime and penalties)  legs=2 outcomes=[151, 152] period=result   twins=[153]\n 17  171 Winner                                 legs=2 outcomes=[171, 172] period=result   twins=[178077]\n 20  201 Winner                                 legs=2 outcomes=[201, 202] period=result   twins=[203]<\/code><\/pre>\n<p>The <code>period<\/code> field carries the clock. <code>result<\/code> means the final result, including overtime, extra innings or a shootout. <code>fulltime<\/code> means the end of regulation. Soccer&#8217;s 101 is <code>fulltime<\/code> because a soccer match ends at full time, and that is why the formula hands you the three-way market there.<\/p>\n<h2>Step 2: Pull the Moneyline Board<\/h2>\n<p>Find the next fixture in a tournament, call <code>\/v4\/odds<\/code>, and keep a book only when both legs are active and the book itself is open. The key goes in the query string as <code>apiKey<\/code>, never in a header.<\/p>\n<pre class=\"wp-block-code\"><code>import os, requests, datetime as dt\n\nAPI_KEY = os.environ[&quot;ODDSPAPI_API_KEY&quot;]\nBASE = &quot;https:\/\/api.oddspapi.io\/v4&quot;\nSPORT_ID, TOURNAMENT_ID = 14, 31          # American football, NFL\nWINNER = SPORT_ID * 10 + 1                # 141, outcomes 141 (participant 1) and 142 (participant 2)\n\ntoday = dt.date.today()\nfixtures = requests.get(f&quot;{BASE}\/fixtures&quot;, params={\n    &quot;apiKey&quot;: API_KEY, &quot;sportId&quot;: SPORT_ID, &quot;tournamentId&quot;: TOURNAMENT_ID,\n    &quot;from&quot;: today.isoformat(), &quot;to&quot;: (today + dt.timedelta(days=6)).isoformat(),\n}).json()\nfx = sorted((f for f in fixtures if f[&quot;hasOdds&quot;]), key=lambda f: f[&quot;startTime&quot;])[0]\nodds = requests.get(f&quot;{BASE}\/odds&quot;, params={&quot;apiKey&quot;: API_KEY, &quot;fixtureId&quot;: fx[&quot;fixtureId&quot;]}).json()\n\ndef legs(book, market_id, n):\n    &quot;&quot;&quot;Return {outcomeId: price object} if the book quotes every leg as active, else None.&quot;&quot;&quot;\n    mk = book[&quot;markets&quot;].get(str(market_id))\n    if not mk:\n        return None\n    out = {int(o): v[&quot;players&quot;][&quot;0&quot;] for o, v in mk[&quot;outcomes&quot;].items()\n           if v[&quot;players&quot;].get(&quot;0&quot;, {}).get(&quot;active&quot;) and v[&quot;players&quot;][&quot;0&quot;][&quot;price&quot;] &gt; 1}\n    return out if len(out) == n else None\n\nboard = {}\nfor slug, book in odds[&quot;bookmakerOdds&quot;].items():\n    if &quot;+&quot; in slug or slug == &quot;demo&quot; or book.get(&quot;suspended&quot;) or not book.get(&quot;bookmakerIsActive&quot;, True):\n        continue\n    ml = legs(book, WINNER, 2)\n    if ml:\n        board[slug] = ml\n\nprint(fx[&quot;participant1Name&quot;], &quot;v&quot;, fx[&quot;participant2Name&quot;], fx[&quot;startTime&quot;])\nprint(len(odds[&quot;bookmakerOdds&quot;]), &quot;books on the fixture,&quot;, len(board), &quot;with an active two-way moneyline&quot;)\nfor slug in (&quot;pinnacle&quot;, &quot;draftkings&quot;, &quot;fanduel&quot;, &quot;kalshi&quot;):\n    if slug in board:\n        a, b = board[slug][WINNER], board[slug][WINNER + 1]\n        print(f&quot;{slug:11} {a[&#x27;price&#x27;]:&gt;6} ({a[&#x27;priceAmerican&#x27;]:&gt;5})  {b[&#x27;price&#x27;]:&gt;6} ({b[&#x27;priceAmerican&#x27;]:&gt;5})&quot;)<\/code><\/pre>\n<p>Output:<\/p>\n<pre class=\"wp-block-code\"><code>Denver Broncos v Seattle Seahawks 2026-10-16T00:15:00.000Z\n278 books on the fixture, 252 with an active two-way moneyline\npinnacle      2.24 (  124)   1.714 ( -140)\ndraftkings     2.2 (  120)   1.704 ( -142)\nfanduel       2.28 (  128)    1.66 ( -152)\nkalshi       2.273 (  127)   1.754 ( -133)<\/code><\/pre>\n<p><code>priceAmerican<\/code> arrives as a string, so cast it before you do maths on it. The <code>tournamentId<\/code> filter on <code>\/v4\/fixtures<\/code> is not in the reference docs, but it works and it cuts the payload hard. Swap <code>SPORT_ID<\/code> and <code>TOURNAMENT_ID<\/code> to point the same script at any sport: 15 and 234 for the NHL, 13 and 109 for MLB.<\/p>\n<h2>Step 3: Dedupe, Then Rank the Prices<\/h2>\n<p>Before you compute a median, a consensus or a best price, collapse the books that quote the same pair. Then de-vig Pinnacle for a fair probability and find the best price on each side.<\/p>\n<pre class=\"wp-block-code\"><code>import statistics\n# continues from s2_board.py: `board`, `WINNER`, `fx`\n\npairs = {slug: (ml[WINNER][&quot;price&quot;], ml[WINNER + 1][&quot;price&quot;]) for slug, ml in board.items()}\nmargin = lambda p: 1 \/ p[0] + 1 \/ p[1] - 1\n\n# Many slugs are skins of one feed and quote byte-identical prices. Count distinct quotes first.\ndistinct = {}\nfor slug, p in pairs.items():\n    distinct.setdefault(p, []).append(slug)\nprint(len(pairs), &quot;books,&quot;, len(distinct), &quot;distinct price pairs&quot;)\n\nprint(f&quot;median margin {statistics.median(margin(p) for p in distinct):.2%}&quot;)\nif &quot;pinnacle&quot; in pairs:\n    pin = pairs[&quot;pinnacle&quot;]\n    fair = (1 \/ pin[0]) \/ (1 \/ pin[0] + 1 \/ pin[1])\n    print(f&quot;pinnacle margin {margin(pin):.2%}, no-vig {fx[&#x27;participant1Name&#x27;]} {fair:.1%}&quot;)\n\nfor i, name in enumerate((fx[&quot;participant1Name&quot;], fx[&quot;participant2Name&quot;])):\n    best = max(p[i] for p in distinct)\n    who = sorted(s for s, p in pairs.items() if p[i] == best)\n    print(f&quot;best {name}: {best}, quoted by {who[:3]}&quot;)<\/code><\/pre>\n<p>Output:<\/p>\n<pre class=\"wp-block-code\"><code>252 books, 76 distinct price pairs\nmedian margin 4.91%\npinnacle margin 2.99%, no-vig Denver Broncos 43.3%\nbest Denver Broncos: 2.326, quoted by [&#x27;polymarket.us&#x27;]\nbest Seattle Seahawks: 1.769, quoted by [&#x27;prophetx&#x27;]<\/code><\/pre>\n<p>The best prices on this board came from two prediction venues, Polymarket US and ProphetX. Pull exchanges and sportsbooks into one board and you see those prices; a sportsbook-only feed hides them. For the fair-value step in more depth, the <a href=\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\">no-vig odds guide<\/a> compares three de-vig methods, and <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">line shopping in Python<\/a> turns the best-price loop into a scanner.<\/p>\n<h2>Step 4: Keep the Regulation-Time Twin Apart<\/h2>\n<p>In the NFL, NBA, MLB and NHL, the moneyline (<code>*1<\/code>) and Regular Time Result (<code>*3<\/code> in these four sports) settle the same match on different clocks. If a hockey game goes to overtime, the moneyline pays the winner and the 60-minute market pays the draw. Treat them as one market and your best-price scan will match a two-way price against a three-way price, and your grader will settle overtime games wrong.<\/p>\n<pre class=\"wp-block-code\"><code>import os, requests, statistics, datetime as dt\n\nAPI_KEY = os.environ[&quot;ODDSPAPI_API_KEY&quot;]\nBASE = &quot;https:\/\/api.oddspapi.io\/v4&quot;\nSPORT_ID, TOURNAMENT_ID = 15, 234         # ice hockey, NHL\nWINNER, REGULATION = 151, 153             # incl. overtime and shootout (2-way) \/ 60 minutes (3-way)\n\ntoday = dt.date.today()\nfixtures = requests.get(f&quot;{BASE}\/fixtures&quot;, params={\n    &quot;apiKey&quot;: API_KEY, &quot;sportId&quot;: SPORT_ID, &quot;tournamentId&quot;: TOURNAMENT_ID,\n    &quot;from&quot;: today.isoformat(), &quot;to&quot;: (today + dt.timedelta(days=3)).isoformat(),\n}).json()\nfx = sorted((f for f in fixtures if f[&quot;hasOdds&quot;]), key=lambda f: f[&quot;startTime&quot;])[0]\nodds = requests.get(f&quot;{BASE}\/odds&quot;, params={&quot;apiKey&quot;: API_KEY, &quot;fixtureId&quot;: fx[&quot;fixtureId&quot;]}).json()\n\ndef prices(book, market_id, n):\n    mk = book[&quot;markets&quot;].get(str(market_id))\n    if not mk:\n        return None\n    p = [v[&quot;players&quot;][&quot;0&quot;][&quot;price&quot;] for v in mk[&quot;outcomes&quot;].values()\n         if v[&quot;players&quot;].get(&quot;0&quot;, {}).get(&quot;active&quot;) and v[&quot;players&quot;][&quot;0&quot;][&quot;price&quot;] &gt; 1]\n    return p if len(p) == n else None\n\ntwo, three = {}, {}\nfor slug, book in odds[&quot;bookmakerOdds&quot;].items():\n    if &quot;+&quot; in slug or slug == &quot;demo&quot; or book.get(&quot;suspended&quot;) or not book.get(&quot;bookmakerIsActive&quot;, True):\n        continue\n    if (p := prices(book, WINNER, 2)):\n        two[slug] = p\n    if (p := prices(book, REGULATION, 3)):\n        three[slug] = p\n\nvig = lambda ps: statistics.median(sum(1 \/ x for x in p) - 1 for p in ps.values())\nprint(fx[&quot;participant1Name&quot;], &quot;v&quot;, fx[&quot;participant2Name&quot;])\nprint(f&quot;{WINNER} two-way winner:    {len(two):&gt;3} books, median margin {vig(two):.2%}&quot;)\nprint(f&quot;{REGULATION} regulation 1X2:    {len(three):&gt;3} books, median margin {vig(three):.2%}&quot;)\nonly = sorted(set(three) - set(two))\nprint(len(only), &quot;books quote the 60-minute market and no two-way winner:&quot;, only[:6])<\/code><\/pre>\n<p>Output:<\/p>\n<pre class=\"wp-block-code\"><code>Washington Capitals v Montreal Canadiens\n151 two-way winner:    236 books, median margin 5.13%\n153 regulation 1X2:    229 books, median margin 7.93%\n19 books quote the 60-minute market and no two-way winner: [&#x27;31bet&#x27;, &#x27;admiralbet.ba&#x27;, &#x27;admiralbet.me&#x27;, &#x27;admiralbet.rs&#x27;, &#x27;betcenter.be&#x27;, &#x27;cashpoint&#x27;]<\/code><\/pre>\n<p>Hockey is where this matters most. The 60-minute market drew 229 books against 234.5 on the moneyline, and 19 books, from Admiralbet&#8217;s Balkan skins to Winamax Spain and Germany, price the regulation market without a two-way winner. If your app shows a European audience the NHL &#8220;match odds&#8221;, those books are the ones they know, and their number is the three-way price. The <a href=\"https:\/\/oddspapi.io\/blog\/nhl-regulation-overtime-markets\/\">NHL regulation and overtime guide<\/a> walks all 118 hockey twin pairs, and the same split runs through baseball&#8217;s <a href=\"https:\/\/oddspapi.io\/blog\/mlb-first-five-innings-odds-api\/\">first five innings<\/a>.<\/p>\n<h2>Soccer: Pick the Moneyline You Mean<\/h2>\n<p>On the four Premier League boards, the three-way 1X2 (market 101) drew a median 254.5 books at a 6.02% median margin. The two-way Draw No Bet (10214) drew 212.5 books at 7.02%. About 43 books on each board quoted 1X2 with no Draw No Bet, Betfair Exchange among them. So if your users expect a two-way soccer price, read 10214. If they expect &#8220;match odds&#8221;, read 101 and keep all three legs, and reject any book that ships only two of them.<\/p>\n<h2>Grade and Backtest the Moneyline<\/h2>\n<p>The same IDs work on <code>\/v4\/historical-odds<\/code> once a fixture has finished. On the Jaguars v Eagles game of 11 October, market 141 held 1,442 DraftKings snapshots going back to 3 July, 662 from FanDuel and 642 from Pinnacle, each with a timestamp and Pinnacle&#8217;s stake limit. Take the last active snapshot before kick-off as the closing line, and you have a moneyline closing-line dataset for every sport in the table above. The <a href=\"https:\/\/oddspapi.io\/blog\/backtest-betting-model-free-historical-odds\/\">backtesting guide<\/a> shows the full loop. For in-play work, the <a href=\"https:\/\/oddspapi.io\/blog\/websocket-odds-api-real-time-betting-data\/\">WebSocket feed<\/a> pushes each moneyline change instead of making you poll.<\/p>\n<p>Tennis has its own wrinkles below the main tour, such as a second fixture ID scheme for ITF matches. The <a href=\"https:\/\/oddspapi.io\/blog\/tennis-moneyline-odds-api\/\">tennis moneyline guide<\/a> covers market 121 from the WTA Tour down to ITF.<\/p>\n<h2>Pull Your First Moneyline Board<\/h2>\n<p>One free OddsPapi key gives you the moneyline market ID for 59 sports, up to 252 bookmakers on the boards we pulled, Pinnacle and the prediction venues on the same board, American odds on every quote, and the history to grade it all afterwards. <a href=\"https:\/\/oddspapi.io\/en\/sign-up\">Get a free API key<\/a>, set <code>SPORT_ID<\/code>, and run Step 2 on tonight&#8217;s slate.<\/p>\n<h2>FAQ<\/h2>\n<h3>What is a moneyline odds API?<\/h3>\n<p>A moneyline odds API returns bookmaker prices on which participant wins a fixture, with no point spread. OddsPapi calls this market Winner, defines it for 59 sports and returns it from one endpoint, \/v4\/odds, with decimal, American and fractional prices on every quote. On 14 October 2026 each NFL board we pulled carried it from 229 to 252 bookmakers.<\/p>\n<h3>Which market ID is the moneyline?<\/h3>\n<p>Multiply the sport ID by 10 and add 1. NFL (sport 14) is market 141, NHL (15) is 151, MLB (13) is 131, NBA (11) is 111, tennis (12) is 121 and UFC (20) is 201. The outcome IDs follow the same rule: 141 is participant 1 and 142 is participant 2. Confirm the name against \/v4\/markets before you hardcode it.<\/p>\n<h3>Does the NHL moneyline include overtime?<\/h3>\n<p>Yes. Market 151 is Winner (incl. overtime and penalties) and settles on the final result. Market 153, Regular Time Result, settles on the 60-minute score and has a draw leg. On 14 October 2026, 229 books priced 153 on a Capitals v Canadiens board, at a 7.80% median margin against 5.22% on 151.<\/p>\n<h3>Is the soccer moneyline two-way or three-way?<\/h3>\n<p>The default soccer match market is three-way: market 101, Full Time Result, with home, draw and away. The two-way version is Draw No Bet, market 10214. On four Premier League boards on 14 October 2026, 101 drew a median 254.5 books and 10214 drew 212.5.<\/p>\n<h3>Does the API return American moneyline odds?<\/h3>\n<p>Yes. Every quote carries priceAmerican next to the decimal price and a fractional price, so a US app needs no conversion step. On the 28 boards we pulled, all 11,046 moneyline legs had an American price. The field is a string such as &#8220;-140&#8221; or &#8220;124&#8221;.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is a moneyline odds API?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A moneyline odds API returns bookmaker prices on which participant wins a fixture, with no point spread. OddsPapi calls this market Winner, defines it for 59 sports and returns it from one endpoint, \/v4\/odds, with decimal, American and fractional prices on every quote. On 14 October 2026 each NFL board we pulled carried it from 229 to 252 bookmakers.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Which market ID is the moneyline?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Multiply the sport ID by 10 and add 1. NFL (sport 14) is market 141, NHL (15) is 151, MLB (13) is 131, NBA (11) is 111, tennis (12) is 121 and UFC (20) is 201. The outcome IDs follow the same rule: 141 is participant 1 and 142 is participant 2. Confirm the name against \/v4\/markets before you hardcode it.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does the NHL moneyline include overtime?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Market 151 is Winner (incl. overtime and penalties) and settles on the final result. Market 153, Regular Time Result, settles on the 60-minute score and has a draw leg. On 14 October 2026, 229 books priced 153 on a Capitals v Canadiens board, at a 7.80% median margin against 5.22% on 151.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is the soccer moneyline two-way or three-way?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The default soccer match market is three-way: market 101, Full Time Result, with home, draw and away. The two-way version is Draw No Bet, market 10214. On four Premier League boards on 14 October 2026, 101 drew a median 254.5 books and 10214 drew 212.5.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does the API return American moneyline odds?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Every quote carries priceAmerican next to the decimal price and a fractional price, so a US app needs no conversion step. On the 28 boards we pulled, all 11,046 moneyline legs had an American price. The field is a string such as \\\"-140\\\" or \\\"124\\\".\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n<p><!--\nSEO\nFocus keyphrase: moneyline odds api\nTitle: Moneyline Odds API: Find the Winner Market in 59 Sports\nMeta description: A moneyline odds API where the market ID is sport ID x 10 + 1. NFL's 141 drew 229 to 252 books on 14 Oct, with Pinnacle at a 3.04% margin.\nSlug: moneyline-odds-api\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A moneyline odds API where the market ID is sport ID x 10 + 1. NFL&#8217;s 141 drew 229 to 252 books on 14 Oct, with Pinnacle at a 3.04% margin.<\/p>\n","protected":false},"author":2,"featured_media":5054,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[4,52,58,9,11,10],"class_list":["post-5053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-historical-odds","tag-nfl","tag-nhl","tag-odds-api","tag-python","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>Moneyline Odds API: Find the Winner Market in 59 Sports | 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\/moneyline-odds-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moneyline Odds API: Find the Winner Market in 59 Sports | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"A moneyline odds API where the market ID is sport ID x 10 + 1. NFL&#039;s 141 drew 229 to 252 books on 14 Oct, with Pinnacle at a 3.04% margin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-21T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\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=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"Moneyline Odds API: Find the Winner Market in 59 Sports\",\"datePublished\":\"2026-10-21T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\"},\"wordCount\":1595,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp\",\"keywords\":[\"historical odds\",\"NFL\",\"NHL\",\"Odds API\",\"Python\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\",\"name\":\"Moneyline Odds API: Find the Winner Market in 59 Sports | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp\",\"datePublished\":\"2026-10-21T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp\",\"width\":1200,\"height\":675,\"caption\":\"Moneyline Odds API header: the match winner market across 59 sports\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moneyline Odds API: Find the Winner Market in 59 Sports\"}]},{\"@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":"Moneyline Odds API: Find the Winner Market in 59 Sports | 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\/moneyline-odds-api\/","og_locale":"en_US","og_type":"article","og_title":"Moneyline Odds API: Find the Winner Market in 59 Sports | OddsPapi Blog","og_description":"A moneyline odds API where the market ID is sport ID x 10 + 1. NFL's 141 drew 229 to 252 books on 14 Oct, with Pinnacle at a 3.04% margin.","og_url":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-10-21T10:00:00+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.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":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"Moneyline Odds API: Find the Winner Market in 59 Sports","datePublished":"2026-10-21T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/"},"wordCount":1595,"commentCount":1,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp","keywords":["historical odds","NFL","NHL","Odds API","Python","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/","url":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/","name":"Moneyline Odds API: Find the Winner Market in 59 Sports | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp","datePublished":"2026-10-21T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/10\/moneyline-odds-api.webp","width":1200,"height":675,"caption":"Moneyline Odds API header: the match winner market across 59 sports"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/moneyline-odds-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Moneyline Odds API: Find the Winner Market in 59 Sports"}]},{"@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\/5053","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=5053"}],"version-history":[{"count":2,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/5053\/revisions"}],"predecessor-version":[{"id":5056,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/5053\/revisions\/5056"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/5054"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=5053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=5053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=5053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}