{"id":2952,"date":"2026-06-05T10:00:00","date_gmt":"2026-06-05T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=2952"},"modified":"2026-05-31T14:24:32","modified_gmt":"2026-05-31T14:24:32","slug":"world-cup-odds-api-2026-fifa","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/","title":{"rendered":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free)"},"content":{"rendered":"<p>The 2026 FIFA World Cup kicks off on <strong>June 11<\/strong> with Mexico vs South Africa at the Estadio Azteca, then runs 104 matches across the USA, Canada and Mexico through July 19. If you&#8217;re building a model, a line-shopping tool, or just want to track where the sharp money is going, you need odds data &mdash; for every group-stage match, every knockout tie, all 48 teams.<\/p>\n<p>The problem: FIFA&#8217;s official data partners (Sportradar, Genius Sports) sell that feed on enterprise contracts with a sales call attached. Scraping Bet365 breaks the moment they change a CSS class. And the generic &#8220;free&#8221; sports APIs give you ~20 soft bookmakers and zero sharps.<\/p>\n<p>This guide shows you the third option: pull live World Cup odds from <strong>350+ bookmakers<\/strong> &mdash; including Pinnacle, SBOBet, Bet365, DraftKings, FanDuel, plus prediction markets like Polymarket and Kalshi &mdash; through one JSON API, on a free tier that also includes historical data. Every code sample below was tested against the live feed three weeks before kickoff.<\/p>\n<h2>Why the &quot;Old Way&quot; Doesn&#8217;t Work for the World Cup<\/h2>\n<p>World Cup traffic is the single biggest spike in the betting calendar. Everyone wants the data at once, and the usual routes all have a catch:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>The Old Way<\/th>\n<th>The Catch<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Official FIFA data (Sportradar \/ Genius)<\/td>\n<td>Enterprise contract, sales call, opaque pricing<\/td>\n<td>Self-serve API key, free tier<\/td>\n<\/tr>\n<tr>\n<td>Scraping Bet365 \/ DraftKings<\/td>\n<td>Breaks on every site change, IP bans, no sharps<\/td>\n<td>Stable JSON, 350+ books in one call<\/td>\n<\/tr>\n<tr>\n<td>Generic free sports APIs<\/td>\n<td>~20 soft books, no Pinnacle, no historical data<\/td>\n<td>Pinnacle, SBOBet + prediction markets included<\/td>\n<\/tr>\n<tr>\n<td>Manual odds entry<\/td>\n<td>Stale within seconds during a match<\/td>\n<td>Real-time, with full price history<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>OddsPapi aggregates the books that actually matter to a sharp bettor or a quant: the <strong>sharps<\/strong> (Pinnacle, SBOBet) that set the market, the <strong>US books<\/strong> (DraftKings, FanDuel, BetMGM) your readers actually use, and the <strong>prediction markets<\/strong> (Polymarket, Kalshi) that frequently price tighter than the bookmakers. For a deeper dive on soccer specifically, see our <a href=\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\">Football Odds API guide<\/a>.<\/p>\n<h2>What&#8217;s Already in the Feed<\/h2>\n<p>Three weeks out, every World Cup fixture already carries odds. On a marquee group match like <strong>Brazil vs Morocco<\/strong>, the feed returned <strong>18 bookmakers<\/strong> on the Full Time Result, and Pinnacle alone priced <strong>62 distinct markets<\/strong> on that single fixture. Here&#8217;s the spread of coverage:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Market<\/th>\n<th>Market ID<\/th>\n<th>Books (3 weeks out)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Full Time Result (1X2)<\/td>\n<td><code>101<\/code><\/td>\n<td>18<\/td>\n<\/tr>\n<tr>\n<td>Over\/Under 2.5 Goals<\/td>\n<td><code>1010<\/code><\/td>\n<td>15<\/td>\n<\/tr>\n<tr>\n<td>Both Teams To Score<\/td>\n<td><code>104<\/code><\/td>\n<td>13<\/td>\n<\/tr>\n<tr>\n<td>Over\/Under 1.5 \/ 3.5<\/td>\n<td><code>108<\/code> \/ <code>1012<\/code><\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap (multiple lines)<\/td>\n<td><code>1068<\/code>, <code>1072<\/code>, <code>1076<\/code>&hellip;<\/td>\n<td>1&ndash;6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Book counts grow as kickoff approaches and margins tighten &mdash; the numbers above are an early-line snapshot, not the peak. By matchday you&#8217;ll see well over 100 books on the headline fixtures.<\/p>\n<h2>The Tutorial: World Cup Odds in Python<\/h2>\n<p>Four steps: authenticate, find the World Cup fixtures, pull the odds, and parse the nested JSON. You&#8217;ll need an <a href=\"https:\/\/oddspapi.io\/\">OddsPapi API key<\/a> (free) and the <code>requests<\/code> library.<\/p>\n<h3>Step 1: Authentication<\/h3>\n<p>OddsPapi uses a query-parameter API key, <strong>not<\/strong> a header. This trips up a lot of people coming from other APIs.<\/p>\n<pre class=\"wp-block-code\"><code>import requests\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\n\n# Auth is a query param, never a header\nresp = requests.get(f\"{BASE_URL}\/sports\", params={\"apiKey\": API_KEY})\nprint(resp.status_code)  # 200\n<\/code><\/pre>\n<h3>Step 2: Find the World Cup Fixtures<\/h3>\n<p>Soccer is <code>sportId=10<\/code>. The World Cup lives under the <code>international<\/code> category with <code>tournamentSlug=\"world-cup\"<\/code>. Fetch fixtures in a date window (max 10 days per call) and filter on the tournament name:<\/p>\n<pre class=\"wp-block-code\"><code>def get_world_cup_fixtures(date_from, date_to):\n    r = requests.get(f\"{BASE_URL}\/fixtures\", params={\n        \"apiKey\": API_KEY,\n        \"sportId\": 10,\n        \"from\": date_from,   # \"2026-06-11\"\n        \"to\": date_to,       # \"2026-06-20\" (max 10 days apart)\n    })\n    fixtures = r.json()\n    # Filter to the FIFA World Cup tournament\n    wc = [f for f in fixtures if f.get(\"tournamentName\") == \"World Cup\"]\n    return wc\n\nmatches = get_world_cup_fixtures(\"2026-06-11\", \"2026-06-20\")\nfor f in matches:\n    print(f[\"startTime\"][:10], f[\"participant1Name\"], \"vs\",\n          f[\"participant2Name\"], \"| hasOdds:\", f[\"hasOdds\"])\n\n# 2026-06-11 Mexico vs South Africa   | hasOdds: True\n# 2026-06-13 USA vs Paraguay          | hasOdds: True\n# 2026-06-13 Brazil vs Morocco        | hasOdds: True\n# ...\n<\/code><\/pre>\n<p>Only fixtures with <code>hasOdds: True<\/code> return a price payload &mdash; every World Cup match qualifies. Grab the <code>fixtureId<\/code> for the next step.<\/p>\n<h3>Step 3: Pull the Odds<\/h3>\n<p>Hit <code>\/odds<\/code> with the <code>fixtureId<\/code>. Optionally pass a comma-separated <code>bookmakers<\/code> list to narrow the response:<\/p>\n<pre class=\"wp-block-code\"><code>def get_odds(fixture_id, bookmakers=None):\n    params = {\"apiKey\": API_KEY, \"fixtureId\": fixture_id}\n    if bookmakers:\n        params[\"bookmakers\"] = bookmakers  # \"pinnacle,bet365,draftkings\"\n    return requests.get(f\"{BASE_URL}\/odds\", params=params).json()\n\n# Brazil vs Morocco\nodds = get_odds(\"id1000001666456928\",\n                bookmakers=\"pinnacle,bet365,draftkings,fanduel,polymarket,kalshi\")\nbooks = odds[\"bookmakerOdds\"]\nprint(f\"{len(books)} bookmakers returned\")\n<\/code><\/pre>\n<h3>Step 4: Parse the Nested JSON<\/h3>\n<p>The <code>\/odds<\/code> response is deeply nested. The path to a price is <code>bookmakerOdds[slug][\"markets\"][marketId][\"outcomes\"][outcomeId][\"players\"][\"0\"][\"price\"]<\/code>. For the Full Time Result (market <code>101<\/code>), the outcome IDs are <code>101<\/code> = Home, <code>102<\/code> = Draw, <code>103<\/code> = Away.<\/p>\n<pre class=\"wp-block-code\"><code>def get_1x2(books, slug):\n    # Return (home, draw, away) decimal prices for a bookmaker, or None\n    try:\n        outs = books[slug][\"markets\"][\"101\"][\"outcomes\"]\n        return (\n            outs[\"101\"][\"players\"][\"0\"][\"price\"],  # Home\n            outs[\"102\"][\"players\"][\"0\"][\"price\"],  # Draw\n            outs[\"103\"][\"players\"][\"0\"][\"price\"],  # Away\n        )\n    except KeyError:\n        return None\n\nfor slug in [\"pinnacle\", \"bet365\", \"draftkings\", \"fanduel\", \"polymarket\", \"kalshi\"]:\n    line = get_1x2(books, slug)\n    if line:\n        print(f\"{slug:11} Brazil {line[0]}  Draw {line[1]}  Morocco {line[2]}\")\n\n# pinnacle    Brazil 1.625  Draw 3.79   Morocco 5.66\n# bet365      Brazil 1.6    Draw 4.0    Morocco 5.25\n# draftkings  Brazil 1.62   Draw 3.95   Morocco 5.75\n# fanduel     Brazil 1.56   Draw 4.0    Morocco 5.6\n# polymarket  Brazil 1.639  Draw 4.348  Morocco 5.556\n# kalshi      Brazil 1.613  Draw 4.348  Morocco 5.556\n<\/code><\/pre>\n<p><strong>Note the prediction markets.<\/strong> Polymarket&#8217;s prices on OddsPapi are already converted to decimal odds (not the native 0&ndash;1 share price), so you can drop them straight into a comparison alongside the sportsbooks.<\/p>\n<h2>Line Shopping: Find the Best World Cup Price<\/h2>\n<p>With 350+ books in one payload, finding the best available price for any outcome is a loop. Always filter on <code>active<\/code> &mdash; suspended or stale prices will otherwise poison your scan.<\/p>\n<pre class=\"wp-block-code\"><code>def best_price(books, market_id, outcome_id):\n    best_slug, best_odds = None, 0.0\n    for slug, bd in books.items():\n        try:\n            o = bd[\"markets\"][str(market_id)][\"outcomes\"][str(outcome_id)][\"players\"][\"0\"]\n            if o.get(\"active\") and o[\"price\"] > best_odds:\n                best_slug, best_odds = slug, o[\"price\"]\n        except (KeyError, TypeError):\n            continue\n    return best_slug, best_odds\n\n# Best price on each Brazil vs Morocco outcome (market 101)\nfor oid, label in [(\"101\", \"Brazil\"), (\"102\", \"Draw\"), (\"103\", \"Morocco\")]:\n    slug, price = best_price(books, 101, oid)\n    print(f\"Best {label}: {price} @ {slug}\")\n\n# Best Brazil: 1.639 @ polymarket\n# Best Draw:   4.348 @ kalshi\n# Best Morocco: 5.8  @ circasports\n<\/code><\/pre>\n<p>For a production-grade version of this with sharp-book whitelists and arb-sum sanity checks, see our <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">Python line shopping guide<\/a>.<\/p>\n<h2>De-Vig: What&#8217;s the Fair Price?<\/h2>\n<p>Pinnacle is the sharpest book in the market, so its no-vig line is the closest thing to a fair probability you&#8217;ll find. Strip the margin by normalising the implied probabilities:<\/p>\n<pre class=\"wp-block-code\"><code>def devig_1x2(home, draw, away):\n    imp = [1\/home, 1\/draw, 1\/away]\n    total = sum(imp)               # the overround (> 1)\n    fair = [p\/total for p in imp]  # normalised true probabilities\n    fair_odds = [1\/p for p in fair]\n    return fair, fair_odds, (total - 1) * 100\n\nh, d, a = get_1x2(books, \"pinnacle\")  # 1.625, 3.79, 5.66\nfair, fair_odds, vig = devig_1x2(h, d, a)\nprint(f\"Pinnacle margin: {vig:.2f}%\")\nprint(f\"Fair Brazil  {fair[0]*100:.1f}%  ({fair_odds[0]:.3f})\")\nprint(f\"Fair Draw    {fair[1]*100:.1f}%  ({fair_odds[1]:.3f})\")\nprint(f\"Fair Morocco {fair[2]*100:.1f}%  ({fair_odds[2]:.3f})\")\n\n# Pinnacle margin: 5.59%\n# Fair Brazil  58.3%  (1.716)\n# Fair Draw    25.0%  (4.002)\n# Fair Morocco 16.7%  (5.976)\n<\/code><\/pre>\n<p>Interesting wrinkle in the early lines: the prediction markets were pricing <em>tighter<\/em> than Pinnacle. On Brazil vs Morocco, Polymarket&#8217;s 1X2 overround was <strong>2.01%<\/strong> and Kalshi&#8217;s <strong>2.99%<\/strong>, versus Pinnacle&#8217;s <strong>5.59%<\/strong> and Bet365&#8217;s <strong>6.55%<\/strong>. Early-line margins are always wider than they&#8217;ll be on matchday, but the gap is a useful reminder to always check where the sharpest implied probability is coming from. Our <a href=\"https:\/\/oddspapi.io\/blog\/consensus-odds-fair-odds-calculator-python\/\">consensus odds calculator<\/a> shows how to blend all 350+ books into a single fair line.<\/p>\n<h2>Free Historical Odds for Backtesting<\/h2>\n<p>This is the differentiator most APIs charge for. The <code>\/historical-odds<\/code> endpoint returns the full price history for a fixture &mdash; every snapshot, with timestamps &mdash; on the free tier. Note the response shape differs from <code>\/odds<\/code>: the top-level key is <code>bookmakers<\/code> (not <code>bookmakerOdds<\/code>), and <code>players[\"0\"]<\/code> is a <strong>list<\/strong> of snapshots, not a single dict. Max 3 bookmakers per call.<\/p>\n<pre class=\"wp-block-code\"><code>def get_history(fixture_id, bookmakers):\n    r = requests.get(f\"{BASE_URL}\/historical-odds\", params={\n        \"apiKey\": API_KEY,\n        \"fixtureId\": fixture_id,\n        \"bookmakers\": bookmakers,  # max 3, e.g. \"pinnacle,bet365,draftkings\"\n    })\n    return r.json()\n\nhist = get_history(\"id1000001666456928\", \"pinnacle,bet365,draftkings\")\n# players[\"0\"] is a LIST of price snapshots:\nsnaps = hist[\"bookmakers\"][\"pinnacle\"][\"markets\"][\"101\"][\"outcomes\"][\"101\"][\"players\"][\"0\"]\nfor s in snaps[:5]:\n    print(s[\"createdAt\"], s[\"price\"])\n<\/code><\/pre>\n<p>Use this to measure Closing Line Value, track how the market moved on each team, or backtest a model against three weeks of group-stage drift. Pipe it to a spreadsheet with our <a href=\"https:\/\/oddspapi.io\/blog\/historical-odds-csv-excel-backtesting\/\">CSV\/Excel export guide<\/a>.<\/p>\n<h2>Beyond 1X2: Goals, BTTS &amp; Asian Handicaps<\/h2>\n<p>The World Cup feed carries the full native market structure, not just match result. Look market names up via <code>\/v4\/markets?sportId=10<\/code> rather than hardcoding the full catalog:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Market<\/th>\n<th>Market ID<\/th>\n<th>Outcome IDs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Over\/Under 2.5 Goals<\/td>\n<td><code>1010<\/code><\/td>\n<td><code>1010<\/code> Over \/ <code>1011<\/code> Under<\/td>\n<\/tr>\n<tr>\n<td>Both Teams To Score<\/td>\n<td><code>104<\/code><\/td>\n<td>Yes \/ No<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap 0 (Draw No Bet)<\/td>\n<td><code>1072<\/code><\/td>\n<td>Home \/ Away<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap -0.5<\/td>\n<td><code>1068<\/code><\/td>\n<td>Home \/ Away<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Asian Handicaps are handled natively &mdash; no awkward two-way conversion. For the cross-book AH scanner, see our <a href=\"https:\/\/oddspapi.io\/blog\/asian-handicap-api-cross-book-odds\/\">Asian Handicap API guide<\/a>.<\/p>\n<h2>Get Your Free API Key<\/h2>\n<p>The World Cup is the highest-volume betting event of the four-year cycle. Whether you&#8217;re building a value scanner, a live dashboard, or a model to beat the closing line, OddsPapi gives you 350+ bookmakers, sharps, prediction markets, and free historical data through one JSON endpoint &mdash; no enterprise contract, no scraping.<\/p>\n<p><strong><a href=\"https:\/\/oddspapi.io\/\">Stop scraping. Get your free OddsPapi API key &rarr;<\/a><\/strong><\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h3>Does OddsPapi have 2026 World Cup odds?<\/h3>\n<p>Yes. All World Cup fixtures are in the feed with <code>hasOdds: true<\/code>, filterable by <code>tournamentName=\"World Cup\"<\/code> (slug <code>world-cup<\/code>, category <code>international<\/code>) under soccer (<code>sportId=10<\/code>). Coverage includes group stage and knockout matches with 1X2, totals, BTTS and Asian Handicap markets.<\/p>\n<h3>Which bookmakers are covered for the World Cup?<\/h3>\n<p>350+ books including sharps (Pinnacle, SBOBet), US books (DraftKings, FanDuel, BetMGM), UK\/EU books (Bet365), and prediction markets (Polymarket, Kalshi). A marquee group match like Brazil vs Morocco returned 18 books on the match result three weeks before kickoff, climbing past 100 by matchday.<\/p>\n<h3>Is the World Cup odds data free?<\/h3>\n<p>Yes &mdash; the free tier includes live odds across 350+ bookmakers and historical price history, with a ~0.88s cooldown between calls to the same endpoint. No paid plan is required for the tutorial code in this guide.<\/p>\n<h3>How do I get the World Cup winner \/ outright odds?<\/h3>\n<p>Outright tournament-winner markets are listed in the <code>\/v4\/markets?sportId=10<\/code> catalog; query the catalog to find the current market ID, then pass the relevant <code>fixtureId<\/code> to <code>\/odds<\/code>. Match-level markets (1X2, totals, handicaps) are available on every fixture as shown above.<\/p>\n<h3>Can I get historical World Cup odds for backtesting?<\/h3>\n<p>Yes. The <code>\/historical-odds<\/code> endpoint returns the full snapshot history per fixture (up to 3 bookmakers per call) on the free tier. Use it to measure Closing Line Value or backtest a model against the group-stage market.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\": \"Question\", \"name\": \"Does OddsPapi have 2026 World Cup odds?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. All World Cup fixtures are in the feed with hasOdds true, filterable by tournamentName World Cup under soccer (sportId 10). Coverage includes group stage and knockout matches with 1X2, totals, BTTS and Asian Handicap markets.\"}},\n    {\"@type\": \"Question\", \"name\": \"Which bookmakers are covered for the World Cup?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"350+ books including sharps (Pinnacle, SBOBet), US books (DraftKings, FanDuel, BetMGM), UK\/EU books (Bet365), and prediction markets (Polymarket, Kalshi). A marquee group match like Brazil vs Morocco returned 18 books on the match result three weeks before kickoff, climbing past 100 by matchday.\"}},\n    {\"@type\": \"Question\", \"name\": \"Is the World Cup odds data free?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. The free tier includes live odds across 350+ bookmakers and historical price history, with a roughly 0.88s cooldown between calls to the same endpoint. No paid plan is required for the tutorial code in this guide.\"}},\n    {\"@type\": \"Question\", \"name\": \"How do I get the World Cup winner or outright odds?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Outright tournament-winner markets are listed in the \/v4\/markets?sportId=10 catalog. Query the catalog to find the current market ID, then pass the relevant fixtureId to \/odds. Match-level markets (1X2, totals, handicaps) are available on every fixture.\"}},\n    {\"@type\": \"Question\", \"name\": \"Can I get historical World Cup odds for backtesting?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. The \/historical-odds endpoint returns the full snapshot history per fixture (up to 3 bookmakers per call) on the free tier. Use it to measure Closing Line Value or backtest a model against the group-stage market.\"}}\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: world cup odds api\nSEO Title: World Cup Odds API: Live 2026 FIFA Odds from 350+ Bookmakers (Free)\nMeta Description: Pull live 2026 FIFA World Cup odds from 350+ bookmakers - Pinnacle, Bet365, Polymarket - in Python. Free tier with historical data. Tested code inside.\nSlug: world-cup-odds-api-2026-fifa\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pull live 2026 FIFA World Cup odds from 350+ bookmakers &#8211; Pinnacle, Bet365, Polymarket &#8211; in Python. Free tier with historical data. Tested code inside.<\/p>\n","protected":false},"author":2,"featured_media":2953,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8,9,11,15,10],"class_list":["post-2952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-free-api","tag-odds-api","tag-python","tag-soccer","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>World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development 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\/world-cup-odds-api-2026-fifa\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development Blog\" \/>\n<meta property=\"og:description\" content=\"Pull live 2026 FIFA World Cup odds from 350+ bookmakers - Pinnacle, Bet365, Polymarket - in Python. Free tier with historical data. Tested code inside.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\" \/>\n<meta property=\"og:site_name\" content=\"Odds API Development Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-05T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-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=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free)\",\"datePublished\":\"2026-06-05T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\"},\"wordCount\":1262,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp\",\"keywords\":[\"Free API\",\"Odds API\",\"Python\",\"Soccer\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\",\"name\":\"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp\",\"datePublished\":\"2026-06-05T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"World Cup Odds API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"name\":\"OddsPapi\",\"description\":\"Sports Odds APIs 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":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development 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\/world-cup-odds-api-2026-fifa\/","og_locale":"en_US","og_type":"article","og_title":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development Blog","og_description":"Pull live 2026 FIFA World Cup odds from 350+ bookmakers - Pinnacle, Bet365, Polymarket - in Python. Free tier with historical data. Tested code inside.","og_url":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/","og_site_name":"Odds API Development Blog","article_published_time":"2026-06-05T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-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":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free)","datePublished":"2026-06-05T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/"},"wordCount":1262,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp","keywords":["Free API","Odds API","Python","Soccer","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/","url":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/","name":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free) | Odds API Development Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp","datePublished":"2026-06-05T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/05\/world-cup-odds-api-2026-fifa-scaled.webp","width":2560,"height":1429,"caption":"World Cup Odds API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"World Cup Odds API: Live 2026 FIFA World Cup Odds from 350+ Bookmakers (Free)"}]},{"@type":"WebSite","@id":"https:\/\/oddspapi.io\/blog\/#website","url":"https:\/\/oddspapi.io\/blog\/","name":"OddsPapi","description":"Sports Odds APIs 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\/2952","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=2952"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/2952\/revisions"}],"predecessor-version":[{"id":2954,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/2952\/revisions\/2954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/2953"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=2952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=2952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=2952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}