{"id":3102,"date":"2026-07-10T10:00:00","date_gmt":"2026-07-10T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3102"},"modified":"2026-06-21T17:40:39","modified_gmt":"2026-06-21T17:40:39","slug":"wnba-odds-api","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/","title":{"rendered":"WNBA Odds API: Live Moneylines, Spreads &#038; Player Props (Python + Free Tier)"},"content":{"rendered":"<p>The WNBA is the fastest-growing betting market in US sports, and through the summer it is the <em>only<\/em> major basketball on the board, the NBA is on its off-season break. Yet most generic odds APIs treat the WNBA as an afterthought: thin book coverage, no player props, no sharp lines to benchmark against.<\/p>\n<p>This guide fixes that. You will pull live WNBA odds, moneylines, spreads, totals, and player-points props, from 17 bookmakers including two sharps (Pinnacle and SBOBet) and prediction markets (Polymarket, Kalshi), with a single free API key and a few lines of Python. Every number below was pulled live from the API as this post was written.<\/p>\n<h2>Why a WNBA Odds API Is Harder Than NBA<\/h2>\n<p>For the NBA, every book prices every game deep. WNBA coverage is shallower and more uneven across providers, which is exactly why an aggregator matters: the books that <em>do<\/em> price the WNBA disagree more, so the best available line is often meaningfully better than the market average. On the example game below, the best moneyline price on the underdog was a full prediction-market tick above the sharp book&#8217;s number.<\/p>\n<p>OddsPapi covers basketball under <code>sportId=11<\/code>, and the WNBA is one tournament inside it. You filter by <code>tournamentName<\/code>, then parse the same nested JSON used for every other sport. If you have read our <a href=\"https:\/\/oddspapi.io\/blog\/nba-odds-api-player-props-spreads\/\">NBA Odds API guide<\/a>, the market IDs are identical, basketball is basketball.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>&nbsp;<\/th>\n<th>Generic Odds API<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>WNBA books<\/strong><\/td>\n<td>A handful<\/td>\n<td>17 on a primetime game<\/td>\n<\/tr>\n<tr>\n<td><strong>Sharp lines<\/strong><\/td>\n<td>Rarely<\/td>\n<td>Pinnacle + SBOBet<\/td>\n<\/tr>\n<tr>\n<td><strong>Prediction markets<\/strong><\/td>\n<td>No<\/td>\n<td>Polymarket, Kalshi<\/td>\n<\/tr>\n<tr>\n<td><strong>Player props<\/strong><\/td>\n<td>Often missing<\/td>\n<td>Player points, buckets (15+, 30+)<\/td>\n<\/tr>\n<tr>\n<td><strong>Spreads &amp; totals<\/strong><\/td>\n<td>Mainline only<\/td>\n<td>Every handicap &amp; total line<\/td>\n<\/tr>\n<tr>\n<td><strong>Historical odds<\/strong><\/td>\n<td>Paid<\/td>\n<td>Free<\/td>\n<\/tr>\n<tr>\n<td><strong>Price<\/strong><\/td>\n<td>Per-call quotas<\/td>\n<td>Free tier<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>Tutorial: Pull Live WNBA Odds in Python<\/h2>\n<h3>Step 1: Authenticate<\/h3>\n<p>Grab a free key. The one gotcha: <strong>the API key is a query parameter, not a header.<\/strong><\/p>\n<pre class=\"wp-block-code\"><code>import requests\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\n\nr = requests.get(f\"{BASE_URL}\/sports\", params={\"apiKey\": API_KEY})\nprint(r.status_code)  # 200\n<\/code><\/pre>\n<h3>Step 2: Find WNBA Fixtures<\/h3>\n<p>Basketball is <code>sportId=11<\/code>. Pull a date window (max 10 days) and filter to WNBA fixtures that have odds.<\/p>\n<pre class=\"wp-block-code\"><code>from datetime import date, timedelta\n\ntoday = date.today()\nparams = {\n    \"apiKey\": API_KEY,\n    \"sportId\": 11,                       # basketball\n    \"from\": today.isoformat(),\n    \"to\": (today + timedelta(days=7)).isoformat(),\n}\nfixtures = requests.get(f\"{BASE_URL}\/fixtures\", params=params).json()\nwnba = [f for f in fixtures\n        if f.get(\"hasOdds\") and (f.get(\"tournamentName\") or \"\").upper() == \"WNBA\"]\n\nfor f in wnba[:5]:\n    print(f[\"participant1Name\"], \"vs\", f[\"participant2Name\"], \"|\", f[\"fixtureId\"])\n<\/code><\/pre>\n<p>Worked example: <strong>Las Vegas Aces vs Golden State Valkyries<\/strong> (<code>fixtureId id1100048668096446<\/code>), priced by 17 books.<\/p>\n<h3>Step 3: Parse the Moneyline Across Every Book<\/h3>\n<p>Hit <code>\/odds<\/code> and walk the nesting: <code>bookmakerOdds -&gt; {slug} -&gt; markets -&gt; {marketId} -&gt; outcomes -&gt; {outcomeId} -&gt; players[\"0\"] -&gt; price<\/code>. The basketball moneyline is market <strong>111<\/strong> (&#8220;Winner incl. overtime&#8221;), outcomes <strong>111<\/strong> (home) and <strong>112<\/strong> (away). Always check <code>active<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>fid = \"id1100048668096446\"\nbooks = requests.get(f\"{BASE_URL}\/odds\",\n                     params={\"apiKey\": API_KEY, \"fixtureId\": fid}).json()[\"bookmakerOdds\"]\n\ndef moneyline(slug):\n    outs = books.get(slug, {}).get(\"markets\", {}).get(\"111\", {}).get(\"outcomes\", {})\n    row = {}\n    for oid in (\"111\", \"112\"):\n        node = outs.get(oid, {}).get(\"players\", {}).get(\"0\", {})\n        if node and node.get(\"active\"):\n            row[oid] = node[\"price\"]\n    return row\n\nfor slug in sorted(books):\n    p = moneyline(slug)\n    if p:\n        print(f\"{slug:18} Aces {p.get('111')}  Valkyries {p.get('112')}\")\n<\/code><\/pre>\n<p>Real output (13 active books on the moneyline):<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Bookmaker<\/th>\n<th>Type<\/th>\n<th>Aces<\/th>\n<th>Valkyries<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>pinnacle<\/td>\n<td>Sharp<\/td>\n<td>1.617<\/td>\n<td>2.37<\/td>\n<\/tr>\n<tr>\n<td>polymarket<\/td>\n<td>Prediction<\/td>\n<td>1.639<\/td>\n<td>2.50<\/td>\n<\/tr>\n<tr>\n<td>kalshi<\/td>\n<td>Prediction<\/td>\n<td>1.613<\/td>\n<td>2.50<\/td>\n<\/tr>\n<tr>\n<td>fanduel<\/td>\n<td>US book<\/td>\n<td>1.63<\/td>\n<td>2.28<\/td>\n<\/tr>\n<tr>\n<td>draftkings<\/td>\n<td>US book<\/td>\n<td>1.57<\/td>\n<td>2.45<\/td>\n<\/tr>\n<tr>\n<td>betmgm<\/td>\n<td>US book<\/td>\n<td>1.59<\/td>\n<td>2.40<\/td>\n<\/tr>\n<tr>\n<td>caesars<\/td>\n<td>US book<\/td>\n<td>1.606<\/td>\n<td>2.40<\/td>\n<\/tr>\n<tr>\n<td>circasports<\/td>\n<td>Sharp US<\/td>\n<td>1.588<\/td>\n<td>2.50<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h3>Step 4: De-Vig the Sharp and Find the Best Line<\/h3>\n<pre class=\"wp-block-code\"><code>pin = moneyline(\"pinnacle\")              # {'111': 1.617, '112': 2.37}\ninv = 1\/pin[\"111\"] + 1\/pin[\"112\"]\nprint(f\"Pinnacle overround: {(inv-1)*100:.2f}%\")\nprint(f\"Fair: Aces {1\/(1\/pin['111']\/inv):.3f}  Valkyries {1\/(1\/pin['112']\/inv):.3f}\")\n\ndef best(oid):\n    quotes = [(moneyline(s).get(oid), s) for s in books]\n    return max((q for q in quotes if q[0]), default=(None, None))\n\nprint(\"Best Aces:\", best(\"111\"))\nprint(\"Best Valkyries:\", best(\"112\"))\n<\/code><\/pre>\n<p>Result: Pinnacle&#8217;s overround is <strong>4.04%<\/strong>, with a no-vig fair line of Aces 1.682 (59.4%) \/ Valkyries 2.466 (40.6%). The best available prices were <strong>1.639 on the Aces<\/strong> and <strong>2.50 on the Valkyries<\/strong>, both at Polymarket. That 2.50 is the best available price on the dog and sits above Pinnacle&#8217;s fair, treat it as a line-shopping win, not a guaranteed edge, but it is real money versus the 2.37 the sharp book was posting. That is the <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">line shopping<\/a> payoff, invisible without an aggregator.<\/p>\n<h3>Step 5: Spreads and Totals<\/h3>\n<p>The WNBA spread is the <strong>Handicap (incl. overtime)<\/strong> market and the total is <strong>Over Under (incl. overtime)<\/strong>. Each line variant has its own market ID, so the cleanest approach is to read each book&#8217;s <code>mainLine: true<\/code> flag rather than hardcoding a handicap. Build your lookup from <code>\/markets?sportId=11<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>def main_lines(slug):\n    out = {}\n    for mid, m in books.get(slug, {}).get(\"markets\", {}).items():\n        for oid, o in m[\"outcomes\"].items():\n            node = o.get(\"players\", {}).get(\"0\", {})\n            if node.get(\"mainLine\") and node.get(\"active\"):\n                out[(mid, oid)] = node[\"price\"]\n    return out\n<\/code><\/pre>\n<p>For our game, Pinnacle&#8217;s main lines were the Aces <strong>-3<\/strong> spread (1.892 \/ 1.961) and a <strong>167<\/strong> total (Over 1.925 \/ Under 1.925). Every alternate handicap and total is in the same payload, so you can build a full ladder, not just the headline number.<\/p>\n<h3>Step 6: Player Points Props<\/h3>\n<p>This is where the WNBA aggregator really earns its keep. The <strong>Over Under Player Points<\/strong> markets carry per-player lines (each price node has a <code>playerName<\/code>), and books also offer threshold buckets like 15+, 30+, and 35+ points. On this game FanDuel priced <strong>Jackie Young 15+ points at 1.47<\/strong>, 30+ at 2.10, and 35+ at 4.60, alongside lines for Chelsea Gray, Jewell Loyd, and Valkyries players.<\/p>\n<pre class=\"wp-block-code\"><code># player props live under playerName inside each outcome's players dict\nfor mid, m in books[\"fanduel\"][\"markets\"].items():\n    for oid, o in m[\"outcomes\"].items():\n        for _, node in o.get(\"players\", {}).items():\n            name = node.get(\"playerName\")\n            if name and node.get(\"active\"):\n                print(mid, name, node[\"price\"])\n<\/code><\/pre>\n<p>For a full prop deep-dive across the US books, see our <a href=\"https:\/\/oddspapi.io\/blog\/player-props-api-nfl-nba-mlb-odds-python\/\">player props API guide<\/a>. The same parsing applies to WNBA, just with <code>sportId=11<\/code>.<\/p>\n<h2>Free Historical WNBA Odds<\/h2>\n<p>Backtesting a WNBA model? The full price history is free on <code>\/historical-odds<\/code>. Note the shape change: the top key is <code>bookmakers<\/code> (not <code>bookmakerOdds<\/code>) and <code>players[\"0\"]<\/code> is a <em>list<\/em> of timestamped snapshots. Max three bookmakers per call.<\/p>\n<pre class=\"wp-block-code\"><code>h = requests.get(f\"{BASE_URL}\/historical-odds\",\n                 params={\"apiKey\": API_KEY, \"fixtureId\": fid,\n                         \"bookmakers\": \"pinnacle,fanduel,draftkings\"}).json()\nsnaps = h[\"bookmakers\"][\"pinnacle\"][\"markets\"][\"111\"][\"outcomes\"][\"111\"][\"players\"][\"0\"]\nfor s in snaps[:5]:\n    print(s[\"createdAt\"], s[\"price\"])\n<\/code><\/pre>\n<p>Compare the closing line you bet into against where the sharp book actually closed, the foundation of <a href=\"https:\/\/oddspapi.io\/blog\/consensus-odds-fair-odds-calculator-python\/\">fair-odds and consensus analysis<\/a>.<\/p>\n<h2>FAQ<\/h2>\n<h3>Is there a WNBA odds API?<\/h3>\n<p>Yes. OddsPapi exposes WNBA odds under basketball (<code>sportId=11<\/code>), filtered by <code>tournamentName == \"WNBA\"<\/code>. A primetime game is priced by up to 17 bookmakers including Pinnacle, SBOBet, FanDuel, DraftKings, BetMGM, Polymarket, and Kalshi, on a free tier.<\/p>\n<h3>What WNBA markets are available?<\/h3>\n<p>Moneyline (market 111), point spread \/ handicap, game and team totals, first-half lines, and player-points props (per-player Over\/Under plus 15+, 30+, 35+ buckets). Every alternate spread and total line is in the same payload.<\/p>\n<h3>Does OddsPapi have WNBA player props?<\/h3>\n<p>Yes, player-points props with player names from the major US books (FanDuel, DraftKings, BetMGM) and Pinnacle. Each price node carries a <code>playerName<\/code> field.<\/p>\n<h3>Are WNBA odds available in-season only?<\/h3>\n<p>Odds appear for scheduled fixtures, so coverage is densest during the WNBA season (roughly May to October). Always discover fixtures live with the <code>hasOdds<\/code> flag rather than assuming.<\/p>\n<h3>Can I get historical WNBA odds for backtesting?<\/h3>\n<p>Yes, free. The <code>\/historical-odds<\/code> endpoint returns the full timestamped price history for a fixture (up to three bookmakers per call).<\/p>\n<h2>Build Your WNBA Edge<\/h2>\n<p>WNBA betting is growing faster than the data tooling around it, which is the opportunity. With 17 books, two sharps, prediction-market prices, full player props, and free history in clean JSON, you have everything you need to line-shop, model, or build. New to the API? Start with the <a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">free odds API guide<\/a>. <strong><a href=\"https:\/\/oddspapi.io\/\">Get your free OddsPapi API key<\/a><\/strong> and pull your first live WNBA line today.<\/p>\n<p><!--\nFocus Keyphrase: wnba odds api\nSEO Title: WNBA Odds API: Live Moneylines, Spreads & Player Props (Python + Free Tier)\nMeta Description: Get live WNBA odds from 17 books incl. Pinnacle: moneylines, spreads, totals & player props. Free OddsPapi key, Python tutorial with tested code.\nSlug: wnba-odds-api\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Get live WNBA odds from 17 books incl. Pinnacle: moneylines, spreads, totals &#038; player props. Free OddsPapi key, Python tutorial with tested code.<\/p>\n","protected":false},"author":2,"featured_media":3103,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[75,8,9,11,10],"class_list":["post-3102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-basketball","tag-free-api","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>WNBA Odds API: Live Moneylines, Spreads &amp; Player Props (Python + Free Tier) | 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\/wnba-odds-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WNBA Odds API: Live Moneylines, Spreads &amp; Player Props (Python + Free Tier) | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"Get live WNBA odds from 17 books incl. Pinnacle: moneylines, spreads, totals &amp; player props. Free OddsPapi key, Python tutorial with tested code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-10T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"WNBA Odds API: Live Moneylines, Spreads &#038; Player Props (Python + Free Tier)\",\"datePublished\":\"2026-07-10T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\"},\"wordCount\":947,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp\",\"keywords\":[\"Basketball\",\"Free API\",\"Odds API\",\"Python\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\",\"name\":\"WNBA Odds API: Live Moneylines, Spreads & Player Props (Python + Free Tier) | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp\",\"datePublished\":\"2026-07-10T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"WNBA Odds API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WNBA Odds API: Live Moneylines, Spreads &#038; Player Props (Python + Free Tier)\"}]},{\"@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":"WNBA Odds API: Live Moneylines, Spreads & Player Props (Python + Free Tier) | 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\/wnba-odds-api\/","og_locale":"en_US","og_type":"article","og_title":"WNBA Odds API: Live Moneylines, Spreads & Player Props (Python + Free Tier) | OddsPapi Blog","og_description":"Get live WNBA odds from 17 books incl. Pinnacle: moneylines, spreads, totals & player props. Free OddsPapi key, Python tutorial with tested code.","og_url":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-07-10T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-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":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"WNBA Odds API: Live Moneylines, Spreads &#038; Player Props (Python + Free Tier)","datePublished":"2026-07-10T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/"},"wordCount":947,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp","keywords":["Basketball","Free API","Odds API","Python","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/","url":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/","name":"WNBA Odds API: Live Moneylines, Spreads & Player Props (Python + Free Tier) | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp","datePublished":"2026-07-10T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/wnba-odds-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/wnba-odds-api-scaled.webp","width":2560,"height":1429,"caption":"WNBA Odds API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/wnba-odds-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"WNBA Odds API: Live Moneylines, Spreads &#038; Player Props (Python + Free Tier)"}]},{"@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\/3102","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=3102"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3102\/revisions"}],"predecessor-version":[{"id":3104,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3102\/revisions\/3104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3103"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}