{"id":3161,"date":"2026-08-04T10:00:00","date_gmt":"2026-08-04T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3161"},"modified":"2026-07-28T18:32:54","modified_gmt":"2026-07-28T18:32:54","slug":"betting-limits-api-stake-sizing","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/","title":{"rendered":"Betting Limits API: How Much Can You Actually Bet at the Best Price?"},"content":{"rendered":"<p>Your scanner just flagged a +3.2% edge. Congratulations. Now answer the question that actually decides whether this is a business or a hobby: how much can you get down at that price?<\/p>\n<p>Every odds API on the market will sell you the number. Almost none of them will tell you the size behind it. That gap is where most betting bots die. The model says stake $40,000, the book takes $375, and the spreadsheet that showed 8% ROI was describing a market that does not exist at your bet size.<\/p>\n<p>The syndicates understood this before anyone was writing Python. Zeljko Ranogajec&#8217;s operation was not built on picking more winners than everyone else. It was built on getting real money onto a number before that number moved, across dozens of accounts, in the markets where the books would take size. Bill Benter&#8217;s Hong Kong operation had the same shape. The edge was distribution as much as prediction.<\/p>\n<p>OddsPapi ships the size alongside the price. Every outcome in the live feed carries a <code>limit<\/code> field, and every exchange carries a full back and lay ladder with the capital sitting at each level. This guide shows you how to read both, how to reverse-engineer the rule Pinnacle uses to set its limits, and how to work out what your edge is worth after you account for what you can actually fill.<\/p>\n<p>Every number below came off the live API on 28 July 2026, from a single MLB fixture: Miami Marlins at Philadelphia Phillies, <code>fixtureId<\/code> <code>id1300010963301639<\/code>.<\/p>\n<h2>The number your odds feed is missing<\/h2>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Question<\/th>\n<th>Scraping or a price-only API<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>What is the best price?<\/td>\n<td>Yes<\/td>\n<td>Yes, across 350+ books<\/td>\n<\/tr>\n<tr>\n<td>How much will they take at it?<\/td>\n<td>Place the bet and find out<\/td>\n<td><code>limit<\/code> on every outcome<\/td>\n<\/tr>\n<tr>\n<td>What sits behind the top of book?<\/td>\n<td>No<\/td>\n<td><code>exchangeMeta<\/code> back and lay ladder<\/td>\n<\/tr>\n<tr>\n<td>Did the limit move overnight?<\/td>\n<td>No<\/td>\n<td>Free <code>\/historical-odds<\/code> snapshots carry limits<\/td>\n<\/tr>\n<tr>\n<td>Cost<\/td>\n<td>Enterprise contract or a scraper you maintain<\/td>\n<td>Free tier<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>Who publishes a limit and who does not<\/h2>\n<p>Thirteen bookmakers quoted the moneyline on our Marlins fixture. Three of them told us how much they would take.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Book<\/th>\n<th>Price (Miami)<\/th>\n<th>Limit<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>kalshi<\/td>\n<td>1.961<\/td>\n<td>$391,922<\/td>\n<\/tr>\n<tr>\n<td>polymarket<\/td>\n<td>1.961<\/td>\n<td>$77,130<\/td>\n<\/tr>\n<tr>\n<td>pinnacle<\/td>\n<td>1.925<\/td>\n<td>$8,108<\/td>\n<\/tr>\n<tr>\n<td>fanduel<\/td>\n<td>1.91<\/td>\n<td><code>null<\/code><\/td>\n<\/tr>\n<tr>\n<td>circasports<\/td>\n<td>1.909<\/td>\n<td><code>null<\/code><\/td>\n<\/tr>\n<tr>\n<td>draftkings<\/td>\n<td>1.89<\/td>\n<td><code>null<\/code><\/td>\n<\/tr>\n<tr>\n<td>betmgm, borgata, caesars, williamhill, hardrockbet, pointsbet.com.au<\/td>\n<td>1.87<\/td>\n<td><code>null<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>The pattern is not random. Pinnacle and the exchanges publish a limit because their limit is a property of the market. They price for anyone and they cap by risk, so the number is public and identical for every account. The US retail books return <code>null<\/code> because their limit is a property of <em>you<\/em>. There is no market-wide max bet at DraftKings. There is a max bet for your account, set by how much you have won, and they are not putting that in a feed.<\/p>\n<p>That asymmetry is worth internalising before you build anything. On the sharp side, the API tells you the truth. On the soft side, you have to model your own account history and accept that the ceiling drops as you win.<\/p>\n<p>One housekeeping note on that table: six books quoting 1.87 is six slugs, not six independent opinions. <code>betmgm<\/code> and <code>borgata<\/code> run the same pricing, as do <code>caesars<\/code> and <code>williamhill<\/code>. Dedupe on the price tuple before you count anything.<\/p>\n<h2>Step 1: Read limits off the live feed<\/h2>\n<p>Auth is a query parameter, never a header. Pull the fixture, walk the nested payload, keep the limit alongside the price.<\/p>\n<pre class=\"wp-block-code\"><code>import requests\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\nFIXTURE = \"id1300010963301639\"   # Marlins at Phillies\nMONEYLINE = \"131\"                # Winner (incl. extra innings)\n\n\ndef get_odds(fixture_id):\n    r = requests.get(f\"{BASE_URL}\/odds\",\n                     params={\"apiKey\": API_KEY, \"fixtureId\": fixture_id})\n    r.raise_for_status()\n    return r.json()\n\n\ndef read_prices(odds, market_id):\n    \"\"\"[{book, outcome, price, limit, ladder}] for one market.\"\"\"\n    rows = []\n    for slug, book in odds.get(\"bookmakerOdds\", {}).items():\n        market = book.get(\"markets\", {}).get(market_id)\n        if not market:\n            continue\n        for outcome_id, outcome in market[\"outcomes\"].items():\n            price = outcome[\"players\"].get(\"0\")\n            if not price or price.get(\"active\") is False:\n                continue\n            rows.append({\n                \"book\": slug,\n                \"outcome\": outcome_id,\n                \"price\": price[\"price\"],\n                \"limit\": price.get(\"limit\"),\n                \"ladder\": (price.get(\"exchangeMeta\") or {}).get(\"back\"),\n            })\n    return rows\n\n\nrows = read_prices(get_odds(FIXTURE), MONEYLINE)\nfor r in sorted(rows, key=lambda r: -(r[\"limit\"] or 0)):\n    if r[\"outcome\"] == \"131\":\n        print(f\"{r['book']:20} {r['price']:>7}  limit={r['limit']}\")\n<\/code><\/pre>\n<p>Two traps in those eight lines. Filter on <code>active is False<\/code> rather than truthy <code>active<\/code>, because the feed ships <code>active: null<\/code> alongside perfectly good prices on pre-game fixtures. And treat both <code>null<\/code> and <code>{}<\/code> as &#8220;no exchange data&#8221;, because older payloads used the empty dict.<\/p>\n<h2>Step 2: Pinnacle publishes a max win, not a max stake<\/h2>\n<p>Look at the two sides of the Marlins moneyline. Miami at 1.925 has a limit of $8,108. Philadelphia at 2.0 has a limit of $7,500. Same market, same fixture, different caps. Multiply each limit by the profit per unit and the reason appears:<\/p>\n<pre class=\"wp-block-code\"><code>def max_win(price, limit):\n    return round(limit * (price - 1), 2)\n\nmax_win(1.925, 8108)   # 7499.90\nmax_win(2.00, 7500)    # 7500.00\nmax_win(1.465, 16129)  # 7500.00   run line, other side\nmax_win(1.529, 14177)  # 7499.63   alt handicap\nmax_win(1.18, 41666)   # 7499.88   deep favourite\n<\/code><\/pre>\n<p>Pinnacle is not capping your stake. It is capping its own loss. The rule that reproduces every limit on the fixture is:<\/p>\n<pre class=\"wp-block-code\"><code>limit = max(base, base \/ (price - 1))\n<\/code><\/pre>\n<p>Where <code>base<\/code> is a per-market figure the book sets by how much it trusts its own number. On a 1.18 favourite that formula hands you a $41,666 limit, because you would have to stake $41,666 to win the same $7,500 that a $7,500 stake wins at evens. I checked the rule against two more MLB fixtures on the same slate and it held on the moneyline, the run line and the total every time.<\/p>\n<h2>Step 3: The limit tells you where the book is unsure<\/h2>\n<p>Run that base calculation across every Pinnacle market on one fixture and you get a confidence map, published by the book, for free:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Market<\/th>\n<th>Implied base (max win)<\/th>\n<th>Limit at evens<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Winner, full game<\/td>\n<td>$7,500<\/td>\n<td>$8,108<\/td>\n<\/tr>\n<tr>\n<td>Run line -1.5<\/td>\n<td>$7,500<\/td>\n<td>$16,129 on the favourite<\/td>\n<\/tr>\n<tr>\n<td>Total 8.5<\/td>\n<td>$5,625<\/td>\n<td>$5,625<\/td>\n<\/tr>\n<tr>\n<td>Handicap, first five innings<\/td>\n<td>$3,750<\/td>\n<td>$3,750<\/td>\n<\/tr>\n<tr>\n<td>Alternate handicap +3<\/td>\n<td>$1,875<\/td>\n<td>$1,875<\/td>\n<\/tr>\n<tr>\n<td>Over\/under, first inning<\/td>\n<td>$750<\/td>\n<td>$795<\/td>\n<\/tr>\n<tr>\n<td>Exact runs<\/td>\n<td>$375<\/td>\n<td>$375<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>The moneyline carries twenty-one times the size of the exact-runs market. Pinnacle has priced thousands of MLB moneylines and it knows where its number sits. It has priced far fewer exact-runs markets and it hedges by refusing size.<\/p>\n<p>Now hold that against where your model probably finds an edge. Nobody beats the Pinnacle moneyline by 3%. Plenty of people find soft numbers in first-inning totals and exact-runs derivatives, which is exactly where the book will take $375 and then move. Your edge and the available size are inversely correlated, and the <code>limit<\/code> field prices that trade-off for you before you write a staking plan.<\/p>\n<h2>Step 4: Exchange ladders, and what size means<\/h2>\n<p>Exchanges go further than a single cap. <code>exchangeMeta<\/code> carries a list of price levels with the capital resting at each. Here is the Polymarket back ladder on Miami:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Level<\/th>\n<th>Price<\/th>\n<th><code>size<\/code><\/th>\n<th><code>limit<\/code><\/th>\n<th><code>cents<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>1.961<\/td>\n<td>151,235.08<\/td>\n<td>77,129.89<\/td>\n<td>0.51<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>1.923<\/td>\n<td>70,385.38<\/td>\n<td>36,600.40<\/td>\n<td>0.52<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>1.887<\/td>\n<td>84,154.67<\/td>\n<td>44,601.98<\/td>\n<td>0.53<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>The two money columns mean different things and mixing them up will cost you. <code>size<\/code> is the payout available at that level. <code>limit<\/code> is the stake required to take all of it. They tie together through the native share price: 151,235.08 shares at 51 cents is $77,129.89 of stake. The relationship held on every level of both Polymarket and Kalshi that I checked.<\/p>\n<p>The outcome-level <code>limit<\/code> field on an exchange is just the top level of that ladder. To fill more, you walk down and pay worse prices:<\/p>\n<pre class=\"wp-block-code\"><code>def walk_ladder(levels, target_stake):\n    \"\"\"Fill target_stake down a back ladder. Returns (filled, avg_price).\"\"\"\n    filled, payout = 0.0, 0.0\n    for level in levels or []:\n        take = min(level[\"limit\"], target_stake - filled)\n        if take &lt;= 0:\n            break\n        filled += take\n        payout += take * level[\"price\"]\n    if filled == 0:\n        return 0.0, None\n    return round(filled, 2), round(payout \/ filled, 4)\n<\/code><\/pre>\n<p>Three levels is what the feed carries, and on this fixture they added up to $158,332 of back capacity. Ask for $200,000 and you get $158,332 at a blended 1.9314. The rest does not exist until someone posts it.<\/p>\n<p>Parse this defensively. Kalshi and Polymarket both ship the <code>back<\/code> and <code>lay<\/code> lists shown above, but the shape varies across exchange slugs: Betfair uses <code>availableToBack<\/code> and <code>availableToLay<\/code>, some payloads carry a flat scalar, and inactive markets can return a list where you expected an object. Check the type before you iterate.<\/p>\n<h2>Step 5: What size does to your edge<\/h2>\n<p>Say your model prices Miami at 1.90, so you make the true probability 52.6%. The best available price is 1.961 and you want to know what that is worth. Run the ladder walk at increasing sizes and compute EV on the blended fill rather than the headline number:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Target stake<\/th>\n<th>Filled<\/th>\n<th>Blended price<\/th>\n<th>EV<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>$25,000<\/td>\n<td>$25,000<\/td>\n<td>1.961<\/td>\n<td>+3.21%<\/td>\n<\/tr>\n<tr>\n<td>$77,129<\/td>\n<td>$77,129<\/td>\n<td>1.961<\/td>\n<td>+3.21%<\/td>\n<\/tr>\n<tr>\n<td>$100,000<\/td>\n<td>$100,000<\/td>\n<td>1.9523<\/td>\n<td>+2.75%<\/td>\n<\/tr>\n<tr>\n<td>$150,000<\/td>\n<td>$150,000<\/td>\n<td>1.9338<\/td>\n<td>+1.78%<\/td>\n<\/tr>\n<tr>\n<td>$200,000<\/td>\n<td>$158,332<\/td>\n<td>1.9314<\/td>\n<td>+1.65%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Going from $25,000 to $150,000 costs you 45% of your edge, and you never got a worse price than the third level of one order book. Scale that thinking across a slate and you understand why professional operations obsess over distribution. The edge per dollar shrinks as the dollars grow, and the only fix is more venues.<\/p>\n<h2>Step 6: Spread the stake across books<\/h2>\n<p>Which is what this does. Sort by price, take what each venue will give you, walk ladders where they exist, fall back to a conservative assumption where the book hides its limit:<\/p>\n<pre class=\"wp-block-code\"><code>def allocate(rows, outcome_id, target_stake, fallback_limit=500):\n    \"\"\"Spread a target stake over the best-priced books that will take it.\"\"\"\n    book_rows = sorted([r for r in rows if r[\"outcome\"] == outcome_id],\n                       key=lambda r: -r[\"price\"])\n    plan, filled, payout = [], 0.0, 0.0\n    for r in book_rows:\n        if filled &gt;= target_stake:\n            break\n        if r[\"ladder\"]:\n            take, price = walk_ladder(r[\"ladder\"], target_stake - filled)\n        else:\n            cap = r[\"limit\"] if r[\"limit\"] is not None else fallback_limit\n            take, price = min(cap, target_stake - filled), r[\"price\"]\n        if not take:\n            continue\n        plan.append((r[\"book\"], take, price))\n        filled += take\n        payout += take * price\n    return plan, round(filled, 2), round(payout \/ filled, 4) if filled else None\n<\/code><\/pre>\n<p>Set <code>fallback_limit<\/code> from your own account history at each soft book. That is the one input the API cannot give you, and guessing high is how you end up with a plan that assumes $5,000 at BetMGM and gets $200.<\/p>\n<p>The allocator also doubles as a reality check on <a href=\"https:\/\/oddspapi.io\/blog\/line-shopping-python-best-odds\/\">line shopping<\/a>. Best price across 350+ books is the right target when you are staking $200. At $50,000 the question changes to best <em>blended<\/em> price, and the book with the third-best number and real depth beats the headline quote.<\/p>\n<h2>Step 7: Limits ramp toward first pitch<\/h2>\n<p>Limits are not static, and the free <code>\/historical-odds<\/code> endpoint records them. Pinnacle logged 43 moneyline snapshots on this fixture, and the limit quadrupled inside 21 hours:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Timestamp (UTC)<\/th>\n<th>Price<\/th>\n<th>Limit<\/th>\n<th>Implied max win<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>27 Jul 21:30<\/td>\n<td>1.943<\/td>\n<td>$1,988<\/td>\n<td>$1,875<\/td>\n<\/tr>\n<tr>\n<td>28 Jul 08:42<\/td>\n<td>1.925<\/td>\n<td>$2,027<\/td>\n<td>$1,875<\/td>\n<\/tr>\n<tr>\n<td>28 Jul 15:08<\/td>\n<td>1.925<\/td>\n<td>$6,081<\/td>\n<td>$5,625<\/td>\n<\/tr>\n<tr>\n<td>28 Jul 16:25<\/td>\n<td>1.925<\/td>\n<td>$8,108<\/td>\n<td>$7,500<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<pre class=\"wp-block-code\"><code>def limit_history(fixture_id, book, market_id, outcome_id):\n    r = requests.get(f\"{BASE_URL}\/historical-odds\",\n                     params={\"apiKey\": API_KEY, \"fixtureId\": fixture_id,\n                             \"bookmakers\": book})   # max 3 books per call\n    r.raise_for_status()\n    market = r.json()[\"bookmakers\"][book][\"markets\"][market_id]\n    snaps = market[\"outcomes\"][outcome_id][\"players\"][\"0\"]\n    return [(s[\"createdAt\"][:16], s[\"price\"], s.get(\"limit\")) for s in snaps]\n<\/code><\/pre>\n<p>The base moved in steps: $1,875 the night before, $5,625 by mid-afternoon, $7,500 an hour after that. Pinnacle raises its exposure as the market fills in and its number gets sharper. Polymarket did the same thing from the other direction, growing from $8 of top-of-book depth six days out to $77,000 on game day across 26,477 snapshots.<\/p>\n<p>The practical consequence: an edge you find at 9am may only be fillable at 5pm, by which time the price has usually moved against you. Log limits alongside prices in <a href=\"https:\/\/oddspapi.io\/blog\/odds-database-python-sqlite\/\">your own odds database<\/a> and you can measure that trade-off on your own markets instead of guessing at it.<\/p>\n<h2>What this changes about your staking<\/h2>\n<p>Most staking tutorials, including <a href=\"https:\/\/oddspapi.io\/blog\/kelly-criterion-staking-calculator-python\/\">our own Kelly guide<\/a>, compute a number and stop. Kelly on a $500,000 bank with a 3.2% edge will tell you to stake five figures without blinking. Whether that stake exists is a separate question with a separate data source, and now you have it.<\/p>\n<p>Three changes worth making today. Clip every Kelly output to the fillable size before you log it as a bet. Compute EV on the blended fill price rather than the top-of-book quote. And when you run a <a href=\"https:\/\/oddspapi.io\/blog\/risk-of-ruin-bankroll-simulator-python\/\">risk-of-ruin simulation<\/a>, feed it the sizes you can actually get on, because a strategy that needs $40,000 per bet in a market with $375 limits has a ruin probability you cannot compute from returns alone.<\/p>\n<p>None of this requires an enterprise contract. The <code>limit<\/code> field, the full exchange ladders, and the historical snapshots that show limits moving are all on the free tier, alongside 350+ bookmakers and the sharps that actually publish their exposure. Ranogajec needed a network of accounts and people to answer the size question. You need one endpoint.<\/p>\n<p><a href=\"https:\/\/oddspapi.io\/blog\/free-odds-api-350-bookmakers\/\">Get your free API key<\/a> and find out what your edge is worth at scale.<\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h3>Which bookmakers publish a betting limit in the OddsPapi API?<\/h3>\n<p>Pinnacle and the prediction-market exchanges populate the <code>limit<\/code> field on every outcome. On our MLB test fixture, Pinnacle, Kalshi and Polymarket all carried a limit while the other ten books returned <code>null<\/code>. US retail books such as DraftKings, FanDuel, BetMGM and Caesars leave it empty because their maximum bet is set per account rather than per market. Check for <code>None<\/code> before doing arithmetic on it.<\/p>\n<h3>What does the limit field actually mean?<\/h3>\n<p>On a sportsbook it is the maximum stake the book will accept on that outcome at that price. On an exchange it is the stake needed to consume the top level of the order book, with deeper levels listed separately in <code>exchangeMeta<\/code>. Both are quoted in the account currency.<\/p>\n<h3>Why is Pinnacle&#8217;s limit different on each side of the same market?<\/h3>\n<p>Pinnacle caps its own maximum loss rather than your stake. The limit on any outcome is <code>max(base, base \/ (price - 1))<\/code>, where <code>base<\/code> is a per-market figure. A $7,500 base gives an $8,108 limit at 1.925 and a $41,666 limit at 1.18, because both stakes win the book&#8217;s maximum of $7,500.<\/p>\n<h3>How do I read size versus limit on an exchange ladder?<\/h3>\n<p><code>size<\/code> is the payout available at that level and <code>limit<\/code> is the stake required to take it, linked by the native share price in <code>cents<\/code>. On Polymarket, 151,235 shares at 0.51 works out to $77,130 of stake. Use <code>limit<\/code> when you are walking a ladder to fill a target stake.<\/p>\n<h3>Can I get limit history on the free tier?<\/h3>\n<p>Yes. Every snapshot from <code>\/historical-odds<\/code> carries the limit that applied at that timestamp, so you can chart how a book scaled its exposure into kickoff. The endpoint accepts a maximum of three bookmakers per call, so loop and merge for wider coverage.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Which bookmakers publish a betting limit in the OddsPapi API?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Pinnacle and the exchanges (Kalshi, Polymarket, Betfair, SX Bet and others) populate the limit field on every outcome. US retail books such as DraftKings, FanDuel, BetMGM and Caesars return null, because their maximum bet is set per account rather than per market.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does the limit field actually mean?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"On a sportsbook it is the maximum stake the book will accept on that outcome at that price. On an exchange it is the stake needed to consume the top level of the order book, with deeper levels listed separately in exchangeMeta.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Why is Pinnacle's limit different on each side of the same market?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Pinnacle caps its own maximum loss rather than your stake. The limit on any outcome is max(base, base \/ (price - 1)), where base is a per-market figure. A 7,500 base gives an 8,108 limit at 1.925 and a 41,666 limit at 1.18, because both stakes win the book's maximum of 7,500.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How do I read size versus limit on an exchange ladder?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Size is the payout available at that level and limit is the stake required to take it, linked by the native share price in cents. On Polymarket, 151,235 shares at 0.51 works out to 77,130 of stake. Use limit when walking a ladder to fill a target stake.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can I get limit history on the free tier?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Every snapshot from \/historical-odds carries the limit that applied at that timestamp, so you can chart how a book scaled its exposure into kickoff. The endpoint accepts a maximum of three bookmakers per call, so loop and merge for wider coverage.\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: betting limits api\nSEO Title: Betting Limits API: How Much Can You Actually Bet at the Best Price?\nMeta Description: Your scanner found a +3.2% edge. Can you get $100k on at that price? Read bookmaker limits and exchange depth in Python with OddsPapi's free tier.\nSlug: betting-limits-api-stake-sizing\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Your scanner found a +3.2% edge, but can you get $100k on at that price? Use a betting limits API to read book caps and exchange depth in Python. Free tier.<\/p>\n","protected":false},"author":2,"featured_media":3162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[12,8,9,55,11],"class_list":["post-3161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-betting-data","tag-free-api","tag-odds-api","tag-pinnacle","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Betting Limits API: How Much Can You Actually Bet at the Best Price? | 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\/betting-limits-api-stake-sizing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Betting Limits API: How Much Can You Actually Bet at the Best Price? | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"Your scanner found a +3.2% edge, but can you get $100k on at that price? Use a betting limits API to read book caps and exchange depth in Python. Free tier.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-04T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-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=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"Betting Limits API: How Much Can You Actually Bet at the Best Price?\",\"datePublished\":\"2026-08-04T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\"},\"wordCount\":1951,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp\",\"keywords\":[\"Betting Data\",\"Free API\",\"Odds API\",\"Pinnacle\",\"Python\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\",\"name\":\"Betting Limits API: How Much Can You Actually Bet at the Best Price? | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp\",\"datePublished\":\"2026-08-04T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"Betting Limits API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Betting Limits API: How Much Can You Actually Bet at the Best Price?\"}]},{\"@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":"Betting Limits API: How Much Can You Actually Bet at the Best Price? | 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\/betting-limits-api-stake-sizing\/","og_locale":"en_US","og_type":"article","og_title":"Betting Limits API: How Much Can You Actually Bet at the Best Price? | OddsPapi Blog","og_description":"Your scanner found a +3.2% edge, but can you get $100k on at that price? Use a betting limits API to read book caps and exchange depth in Python. Free tier.","og_url":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-08-04T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-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":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"Betting Limits API: How Much Can You Actually Bet at the Best Price?","datePublished":"2026-08-04T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/"},"wordCount":1951,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp","keywords":["Betting Data","Free API","Odds API","Pinnacle","Python"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/","url":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/","name":"Betting Limits API: How Much Can You Actually Bet at the Best Price? | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp","datePublished":"2026-08-04T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/07\/betting-limits-api-stake-sizing-scaled.webp","width":2560,"height":1429,"caption":"Betting Limits API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/betting-limits-api-stake-sizing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Betting Limits API: How Much Can You Actually Bet at the Best Price?"}]},{"@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\/3161","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=3161"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3161\/revisions"}],"predecessor-version":[{"id":3163,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3161\/revisions\/3163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3162"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}