Odds
Sports Odds API for Developers & AI Agents
Normalized pre-game betting odds across nine 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 odds
Fetch current lines for any Lumify event with GET /v1/events/{id}/odds. Default scope is Pinnacle only (1 credit) — the sharp reference most agents compare against. Pass bookmaker=all (or a list) when you need a multi-book shop at 2 credits.
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).
Betting odds API intent lives here. There is no separate /betting-odds-api URL — this page is the canonical landing for sports odds, betting odds, and multi-book line data.
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 |
hardrock | Hard Rock | US retail |
betonline | BetOnline | Offshore retail |
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 outcomes. Player props, futures, and alternate lines are out of scope for 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 nine price attachments.
Compound fetches: GET /v1/events/{id}?include_odds=true embeds the odds payload (+1 or +2 credits depending on bookmaker) so you can skip a second round trip.
Examples
Multi-book current odds (2 credits):
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 confidence, signals, and structured rationale on the same event IDs. 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 | 2 |
| 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
Nine books with normalized keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, and betonline. 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). No player props, futures, or alternate lines yet. If you need props today, use a props-first vendor alongside Lumify for intelligence and agent tooling.
Odds are ingested about every 30 minutes and current-odds responses are cached for 2 minutes. That is right for research, agents, and line-shopping alerts — not for sub-second trading.
1 credit for a single bookmaker (default Pinnacle). 2 credits for bookmaker=all or a comma-separated list. Responses with available: false are free. See pricing.
Yes. The hosted MCP server at /mcp exposes get_odds and get_odds_history with the same credit metering as REST. Pair with get_intelligence when you need confidence and rationale, not just price.
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.