Limitless Exchange API: Onchain Prediction Market Data (Python)
Limitless Exchange: The Polymarket Alternative on Base
You probably found Limitless Exchange because you were looking for “the next Polymarket.” Fair — that’s basically what it is, except it runs on Base (Coinbase’s L2) instead of Polygon, the fee structure is different, and the UX is built around binary “yes/no” markets rather than multi-outcome events. If you’re building prediction-market tooling, ignoring Limitless at this point would be a mistake.
Here’s the problem: like every onchain prediction market, Limitless’s “API” is really three things duct-taped together — a Gamma-style metadata service, an onchain smart contract you query via Base RPC, and a CLOB-style order book living at the edge of it all. You glue those together yourself.
| Requirement | Reality |
|---|---|
| Network | Base L2 (Coinbase rollup on Ethereum) |
| Market Format | Binary (yes/no) outcomes, conditional tokens |
| Market IDs | Onchain condition IDs + token IDs per outcome |
| Prices | Share price (0–1), reads as implied probability — you convert to decimal odds yourself |
| Metadata | Off-chain API, paginated, separate from prices |
| Trading | EIP-712 signed orders against a Base-deployed contract |
For read-only price data — the part 90% of devs actually want — this is overkill.
The “Third Option” for Limitless Exchange Odds
OddsPapi aggregates 350+ venues, including Limitless Exchange, under one API key. You don’t need a Base RPC, you don’t need to resolve condition IDs, and you don’t need to convert share prices to decimal odds. You query ?bookmakers=limitless-ex on a fixture and get decimal-formatted prices with the same back/lay/exchange shape every other exchange uses on OddsPapi.
| Feature | Limitless Direct | OddsPapi |
|---|---|---|
| Auth | EIP-712 + Base wallet | Single API key |
| Wallet | Required | Not needed for reads |
| Odds Format | Share price (0–1) | Decimal, ready to use |
| Metadata Lookups | Second off-chain API | Same response as prices |
| Compare vs Sportsbooks | Separate integration per book | One request, all books |
| Historical Data | Query onchain event logs yourself | Free on entry tier |
What Limitless Actually Is
Limitless Exchange is an onchain prediction market running on Base. Each market is a binary question — “Will X happen by date Y?” — and resolves to yes or no. Share prices trade between 0 and 1, where the price is the market’s implied probability of “yes”: a share trading at 0.62 means the market collectively thinks there’s a 62% chance.
That probability is the interesting number. For a developer comparing Limitless to a sportsbook, you want it as decimal odds, not a raw share price. The conversion is simple — decimal = 1 / share_price — but you have to remember to do it on every single query, and if you forget, your arbitrage model is silently wrong. OddsPapi does the conversion on ingestion so every limitless-ex price you see is already in decimal.
Why Pull Limitless Alongside a Sportsbook
Sportsbooks bake in vig (typically 4–8%). Onchain binary markets like Limitless don’t — their “vig” is the bid/ask spread on the shares themselves, which is often tighter than the sportsbook margin on major events. Any time the implied probability on Limitless disagrees meaningfully with the no-vig sharp line from Pinnacle, you’ve either found an arbitrage or a market that believes something the book doesn’t.
The JSON Shape
Limitless markets route through the same /v4/odds endpoint as every other bookmaker. The outcome block sits under bookmakerOdds.limitless-ex, and the structure mirrors the exchange-type shape used by Polymarket, Kalshi, and SX Bet. Main price lives on the price field, the lay (opposite) side is exposed via exchangeMeta:
# Limitless-style exchange outcome (structure shared with Polymarket/Kalshi)
{
"active": true,
"betslip": "https://limitless.exchange/markets/0x...",
"bookmakerOutcomeId": "0x...", # Base condition/token id
"changedAt": "2026-04-11T09:38:17+00:00",
"limit": null,
"price": 1.613, # decimal odds (already converted)
"exchangeMeta": {
"lay": 2.631, # lay / "no" side in decimal
"bookmakerLayOutcomeId": "0x..."
}
}
Two things:
priceis the “yes” side in decimal. If you want implied probability, divide 1 by it:1 / 1.613 = 0.62, i.e. the market thinks “yes” is 62%.exchangeMeta.layis the “no” side of the same market in decimal odds. Back + lay together give you the full round trip — this is the data you need for arbitrage.
Coverage note: Limitless’s sports coverage through OddsPapi is currently focused on major fixtures where there’s onchain liquidity — political markets, crypto-native events, and headline NBA/MLB/NFL games. Niche fixtures will return an empty book. This is the same pattern as Polymarket’s sports coverage: deep on a small set of markets, absent on the long tail.
Tutorial: Pull Limitless Exchange Odds in Python
Step 1: Grab Your API Key
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"
Step 2: Discover a Fixture
Limitless leans US-sports and headline events. Start with NBA (sportId=11) or NFL (14) — whichever is in season.
from datetime import datetime, timezone, timedelta
today = datetime.now(timezone.utc)
params = {
"apiKey": API_KEY,
"sportId": 11, # NBA
"from": today.strftime("%Y-%m-%d"),
"to": (today + timedelta(days=3)).strftime("%Y-%m-%d"),
}
fixtures = requests.get(f"{BASE_URL}/fixtures", params=params).json()
candidates = [f for f in fixtures if f.get("hasOdds")]
Step 3: Query Limitless
fixture_id = candidates[0]["fixtureId"]
r = requests.get(
f"{BASE_URL}/odds",
params={
"apiKey": API_KEY,
"fixtureId": fixture_id,
"bookmakers": "limitless-ex",
},
)
data = r.json()
limitless = data.get("bookmakerOdds", {}).get("limitless-ex")
if not limitless:
print("No Limitless market on this fixture — try a headline game.")
else:
print(f"{len(limitless['markets'])} markets from Limitless")
Step 4: Parse Yes / No as Decimal Odds
# Market 101 = Full Time Result / Moneyline
market = limitless["markets"]["101"]
for outcome_id, outcome in market["outcomes"].items():
p = outcome["players"]["0"]
if not p["active"]:
continue
yes_decimal = p["price"]
yes_prob = 1 / yes_decimal
meta = p.get("exchangeMeta") or {}
no_decimal = meta.get("lay") if isinstance(meta, dict) else None
print(f"outcome {outcome_id}: yes @ {yes_decimal} ({yes_prob:.1%}) | no @ {no_decimal}")
Step 5: Implied Probability vs Sportsbook No-Vig
The actual use case: Limitless says 62%, Pinnacle’s no-vig fair line says 58%. Which is right? Here’s how you grab both in one request and start answering that question.
r = requests.get(
f"{BASE_URL}/odds",
params={
"apiKey": API_KEY,
"fixtureId": fixture_id,
"bookmakers": "limitless-ex,pinnacle",
},
)
books = r.json()["bookmakerOdds"]
def implied(decimal):
return 1 / decimal if decimal else None
for slug in ("limitless-ex", "pinnacle"):
book = books.get(slug, {})
m = book.get("markets", {}).get("101", {})
home = m.get("outcomes", {}).get("101", {}).get("players", {}).get("0", {})
price = home.get("price")
print(f"{slug:13} home @ {price} ({implied(price):.1%})" if price else f"{slug:13} none")
Run this on a hot fixture during market hours and you’ll see exactly how far onchain prediction markets drift from sharp sportsbook lines. That drift is the whole game for prediction-market traders.
Why Devs Pick OddsPapi Over a Direct Base Integration
No Base RPC — You don’t maintain a Web3 provider, you don’t handle reorg edge cases, you don’t pay gas to read.
Already decoded — Share prices are already decimal odds. Condition IDs and token IDs are still available in bookmakerOutcomeId if you want them, but the conversion work is done.
One request, every venue — Limitless + Polymarket + Kalshi + Pinnacle + Betfair Exchange, side by side. That’s the whole prediction-market stack in a single call.
Free historical data — /v4/historical-odds?fixtureId=…&bookmakers=limitless-ex gives you the full price history without writing event-log subgraphs.
Get Started
- Sign up at oddspapi.io
- Copy your API key
- Query Limitless in one curl
curl "https://api.oddspapi.io/v4/odds?apiKey=YOUR_KEY&fixtureId=id1100022762690473&bookmakers=limitless-ex"
No Base RPC. No signed orders. No share-price math. Just decimal odds from an onchain prediction market.