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.
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.
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.
/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 / surface | Not this |
|---|---|
| A deterministic grade — won, lost, push, or in progress | A pick, a forecast, or wagering advice |
| Live events return in progress plus current vs the line | Waiting until the game is final to return anything |
| Ambiguous names stay unmapped with candidates | Auto-picking the first player, team, or game on the slate |
| Visual cards and the raw JSON payload | A consumer sportsbook UI |
| Meant to live in an agent or app | A 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.
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.
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.
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.
- Sheet — GET /grade, 20 / IP / day, CSRF, no key.
- API / MCP — POST /v1/grade/slip or grade_slip, Bearer key, 1 credit per call. Setup: /docs/ai.
How it grades
- 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.
- Resolve the player, team, and event. Unique binds go through. Collisions stay on candidates. This step never guesses.
- 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.
- 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.
# 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
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.
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.
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.
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.
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.
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.
No. Lumify grades settleable markets against official results. Attribution is always Graded by Lumify. It does not place bets.