How Lumify grades a slip

Lumify grades a bet slip against official results and tells you whether each leg won, lost, pushed, or is still in progress — and, while a game is live, how that bet is performing against the line. The public /grade sheet is the try-it surface. The inspector stays on the API reference. This page is the walkthrough.

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

Same engine as this walkthrough. Try a slip on the public sheet: Grade a bet slip → (20 free grades a day, no API key).

Overview

This is a bet-slip grader. Paste a sentence (or send structured legs) and Lumify settles each one against official results: player props against that player’s box count, main lines against the official score and the line you typed. A finished leg comes back as a win, a loss, or a push. A live game is not skipped: it stays in progress and the same payload includes how the bet is performing against the wager right now — current margin on a spread, current total, or the player’s box so far. It does not pick sides, and it is not wagering advice.

Grade a bet slip sheet. Left: slip text Bayern Munich -2, sport clue Any, Grade slip. Right: Visual tab showing a win — Bayern Munich -2, actual margin +7, 1. FC Union Berlin vs Bayern Munich, September 18, 2026.
Bayern Munich −2 covered. Actual margin +7 against Union Berlin on September 18 — a win, not a forecast.

While the event is still open, the card shows in progress and the number compared to the line so far — current on the JSON. That is the live performance of the wager, not a settle.

Visual grade card. Still open (1). Everton -1, in progress, current margin +1. Ipswich Town vs Everton, September 19, 7:00 AM PDT.
Everton −1 is still open. Current margin +1 against Ipswich — covering so far, not settled.

/grade is the browser sheet (no API key). POST /v1/grade/slip and MCP grade_slip are the same engine for an app or agent. Attribution is always Graded by Lumify.

This page / surfaceNot this
A deterministic grade — won, lost, push, or in progressA pick, a forecast, or wagering advice
Live events return in progress plus current vs the lineWaiting until the game is final to return anything
Ambiguous names stay unmapped with candidatesAuto-picking the first player, team, or game on the slate
Visual cards and the raw JSON payloadA consumer sportsbook UI
Meant to live in an agent or appA sheet you have to keep open to grade

Unique resolution

If two games, two players, or two teams still fit the sentence, Lumify does not pick one. The leg stays needs input and lists candidates. You choose — or you add a sport, team, or date clue and try again. A bare Over 47.5 stays unmapped for the same reason: it never binds the first game on the slate.

Visual grade sheet showing St. Louis Cardinals -1.5 as Needs input, with two Washington Nationals vs St. Louis Cardinals games listed — September 18 at 5:15 PM PDT and September 19 at 4:15 PM PDT — each with a Use this game button.
St. Louis Cardinals -1.5 today matched two games. The sheet lists both at 85% and waits. It does not grade the first one.

The same rule applies to players and teams. A colliding last name, a shared nickname, or a team that plays twice in the window stays on resolve / team_resolve / event_resolve with candidates. Pick a listed player, team, or game to re-run that line — a player pick rewrites only that name, so it works on a multi-leg slip.

Date words

You do not have to supply an event_id to grade. Date words narrow the window: today, tonight, yesterday, last night, last Wednesday, this Thursday, or a specific date (9/18/26 or an ISO date). A date plus a unique team or player is often enough. Add a sport or roster-team clue (CIN, vs Bills, Niners) when the name is common.

Grade a bet slip sheet with two legs on the left — Mets over 5 runs yesterday and Freddie Freeman over 1 hit 9/18/26 — sport clues, a team clue field, Grade slip, and 10 of 20 free grades left today. On the right, Visual shows a Mets over win (actual total 6) and a Freddie Freeman over 1 hit loss (actual hits 0).
yesterday bound the Mets total to September 18. 9/18/26 bound Freddie Freeman’s hit prop to the same slate. Two legs, two date styles, one slip.

Multi-leg slips

Paste up to 8 legs in one slip — one sentence per line, or joined with “and” when they are separate bets. Combined markets such as rushing and receiving yards stay one leg. Each leg still has to resolve to a unique player or team and event. The sheet groups wins, losses, pushes, voids, pending, and needs-input.

In the shot above, Mets over 5 runs hit (actual total 6) and Freddie Freeman over 1 hit missed (actual hits 0). The summary counts them independently. That is the same summary object an agent reads from grade_slip.

Visual and JSON

Toggle Visual and JSON on every result. Visual is the human card. JSON is the payload POST /v1/grade/slip and MCP grade_slip already return. The grader is meant to live in an agentic workflow — a bot, a notebook, a desk tool — not to keep you on this page.

Visual grade sheet showing St. Louis Cardinals -1.5 as a loss. Actual margin -8. Washington Nationals vs St. Louis Cardinals, September 18, 2026.
After you pick the September 18 game, Visual grades Cardinals −1.5 as a loss. Actual margin: −8.
JSON view of the same Cardinals -1.5 grade. status is graded. The input text is St. Louis Cardinals -1.5 today, market_key is spreads, line is -1.5, team_id is 87, and team_resolve is resolved to St. Louis Cardinals.
The JSON tab is the same object an agent gets. Read legs[].result, current, and market for the grade; team_resolve / resolve for the IDs that bound.

Free grades

/grade allows 20 free grades per visitor per day — no API key. The quota sits under the Grade slip button (“10 of 20 free grades left today” in the multi-leg shot). Register for a key and call the billed API when you need more, or when you want the grader inside an agent.

  • SheetGET /grade, 20 / IP / day, CSRF, no key.
  • API / MCPPOST /v1/grade/slip or grade_slip, Bearer key, 1 credit per call. Setup: /docs/ai.

How it grades

  1. Parse the sentence into legs — market, line, side. “Mets over 5 runs” is a team total. “Cardinals −1.5” is a spread. “Freeman over 1 hit” is a player prop.
  2. Resolve the player, team, and event. Unique binds go through. Collisions stay on candidates. This step never guesses.
  3. Settle against the official box or score and the line you typed — not a book close. While the event is live, result is in progress and current is how the wager is performing against the line so far. Once final: props over / under / push / did not play / no stat; spreads and moneylines won / lost / push / void; totals over / under / push / void.
  4. Return the same payload the sheet paints as Visual cards and pretty-prints as JSON.

Settleable player props: NFL, NCAA Football, NBA, NCAA Basketball, NHL, MLB, and soccer — the player-props catalog. Main lines grade on any sport GET /odds already settles. Team totals: NFL, NCAA Football, MLB, and soccer. Tennis moneyline grades; tennis spreads and totals stay unmapped.

REST + MCP

Prefer structured IDs when you have them: player_id on props, team_id on team totals, no player on moneyline / spread / total. Free text is for when you don’t.

curl
# Structured prop
curl -X POST https://lumify.ai/v1/grade/slip \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"legs":[{"event_id":12345,"player_id":678,"market_key":"receiving_yards","line":74.5,"side":"over"}]}'

# Free-text slip — same engine as /grade
curl -X POST https://lumify.ai/v1/grade/slip \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Mets over 5 runs yesterday\nFreddie Freeman over 1 hit 9/18/26"}'

Field catalog and every settleable key: POST /v1/grade/slip. MCP tool: grade_slip. Try the sheet: /grade.

FAQ

Does Lumify guess which player, team, or game I meant?

No. If a name or date window matches more than one player, team, or event, the slip stays unmapped and lists candidates. A bare Over 47.5 never picks the first game on the slate.

Can I use natural language like “yesterday”?

Yes. Date words such as today, tonight, yesterday, last night, last Wednesday, this Thursday, or a specific date (9/18/26 or an ISO date) narrow the event window.

Can I grade more than one leg at once?

Yes. Paste up to 8 legs in one slip. Each leg still has to resolve to a unique player or team and event. The sheet groups wins, losses, pushes, pending, and needs-input.

How many free grades do I get?

The public /grade sheet allows 20 free grades per visitor per day, with no API key. Call POST /v1/grade/slip or MCP grade_slip with an API key for more.

Is the Visual view the product?

No. Visual and JSON are two views of the same payload. /grade is a try-it sheet. The grader is meant to live in an agent or app via POST /v1/grade/slip or MCP grade_slip.

What if the game is still going?

The leg comes back in progress, not unmapped. Read current for how the bet is performing against the line so far — current margin on a spread, current total, or the player’s box. It settles to a win, loss, or push when the event is final.

Is this wagering advice?

No. Lumify grades settleable markets against official results. Attribution is always Graded by Lumify. It does not place bets.