{"id":3117,"date":"2026-07-17T10:00:00","date_gmt":"2026-07-17T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3117"},"modified":"2026-06-22T13:44:03","modified_gmt":"2026-06-22T13:44:03","slug":"pointsbet-api-odds-access","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/","title":{"rendered":"PointsBet API: How to Access PointsBet Odds Without Official API"},"content":{"rendered":"<p>Searching for a &#8220;PointsBet API&#8221; so you can pull PointsBet odds into a model, a line-shopping tool, or a dashboard? There isn&#8217;t a public one. PointsBet, like every major sportsbook, keeps its pricing endpoints private and locked behind its own apps. The good news: you do not need PointsBet to open a developer portal. You can read live PointsBet odds today through an aggregator that already carries them, alongside Pinnacle, the prediction markets, and 350+ other books, on a free tier.<\/p>\n<p>This guide shows you how, in Python, using <a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">OddsPapi<\/a>. Every number and code block below was tested live against the 2026 FIFA World Cup feed.<\/p>\n<h2>Why PointsBet Has No Public Odds API<\/h2>\n<p>PointsBet is an Australian-founded sportsbook (launched 2017), best known for its &#8220;PointsBetting&#8221; spread-style product where your win or loss scales with the margin of victory. Its US business was acquired by Fanatics in 2023; the brand still operates in Australia and Canada. The slug you will see in the data below, <code>pointsbet.com.au<\/code>, is the Australian sportsbook.<\/p>\n<p>None of those entities publish a documented odds API. Sportsbooks have no commercial reason to hand competitors and arbitrageurs a clean feed of their prices. What exists instead are private, undocumented endpoints behind their web and mobile apps, which change without notice, sit behind Cloudflare and geo-blocks, and will get your IP banned the moment you scrape them at any useful rate.<\/p>\n<p>So you have three options. Two of them are bad.<\/p>\n<h2>Scraping vs. Enterprise vs. OddsPapi<\/h2>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Approach<\/th>\n<th>What it actually means<\/th>\n<th>Verdict<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Scrape PointsBet directly<\/strong><\/td>\n<td>Reverse-engineer private app endpoints, rotate proxies, fight Cloudflare and geo-blocks, rebuild every time they ship a release.<\/td>\n<td>Brittle, against ToS, bans your IP.<\/td>\n<\/tr>\n<tr>\n<td><strong>Enterprise data feed<\/strong><\/td>\n<td>Sportradar \/ Genius-tier contracts. Real coverage, but sales calls, minimums, and four- to five-figure monthly invoices.<\/td>\n<td>Overkill unless you are an operator.<\/td>\n<\/tr>\n<tr>\n<td><strong>OddsPapi<\/strong><\/td>\n<td>One REST API that already aggregates PointsBet plus 350+ books. Query by sport, fixture, and bookmaker. Free tier, no scraping.<\/td>\n<td>The developer option.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>OddsPapi is the third option: enterprise-grade coverage (372 bookmakers across 69 sports as of this writing, including sharps like Pinnacle and SBOBet and prediction markets like Polymarket and Kalshi) at a developer-friendly price, with a free tier and free historical data.<\/p>\n<h2>What PointsBet Data Is Available Through OddsPapi<\/h2>\n<p>PointsBet is live in the feed under the slug <code>pointsbet.com.au<\/code>. On the 2026 World Cup slate it showed up on <strong>every fixture we sampled (10 of 10)<\/strong>, carrying <strong>36 to 49 markets per match<\/strong>. That is well beyond a moneyline-only book. On the Argentina vs. Austria group-stage fixture, PointsBet priced:<\/p>\n<ul>\n<li>Full Time Result (1X2), Double Chance, Draw No Bet, Half Time \/ Full Time<\/li>\n<li>Both Teams To Score (full match, first half, second half)<\/li>\n<li>Correct Score, Winning Margin, First Goal, Odd\/Even<\/li>\n<li>Clean Sheet and &#8220;to win both halves \/ either half&#8221; team markets<\/li>\n<li>Corners (1X2, handicap, over\/under)<\/li>\n<\/ul>\n<p>One honest caveat: PointsBet did <em>not<\/em> ship the headline full-time Over\/Under 2.5 goals line in this payload (it carried second-half totals and corner totals instead). That is exactly why you line-shop: pull PointsBet for the markets it prices well, and let the other 350+ books fill the gaps. We will do that below.<\/p>\n<h2>Step 1: Authenticate<\/h2>\n<p>Authentication is a single query parameter. There are no OAuth dances, no headers, no signing. <a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">Grab a free key<\/a> and you are in.<\/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 parameter, NOT a header\nr = requests.get(f\"{BASE_URL}\/sports\", params={\"apiKey\": API_KEY})\nprint(r.status_code)  # 200\n<\/code><\/pre>\n<h2>Step 2: Find Fixtures With PointsBet Odds<\/h2>\n<p>Soccer is <code>sportId=10<\/code>. Pull a date range (the window is capped at 10 days), then keep only fixtures that have odds. Here we filter to the World Cup tournament.<\/p>\n<pre class=\"wp-block-code\"><code>params = {\n    \"apiKey\": API_KEY,\n    \"sportId\": 10,\n    \"from\": \"2026-06-22\",\n    \"to\": \"2026-07-02\",\n}\nfixtures = requests.get(f\"{BASE_URL}\/fixtures\", params=params).json()\n\nworld_cup = [\n    f for f in fixtures\n    if f.get(\"hasOdds\") and \"world cup\" in str(f.get(\"tournamentName\", \"\")).lower()\n]\n\nfor f in world_cup[:5]:\n    print(f[\"fixtureId\"], f[\"participant1Name\"], \"vs\", f[\"participant2Name\"])\n\n# id1000001666457022 Argentina vs Austria\n# id1000001666457010 France vs Iraq\n# ...\n<\/code><\/pre>\n<p>Only fixtures with <code>hasOdds: true<\/code> return a pricing payload. The terminology note for US devs: OddsPapi calls a league a <em>tournament<\/em>, a game a <em>fixture<\/em>, and a team a <em>participant<\/em>.<\/p>\n<h2>Step 3: Pull PointsBet Odds for a Fixture<\/h2>\n<p>Hit <code>\/odds<\/code> with a <code>fixtureId<\/code>. The response nests prices under <code>bookmakerOdds[slug][\"markets\"][marketId][\"outcomes\"][outcomeId][\"players\"][\"0\"]<\/code>. For the live endpoint, <code>players[\"0\"]<\/code> is a dict with the current price.<\/p>\n<pre class=\"wp-block-code\"><code>fixture_id = \"id1000001666457022\"  # Argentina vs Austria\n\nodds = requests.get(f\"{BASE_URL}\/odds\", params={\n    \"apiKey\": API_KEY,\n    \"fixtureId\": fixture_id,\n}).json()\n\npb = odds[\"bookmakerOdds\"][\"pointsbet.com.au\"]\n\n# Market 101 = Full Time Result (1X2). Outcomes: 101=Home, 102=Draw, 103=Away\nftr = pb[\"markets\"][\"101\"][\"outcomes\"]\nfor outcome_id, label in [(\"101\", \"Argentina\"), (\"102\", \"Draw\"), (\"103\", \"Austria\")]:\n    price = ftr[outcome_id][\"players\"][\"0\"][\"price\"]\n    print(f\"{label}: {price}\")\n\n# Argentina: 1.42\n# Draw: 4.3\n# Austria: 7.5\n<\/code><\/pre>\n<p>The feed pre-converts every price to decimal (<code>price<\/code>), American (<code>priceAmerican<\/code>, a string), and fractional (<code>priceFractional<\/code>, a string), so you never write your own odds converter.<\/p>\n<h3>A pitfall worth knowing: the bookmakers filter<\/h3>\n<p>You can narrow <code>\/odds<\/code> to specific books with a <code>bookmakers<\/code> comma list. But there is a sharp edge: <strong>if you include a slug that is not on that fixture, the entire response comes back empty<\/strong>, not just that one book. We confirmed it live:<\/p>\n<pre class=\"wp-block-code\"><code># Both present -> works\nget_books(\"pinnacle,pointsbet.com.au\")   # ['pinnacle', 'pointsbet.com.au']\n\n# One slug absent on this fixture -> whole response zeroes out\nget_books(\"pointsbet.com.au,betway\")     # []\n<\/code><\/pre>\n<p>So either omit the filter and parse the full payload, or filter only by slugs you have already confirmed are on the fixture. The model names need to match the feed exactly too: PointsBet is <code>pointsbet.com.au<\/code>, not <code>pointsbet<\/code>.<\/p>\n<h2>PointsBet vs. Pinnacle: The 7% Vig Gap<\/h2>\n<p>PointsBet is a soft, recreational-facing book. Pinnacle is the sharpest mainstream book on the planet. The price difference is not subtle. Here is the same 1X2 market, same fixture, both books:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Outcome<\/th>\n<th>PointsBet<\/th>\n<th>Pinnacle<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Argentina<\/td>\n<td>1.42<\/td>\n<td>1.487<\/td>\n<\/tr>\n<tr>\n<td>Draw<\/td>\n<td>4.30<\/td>\n<td>4.50<\/td>\n<\/tr>\n<tr>\n<td>Austria<\/td>\n<td>7.50<\/td>\n<td>8.00<\/td>\n<\/tr>\n<tr>\n<td><strong>Overround (vig)<\/strong><\/td>\n<td><strong>7.01%<\/strong><\/td>\n<td><strong>1.97%<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>PointsBet is worse on all three outcomes, and its built-in margin is <strong>3.5x heavier<\/strong> than Pinnacle&#8217;s. To find the market&#8217;s fair probabilities, de-vig the sharp line (strip Pinnacle&#8217;s overround proportionally):<\/p>\n<pre class=\"wp-block-code\"><code>def devig_proportional(decimal_odds):\n    inv = [1 \/ o for o in decimal_odds]\n    total = sum(inv)               # = 1 + overround\n    return [i \/ total for i in inv]  # fair probabilities\n\npin = [1.487, 4.5, 8.0]            # Argentina \/ Draw \/ Austria\nfair = devig_proportional(pin)\n# Argentina 65.9% (fair 1.516)\n# Draw      21.8% (fair 4.589)\n# Austria   12.3% (fair 8.158)\n<\/code><\/pre>\n<p>Against a fair Argentina price of 1.516, PointsBet&#8217;s 1.42 is charging you 6%+ in margin on the favorite. This is why no one should bet a soft book blind, and why pairing PointsBet with a sharp anchor is the whole point. (For the math three ways, see our <a href=\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\">no-vig odds guide<\/a> and the <a href=\"https:\/\/oddspapi.io\/blog\/vig-calculator-python-sportsbook-margin\/\">vig calculator<\/a>.)<\/p>\n<h2>Line Shopping: PointsBet vs the Field<\/h2>\n<p>The real unlock of an aggregator is comparing PointsBet against every other book in one call. Walk every bookmaker on the fixture and keep the best decimal price per outcome, filtering on <code>active<\/code> so you never compare against a suspended line.<\/p>\n<pre class=\"wp-block-code\"><code>def best_price(bookmaker_odds, market_id, outcome_id):\n    best, best_book = None, None\n    for slug, data in bookmaker_odds.items():\n        try:\n            o = data[\"markets\"][market_id][\"outcomes\"][outcome_id]\n            p = o[\"players\"][\"0\"]\n            if not o.get(\"active\", True):\n                continue\n            if best is None or p[\"price\"] > best:\n                best, best_book = p[\"price\"], slug\n        except (KeyError, TypeError):\n            continue\n    return best, best_book\n\nbooks = odds[\"bookmakerOdds\"]\nfor oid, label in [(\"101\", \"Argentina\"), (\"102\", \"Draw\"), (\"103\", \"Austria\")]:\n    price, book = best_price(books, \"101\", oid)\n    print(f\"{label}: best {price} @ {book}\")\n\n# Argentina: best 1.505 @ circasports   (PointsBet 1.42)\n# Draw:      best 4.762 @ kalshi        (PointsBet 4.30)\n# Austria:   best 8.333 @ kalshi        (PointsBet 7.50)\n<\/code><\/pre>\n<p>On all three outcomes the best available price across the field beats PointsBet, by roughly 6% on Argentina and 11% on both the draw and Austria. That is not a value or +EV claim, just the best price on offer. But it shows the cost of betting one soft book in isolation, and it is exactly the workflow our <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">line shopping tutorial<\/a> generalizes across the full catalog. A standard sanity check: outliers like a single book quoting far above the pack can be stale or boosted, so cross-check before trusting them.<\/p>\n<h2>Native Markets: Beyond the Moneyline<\/h2>\n<p>PointsBet ships structured props natively, so you do not have to reconstruct them. Both Teams To Score on the same fixture, for example:<\/p>\n<pre class=\"wp-block-code\"><code># Market 104 = Both Teams To Score. Outcomes: 104=Yes, 105=No\nbtts = pb[\"markets\"][\"104\"][\"outcomes\"]\nprint(\"Yes:\", btts[\"104\"][\"players\"][\"0\"][\"price\"])  # 2.05\nprint(\"No:\",  btts[\"105\"][\"players\"][\"0\"][\"price\"])  # 1.69\n<\/code><\/pre>\n<p>Market and outcome IDs are integers; pull human-readable names from <code>\/markets?sportId=10<\/code> and build your own lookup dict rather than hardcoding the catalog (soccer alone has tens of thousands of market-line variants):<\/p>\n<pre class=\"wp-block-code\"><code>cat = requests.get(f\"{BASE_URL}\/markets\",\n                   params={\"apiKey\": API_KEY, \"sportId\": 10}).json()\nmarket_names = {m[\"marketId\"]: m[\"marketName\"] for m in cat}\n<\/code><\/pre>\n<h2>Free Historical PointsBet Odds<\/h2>\n<p>Backtesting is where most aggregators put up a paywall. OddsPapi gives historical price history away on the free tier. The historical endpoint has a <em>different<\/em> shape from the live one: the top 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 three books per call.<\/p>\n<pre class=\"wp-block-code\"><code>hist = requests.get(f\"{BASE_URL}\/historical-odds\", params={\n    \"apiKey\": API_KEY,\n    \"fixtureId\": fixture_id,\n    \"bookmakers\": \"pointsbet.com.au,pinnacle\",   # max 3\n}).json()\n\nsnaps = hist[\"bookmakers\"][\"pointsbet.com.au\"][\"markets\"][\"101\"][\"outcomes\"][\"101\"][\"players\"][\"0\"]\nfor snap in snaps:\n    print(snap[\"createdAt\"], snap[\"price\"])\n<\/code><\/pre>\n<p>That timeline is how you measure line movement and closing line value: store the opening PointsBet price, compare it to the close, and you have a CLV audit with no extra cost.<\/p>\n<h2>PointsBet vs. Pinnacle: Why You Need Both<\/h2>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Use PointsBet for&#8230;<\/th>\n<th>Use Pinnacle (and the field) for&#8230;<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>The price you can actually bet (if you have an account)<\/td>\n<td>The fair probability anchor (de-vigged)<\/td>\n<\/tr>\n<tr>\n<td>Recreational and prop market depth<\/td>\n<td>Sharp, low-margin lines for value detection<\/td>\n<\/tr>\n<tr>\n<td>One book&#8217;s view of a market<\/td>\n<td>Best available price across 350+ books<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>PointsBet alone tells you almost nothing about whether a price is good. PointsBet next to Pinnacle and the rest of the field tells you everything.<\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h3>Does PointsBet have an official API?<\/h3>\n<p>No. PointsBet does not publish a documented public odds API. Its pricing lives behind private app endpoints. To read PointsBet odds programmatically, use an aggregator like OddsPapi that already carries the feed.<\/p>\n<h3>What is the PointsBet slug in OddsPapi?<\/h3>\n<p>It is <code>pointsbet.com.au<\/code> (the Australian sportsbook). Use that exact string in the <code>bookmakers<\/code> filter; <code>pointsbet<\/code> on its own will not match.<\/p>\n<h3>Is scraping PointsBet legal?<\/h3>\n<p>Scraping violates PointsBet&#8217;s terms of service and will get your IP blocked. Reading the prices through a licensed aggregator avoids the ToS, the Cloudflare fights, and the maintenance burden entirely.<\/p>\n<h3>How many markets does PointsBet cover?<\/h3>\n<p>On the World Cup fixtures we tested, PointsBet priced 36 to 49 markets each, including 1X2, double chance, draw no bet, both teams to score, correct score, half time\/full time, winning margin, and corners. The exact set varies by fixture and sport.<\/p>\n<h3>Is PointsBet odds data free on OddsPapi?<\/h3>\n<p>Yes. PointsBet live and historical odds are available on the OddsPapi free tier, alongside 350+ other bookmakers.<\/p>\n<h2>Stop Hunting for a PointsBet API That Does Not Exist<\/h2>\n<p>There is no PointsBet developer portal coming. But you do not need one. With a free OddsPapi key you can read live and historical PointsBet odds in Python today, line-shop them against Pinnacle and 350+ books, and build whatever model, scanner, or dashboard you came here for, without scraping a single page.<\/p>\n<p><strong><a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">Get your free API key<\/a><\/strong> and pull your first PointsBet price in the next five minutes.<\/p>\n<p>Related: <a href=\"https:\/\/oddspapi.io\/blog\/draftkings-api-odds-access\/\">DraftKings API access<\/a>, <a href=\"https:\/\/oddspapi.io\/blog\/world-cup-odds-api-2026-fifa\/\">World Cup Odds API<\/a>, and the <a href=\"https:\/\/oddspapi.io\/blog\/consensus-odds-fair-odds-calculator-python\/\">consensus odds calculator<\/a>.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\": \"Question\", \"name\": \"Does PointsBet have an official API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. PointsBet does not publish a documented public odds API. Its pricing lives behind private app endpoints. To read PointsBet odds programmatically, use an aggregator like OddsPapi that already carries the feed.\"}},\n    {\"@type\": \"Question\", \"name\": \"What is the PointsBet slug in OddsPapi?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"It is pointsbet.com.au (the Australian sportsbook). Use that exact string in the bookmakers filter; pointsbet on its own will not match.\"}},\n    {\"@type\": \"Question\", \"name\": \"Is scraping PointsBet legal?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Scraping violates PointsBet's terms of service and will get your IP blocked. Reading the prices through a licensed aggregator avoids the ToS, the Cloudflare fights, and the maintenance burden entirely.\"}},\n    {\"@type\": \"Question\", \"name\": \"How many markets does PointsBet cover?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"On the World Cup fixtures we tested, PointsBet priced 36 to 49 markets each, including 1X2, double chance, draw no bet, both teams to score, correct score, half time\/full time, winning margin, and corners. The exact set varies by fixture and sport.\"}},\n    {\"@type\": \"Question\", \"name\": \"Is PointsBet odds data free on OddsPapi?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. PointsBet live and historical odds are available on the OddsPapi free tier, alongside 350+ other bookmakers.\"}}\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: PointsBet API\nSEO Title: PointsBet API: How to Access PointsBet Odds Without Official API\nMeta Description: PointsBet has no public odds API. Pull live PointsBet odds in Python via OddsPapi, next to Pinnacle & 350+ books. Free tier, World Cup data tested.\nSlug: pointsbet-api-odds-access\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PointsBet has no public odds API. Pull live PointsBet odds in Python via OddsPapi, next to Pinnacle &#038; 350+ books. Free tier, World Cup data tested.<\/p>\n","protected":false},"author":2,"featured_media":3118,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8,9,77,11,10],"class_list":["post-3117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-free-api","tag-odds-api","tag-pointsbet","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>PointsBet API: How to Access PointsBet Odds Without Official API | 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\/pointsbet-api-odds-access\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PointsBet API: How to Access PointsBet Odds Without Official API | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"PointsBet has no public odds API. Pull live PointsBet odds in Python via OddsPapi, next to Pinnacle &amp; 350+ books. Free tier, World Cup data tested.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-17T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1429\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Odds API Writer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/oddspapi.io\/logo-v2.webp\" \/>\n<meta name=\"twitter:creator\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:site\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odds API Writer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"PointsBet API: How to Access PointsBet Odds Without Official API\",\"datePublished\":\"2026-07-17T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\"},\"wordCount\":1490,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp\",\"keywords\":[\"Free API\",\"Odds API\",\"PointsBet\",\"Python\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\",\"name\":\"PointsBet API: How to Access PointsBet Odds Without Official API | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp\",\"datePublished\":\"2026-07-17T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"PointsBet API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PointsBet API: How to Access PointsBet Odds Without Official API\"}]},{\"@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":"PointsBet API: How to Access PointsBet Odds Without Official API | 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\/pointsbet-api-odds-access\/","og_locale":"en_US","og_type":"article","og_title":"PointsBet API: How to Access PointsBet Odds Without Official API | OddsPapi Blog","og_description":"PointsBet has no public odds API. Pull live PointsBet odds in Python via OddsPapi, next to Pinnacle & 350+ books. Free tier, World Cup data tested.","og_url":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-07-17T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp","type":"image\/webp"}],"author":"Odds API Writer","twitter_card":"summary_large_image","twitter_image":"https:\/\/oddspapi.io\/logo-v2.webp","twitter_creator":"@oddspapiapi","twitter_site":"@oddspapiapi","twitter_misc":{"Written by":"Odds API Writer","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"PointsBet API: How to Access PointsBet Odds Without Official API","datePublished":"2026-07-17T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/"},"wordCount":1490,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp","keywords":["Free API","Odds API","PointsBet","Python","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/","url":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/","name":"PointsBet API: How to Access PointsBet Odds Without Official API | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp","datePublished":"2026-07-17T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/pointsbet-api-odds-access-scaled.webp","width":2560,"height":1429,"caption":"PointsBet API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/pointsbet-api-odds-access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"PointsBet API: How to Access PointsBet Odds Without Official API"}]},{"@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\/3117","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=3117"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3117\/revisions"}],"predecessor-version":[{"id":3119,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3117\/revisions\/3119"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3118"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}