Odds
Sports Odds API for Developers & AI Agents
Normalized pre-game and in-play betting odds across 17 sportsbooks — moneyline, spread, and totals — with full line-movement history. Built for agents and apps that need structured prices, not screenshots of a book.
Pre-game & in-play odds
Fetch current lines for any Lumify event with GET /v1/events/{id}/odds — before kickoff and while the event is in progress. Default scope is Pinnacle (1 credit) — the sharp reference most agents compare against. Pass bookmaker=all (or a list) when you need a multi-book shop — still 1 credit.
Moneyline, spread, and totals keep refreshing on the same ~10-minute ingest cycle once the game goes live. Books that stop posting live prices (common for sharp books on most sports) are omitted from the in-play response rather than shown with a stale, frozen-at-kickoff number next to books that are actually quoting.
Final events grade result and close from the pre-kickoff closing line, not whatever the last in-play price happened to be — so CLV comparisons and settlement stay anchored to the number that was actually available before the game started. Player props, team totals (NFL/NCAAF/MLB/soccer), and period lines (1H / F5 / S1) are a separate persisted surface that freezes at kickoff rather than following the game live — see /docs/player-props.
Always returns 200 when the event exists. Check available before reading bookmakers[] — empty books mean odds have not been ingested yet (and you are not charged).
Sportsbooks
Supported bookmaker keys (availability varies by event and sport):
| Key | Book | Typical use |
|---|---|---|
pinnacle | Pinnacle | Default sharp reference (1-credit single-book calls) |
fanduel | FanDuel | US retail soft book |
draftkings | DraftKings | US retail soft book |
betmgm | BetMGM | US retail |
caesars | Caesars | US retail |
bet365 | Bet365 | Global retail |
circa | Circa | Sharp-leaning US book |
westgate | Westgate | Las Vegas local |
wynn | Wynn | Las Vegas local |
south_point | South Point | Las Vegas local |
stations | Station Casinos | Las Vegas local |
hardrock | Hard Rock | US retail |
betonline | BetOnline | Offshore retail |
betr | Betr | US retail |
betrivers | BetRivers | US retail (game lines via Source API v2) |
lowvig | LowVig | Offshore reduced-juice (same upstream family as BetOnline; Source API v2) |
bovada | Bovada | Offshore retail — 6 US majors (nfl/ncaaf/nba/ncaab/nhl/mlb; no soccer/tennis; Source API v2) |
This is not an 85–200 book firehose. Lumify trades raw book count for normalized schemas, agent metering, MCP, and an intelligence layer on top of the same events.
Markets
Each bookmaker entry returns markets in a stable order:
- h2h / moneyline — two-way for most sports; three-way for soccer (home, away, Draw)
- spreads — handicap with point on each side
- totals — Over / Under with a shared point
Prices are American odds integers. point is null on moneyline. Each outcome includes is_main. Default is mains only — pass include_alts=true for alternate spread/total rungs.
On status=final, outcomes include result (won / lost / push / void) plus close on spread/total points. MLB, tennis, and soccer (MLS + big-five) mains also mirror fair_price and consensus from published assessments.
Player props are a separate surface — /docs/player-props. Futures are not on v1.
History & line movement
GET /v1/events/{id}/odds/history returns every recorded price or point change between ingest cycles — newest first. Same bookmaker credit rules as current odds (1 credit single book, 2 for multi-book). Use it to detect steam, open→current deltas, and sharp-led moves before you act on a soft-book price.
For push-style alerts, subscribe to webhook line_move events — see the odds movement guide.
Normalization
Every book uses the same market keys, outcome shape, and event IDs as the rest of Lumify (schedules, scores, intelligence). Agents do not re-map DraftKings vs FanDuel field names or reconcile team strings — you get one event graph and seventeen price attachments.
Compound fetches: GET /v1/events/{id}?include_odds=true embeds the odds payload on the same 1-credit event call so you can skip a second round trip.
Examples
Multi-book current odds (1 credit):
curl "https://lumify.ai/v1/events/4821/odds?bookmaker=all" \
-H "Authorization: Bearer YOUR_API_KEY"
from lumify import Lumify client = Lumify(api_key="YOUR_API_KEY") odds = client.events.odds(4821, bookmaker="all") for book in odds["bookmakers"]: print(book["bookmaker"], book["markets"][0]["outcomes"])
import { Lumify } from "@lumifyai/sdk"; const client = new Lumify({ apiKey: "YOUR_API_KEY" }); const odds = await client.events.odds(4821, { bookmaker: "all" }); odds.bookmakers.forEach(b => console.log(b.bookmaker, b.markets[0]?.outcomes));
Line-movement history (Pinnacle, 1 credit):
curl "https://lumify.ai/v1/events/4821/odds/history?limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
history = client.events.odds_history(4821, limit=20) for m in history["movements"]: print(m["moved_at"], m["outcome"], m["price_from"], "→", m["price_to"])
const history = await client.events.oddsHistory(4821, { limit: 20 }); history.movements.forEach(m => console.log(m.moved_at, m.outcome, m.price_from, "→", m.price_to) );
Sample multi-book response shape (abridged):
{
"event_id": 4821,
"available": true,
"bookmakers": [
{
"bookmaker": "pinnacle",
"markets": [
{
"key": "h2h",
"label": "moneyline",
"outcomes": [
{ "outcome": "Boston Celtics", "price": -145, "point": null },
{ "outcome": "New York Knicks", "price": 125, "point": null }
]
}
],
"captured_at": "2026-05-13T18:32:00Z"
}
],
"last_updated": "2026-05-13T18:32:00Z"
}
Agents & MCP
Odds are first-class MCP tools on the hosted Streamable-HTTP server at https://lumify.ai/mcp — get_odds and get_odds_history, metered per call with _meta.credits_used.
When price alone is not enough, call get_intelligence / GET /v1/events/{id}/intelligence for probability, fair price, and Price overlay on the same event IDs — main-line ev (Beta) is on that payload. Scan a sport with GET /v1/intelligence/ev / list_ev. Free POST /v1/estimate lets agents budget before spending.
For agents: machine-readable twin at /sports-odds-api.md. Full tool list and setup: /docs/ai.
Pricing
| Call | Credits |
|---|---|
| Single-book odds or history (default Pinnacle) | 1 |
| bookmaker=all or a list | 1 |
| available: false / errors | 0 |
Free Tier includes 1,000 credits that never expire (20 req/min). Instant trial keys (100 credits, 14 days) need no signup — use the banner above. Details: /pricing.
FAQ
Seventeen books with normalized keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, and bovada. Bovada is US majors only (no soccer/tennis). Availability per event depends on what has been ingested — always check available.
Yes for core betting markets — moneyline (h2h), spread, and totals (soccer moneyline is 3-way including Draw). Default view is main lines; pass include_alts=true for alternate spread/total rungs. Final events include result (won/lost/push/void). GET /odds stays on those game markets. NFL, NCAAF, NBA, NCAAB, NHL, MLB, and Soccer player props live on GET /v1/events/{id}/player-props — market catalog: /docs/player-props. Futures are not on the public v1 surface.
Odds are ingested about every 10 minutes — pregame and in-play — and current-odds responses are cached for 2 minutes. Once an event goes live, books that have not posted a quote since kickoff are omitted rather than shown stale. That is right for research, agents, and line-shopping alerts — not for sub-second trading.
Yes for moneyline, spread, and totals — GET /odds keeps refreshing on the same ~10-minute cycle while the event is in progress. Final events grade result / close from the pre-kickoff line, not the last in-play price, so CLV and settlement stay anchored to the close. Player props, team totals, and first-half/first-five lines freeze at kickoff rather than following the game live.
1 credit for a single bookmaker (default Pinnacle) or for bookmaker=all / a comma-separated list. Responses with available: false are free. See pricing.
Yes. The hosted MCP server at /mcp exposes get_odds, get_odds_history, and get_player_props (NFL/NCAAF/NBA/NCAAB/NHL/MLB/soccer) with the same credit metering as REST. Pair with get_intelligence when you need confidence and rationale, or list_ev to scan main-line +EV (Beta; market=h2h|spreads|totals) on soccer/MLB/tennis/NFL/NCAAF.
Start pulling sports odds
Create a free key — or use an instant trial key with no signup — and hit /v1/events/{id}/odds in under a minute.