+Sports Odds API
Compare bookmaker lines for a league side by side, then pull every market of one event, as JSON.
The API.SH Sports Odds API returns upcoming and live events of a league with each bookmaker's main lines side by side: moneyline or 1X2, spread or handicap, and total, in decimal and American odds (Unibet and BetRivers also fractional). Events are matched across books by team and start time, and best_moneyline shows the best price per outcome and the book offering it. For one event you get every market a book offers: alternate spreads and totals, halves, quarters and periods, team totals and player and game props. Books are Pinnacle, Unibet, BetRivers and FanDuel (US leagues). This is market data only, not betting advice.
- 3 endpoints
- from $1 / 1,000 calls
- 1,000 free credits / month
- failed calls free
GET https://api.api.sh/odds/v1/ event
{ "success": true } What you can build with the Sports Odds API
Line comparison tables
Show a league's events with each book's moneyline, spread and total side by side, plus the best available price per outcome.
Player prop data
Pull every market one book lists for an event and keep only player props by filtering market names.
Market research and modeling
Record main lines across books at intervals to study how prices move before an event; pass fresh=1 when you need a new read.
League and book discovery
List sports, league keys and which books cover each league, including every league Pinnacle lists for a sport right now.
Sports Odds data you get
Field names from real responses. Numbers come parsed, URLs absolute, dates in ISO 8601.
Sports Odds API endpoints and prices
Every Sports Odds endpoint costs 1 credit per call: credits are $1 per 1,000 on a monthly plan, $2 pay-as-you-go. Pricing
| Every market of one event at one bookmaker /odds/ | $1 · $2 PAYG 1 credit |
| Odds comparison for a league (Pinnacle, Unibet, BetRivers, FanDuel) /odds/ | $1 · $2 PAYG 1 credit |
| Sports, leagues and books /odds/ | $1 · $2 PAYG 1 credit |
Call the Sports Odds API
Every market of one event at one bookmaker: GET https://api.api.sh/odds/
curl "https://api.api.sh/odds/v1/event?book=unibet" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/odds/v1/event",
params={"book": "unibet"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/odds/v1/event");
url.searchParams.set("book", "unibet");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); # Google Sheets (API.SH add-on)
=APISH("/odds/v1/event", "book", "unibet")
# Zapier, Make, n8n (verified node): pick the API.SH app,
# choose "Sports Odds" and "Every market of one event at one bookmaker".
# AI agents (Claude, ChatGPT, Cursor): add the
# API.SH MCP server https://api.sh/mcp - Create a free accountConfirm your email and get 1,000 free credits every month. No card needed.
- Create an API keyOne key works for all 482 platforms.
- Send the requestJSON back in one call. Add
output=csvoroutput=ndjsonfor files.
Why API.SH for Sports Odds data
- Public data only: no Sports Odds login, cookies or account needed
- One key and one response shape for Sports Odds and 481 other platforms
- Built and maintained by API.SH, not third-party publishers
- Pay per call; errors on our side cost nothing
- Live status for every endpoint
API.SH vs the official Sports Odds API
Bookmakers do not offer open public odds APIs; dedicated providers such as The Odds API, OddsPapi and API-Sports aggregate many books with free tiers and paid plans. API.SH reads the public odds of Pinnacle, Unibet, BetRivers and FanDuel and returns them matched across books in one JSON shape.
If you need dozens of bookmakers, historical odds or streaming, a dedicated odds provider such as The Odds API or OddsPapi fits better. API.SH suits teams that want the main sharp and US books side by side, full event markets, and the same key they use for other data, at a fixed price per call.
Sports Odds API questions
What sports odds data can I get?+
A league's upcoming and live events with each book's moneyline, spread and total plus the best moneyline (/odds/v1/events), every market of one event at one book including alternates and player props (/odds/v1/event), and the sports, leagues and books available (/odds/v1/sports).
How much does the sports odds API cost?+
Every Sports Odds endpoint costs 1 credit per call. On a monthly plan 1,000 credits cost $1 (Starter is $50/month for 50,000 credits). Pay-as-you-go is $2 per 1,000 credits, with top-ups from $15 that never expire.
Is there a free sports odds API?+
Yes. Every account gets 1,000 free credits every month. That is 1,000 calls to /odds/v1/event at 1 credit each. Several odds providers also have limited free tiers; API.SH gives you the same key for odds and the rest of its data.
Where does the data come from?+
The public odds pages of Pinnacle, Unibet, BetRivers and FanDuel. Pinnacle, Unibet and BetRivers cover every listed league; FanDuel covers US leagues. Pinnacle also returns the maximum stake per market.
Do I need keys for the underlying sources?+
No. One API.SH key covers every odds endpoint. You do not need an account at any bookmaker, and API.SH never places bets.
How fresh are the odds?+
Odds change by the minute. Results are cached for 60 seconds; pass fresh=1 for a new read. If one book fails, it is listed in book_errors and the other books are still returned.
Which odds formats are returned?+
Every price comes in decimal and American odds; Unibet and BetRivers also return fractional odds. Each book block carries its own event_id, start time and live flag.
How do I get started?+
1. Sign up at api.sh. 2. Copy your API key. 3. Call /odds/v1/events with league=nfl (or any league key from /odds/v1/sports). Every parameter and request example is in the docs at https://api.sh/docs. You can also use the JS or Python SDK, Google Sheets, Zapier, Make, n8n or the MCP server at https://api.sh/mcp so an AI agent can call it.