{"id":3660,"date":"2026-08-24T10:00:00","date_gmt":"2026-08-24T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3660"},"modified":"2026-08-13T13:18:23","modified_gmt":"2026-08-13T13:18:23","slug":"kalshi-polymarket-nfl-odds","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/","title":{"rendered":"Kalshi &#038; Polymarket NFL Odds: Prediction Market Data in Python"},"content":{"rendered":"<p>Kalshi and Polymarket both price NFL games, and on the 2026 season opener they beat every sportsbook on the board. Polymarket quoted the moneyline at a 0.98% margin. Kalshi came in at 1.02%. Pinnacle, the book everyone treats as the sharp benchmark, sat at 3.22%.<\/p>\n<p>That comparison is real, and it is also the most misleading number in this post. We pulled the full order book behind both quotes. Polymarket&#8217;s 0.98% price had <strong>$7.22<\/strong> of stake capacity at the top of the ladder. You can take that price. You cannot take it for anything that matters.<\/p>\n<p>This guide shows you how to pull Kalshi and Polymarket NFL odds from one endpoint in Python, how to score them against 16 sportsbooks on the same fixture, and how to read the depth ladder so you know which prediction-market quote is a fair price and which one is an empty book. Every number below came off the live API on August 13, 2026.<\/p>\n<h2>Why You Cannot Just Call Kalshi and Polymarket Directly<\/h2>\n<p>You can. Both run public read APIs. Doing it means writing and maintaining two clients that agree on nothing.<\/p>\n<p>Kalshi exposes contracts in cents with its own series and ticker taxonomy. NFL games live under a series key like <code>kxnflgame<\/code>, with per-game tickers such as <code>kxnflgame-26sep09nesea<\/code>. Polymarket splits its read surface across two services: Gamma for the catalogue and CLOB for the order book. Gamma returns stringified JSON arrays inside JSON, so <code>outcomes<\/code> and <code>clobTokenIds<\/code> need a second <code>json.loads<\/code> or you end up iterating over characters. Neither venue gives you decimal odds. Both hand you share prices between 0 and 1.<\/p>\n<p>Then comes the part that kills the project. A prediction-market price only tells you something once you compare it to the sportsbook board. Kalshi at 1.538 on Seattle means nothing on its own. Kalshi at 1.538 while Pinnacle sits at 1.49 and DraftKings at 1.521 tells you where the disagreement is. So now you need a third integration, and a fourth.<\/p>\n<p>OddsPapi carries Kalshi and Polymarket as bookmaker slugs alongside 350+ sportsbooks. One fixture ID, one call, decimal odds already converted, and the exchange depth ladder attached to every outcome.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Task<\/th>\n<th>Direct integration<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Venues to integrate<\/td>\n<td>Kalshi API + Polymarket Gamma + Polymarket CLOB<\/td>\n<td>One REST endpoint<\/td>\n<\/tr>\n<tr>\n<td>NFL game lookup<\/td>\n<td>Series tickers vs event slugs, different per venue<\/td>\n<td><code>fixtureId<\/code>, shared across all books<\/td>\n<\/tr>\n<tr>\n<td>Odds format<\/td>\n<td>Cents and share prices, convert yourself<\/td>\n<td><code>price<\/code>, <code>priceAmerican<\/code>, <code>priceFractional<\/code> supplied<\/td>\n<\/tr>\n<tr>\n<td>Sportsbook comparison<\/td>\n<td>Build it yourself, book by book<\/td>\n<td>18 books on the same payload<\/td>\n<\/tr>\n<tr>\n<td>Order book depth<\/td>\n<td>Separate CLOB call per token<\/td>\n<td><code>exchangeMeta<\/code> ladder on every outcome<\/td>\n<\/tr>\n<tr>\n<td>Price history<\/td>\n<td>Paid or unavailable at most vendors<\/td>\n<td>Free tier, full snapshot history<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>Step 1: Authenticate and Find the NFL<\/h2>\n<p>The API key travels as a query parameter. It is not a header. Every call below uses the same helper, which also honours the documented cooldown when the free tier returns HTTP 429.<\/p>\n<pre class=\"wp-block-code\"><code>import requests, time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\n\ndef get(path, **params):\n    params[\"apiKey\"] = API_KEY\n    r = requests.get(f\"{BASE_URL}{path}\", params=params, timeout=60)\n    if r.status_code == 429:\n        time.sleep(r.json()[\"error\"][\"retryMs\"] \/ 1000 + 0.5)\n        return get(path, **{k: v for k, v in params.items() if k != \"apiKey\"})\n    r.raise_for_status()\n    return r.json()\n\ntours = get(\"\/tournaments\", sportId=14)\nnfl = [t for t in tours if t[\"tournamentName\"] == \"NFL\"][0]\nprint(nfl[\"tournamentId\"], nfl[\"futureFixtures\"])\n# 31 132<\/code><\/pre>\n<p>American football is <code>sportId=14<\/code>, and that sport also carries NCAA, CFL, AFLE and the preseason. Filter on the tournament name or hardcode <strong>31<\/strong> for the NFL. On August 13 it held 132 future fixtures.<\/p>\n<h3>Pull the Week 1 slate<\/h3>\n<pre class=\"wp-block-code\"><code>fixtures = get(\"\/fixtures\", sportId=14, tournamentId=31,\n               **{\"from\": \"2026-09-10\", \"to\": \"2026-09-16\"})\nfixtures.sort(key=lambda f: f[\"startTime\"])\n\nfor f in fixtures[:3]:\n    print(f[\"fixtureId\"], f[\"startTime\"],\n          f[\"participant1Name\"], \"v\", f[\"participant2Name\"])\n\n# id1400003171515752 2026-09-10T00:20:00.000Z Seattle Seahawks v New England Patriots\n# id1400003171387370 2026-09-11T00:35:00.000Z Los Angeles Rams v San Francisco 49ers\n# id1400003171515762 2026-09-13T17:00:00.000Z Indianapolis Colts v Baltimore Ravens<\/code><\/pre>\n<p>Two things will bite you here. An empty window returns HTTP 404 with a <code>FIXTURE_NOT_FOUND<\/code> body rather than an empty list, so a loop with <code>raise_for_status()<\/code> dies on the first quiet week. And <code>to<\/code> is a midnight-UTC instant, not a whole day, so set it to the day after the last date you want. The <a href=\"https:\/\/oddspapi.io\/blog\/nfl-schedule-api\/\">NFL schedule API guide<\/a> walks the full-season pull and both gotchas.<\/p>\n<h2>Step 2: Get Every Book on One Fixture<\/h2>\n<pre class=\"wp-block-code\"><code>PREDICTION_MARKETS = {\"kalshi\", \"polymarket\"}\n\nodds = get(\"\/odds\", fixtureId=\"id1400003171515752\")\nbooks = odds[\"bookmakerOdds\"]\n\nprint(len(books), sorted(set(books) & PREDICTION_MARKETS))\n# 18 ['kalshi', 'polymarket']<\/code><\/pre>\n<p>Eighteen books on the season opener, and both prediction markets are among them. Each entry carries a <code>fixturePath<\/code> that deep-links the venue&#8217;s own page: <code>https:\/\/kalshi.com\/markets\/kxnflgame\/e#kxnflgame-26sep09nesea<\/code> for Kalshi, <code>https:\/\/polymarket.com\/event\/nfl-ne-sea-2026-09-10<\/code> for Polymarket. Use it for outbound clicks on a comparison page.<\/p>\n<h2>Step 3: Rank the Board by Margin<\/h2>\n<p>The odds payload nests four levels deep. A price lives at <code>bookmakerOdds[slug][\"markets\"][market_id][\"outcomes\"][outcome_id][\"players\"][\"0\"]<\/code>. The outcome object itself holds a single <code>players<\/code> key, so <code>outcome[\"active\"]<\/code> is always undefined. Check <code>active<\/code> on the price object one level down.<\/p>\n<pre class=\"wp-block-code\"><code>MONEYLINE = \"141\"   # Winner (incl. overtime), outcomes 141 \/ 142\n\ndef two_sided_prices(market):\n    prices = {}\n    for outcome_id, outcome in market[\"outcomes\"].items():\n        quote = outcome[\"players\"].get(\"0\")\n        if quote and quote[\"active\"] and quote[\"price\"]:\n            prices[outcome_id] = quote[\"price\"]\n    return prices if len(prices) == 2 else None\n\nrows = []\nfor slug, book in books.items():\n    if book.get(\"suspended\"):          # book pulled the market, still returns prices\n        continue\n    market = book[\"markets\"].get(MONEYLINE)\n    if not market:\n        continue\n    prices = two_sided_prices(market)\n    if not prices:\n        continue\n    margin = sum(1 \/ p for p in prices.values()) - 1\n    rows.append((margin, slug, prices))\n\nfor margin, slug, prices in sorted(rows):\n    print(f\"{slug:18} {margin*100:5.2f}%  {prices}\")<\/code><\/pre>\n<p>Output on Seahawks v Patriots, 28 days before kickoff:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Book<\/th>\n<th>Moneyline margin<\/th>\n<th>Seattle<\/th>\n<th>New England<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>polymarket<\/strong><\/td>\n<td><strong>0.98%<\/strong><\/td>\n<td>1.493<\/td>\n<td>2.941<\/td>\n<\/tr>\n<tr>\n<td><strong>kalshi<\/strong><\/td>\n<td><strong>1.02%<\/strong><\/td>\n<td>1.538<\/td>\n<td>2.778<\/td>\n<\/tr>\n<tr>\n<td>pinnacle<\/td>\n<td>3.22%<\/td>\n<td>1.49<\/td>\n<td>2.77<\/td>\n<\/tr>\n<tr>\n<td>circasports<\/td>\n<td>3.27%<\/td>\n<td>1.526<\/td>\n<td>2.65<\/td>\n<\/tr>\n<tr>\n<td>fanduel<\/td>\n<td>3.82%<\/td>\n<td>1.53<\/td>\n<td>2.60<\/td>\n<\/tr>\n<tr>\n<td>caesars \/ williamhill<\/td>\n<td>4.19%<\/td>\n<td>1.508<\/td>\n<td>2.64<\/td>\n<\/tr>\n<tr>\n<td>draftkings<\/td>\n<td>4.21%<\/td>\n<td>1.521<\/td>\n<td>2.60<\/td>\n<\/tr>\n<tr>\n<td>bet365 \/ betmgm \/ borgata<\/td>\n<td>4.40%<\/td>\n<td>1.50<\/td>\n<td>2.65<\/td>\n<\/tr>\n<tr>\n<td>hardrockbet<\/td>\n<td>4.75%<\/td>\n<td>1.526<\/td>\n<td>2.55<\/td>\n<\/tr>\n<tr>\n<td>sbobet<\/td>\n<td>5.14%<\/td>\n<td>1.49<\/td>\n<td>2.63<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>The pattern repeats on the other headline markets. Kalshi took the spread at 0.99% against Pinnacle&#8217;s 3.36% and DraftKings&#8217; 5.26%. On the total, Kalshi ran 0.99% while Pinnacle charged 4.19%.<\/p>\n<p>Dedupe before you read too much into the book count. On this fixture <code>caesars<\/code> and <code>williamhill<\/code> quote identical prices, as do <code>betmgm<\/code> and <code>borgata<\/code>, and <code>ballybet<\/code> with <code>betparx<\/code> and <code>fourwinds<\/code>. The <code>cloneOf<\/code> field in <code>\/v4\/bookmakers<\/code> does not flag these, so collapse on the price tuple yourself. Eighteen slugs come out as twelve independent quotes.<\/p>\n<h2>Step 4: Read the Ladder, Not the Headline Price<\/h2>\n<p>The margin table above is worth exactly as much as the money standing behind it. Sportsbooks ship <code>exchangeMeta: null<\/code>. Kalshi and Polymarket ship a three-level depth ladder on both sides of every outcome.<\/p>\n<pre class=\"wp-block-code\"><code>def back_ladder(quote):\n    meta = quote.get(\"exchangeMeta\") or {}      # null on sportsbooks, {} on some venues\n    return meta.get(\"back\") or []\n\ndef stake_capacity(market):\n    \"\"\"Stake you can get down on the thinner side, across the whole visible ladder.\"\"\"\n    caps = []\n    for outcome in market[\"outcomes\"].values():\n        quote = outcome[\"players\"].get(\"0\")\n        if not quote:\n            continue\n        caps.append(sum(level.get(\"limit\") or 0 for level in back_ladder(quote)))\n    return min(caps) if caps else 0.0\n\nfor slug in (\"kalshi\", \"polymarket\"):\n    market = books[slug][\"markets\"][MONEYLINE]\n    top = min((o[\"players\"][\"0\"].get(\"limit\") or 0)\n              for o in market[\"outcomes\"].values())\n    print(f\"{slug:12} top-of-book ${top:,.2f}   full ladder ${stake_capacity(market):,.2f}\")\n\n# kalshi       top-of-book $107.59   full ladder $8,990.74\n# polymarket   top-of-book $7.22     full ladder $454.62<\/code><\/pre>\n<p>Polymarket&#8217;s 0.98% moneyline holds $7.22 at the best price and $454.62 across three price levels. Kalshi&#8217;s 1.02% holds $107.59 at the top and $8,990.74 in total. Same fixture, same market, and close to twenty times the difference in how much money either venue will take.<\/p>\n<p>Each ladder level carries <code>price<\/code> (decimal), <code>size<\/code> (payout available), <code>cents<\/code> (the native share price) and <code>limit<\/code> (stake needed to take that payout). The relationship is exact: <code>limit = size \u00d7 cents<\/code>. Kalshi&#8217;s Patriots side stacked $107.59 at 2.778, then $8,336.11 at 2.703, then $547.04 at 2.632. Sweep two levels and your average price is nowhere near the screen quote.<\/p>\n<p>If you are sizing real bets off this, the <a href=\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\">betting limits and stake sizing guide<\/a> covers the same field on Pinnacle, where <code>limit<\/code> encodes a capped max win rather than a capped stake.<\/p>\n<h2>Kalshi Prices More NFL Markets Than Pinnacle<\/h2>\n<p>Market count is the one place Kalshi wins outright. On the opener it shipped <strong>42 markets<\/strong>. Pinnacle shipped 25, Bet365 six, DraftKings four, FanDuel three.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Book<\/th>\n<th>Markets on the opener<\/th>\n<th>Menu<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>kalshi<\/td>\n<td>42<\/td>\n<td>Spread ladder -20.5 to +14.5, totals 32.5 to 65.5, moneyline<\/td>\n<\/tr>\n<tr>\n<td>pinnacle<\/td>\n<td>25<\/td>\n<td>Spreads, totals, team totals, moneyline<\/td>\n<\/tr>\n<tr>\n<td>polymarket<\/td>\n<td>10<\/td>\n<td>Moneyline, four spreads, five totals<\/td>\n<\/tr>\n<tr>\n<td>bet365<\/td>\n<td>6<\/td>\n<td>Moneyline, two spreads, three totals<\/td>\n<\/tr>\n<tr>\n<td>draftkings<\/td>\n<td>4<\/td>\n<td>Moneyline, spread, total, Anytime TD<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Now score those 42 markets instead of counting them. Only <strong>12 of the 42 sit inside a 4% margin<\/strong>. The median is 5.02%. The wings of the ladder are brutal: the +9.5 spread ran a 28.99% margin, the 32.5 total 23.03%, and six more markets cleared 19%. Polymarket&#8217;s ten markets tell the same story from the other end, with four inside 4% and its -6.5 spread at 53.02%.<\/p>\n<pre class=\"wp-block-code\"><code>ladder = []\nfor market_id, market in books[\"kalshi\"][\"markets\"].items():\n    prices = two_sided_prices(market)\n    if not prices:\n        continue\n    margin = sum(1 \/ p for p in prices.values()) - 1\n    ladder.append((margin, market_id, stake_capacity(market)))\n\ntradeable = [m for m in ladder if m[0] &lt; 0.04 and m[2] &gt;= 500]\nprint(len(ladder), \"markets;\", len(tradeable), \"inside 4% with $500+ behind them\")<\/code><\/pre>\n<p>Two filters, and Kalshi&#8217;s 42-market menu shrinks to a handful. Run the same screen before you build anything that treats a prediction-market quote as consensus. The <a href=\"https:\/\/oddspapi.io\/blog\/la-liga-odds-api\/\">La Liga odds API guide<\/a> found the identical trap on Polymarket&#8217;s soccer board, where 60 listed markets came down to nine that cleared both tests.<\/p>\n<h2>Far From Kickoff, Prediction Markets Are the Only Board<\/h2>\n<p>Coverage flips completely depending on how far out you look. We ran the moneyline across six fixtures at different distances from kickoff and recorded both the margin and the thin-side ladder.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Fixture<\/th>\n<th>Time to kickoff<\/th>\n<th>Books<\/th>\n<th>Polymarket margin<\/th>\n<th>Thin-side ladder<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Preseason PIT v GB<\/td>\n<td>10 hours<\/td>\n<td>18<\/td>\n<td>1.00%<\/td>\n<td>$20,817<\/td>\n<\/tr>\n<tr>\n<td>Preseason BUF v CAR<\/td>\n<td>2 days<\/td>\n<td>17<\/td>\n<td>1.00%<\/td>\n<td>$3,373<\/td>\n<\/tr>\n<tr>\n<td>Preseason HOU v LV<\/td>\n<td>8 days<\/td>\n<td><strong>1<\/strong><\/td>\n<td>65.98%<\/td>\n<td>$455<\/td>\n<\/tr>\n<tr>\n<td>Week 1 Thursday, SEA v NE<\/td>\n<td>28 days<\/td>\n<td>18<\/td>\n<td>0.98%<\/td>\n<td>$455<\/td>\n<\/tr>\n<tr>\n<td>Week 2 Thursday, BUF v DET<\/td>\n<td>36 days<\/td>\n<td>12<\/td>\n<td>12.01%<\/td>\n<td>$1,034<\/td>\n<\/tr>\n<tr>\n<td>Week 2 Sunday, ATL v CAR<\/td>\n<td>38 days<\/td>\n<td>4<\/td>\n<td>92.96%<\/td>\n<td>$164<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Read the third row twice. That preseason game eight days out had exactly one bookmaker on it, and the bookmaker was Polymarket. No Pinnacle, no DraftKings, no Bet365. The fixture reports <code>hasOdds: true<\/code> and your parser sees a full payload, which is why <code>hasOdds<\/code> is a flag rather than a depth signal.<\/p>\n<p>Kalshi behaves differently again. It covers Week 1 and stops. We sampled one fixture on each of the 40 NFL match days the feed carries, and Kalshi appeared on the September 10 to 15 slate and on nothing after it. Polymarket runs one week deeper, through the Week 2 games, then disappears from Week 3 onward. From late September the board thins to <code>caesars<\/code>, <code>williamhill<\/code> and <code>draftkings<\/code>, and two of those three share a feed.<\/p>\n<p>So the 92.96% margin in the last row is not a prediction market being wrong. It is an empty order book with one resting bid on each side, and $164 behind the thinner one. Remember that the same venue prices the opener at 0.98%, and both numbers arrive through the identical parser.<\/p>\n<h2>Free Price History Proves the Point<\/h2>\n<p><code>\/historical-odds<\/code> ships the whole snapshot record on the free tier, which competitors either sell or withhold. The shape differs from the live endpoint in two ways: the top key is <code>bookmakers<\/code> rather than <code>bookmakerOdds<\/code>, and <code>players[\"0\"]<\/code> is a list of snapshots rather than a single dict.<\/p>\n<pre class=\"wp-block-code\"><code>hist = get(\"\/historical-odds\", fixtureId=\"id1400003171515752\",\n           bookmakers=\"polymarket\")          # max 3 bookmakers per call\n\nsnapshots = hist[\"bookmakers\"][\"polymarket\"][\"markets\"][\"141\"][\"outcomes\"][\"141\"][\"players\"][\"0\"]\nchanges = sum(1 for a, b in zip(snapshots, snapshots[1:]) if a[\"price\"] != b[\"price\"])\n\nprint(len(snapshots), \"snapshots,\", changes, \"price changes\")\nprint(snapshots[0][\"createdAt\"], snapshots[0][\"price\"], \"->\",\n      snapshots[-1][\"createdAt\"], snapshots[-1][\"price\"])\n\n# 1821 snapshots, 386 price changes\n# 2026-07-30T13:10:45.262Z 1.031 -> 2026-08-13T13:07:35.465Z 1.493<\/code><\/pre>\n<p>Polymarket&#8217;s first recorded price on this game was <strong>1.031 on Seattle<\/strong>, and the first price on New England was 1.053. Both sides quoted as near-certainties at the same moment, for a combined margin above 90%. Two weeks and 386 price changes later the number settled at 1.493, three ticks off Pinnacle&#8217;s 1.49.<\/p>\n<p>Pinnacle&#8217;s history on the same fixture runs 36 snapshots and 12 price changes since June 2, drifting 1.448 to 1.49. The sharp book took ten weeks to move four ticks. The prediction market took two weeks to travel from noise to fair value.<\/p>\n<p><strong>Watch the payload size.<\/strong> That single Polymarket call returned <strong>23.68 MB<\/strong>. The same fixture filtered to Pinnacle returned 0.18 MB. Exchange history records every book update, so pull prediction-market history one fixture at a time and never inside a season-wide loop. Sleep about 4.5 seconds between successful <code>\/historical-odds<\/code> calls, against roughly 1 second on <code>\/odds<\/code>.<\/p>\n<h2>What to Actually Build With This<\/h2>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Use case<\/th>\n<th>Which venue<\/th>\n<th>Rule<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Fair-price reference on Week 1 game lines<\/td>\n<td>Kalshi<\/td>\n<td>Deepest ladder and lowest margin together<\/td>\n<\/tr>\n<tr>\n<td>Line shopping the moneyline<\/td>\n<td>Both, plus 16 sportsbooks<\/td>\n<td>Filter <code>suspended<\/code>, then dedupe clone feeds<\/td>\n<\/tr>\n<tr>\n<td>Alt spreads and alt totals<\/td>\n<td>Kalshi, screened<\/td>\n<td>Drop anything above 4% margin or under $500 depth<\/td>\n<\/tr>\n<tr>\n<td>Any fixture past Week 2<\/td>\n<td>Neither<\/td>\n<td>The quote exists, the market does not<\/td>\n<\/tr>\n<tr>\n<td>Player props<\/td>\n<td>DraftKings and the US retail books<\/td>\n<td>Prediction markets price game lines only<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>The last row catches people out. Neither venue quoted a single player prop on the opener. Anytime TD (market 14388) and First TD (14390) come from the US retail books, keyed by player ID inside the <code>players<\/code> dict rather than the <code>\"0\"<\/code> key the game lines use.<\/p>\n<p>For the wider NFL market map, spread and total market IDs, and the season-long pull, start with the <a href=\"https:\/\/oddspapi.io\/blog\/free-nfl-odds-api-guide\/\">NFL odds API guide<\/a>. For how the two venues differ at the API level, the <a href=\"https:\/\/oddspapi.io\/blog\/kalshi-vs-polymarket-api\/\">Kalshi vs Polymarket API comparison<\/a> covers auth, taxonomy and rate limits. If you need to move between decimal odds and native share prices, the <a href=\"https:\/\/oddspapi.io\/blog\/polymarket-odds-converter-python\/\">odds converter<\/a> handles all four formats, and the <a href=\"https:\/\/oddspapi.io\/blog\/prediction-market-api-2026-stack\/\">prediction market API stack<\/a> covers the other venues worth wiring up.<\/p>\n<h2>Get Your Free API Key<\/h2>\n<p>One endpoint, 350+ bookmakers, Kalshi and Polymarket sitting in the same payload as Pinnacle and DraftKings, with exchange depth ladders and full price history on the free tier. No sales call, no order-book integration, no share-price conversion.<\/p>\n<p><a href=\"https:\/\/oddspapi.io\/\">Get your free OddsPapi key<\/a> and pull the Week 1 board yourself.<\/p>\n<h2>FAQ<\/h2>\n<h3>Does Kalshi cover the whole NFL season?<\/h3>\n<p>No. As of August 13, 2026, Kalshi appeared on the Week 1 slate only, from September 10 to 15. It was absent from every NFL fixture after that. Re-run the census as the season progresses, because coverage moves with the calendar.<\/p>\n<h3>Are Kalshi and Polymarket odds better than sportsbook odds?<\/h3>\n<p>On margin, yes. Both quoted the season opener under 1.1% against Pinnacle&#8217;s 3.22% and DraftKings&#8217; 4.21%. On size, no. Polymarket held $7.22 at its best moneyline price and $454.62 across the visible ladder. Score both numbers before you treat a prediction-market quote as the fair price.<\/p>\n<h3>How do I get Polymarket share prices as decimal odds?<\/h3>\n<p>OddsPapi converts them for you. The <code>price<\/code> field is decimal, <code>priceAmerican<\/code> and <code>priceFractional<\/code> come as strings, and <code>exchangeMeta.back[].cents<\/code> keeps the native 0 to 1 share price if you want it. Calling Polymarket&#8217;s CLOB directly means converting with <code>1 \/ share_price<\/code> yourself.<\/p>\n<h3>Why does a fixture show hasOdds true with only one bookmaker?<\/h3>\n<p>Because <code>hasOdds<\/code> tells you a price exists, not that a market exists. One preseason game eight days out carried Polymarket and nothing else. Probe <code>\/odds<\/code> and count books before you rank coverage on a fixture list.<\/p>\n<h3>Can I backtest prediction-market NFL prices?<\/h3>\n<p>Yes, on the free tier. <code>\/historical-odds<\/code> returned 1,821 Polymarket snapshots on one fixture going back to July 30. Budget for the size: that call was 23.68 MB against 0.18 MB for Pinnacle, and there is no market filter, so you download every market the venue priced.<\/p>\n<h3>Which market IDs do I need for NFL?<\/h3>\n<p>Moneyline is 141, with outcomes 141 and 142. Spreads and totals carry one market ID per line, so -3.5 is 14272 and the 44.5 total is 1464. Resolve them by name and handicap from <code>\/v4\/markets?sportId=14<\/code> rather than hardcoding, because the line the books quote moves through the season.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\":\"Question\",\"name\":\"Does Kalshi cover the whole NFL season?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. As of August 13, 2026, Kalshi appeared on the Week 1 slate only, from September 10 to 15. It was absent from every NFL fixture after that. Re-run the census as the season progresses, because coverage moves with the calendar.\"}},\n    {\"@type\":\"Question\",\"name\":\"Are Kalshi and Polymarket odds better than sportsbook odds?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"On margin, yes. Both quoted the season opener under 1.1% against Pinnacle's 3.22% and DraftKings' 4.21%. On size, no. Polymarket held $7.22 at its best moneyline price and $454.62 across the visible ladder. Score both numbers before you treat a prediction-market quote as the fair price.\"}},\n    {\"@type\":\"Question\",\"name\":\"How do I get Polymarket share prices as decimal odds?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"OddsPapi converts them for you. The price field is decimal, priceAmerican and priceFractional come as strings, and exchangeMeta.back[].cents keeps the native 0 to 1 share price if you want it. Calling Polymarket's CLOB directly means converting with 1 \/ share_price yourself.\"}},\n    {\"@type\":\"Question\",\"name\":\"Why does a fixture show hasOdds true with only one bookmaker?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Because hasOdds tells you a price exists, not that a market exists. One preseason game eight days out carried Polymarket and nothing else. Probe \/odds and count books before you rank coverage on a fixture list.\"}},\n    {\"@type\":\"Question\",\"name\":\"Can I backtest prediction-market NFL prices?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, on the free tier. \/historical-odds returned 1,821 Polymarket snapshots on one fixture going back to July 30. Budget for the size: that call was 23.68 MB against 0.18 MB for Pinnacle, and there is no market filter, so you download every market the venue priced.\"}},\n    {\"@type\":\"Question\",\"name\":\"Which market IDs do I need for NFL?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Moneyline is 141, with outcomes 141 and 142. Spreads and totals carry one market ID per line, so -3.5 is 14272 and the 44.5 total is 1464. Resolve them by name and handicap from \/v4\/markets?sportId=14 rather than hardcoding, because the line the books quote moves through the season.\"}}\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: kalshi polymarket nfl odds\nSEO Title: Kalshi & Polymarket NFL Odds: Prediction Market Data in Python\nMeta Description: Kalshi and Polymarket price NFL games tighter than Pinnacle. Pull both in Python from one endpoint, and read the depth ladder before you trust the number.\nSlug: kalshi-polymarket-nfl-odds\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kalshi and Polymarket price NFL games tighter than Pinnacle. Pull both in Python from one endpoint, and read the depth ladder before you trust the number.<\/p>\n","protected":false},"author":2,"featured_media":3661,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8,52,9,34,11],"class_list":["post-3660","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-free-api","tag-nfl","tag-odds-api","tag-prediction-markets","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kalshi &amp; Polymarket NFL Odds: Prediction Market Data in Python | 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\/kalshi-polymarket-nfl-odds\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalshi &amp; Polymarket NFL Odds: Prediction Market Data in Python | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"Kalshi and Polymarket price NFL games tighter than Pinnacle. Pull both in Python from one endpoint, and read the depth ladder before you trust the number.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-24T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1429\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Odds API Writer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/oddspapi.io\/logo-v2.webp\" \/>\n<meta name=\"twitter:creator\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:site\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odds API Writer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"Kalshi &#038; Polymarket NFL Odds: Prediction Market Data in Python\",\"datePublished\":\"2026-08-24T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\"},\"wordCount\":2030,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp\",\"keywords\":[\"Free API\",\"NFL\",\"Odds API\",\"Prediction Markets\",\"Python\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\",\"name\":\"Kalshi & Polymarket NFL Odds: Prediction Market Data in Python | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp\",\"datePublished\":\"2026-08-24T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"Kalshi & Polymarket NFL Odds - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kalshi &#038; Polymarket NFL Odds: Prediction Market Data in Python\"}]},{\"@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":"Kalshi & Polymarket NFL Odds: Prediction Market Data in Python | 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\/kalshi-polymarket-nfl-odds\/","og_locale":"en_US","og_type":"article","og_title":"Kalshi & Polymarket NFL Odds: Prediction Market Data in Python | OddsPapi Blog","og_description":"Kalshi and Polymarket price NFL games tighter than Pinnacle. Pull both in Python from one endpoint, and read the depth ladder before you trust the number.","og_url":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-08-24T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp","type":"image\/webp"}],"author":"Odds API Writer","twitter_card":"summary_large_image","twitter_image":"https:\/\/oddspapi.io\/logo-v2.webp","twitter_creator":"@oddspapiapi","twitter_site":"@oddspapiapi","twitter_misc":{"Written by":"Odds API Writer","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"Kalshi &#038; Polymarket NFL Odds: Prediction Market Data in Python","datePublished":"2026-08-24T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/"},"wordCount":2030,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp","keywords":["Free API","NFL","Odds API","Prediction Markets","Python"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/","url":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/","name":"Kalshi & Polymarket NFL Odds: Prediction Market Data in Python | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp","datePublished":"2026-08-24T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/08\/kalshi-polymarket-nfl-odds-scaled.webp","width":2560,"height":1429,"caption":"Kalshi & Polymarket NFL Odds - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/kalshi-polymarket-nfl-odds\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Kalshi &#038; Polymarket NFL Odds: Prediction Market Data in Python"}]},{"@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\/3660","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=3660"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3660\/revisions"}],"predecessor-version":[{"id":3662,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3660\/revisions\/3662"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3661"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}