Properties
| Name | Type | Description |
|---|---|---|
| legs | array | Structured legs (preferred). Cap 8. |
| text | object | Free-text slip (e.g. "Chase over 74.5 receiving yards tonight"). Date words (today, tonight, yesterday, last night, last Wednesday, this Thursday, or an ISO date) narrow the event window. A roster-tea |
| clues | object | Optional sport / league / event_id / team_id / team_text clues for free-text mode. |
| options | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/lumify-ai/json-schema/lumify-ai-grade-slip-request-schema.json",
"title": "GradeSlipRequest",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/lumify-ai-openapi.json#/components/schemas/GradeSlipRequest",
"properties": {
"legs": {
"items": {
"$ref": "#/$defs/GradeSlipLegInput"
},
"type": "array",
"title": "Legs",
"description": "Structured legs (preferred). Cap 8."
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Text",
"description": "Free-text slip (e.g. \"Chase over 74.5 receiving yards tonight\"). Date words (today, tonight, yesterday, last night, last Wednesday, this Thursday, or an ISO date) narrow the event window. A roster-team mention (CIN, Niners) is resolved first — a unique team_id scopes the player; ambiguous/not_found stays on team_resolve. vs/at on a player prop is the opponent and narrows the event, not the player's team. Game phrases also include Yankees to win, Yankees over 4.5 runs (team_total), and Over 52.5 Syracuse vs Pittsburgh. A colliding nickname plus a date promotes only the unique in-window team; a football-sized line will not pick a baseball club, and vs plus that date keeps the unique matchup. A tennis moneyline with a full player name (Novak Djokovic ML) binds as a player, not a team; vs names the opponent player. Last-name-only tennis stays unmapped. A last-name-only player prop (Bergeron over 1.5 shots on goal last night) grades when a date is present and that surname is unique in scope — a named sport, team, or event narrows it (Johnson nhl last night); with no such clue, uniqueness is across every prop sport visible to the key. No date, or a surname shared by more than one player in that scope, still stays unmapped unless a date is present and exactly one of those candidates played in the window (optionally vs a named opponent). \"anytime goal\"/\"anytime assist\" implies soccer_goals/soccer_assists over 0.5 with no explicit number; \"over a hit\"/\"over a homer\" implies hits/home_runs over 1.0. Graded only when player and event resolve uniquely. Otherwise unmapped with candidates on resolve / team_resolve / event_resolve — free text never invents a grade."
},
"clues": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Clues",
"description": "Optional sport / league / event_id / team_id / team_text clues for free-text mode."
},
"options": {
"$ref": "#/$defs/GradeSlipOptions"
}
},
"additionalProperties": true,
"type": "object",
"$defs": {
"GradeSlipLegInput": {
"properties": {
"event_id": {
"type": "integer",
"title": "Event Id",
"description": "Lumify event id."
},
"player_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Player Id",
"description": "Lumify player id from resolve_player or GET /v1/players. Required on player-prop markets. Forbidden on h2h, spreads, totals, and team_total."
},
"team_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Team Id",
"description": "Lumify team id from resolve_team or GET /v1/teams. Required on team_total. Forbidden on player-prop, h2h, spreads, and totals (those use side=home|away, not a team id)."
},
"market_key": {
"type": "string",
"title": "Market Key",
"description": "Settleable player-prop slug (e.g. receiving_yards), game market h2h | spreads | totals, or team_total. Common aliases are accepted: player_reception_yds -> receiving_yards, moneyline/ml -> h2h, spread -> spreads, total/ou -> totals, team totals/tt -> team_total."
},
"line": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Line",
"description": "Submitted ticket line to grade against the official score. Required on player-prop, spreads, totals, and team_total legs — signed to the side on the ticket (e.g. side=home with a home -3.5 favorite is line=-3.5, not 3.5). Omit on h2h."
},
"side": {
"type": "string",
"title": "Side",
"description": "Player-prop, totals, and team_total: over | under (o | u also accepted). Spreads: home | away — matches the signed line above, not the favorite. Moneyline: home | away, or draw on soccer three-way."
}
},
"additionalProperties": true,
"type": "object",
"required": [
"event_id",
"market_key",
"side"
],
"title": "GradeSlipLegInput"
},
"GradeSlipOptions": {
"properties": {
"include_branding": {
"type": "boolean",
"title": "Include Branding",
"description": "Attribution block is always present in this version.",
"default": true
},
"max_legs": {
"type": "integer",
"maximum": 8.0,
"minimum": 1.0,
"title": "Max Legs",
"description": "v0 cap is 8 legs.",
"default": 8
},
"auto_resolve": {
"type": "boolean",
"title": "Auto Resolve",
"description": "When free-text uniquely resolves a player and event, grade that leg. Ambiguous resolve never auto-picks a candidate.",
"default": true
}
},
"additionalProperties": true,
"type": "object",
"title": "GradeSlipOptions"
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/lumify-ai-grade-slip-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.