Changelog
Date-stamped changes to the Lumify API, MCP surface, SDKs, and public docs. Agents can poll the JSON feed below.
2026-09-19
- Grade how-to: new /docs/grade (+ .md) — complementary walkthrough for the public /grade sheet and POST /v1/grade/slip / MCP grade_slip. Covers never-guess resolution, natural-language dates, multi-leg slips, Visual vs JSON, and the 20/day free sheet. Inspector stays on #grade-slip.
2026-09-17
- Grade slip game markets: POST /v1/grade/slip / MCP grade_slip grade structured h2h / spreads / totals against the official score and the submitted ticket line, plus team_total on nfl / ncaaf / mlb / soccer, alongside settleable player-prop legs. Mode S side is home | away | over | under | draw (draw only grades on soccer h2h — off soccer it's unmapped). player_id is required on props and forbidden on game keys; team_id is required on team_total. line is signed to the submitted side, not the favorite (a home −3.5 favorite is line=-3.5). market_key accepts moneyline/ml, spread, total/ou, and team totals/tt aliases too. Free-text game phrases (Chiefs -3.5, Over 47.5 vs Bills, Yankees ML, Chiefs team total over 24.5) grade when the team and event resolve uniquely; a bare Over 47.5 stays unmapped. Spreads and moneylines return won / lost / push / void; totals stay over / under / push / void. A final event with no usable box yet grades unmapped, not in_progress. summary.voids counts walkover/cancel. Tennis moneyline grades; tennis spreads/totals stay unmapped. Public /grade is titled Grade a bet slip and shows a live main-line example chip alongside player props, plus Won/Lost/Void badges. Attribution is always Graded by Lumify. Not wagering advice.
2026-09-16
- Grade a slip: POST /v1/grade/slip / MCP grade_slip grade settleable player-prop legs on nfl/nba/ncaaf/ncaab/nhl/mlb/soccer. Structured event_id + player_id preferred. Free text grades only when player and event resolve uniquely — team and event ambiguity stay on team_resolve / event_resolve with candidates. Public /grade sheet (20 grades / IP / day) shows Visual cards and the raw JSON payload. Attribution is always Graded by Lumify. Not wagering advice.
2026-09-15
- Public grade sheet: /grade grades free-text or structured player-prop slips in the browser (same engine as POST /v1/grade/slip / MCP grade_slip). 20 grades / IP / day; attribution is always Graded by Lumify. Not wagering advice.
2026-09-13
- Grade a slip, all player-props sports: POST /v1/grade/slip / MCP grade_slip now settle nfl/nba/ncaaf/ncaab/nhl/mlb/soccer (was nfl/mlb only) — same coverage as player-props.
2026-09-10
- Resolve a team: POST /v1/resolve/team and MCP resolve_team map nicknames, abbreviations, metros, and aliases to a Lumify team id. Returns ambiguous instead of guessing. City-only metros sit below the 0.85 auto-resolve floor. Mode M grade/slip binds a unique team_id from a team span (CIN, vs Bills, Niners) or leaves ambiguous/not_found on legs[].team_resolve — the span is never dropped.
2026-09-09
- Resolve + grade: POST /v1/resolve/player and MCP resolve_player map messy names to a Lumify player id (ambiguous beats guessing). POST /v1/grade/slip and MCP grade_slip grade structured settleable legs. Attribution is always Graded by Lumify. Not wagering advice.
2026-09-04
- Injury / availability how-to: new /docs/injuries (+ .md) — Beta event-scoped NFL/MLB monitor: cadence, severity, exclude_status, REST / MCP get_injuries, and webhook event_types: ["injury"]. Inspector stays on #event-injuries.
2026-08-29
- Tennis spreads & totals forecasts: GET /v1/intelligence/forecasts?sport=tennis and MCP list_forecasts add game handicap (SPREAD_P1/SPREAD_P2) and total games (OVER/UNDER) rows alongside moneyline, from a new Normal-approximation games model (total games and game margin per match, shrunk toward league/tier priors). Lines are soft-book game-unit totals, not Pinnacle's set-unit line — bets[]/list_ev still return 400 on tennis totals for that reason; forecasts[] is unaffected since it scores against its own model, not a market gap. Optional market=h2h|spreads|totals. Research overlay covers all three bet types the same way (p_hit ≥ 0.80).
2026-08-28
- Public splits expanded: GET /v1/events/{id}/splits and MCP get_splits now cover NCAAF and NCAAB alongside MLB/NBA/NHL/NFL. Tennis and soccer remain unsupported (upstream 400). NCAAB may return available:false off-season when the slate is empty.
- Team totals expanded: GET /v1/events/{id}/team-props and MCP get_team_props now cover NCAAF, MLB, and soccer in addition to NFL. Source is Pinnacle v2 period-0 team_total. Other sports still return 400.
- Period odds expanded: GET /v1/events/{id}/period-odds and MCP get_period_odds add soccer first-half (1H, Pinnacle v2 period 1) and tennis first-set (S1). Football Pinnacle v2 period 1+ stays dropped (1H vs Q1 unconfirmed). NHL still has no period surface.
- Match context expanded: GET /v1/events/{id}/intelligence Search-backed match_overview + top-level rationale[] now covers every event sport (MLB, NFL, NCAAF, NBA, NCAAB, NHL, soccer, tennis), not just MLB. Queries and the system prompt are sport-shaped. First request schedules generation; later requests reuse the stored row. Context, not a pick.
- Sports Coverage: new /docs/sports-coverage page — sport × surface matrix (Events, Stats, odds layers, splits, intelligence) with human labels that link to the docs for each endpoint. Replaces the old three-column table on the API reference.
- Main-line EV: GET /v1/intelligence/ev and MCP list_ev now take market=h2h|spreads|totals (default still moneyline). Same Beta price-gap packaging as bets[].ev, now on spreads and totals too. Tennis totals return 400.
- Agent contract: capabilities.json, sport landings, docs reference, MCP schemas, and the Sports Schedule modal (new Team Totals tab) updated together.
- Forecasts schema generalized: forecasts[] wager objects add bet_type and player_role; player/player_id/line/side are now nullable. Null bet_type is still a player-prop row; a set bet_type is a main-line forecast.
- Tennis moneyline forecasts: tennis is the first main-line forecast sport. GET /v1/intelligence/forecasts?sport=tennis and MCP list_forecasts return one ranking Bradley-Terry moneyline per event (ML_P1/ML_P2) — not tennis bets[] and not the confidence score. Optional market=h2h. Soccer still has no forecast board. Research overlays hot tennis rows the same way as props (p_hit ≥ 0.80).
- Forecast research overlay: the background job now researches hot wagers only (p_hit ≥ 0.80, cap 6 per event), one web-search call per due wager. research.note is the wager-level why — validate / invalidate without a note are dropped. Event match_overview is prompt background, not the rationale. Missing research is still fail-open.
2026-08-27
- Forecast intelligence (new): GET /v1/intelligence/forecasts and MCP list_forecasts return a daily board of forecasted Over/Under player-prop wagers from Lumify's shrunken rate model. MLB, NCAAF, NFL, NBA, NCAAB, NHL. Each wager carries p_hit (model P(side hits the posted line)), sufficiency, conviction (board rank), and posted books prices. reliability is emerging on v0. 1 credit; empty slate is still 200. How to read: /docs/understanding-odds#forecasts. Playground #list_forecasts. SDKs: events.listForecasts() / events.list_forecasts().
- Per-event attach: GET /v1/events/{id}/intelligence now includes forecasts[] (top conviction wagers for that game). Charged when intelligence is available or forecasts are non-empty.
- Forecast research overlay: research on forecast wagers is a fail-open Deep Research overlay ({stance, conviction, note}) written by a background job. Null when it has not run. Research never flips the side — it re-ranks and bounds p_hit by ±0.03.
- Agent contract: MCP catalog is 23 tools. Reference: /docs/reference#intelligence-forecasts.
- Players identity (breaking): GET /v1/players and GET /v1/players/{id} no longer return top-level tennis_ranking / tennis_ranking_points. Tennis standings nest as rankings: {singles, points} and are null on every other sport. Shared identity keys (position, handedness, height_cm, weight_kg, current_team_*, image_url) stay on every sport — null means unknown, not wrong sport. MCP search_players / get_player match REST. Tennis /stats still exposes ranking / ranking_points on the tennis player block.
2026-08-24
- Moneyline EV (Beta): GET /v1/events/{id}/intelligence now includes bets[].ev on soccer, MLB, tennis, NFL, and NCAAF — the same sharp-fair price gap as best, re-expressed as ev_pct + Kelly. n=1 Pinnacle is a valid fair. Gaps ≤ 0 or above 25% drop. Not a claim-ladder +EV badge.
- Sport-level scan (new): GET /v1/intelligence/ev and MCP list_ev list pregame moneyline opportunities for one sport. 1 credit; empty list is still 200. Playground #list_ev. SDKs: events.listEv() / events.list_ev().
- Agent contract: MCP catalog is 22 tools. Walkthrough: /docs/understanding-odds#ev. Reference: /docs/reference#intelligence-ev.
- Docs alignment: External docs and agent surfaces now describe one predictive intelligence model. The leftover points-engine shape is no longer documented.
2026-08-23
- Live / in-play odds: GET /v1/events/{id}/odds and MCP get_odds now keep updating moneyline/spread/totals on the same ~10-minute cycle after kickoff, not just pregame. While an event is in progress, books that have not posted a quote since kickoff are omitted rather than shown stale. Final events grade result / close from the pre-kickoff closing line, not the last in-play price. Player props, team totals, and first-half/first-five lines still freeze at kickoff — see below.
- Team totals (new): GET /v1/events/{id}/team-props and MCP get_team_props — NFL per-team Over/Under mains joined to this-event score. GET /odds stays moneyline/spread/totals only.
- Period / partial markets (new): GET /v1/events/{id}/period-odds and MCP get_period_odds — first-half spreads/totals (NFL, NCAAF, NBA, NCAAB) and first-five innings (MLB), graded from period/inning scores.
- Agent contract: capabilities.json, sport landings, docs reference, and MCP tool schemas updated for all three.
2026-08-22
- Player props expanded: GET /v1/events/{id}/player-props and MCP get_player_props now cover NHL and MLB, alongside NFL/NCAAF/NBA/NCAAB — 6 sports total. NHL: goals, assists, shots on goal, points (combo). MLB: hits, runs, RBIs, home runs, stolen bases, batter strikeouts, total_bases (new weighted-combo type: H + 2·2B + 3·3B... i.e. H + 2B + 2·3B + 3·HR), hits+runs+RBIs, plus pitching (strikeouts, hits allowed, earned runs, outs recorded). Market keys: /docs/player-props.
- Dedicated live box ingest: NHL and MLB each get their own live in-progress player-box refresh job, separate from the existing live-stats poller — same circuit-breaker pattern (cooldown on chronic failures, widespread-outage Slack alert).
- Agent contract: llms.txt, capabilities.json, sport landings, and MCP/cheat-sheet docs now advertise all 6 player-props sports.
2026-08-21
- Player props (new): GET /v1/events/{id}/player-props and MCP get_player_props — NFL and NBA only. Joins persisted player-prop mains to this-event player box counts. Market keys and which ones grade: /docs/player-props. GET /odds stays moneyline/spread/totals. Other sports return 400. 1 credit when lines exist; available:false is free. MCP catalog is now 19 tools.
- Agent contract: /llms.txt, /SKILL.md, /capabilities.json (new player-props capability), sport landings, and MCP/cheat-sheet docs now advertise the same sports + market catalog.
- Player props catalog: /docs/player-props (+ .md) itemizes NFL/NBA market keys and which ones grade. Generated from the same config constants as capabilities.json.
2026-08-20
- Capability contract (new): GET /capabilities.json — per-capability status, dataMode, freshness, and an explicit limitations[] array so agents cannot over-claim on Lumify's behalf.
- MCP server card (new): GET /.well-known/mcp/server-card.json — conventional discovery path for the hosted Streamable-HTTP MCP.
- Escalation skill: /SKILL.md now states when to use Lumify (multi-book comparison, fair price, line history, settled results, intelligence) and when not to (keyless public-scoreboard snapshot).
- Honesty pass: llms.txt now leads with what this API does not do — no wagering advice, price gap ≠ EV, named sources are not endorsements.
2026-08-13
- Agent Skill (new): GET /SKILL.md — an Agent Skills-format onboarding file (YAML frontmatter + get-key/connect-MCP/research-loop guide) at the site root, so "Read https://lumify.ai/SKILL.md and install this skill." self-onboards a coding agent. Linked from agent.json, llms.txt, and a new "Copy Onboarding Prompt" button on the homepage.
- Token budgets re-measured: /llms-full.txt ~11.7k, /docs/llms-full.txt ~81k, /openapi-llms.txt ~6.3k, /openapi.json ~64.7k — all grew since the last measurement as sports/stats coverage expanded; published counts on /docs/ai now match.
2026-08-10
- BREAKING (no known consumers): GET /v1/events/{id}/splits and MCP get_splits now return bookmakers[].bookmaker using the same odds slugs as /odds (e.g. draftkings). Removed books[].book and upstream short keys (dk).
2026-08-02
- Docs consistency: reconciled intelligence sport coverage, free-tier rate limit (20/min), and credit-cost language across pricing, FAQ, docs, and llms.txt.
- Answer-engine llms.txt: canonical name + aliases (name-collision disambiguation), pricing ladder, competitor contrasts, honest limitations, measured token budgets.
- New: /docs/cheat-sheet, /docs/best-practices, /docs/rate-limits (HTML + .md), this changelog, and /changelog.json feed.
- Docs payload: dual-audience llms-full — /llms-full.txt (GEO orientation, ~11k tokens) + /docs/llms-full.txt (technical docs + dump, ~53k tokens) + /openapi-llms.txt (endpoint dump alone).
- Docs-as-markdown (T2): /docs.md, /docs/guides.md, /docs/reference.md twins (reference ~23k tokens, generated from HTML) alongside prior cheat-sheet / best-practices / rate-limits / cookbook .md pages.
- MCP: public docs now correctly advertise 18 tools (includes get_stats + estimate_cost).
- Soccer / MLS: sharp-consensus fair price + per-book line-shopping edge surface on MLS intelligence responses (fair / edges_by_book / best).
2026-07-23
- SDKs: @lumifyai/sdk and lumify-sdk v0.2.0; langchain-lumify 0.1.0 on PyPI.
- n8n: n8n-nodes-lumify v0.2.6 (Creator Portal style pass).
- Agent readiness: free POST /v1/estimate + MCP estimate_cost; SSE event: reconnect; webhook delivery history GET /v1/webhooks/{id}/deliveries with retry backoff.
- Docs accessibility: Cloudflare AI-scraper block removed — /llms.txt, OpenAPI, and docs return 200 to agent user agents.
2026-07-16
- Public developer surface: hosted MCP at https://lumify.ai/mcp, /.well-known/agent.json, llms.txt / llms-full.txt, OpenAPI, agent cookbook.
- Python SDK: lumify-sdk 0.1.0 on PyPI (later 0.2.0 with AsyncLumify).
- Trial keys: no-signup instant trial key + persistent free tier (1,000 never-expiring credits).
Machine-readable feeds
- JSON: https://lumify.ai/changelog.json
- This page: https://lumify.ai/changelog
Deprecations and breaking changes will be announced here with at least 90 days notice within a major API version, per the versioning promise.