API key Sign in, or get an instant trial key — no signup required.

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):

KeyBookTypical use
pinnaclePinnacleDefault sharp reference (1-credit single-book calls)
fanduelFanDuelUS retail soft book
draftkingsDraftKingsUS retail soft book
betmgmBetMGMUS retail
caesarsCaesarsUS retail
bet365Bet365Global retail
circaCircaSharp-leaning US book
westgateWestgateLas Vegas local
wynnWynnLas Vegas local
south_pointSouth PointLas Vegas local
stationsStation CasinosLas Vegas local
hardrockHard RockUS retail
betonlineBetOnlineOffshore retail
betrBetrUS retail
betriversBetRiversUS retail (game lines via Source API v2)
lowvigLowVigOffshore reduced-juice (same upstream family as BetOnline; Source API v2)
bovadaBovadaOffshore 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
curl "https://lumify.ai/v1/events/4821/odds?bookmaker=all" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
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"])
TypeScript
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
curl "https://lumify.ai/v1/events/4821/odds/history?limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
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"])
TypeScript
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):

json
{
  "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

CallCredits
Single-book odds or history (default Pinnacle)1
bookmaker=all or a list1
available: false / errors0

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

What sportsbooks does the Sports Odds API cover?

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.

Is this a betting odds API? Do you support player props?

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.

How fresh are the odds?

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.

Do odds keep updating once the game starts?

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.

How much do odds calls cost?

1 credit for a single bookmaker (default Pinnacle) or for bookmaker=all / a comma-separated list. Responses with available: false are free. See pricing.

Can AI agents pull odds via MCP?

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.