Lumify Sports Intelligence
Qué hace este MCP
Provides sports schedules, scores, odds, statistical splits, and explainable betting-confidence information across multiple sports.
Herramientas
Esquema de entrada
{'type': 'object', 'required': ['event_ids'], 'properties': {'bookmaker': {'type': 'string', 'description': 'Bookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada, all.'}, 'event_ids': {'type': 'array', 'items': {'type': 'integer'}, 'maxItems': 25, 'description': 'Event ids to fetch (max 25); duplicates are billed once.'}, 'include_odds': {'type': 'boolean', 'default': False, 'description': 'Inline current odds scoped by bookmaker (default: pinnacle). Does not add credits — each found event stays 1 credit.'}, 'include_intelligence': {'type': 'boolean', 'default': False, 'description': 'Inline bet intelligence on each event. Does not add credits.'}}}
Esquema de salida
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'events': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Full event detail (same shape as get_event) for every found id.'}, 'not_found': {'type': 'array', 'items': {'type': 'integer'}, 'description': "Requested event_ids that don't exist. Never billed."}}}
Esquema de entrada
{'type': 'object', 'required': ['calls'], 'properties': {'calls': {'type': 'array', 'items': {'type': 'object', 'required': ['tool'], 'properties': {'tool': {'type': 'string', 'description': 'Tool name to estimate, e.g. get_event, batch_get_events, get_odds.'}, 'arguments': {'type': 'object', 'description': "Same arguments you'd pass to that tool."}}}, 'maxItems': 50, 'minItems': 1}}}
Esquema de salida
{'type': 'object', 'properties': {'estimates': {'type': 'array', 'items': {'type': 'object', 'properties': {'note': {'type': ['string', 'null']}, 'tool': {'type': 'string'}, 'max_credits': {'type': 'integer'}, 'min_credits': {'type': 'integer'}}}}, 'total_max_credits': {'type': 'integer'}, 'total_min_credits': {'type': 'integer'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}, 'bookmaker': {'type': 'string', 'description': 'Bookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada, all.'}, 'include_odds': {'type': 'boolean', 'default': False, 'description': 'Inline current odds scoped by bookmaker (default: pinnacle). Does not add credits — the event call stays 1 credit.'}, 'include_intelligence': {'type': 'boolean', 'default': False, 'description': 'Inline bet intelligence. Does not add credits.'}}}
Esquema de salida
{'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'sport': {'type': 'string'}, 'venue': {'type': ['object', 'null']}, 'league': {'type': 'string'}, 'status': {'type': 'string'}, 'starts_at': {'type': 'string'}, 'updated_at': {'type': ['string', 'null']}, 'participants': {'type': 'array', 'items': {'type': 'object', 'properties': {'role': {'type': 'string'}, 'team': {'type': ['object', 'null']}, 'score': {'type': ['string', 'null']}, 'player': {'type': ['object', 'null']}, 'is_winner': {'type': ['boolean', 'null']}, 'participant_id': {'type': 'integer'}}}}, 'inprogress_since': {'type': ['string', 'null'], 'description': 'ISO-8601 UTC when status first became inprogress (first live tick). Null until then; stays set after final.'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}, 'exclude_status': {'type': 'string', 'description': 'Comma-separated statuses to drop, e.g. "ir" to hide injured-reserve/long-term-IL rows (long-standing roster designations, not late-breaking news). Valid values: out, doubtful, questionable, probable, day_to_day, ir, suspended, available.'}}}
Esquema de salida
{'type': 'object', 'properties': {'event_id': {'type': 'integer'}, 'injuries': {'type': 'array', 'items': {'type': 'object'}, 'description': "Per-player rows: player, player_id, team, team_id, status, previous_status, body_part, note, source_url, severity, last_changed_at. team/team_id prefer the player's current roster team when that team is a participant in this event."}, 'available': {'type': 'boolean'}, 'confirmed_at': {'type': ['string', 'null']}, 'next_check_at': {'type': ['string', 'null']}, 'last_checked_at': {'type': ['string', 'null']}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}, 'bookmaker': {'type': 'string', 'description': 'Ignored. Intelligence always reports the book the assessment was priced against. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada.'}}}
Esquema de salida
{'type': 'object', 'properties': {'bets': {'type': 'array', 'items': {'type': 'object', 'properties': {'ev': {'type': ['object', 'null'], 'description': 'Beta. Customer-facing EV estimate: {beta: true, book, price, ev_pct, kelly_fraction, quote_age_seconds, n_books}. Re-packages the same fair price gap for direct display. Moneyline only. n=1 Pinnacle is a valid fair (soccer/tennis). Null when the gap is ≤0, above 25% (stale-line), or only suppressed books remain (MLB ML × DK/FD proven null; BetMGM/Bet365/BetOnline unscreened).'}, 'best': {'type': ['object', 'null'], 'description': 'Highest price-gap book across edges_by_book: {book, price, edge, quote_age_seconds}. Tier C informational line-shopping.'}, 'edge': {'type': ['number', 'null'], 'description': 'Expected profit per 1 unit staked at market.price. Null while no model-backed edge is published (Stage 1). Present on customer surface for recommend gating.'}, 'fair': {'type': ['object', 'null'], 'description': 'Sharp-consensus fair: {probability, books, n_books, is_consensus}. MLB/NFL: Pinnacle+Circa; MLS/tennis: Pinnacle. Price-gap reference for edges_by_book/best.'}, 'tier': {'type': ['string', 'null'], 'description': "Confidence tier: 'very_high', 'strong', 'moderate', or 'avoid'. Null whenever edge is null. Present on MLB customer surface and all other shapes."}, 'phase': {'type': ['string', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'market': {'type': ['object', 'null'], 'description': 'Market quote: {price: American odds, line: handicap/total line or null for moneyline, book: bookmaker slug when known (always set for probability-model sports)}.'}, 'blend_w': {'type': ['number', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'drivers': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'p_model': {'type': ['number', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'signals': {'type': ['object', 'null'], 'description': 'Not published.'}, 'team_id': {'type': ['integer', 'null'], 'description': 'Set when this bet is about a team. Null for match-level tokens (OVER, UNDER, ML_DRAW) — a draw is not a bet on either team, so summing exposure by team_id never double-counts it.'}, 'bet_type': {'type': 'string', 'description': 'Canonical bet token, e.g. ML_HOME/ML_AWAY/ML_DRAW (soccer), ML_P1/ML_P2 (head-to-head sports), SPREAD_HOME/SPREAD_AWAY, OVER, UNDER.'}, 'coverage': {'type': ['number', 'null'], 'description': 'Not published.'}, 'interval': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'description': '[lo, hi] band around probability — how much evidence backs the number, not a statistical confidence interval.'}, 'p_market': {'type': ['number', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis). Use probability/fair_price.'}, 'alignment': {'type': ['object', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'narrative': {'type': ['string', 'null'], 'description': 'Pick-defense rationale for a selected main-line side. Present only when a matching forecasts[] row is selected: true. Null when no pick was made on this token.'}, 'player_id': {'type': ['integer', 'null'], 'description': 'Set when this bet is about an individual player. Null for team bets and match-level tokens.'}, 'rationale': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Not published. Top-level rationale is the event-level context overlay.'}, 'validator': {'type': ['object', 'null'], 'description': 'Not published.'}, 'fair_price': {'type': ['integer', 'null'], 'description': "American-odds fair price implied by probability — the vig-free line. Compare to market.price for the book's margin on this side."}, 'attribution': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Not published.'}, 'computed_at': {'type': ['string', 'null'], 'description': "ISO-8601 UTC time this bet's numbers last materially changed — not when last checked. Rows are only rewritten when price, line, or probability moves beyond a tolerance, so an older value means 'unchanged since', not 'stale'. Differs between bets on one event because markets move independently."}, 'player_name': {'type': ['string', 'null'], 'description': 'Display name of the player or team this bet is about. Null for match-level tokens. Duplicates players[player_role].name.'}, 'player_role': {'type': ['string', 'null'], 'description': "'home'/'away' or 'p1'/'p2'. Null for match-level tokens (OVER, UNDER, ML_DRAW)."}, 'probability': {'type': ['number', 'null'], 'description': 'Published probability for this outcome, 0-1. Outcomes of one market sum to 1. Customer surface for MLB, soccer, tennis, NFL.'}, 'sufficiency': {'type': ['number', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'edges_by_book': {'type': ['object', 'null'], 'description': 'Price gap versus fair.probability per soft book (fair.probability × decimal_odds − 1). Line-shopping metric: rank soft books by gap.'}, 'model_version': {'type': ['string', 'null'], 'description': 'Internal — omitted from customer payloads (MLB/soccer/tennis).'}, 'confidence_score': {'type': ['number', 'null'], 'description': 'Not published. Use probability.'}}}}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug for this event.'}, 'league': {'type': ['string', 'null'], 'description': 'League slug for this event, if any.'}, 'matchup': {'type': ['object', 'null'], 'description': 'Not returned. Use get_stats for pitcher/lineup Data.'}, 'players': {'type': 'object', 'description': 'Home/away (or p1/p2) participant identification, keyed by role: {role: {name, player_id, team_id}}.'}, 'event_id': {'type': 'integer', 'description': 'Lumify event ID this intelligence describes.'}, 'available': {'type': 'boolean', 'description': 'False when no predictive bets[] have been computed for this event yet. forecasts[] can still populate on MLB/NFL/NCAAF/NBA/NCAAB/NHL. Free only when available is false and forecasts is empty.'}, 'forecasts': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': ['number', 'null'], 'description': 'Posted line the model was scored against. Prop and totals main-line rows: Over/Under number. Spreads main-line rows: the spread number. Null on h2h/moneyline rows.'}, 'side': {'type': ['string', 'null'], 'description': "Prop rows: 'over' or 'under' — the more likely side given the player's shrunken rate versus line. Null on main-line rows — read the picked outcome from bet_type instead."}, 'books': {'type': 'object', 'description': 'American price for the picked outcome, keyed by bookmaker slug (e.g. {draftkings: -453}). Posted market price for the side/bet_type the model picked.'}, 'p_hit': {'type': 'number', 'description': "Model probability (0–1) that the picked outcome (side on prop rows, bet_type on main-line rows) hits. Prop rows: built from the player's shrunken counting-stat rate (Poisson vs the posted Over/Under). Optional research may nudge a prop's p_hit by at most ±0.03; the chosen side stays the same."}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug. Slate only.'}, 'league': {'type': ['string', 'null'], 'description': 'League slug, if any. Slate only.'}, 'market': {'type': 'string', 'description': 'Player-prop rows: prop category (counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions, passing_tds, rushing_tds, touchdowns (anytime-TD combo: rushing + receiving + defensive TDs), rush_rec_yards, pass_rush_yards. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals.'}, 'player': {'type': ['string', 'null'], 'description': 'Player display name from the priced line. Null on main-line rows with no player attribution (bet_type is a match-level token like OVER/UNDER/ML_DRAW).'}, 'drivers': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Prop rows: typically player.l10_rate — the recent-form rate that fed Poisson. Main-line rows would use a different namespace once a main-line forecast model ships.'}, 'input': {'type': ['number', 'null'], 'description': 'Measured rate/rating behind this driver, in native units.'}, 'effect': {'type': 'number', 'description': 'Signed shift in p_hit versus a baseline case on the same line. 0.0 on yardage markets.'}, 'direction': {'type': 'string', 'description': 'up / down / neutral from the sign of effect.'}}}, 'description': 'Signed contributions that moved p_hit. Read input as the measured rate/rating behind the pick and effect as how far it lifts the chosen outcome versus a baseline.'}, 'bet_type': {'type': ['string', 'null'], 'description': "Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. Tennis sets ML_P1/ML_P2 (moneyline), SPREAD_P1/SPREAD_P2 (game handicap), and OVER/UNDER (total games)."}, 'event_id': {'type': ['integer', 'null'], 'description': 'Lumify event ID. Present on list_forecasts; omitted on get_intelligence.forecasts (the event is the argument).'}, 'interval': {'type': 'array', 'items': {'type': 'number'}, 'description': '[lo, hi] stated band around p_hit. Wider when sufficiency is low. A stated evidence band, not a statistical confidence interval.'}, 'research': {'type': ['object', 'null'], 'description': 'Optional Deep Research overlay when the background job has written a row for this wager — every wager on the daily board (selected: true), plus other high-probability wagers (p_hit ≥ 0.80) in the catalog: {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why — on a selected main-line row it is also copied to bets[].narrative. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone.'}, 'selected': {'type': 'boolean', 'description': 'True when this wager is on the daily board (top conviction). On get_intelligence the array includes selected and the rest of the event catalog.'}, 'away_team': {'type': ['string', 'null'], 'description': 'Away team display name. Slate only.'}, 'home_team': {'type': ['string', 'null'], 'description': 'Home team display name. Slate only.'}, 'player_id': {'type': ['integer', 'null'], 'description': 'Lumify player ID. Bound by exact / Jr-stripped name match. Null on main-line rows with no player attribution.'}, 'conviction': {'type': 'number', 'description': 'Board rank key on 0–1: |p_hit−0.5|×2×sufficiency×research. A high p_hit on a thin sample ranks below a moderate p_hit on a long one. Highest conviction first on the daily slate.'}, 'player_role': {'type': ['string', 'null'], 'description': "'home'/'away' for team sports or 'p1'/'p2' for head-to-head sports, set only alongside a non-null bet_type. Null for player-prop rows and for match-level main-line tokens (OVER, UNDER, ML_DRAW)."}, 'reliability': {'type': 'string', 'description': 'Badge on this sport×market cell: emerging, moderate, high, or informational. v0 ships emerging for every wager.'}, 'sufficiency': {'type': 'number', 'description': "Evidence weight on 0–1: n/(n+12), where n is the recent-form game count (typically L10). A player with 10 games has sufficiency ≈ 0.45. The wager still ships; this field tells you how much of p_hit is earned from this player's own boxes."}, 'commence_time': {'type': ['string', 'null'], 'description': 'ISO-8601 UTC scheduled start. Slate only.'}, 'model_version': {'type': 'string', 'description': 'Scorer version, e.g. forecast-v0.'}}}, 'description': 'Forecasted wagers for this event (same object as list_forecasts) — a model prediction, not a beat-the-market claim. Player-prop rows on team sports; high-confidence main-line picks on tennis, NFL, NCAAF, MLB, and soccer via bet_type (ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_*/OVER/UNDER). selected marks the pick — high-confidence main-lines and the top-conviction prop rows on the daily slate. Coin-flip main-lines are not picked. A selected main-line research.note is copied to bets[].narrative. Read p_hit as P(the picked outcome hits). How + field catalog: https://lumify.ai/docs/forecasts'}, 'rationale': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Event-level factual pre-game matchup chips (injuries, recent form, lineup/availability news — sport-shaped). Written before kickoff; the request path only reads the stored row.'}, 'odds_source': {'type': ['string', 'null'], 'description': 'Bookmaker bets[].market prices were sourced from. For probability-model sports this is the book the assessment was priced against, not a bookmaker overlay; per-bet market.book is authoritative if they ever differ.'}, 'has_recommend': {'type': ['boolean', 'null'], 'description': 'True when at least one bet meets the recommendation threshold; null when intelligence has not been computed. False while Edge is not published (current MLB/soccer/tennis Stage 1) — a recommendation requires a non-null tier derived from edge.'}, 'match_overview': {'type': ['string', 'null'], 'description': 'Natural-language pre-game matchup preview — form, context, what to watch. Written before kickoff by a Search-backed overlay on every event sport (MLB, NFL, NCAAF, NBA, NCAAB, NHL, soccer, tennis); sport-shaped queries. The request path only reads the stored row. Null when the pre-kickoff job has not run or the fixture was not eligible.'}, 'intelligence_updated_at': {'type': ['string', 'null'], 'description': 'ISO-8601 UTC timestamp of the most recent change anywhere in this payload (max of per-bet computed_at). Use per-bet computed_at to reason about a specific bet.'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'clock': {'type': ['string', 'null']}, 'period': {'type': ['string', 'null']}, 'scores': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'role': {'type': 'string'}, 'score': {'type': ['string', 'null']}, 'is_winner': {'type': ['boolean', 'null']}, 'abbreviation': {'type': ['string', 'null']}, 'period_scores': {'type': 'array', 'items': {'type': 'object'}}}}}, 'status': {'type': 'string'}, 'event_id': {'type': 'integer'}, 'finished': {'type': 'boolean'}, 'updated_at': {'type': ['string', 'null']}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}, 'bookmaker': {'type': 'string', 'description': 'Bookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada, all, or a comma-separated list.'}, 'include_alts': {'type': 'boolean', 'description': 'Include alternate spread/total rungs. Default false (mains only).'}}}
Esquema de salida
{'type': 'object', 'properties': {'event_id': {'type': 'integer'}, 'available': {'type': 'boolean'}, 'bookmakers': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Per-book markets. Outcomes include is_main. In-play omits books that have not quoted since kickoff. Final events add result (won/lost/push/void) and close on the pre-kickoff point.'}, 'last_updated': {'type': ['string', 'null']}, 'fallback_bookmaker': {'type': 'string', 'description': 'The book actually returned when requested_bookmaker is present.'}, 'requested_bookmaker': {'type': 'string', 'description': "Present only when the default (no bookmaker arg) request fell back to a different book because Pinnacle has no line yet — always 'pinnacle' when present."}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Max line-movement entries to return. Default 50.'}, 'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}, 'bookmaker': {'type': 'string', 'description': 'Bookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada, all, or a comma-separated list.'}}}
Esquema de salida
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'event_id': {'type': 'integer'}, 'movements': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Odds snapshots over time; each entry carries its own timestamp.'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'clock': {'type': ['string', 'null'], 'description': 'Game clock from the live score snapshot.'}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug: nfl, ncaaf, nba, ncaab, mlb, soccer, or tennis.'}, 'period': {'type': ['string', 'null'], 'description': 'Current period from the live score snapshot.'}, 'status': {'type': ['string', 'null'], 'description': 'Event status (scheduled, inprogress, delayed, final, …).'}, 'event_id': {'type': 'integer', 'description': 'Lumify event ID.'}, 'available': {'type': 'boolean', 'description': "False when no first-half / first-five / first-set mains have been ingested; period_odds is empty and the call isn't billed."}, 'period_odds': {'type': 'array', 'items': {'type': 'object'}, 'description': 'One row per (scope, market, line). Fields: scope (1H, F5, or S1), market (first_half_spreads / first_half_totals), line (home-perspective for spreads), home_score, away_score, current (totals only), current_margin (spreads only), pct_of_line, settleable, scope_complete, result (totals), home_result / away_result (spreads), books ({book_slug: {home, away} or {over, under}}).'}}}
Esquema de entrada
{'type': 'object', 'required': ['player_id'], 'properties': {'player_id': {'type': 'integer', 'description': 'Player id, from search_players.'}}}
Esquema de salida
{'type': 'object', 'properties': {'id': {'type': 'integer', 'description': 'Lumify player ID.'}, 'slug': {'type': 'string', 'description': 'URL-safe unique slug.'}, 'sport': {'type': 'string', 'description': 'Sport slug, e.g. mlb, tennis, nfl.'}, 'position': {'type': ['string', 'null'], 'description': 'Roster position abbreviation when the sport has one (e.g. C, P, SS for MLB; QB, WR for NFL). Null for tennis and when not yet ingested.'}, 'rankings': {'type': ['object', 'null'], 'properties': {'points': {'type': ['integer', 'null'], 'description': 'ATP/WTA ranking points. Tennis only.'}, 'singles': {'type': ['integer', 'null'], 'description': 'ATP/WTA singles ranking. Tennis only.'}}, 'description': 'Sport ranking block. Tennis: {singles, points} from ATP/WTA standings. Null for every other sport. Tennis /stats also exposes ranking / ranking_points on the tennis player block.'}, 'birthdate': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD date of birth.'}, 'full_name': {'type': 'string', 'description': 'Display name.'}, 'height_cm': {'type': ['integer', 'null'], 'description': 'Height in centimetres. Null when not ingested.'}, 'image_url': {'type': ['string', 'null'], 'description': "Lumify media URL for the player headshot (https://lumify.ai/media/players/{sport}/{id}.{ext}). Null until the sport's headshot/enrichment job. Never a vendor CDN."}, 'is_active': {'type': 'boolean', 'description': 'False when deactivated or retired.'}, 'last_name': {'type': ['string', 'null']}, 'weight_kg': {'type': ['number', 'null'], 'description': 'Weight in kilograms. Null when not ingested.'}, 'first_name': {'type': ['string', 'null']}, 'handedness': {'type': ['string', 'null'], 'description': 'left | right | switch. Meaning is sport-specific (bats for MLB, shoots for NHL, playing hand for tennis). Null when unknown.'}, 'retired_at': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD retirement date when known.'}, 'country_code': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'current_team_id': {'type': ['integer', 'null'], 'description': 'Lumify team ID when the player is on a club roster. Null for tennis.'}, 'current_team_name': {'type': ['string', 'null'], 'description': 'Current team display name. Null for tennis.'}}}
Esquema de entrada
{'type': 'object', 'required': ['player_id'], 'properties': {'to': {'type': 'string', 'description': 'End date YYYY-MM-DD.'}, 'from': {'type': 'string', 'description': 'Start date YYYY-MM-DD.'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max events to return per page.'}, 'status': {'enum': ['scheduled', 'inprogress', 'final', 'postponed', 'cancelled', 'suspended', 'delayed', 'walkover'], 'type': 'string', 'description': 'Filter to events in this status.'}, 'after_id': {'type': 'integer', 'description': "Cursor: last event id from the previous page's next_after_id."}, 'player_id': {'type': 'integer', 'description': 'Player id, from search_players.'}}}
Esquema de salida
{'type': 'object', 'properties': {'data': {'type': 'array', 'items': {'type': 'object'}, 'description': "Events in the same shape as list_events' EventSummary."}, 'has_more': {'type': 'boolean'}, 'player_id': {'type': 'integer'}, 'next_after_id': {'type': ['integer', 'null'], 'description': 'Pass as after_id to fetch the next page; null on the last page.'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'clock': {'type': ['string', 'null'], 'description': 'Game clock from the live score snapshot.'}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug: nfl, ncaaf, nba, ncaab, nhl, or mlb.'}, 'period': {'type': ['string', 'null'], 'description': 'Current period from the live score snapshot.'}, 'status': {'type': ['string', 'null'], 'description': 'Event status (scheduled, inprogress, delayed, final, …).'}, 'event_id': {'type': 'integer', 'description': 'Lumify event ID.'}, 'available': {'type': 'boolean', 'description': "False when no player-prop mains have been ingested; player_props is empty and the call isn't billed."}, 'player_props': {'type': 'array', 'items': {'type': 'object'}, 'description': 'One row per (player, market, line). Fields: player, player_id (null if unmatched), market (prop category), line, current (this-event box count), pct_of_line, settleable, result (in_progress / over / under / push / dnp — box landed and this player has zero rows / no_stat — played but this slug never landed, unmatched, or box not landed yet; null when not settleable), books ({book_slug: {over, under}} American prices).'}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'event_id': {'type': 'integer'}, 'available': {'type': 'boolean'}, 'consensus': {'type': ['object', 'null'], 'description': 'Aggregate bets%/handle% across bookmakers.'}, 'bookmakers': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Per-bookmaker splits. Each item has bookmaker (odds slug), name, moneyline, spread, total.'}, 'captured_at': {'type': ['string', 'null']}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'match': {'type': ['object', 'null'], 'description': "Tennis only. Match context: surface, competition_id/name, tier, round (ingested labels like 'Round of 16'/'Quarterfinal'/'Final', not 'R16'), court (not currently populated), status, result_type, scoreboard (sets_won + per-set games; tiebreak_score not currently populated)."}, 'teams': {'type': ['object', 'null'], 'description': "Soccer/MLB/NFL/NCAAF/NBA/NCAAB/NHL only (home/away). Each side includes image_url (Lumify media URL, null until ingest; never a vendor CDN). Soccer: recent_form, team_strength, venue, rest_days, sos, lineup, rates_l5, rates_season. MLB: record, recent_form, rest_days, rates_l5/rates_season (incl. OBP/SLG/OPS/RBI/TB), starting_pitcher (post-box only), lineup, player_box (this event's per-player batting/pitching counting stats; final, in-progress, and delayed when rows exist). NFL/NCAAF: record (points_for/against), recent_form (points_scored/allowed), rest_days, rates_l5/rates_season (total/passing/rushing yards, attempts, turnovers, third_down_pct), player_box (one players[] line per athlete with passing/rushing/receiving/defense/kicking counts; final, in-progress, and delayed when rows exist). NBA/NCAAB: record (points_for/against), recent_form (points_scored/allowed), rest_days, rates_l5/rates_season (rebounds/assists/steals/blocks/turnovers/fouls, fg_pct/three_point_pct/free_throw_pct as ratio-of-sums), player_box (points/rebounds/assists/…; final, in-progress, and delayed when rows exist). NHL: record (goals_for/against), recent_form (goals_scored/allowed), rest_days, rates_l5/rates_season (shots_on_goal/hits/penalty_minutes/power_play_goals/giveaways/takeaways/blocked_shots), player_box (skaters[] + goalies[]; assists/hits remapped from assists_nhl/hits_nhl; final, in-progress, and delayed when rows exist). Settleables stay on get_player_props. Absent on tennis responses — use players instead."}, 'players': {'type': ['object', 'null'], 'description': 'Tennis only (player_1/player_2). Each side: player_id, name, country_code, ranking, ranking_points, rest_days, recent_form, surface_form, record (tour_lookback wins/losses), career_rates (Stage-2 serve/return percentages; null until ingest), career_surface (Stage-2 match-surface W/L over windows.career_surface_years; null when empty). History windows exclude walkovers (unplayed) and include retirements.'}, 'profile': {'type': 'string', 'description': "Soccer only. 'world_cup' or 'club'."}, 'windows': {'type': ['object', 'null'], 'description': "Explicit sample depths. Soccer: recent_form (5), rates_l5 (5), rates_season ('season'), head_to_head (10), sos (5). MLB/NFL/NCAAF/NBA/NCAAB/NHL: recent_form (5), rates_l5 (5), rates_season ('season'), head_to_head (10). Tennis: recent_form (10), surface_form (10), head_to_head (10), record_lookback_days (365), career_surface_years (3)."}, 'event_id': {'type': 'integer', 'description': 'Lumify event ID.'}, 'available': {'type': 'boolean', 'description': "False when participants haven't resolved, or tennis draw_type is not exactly 'singles' (doubles/qualifying out of scope); every other field is omitted and the call isn't billed."}, 'draw_type': {'type': ['string', 'null'], 'description': "Tennis only. Always 'singles' when available is true. Values other than 'singles' (including 'doubles' and 'qualifying') return available:false."}, 'league_slug': {'type': ['string', 'null'], 'description': "League/tour slug, e.g. 'mls', 'mlb', 'nfl', 'atp', 'wta'."}, 'head_to_head': {'type': ['object', 'null'], 'description': "Past meetings: {window, meetings, total}. Soccer: {home_goals, away_goals}. MLB: {home_runs, away_runs}. NFL/NCAAF/NBA/NCAAB: {home_points, away_points}. NHL: {home_goals, away_goals}. Tennis: {event_id, starts_at, surface, winner_role, sets_won} relative to this fixture's player_1/player_2 (walkovers excluded)."}, 'neutral_site': {'type': ['boolean', 'null'], 'description': 'Soccer only. Whether this fixture is at a neutral venue. Informational here; factored into home-advantage scoring on get_intelligence.'}, 'league_context': {'type': ['object', 'null'], 'description': "Soccer only. {avg_goals_per_team}: league-wide baseline goals/team/game, used by get_intelligence's attack/defense scoring. Null for fixed-baseline competitions."}}}
Esquema de entrada
{'type': 'object', 'required': ['team_id'], 'properties': {'team_id': {'type': 'integer', 'description': 'Team id, from list_teams.'}}}
Esquema de salida
{'type': 'object', 'properties': {'id': {'type': 'integer'}, 'city': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'sport': {'type': 'string'}, 'venue': {'type': ['object', 'null']}, 'league': {'type': ['string', 'null']}, 'division': {'type': ['string', 'null']}, 'image_url': {'type': ['string', 'null'], 'description': 'Lumify media URL for the team logo (https://lumify.ai/media/teams/{sport}/{id}.png). Null until ingest. Never a vendor CDN.'}, 'is_active': {'type': 'boolean'}, 'conference': {'type': ['string', 'null']}, 'abbreviation': {'type': ['string', 'null']}}}
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'integer', 'description': 'Event id, from list_events, query_events, or search results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'clock': {'type': ['string', 'null'], 'description': 'Game clock from the live score snapshot.'}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug: nfl, ncaaf, mlb, or soccer.'}, 'period': {'type': ['string', 'null'], 'description': 'Current period from the live score snapshot.'}, 'status': {'type': ['string', 'null'], 'description': 'Event status (scheduled, inprogress, delayed, final, …).'}, 'event_id': {'type': 'integer', 'description': 'Lumify event ID.'}, 'available': {'type': 'boolean', 'description': "False when no team-total mains have been ingested; team_props is empty and the call isn't billed."}, 'team_props': {'type': 'array', 'items': {'type': 'object'}, 'description': 'One row per (team, line). Fields: team, team_id, side (home/away), market (team_total), line, current (this-event team score), pct_of_line, settleable, result (in_progress / over / under / push, or null), books ({book_slug: {over, under}} American prices).'}}}
Esquema de entrada
{'type': 'object', 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['event_id', 'market_key', 'side'], 'properties': {'line': {'type': 'number', 'description': 'Required on props, spreads, totals, and team_total. Omit on h2h. Signed to the submitted side, not the favorite — side=home with a home -3.5 favorite is line=-3.5.'}, 'side': {'enum': ['home', 'away', 'over', 'under', 'draw'], 'type': 'string', 'description': 'Props and totals: over | under (o | u also accepted). Spreads: home | away, matching the signed line above. Moneyline: home | away, or draw on soccer only.'}, 'team_id': {'type': 'integer', 'description': 'Required on team_total. Forbidden on player-prop, h2h, spreads, and totals.'}, 'event_id': {'type': 'integer'}, 'player_id': {'type': 'integer', 'description': 'Required on player-prop markets. Forbidden on h2h, spreads, totals, and team_total.'}, 'market_key': {'type': 'string', 'description': 'Player-prop slug (e.g. receiving_yards), game market h2h | spreads | totals, or team_total. Aliases accepted: player_reception_yds -> receiving_yards, moneyline/ml -> h2h, spread -> spreads, total/ou -> totals, team totals/tt -> team_total.'}}}, 'maxItems': 8}, 'text': {'type': 'string', 'description': 'Free-text slip (e.g. Chase over 74.5 receiving yards tonight, or Chiefs -3.5 / Over 47.5 vs Bills / Yankees ML / Yankees to win / Yankees over 4.5 runs / Over 52.5 Syracuse vs Pittsburgh / Novak Djokovic ML / Mbappe anytime goal / Judge over a hit / Bergeron over 1.5 shots on goal last night). Date words (today, tonight, yesterday, last night, last Wednesday, this Thursday, or an ISO date) narrow the event. A roster-team span is resolved first; unique team_id scopes a player or binds a game/team-total leg, and ambiguous/not_found stays on team_resolve. vs/at on a player prop is the opponent, not the player\'s team. A tennis moneyline leftover is a player; vs is the opponent player. "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. A last-name-only player prop grades when a date is present and the surname is unique in scope (a named sport, team, or event narrows it; otherwise every visible prop sport); no date, or a shared surname in that scope, still refuses. Graded only when team/player and event are unique. A bare Over 47.5 stays unmapped.'}, 'clues': {'type': 'object', 'properties': {'sport': {'type': 'string'}, 'league': {'type': 'string'}, 'team_id': {'type': 'integer'}, 'event_id': {'type': 'integer'}, 'team_text': {'type': 'string'}}, 'description': 'Optional sport / league / event_id / team_id / team_text hints for free-text mode.'}}}
Esquema de salida
{'type': 'object', 'properties': {'legs': {'type': 'array', 'items': {'type': 'object'}}, 'status': {'type': 'string', 'description': 'graded | partial | pending | unmapped'}, 'honesty': {'type': 'object'}, 'slip_id': {'type': ['string', 'null']}, 'summary': {'type': 'object'}, 'branding': {'type': 'object'}}}
Esquema de entrada
{'type': 'object', 'required': ['sport'], 'properties': {'book': {'type': 'string', 'description': 'Restrict opportunities to one sportsbook slug (e.g. fanduel).'}, 'limit': {'type': 'integer', 'description': 'Max opportunities to return (1–200). Default 50.'}, 'sport': {'type': 'string', 'description': 'Sport slug: soccer, mlb, tennis, nfl, or ncaaf.'}, 'league': {'type': 'string', 'description': 'Optional league slug (mls, epl, atp, …). Soccer without a league scans every published soccer league (MLS + big-five).'}, 'market': {'enum': ['h2h', 'spreads', 'totals'], 'type': 'string', 'description': 'Main-line family: h2h (default, moneyline), spreads, or totals. Tennis + totals returns 400.'}, 'min_ev': {'type': 'number', 'description': 'Minimum EV% to include. Default 0. Clamped to 0–25.'}}}
Esquema de salida
{'type': 'object', 'properties': {'beta': {'type': 'boolean', 'description': 'Always true.'}, 'book': {'type': ['string', 'null'], 'description': 'Book filter, or null.'}, 'sport': {'type': 'string', 'description': 'Sport slug this scan was run for.'}, 'total': {'type': 'integer', 'description': 'Count of opportunities on this page.'}, 'league': {'type': ['string', 'null'], 'description': 'League filter, or null for the whole sport.'}, 'market': {'type': 'string', 'description': 'h2h, spreads, or totals — the family scanned.'}, 'max_ev': {'type': 'number', 'description': 'Stale-line cap (25).'}, 'min_ev': {'type': 'number', 'description': 'Minimum EV% applied.'}, 'opportunities': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Positive-EV main-line rows: {event_id, sport, league, commence_time, home_team, away_team, side, team, bet_type, line, fair_probability, ev}.'}}}
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'UTC end date YYYY-MM-DD (inclusive).'}, 'date': {'type': 'string', 'description': 'UTC date YYYY-MM-DD (single day).'}, 'from': {'type': 'string', 'description': 'UTC start date YYYY-MM-DD.'}, 'sort': {'enum': ['time', 'status'], 'type': 'string', 'default': 'time', 'description': 'Sort order. sort=status is incompatible with after_id.'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max events to return per page.'}, 'sport': {'type': 'string', 'description': 'Sport slug, e.g. mlb, nfl, tennis, soccer.'}, 'league': {'type': 'string', 'description': 'League slug, e.g. nfl, atp, mls.'}, 'status': {'enum': ['scheduled', 'inprogress', 'final', 'postponed', 'cancelled', 'suspended', 'delayed', 'walkover'], 'type': 'string', 'description': 'Filter to events in this status.'}, 'team_id': {'type': 'integer', 'description': 'Filter to events where this team participates. Resolve ids via list_teams.'}, 'after_id': {'type': 'integer', 'description': "Cursor: return events with id > after_id (from the previous page's next_after_id)."}, 'season_id': {'type': 'integer', 'description': 'Filter by season ID (from list_seasons).'}, 'has_recommend': {'type': 'boolean', 'description': 'When true, only events with at least one recommended bet.'}, 'include_scores': {'type': 'boolean', 'default': False, 'description': 'Inline participants + scores in each event (intended for small result sets). Shares the 20/min score-poll budget with get_live_score.'}}}
Esquema de salida
{'type': 'object', '$defs': {'EventSummary': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'clock': {'type': ['string', 'null']}, 'sport': {'type': 'string'}, 'venue': {'type': ['object', 'null']}, 'league': {'type': 'string'}, 'period': {'type': ['string', 'null']}, 'status': {'type': 'string'}, 'season_id': {'type': ['integer', 'null']}, 'starts_at': {'type': 'string', 'description': 'ISO-8601 UTC start time.'}, 'inprogress_since': {'type': ['string', 'null'], 'description': 'ISO-8601 UTC when status first became inprogress (first live tick). Null until then; stays set after final.'}}}}, 'properties': {'total': {'type': 'integer'}, 'events': {'type': 'array', 'items': {'$ref': '#/$defs/EventSummary'}}, 'next_after_id': {'type': ['integer', 'null'], 'description': 'Pass as after_id to fetch the next page; null on the last page.'}}}
Esquema de entrada
{'type': 'object', 'required': ['sport'], 'properties': {'date': {'type': 'string', 'description': 'UTC slate date YYYY-MM-DD. Defaults to today UTC.'}, 'limit': {'type': 'integer', 'description': 'Max wagers (1–100). Default 25.'}, 'sport': {'type': 'string', 'description': 'Sport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, tennis, or soccer.'}, 'market': {'enum': ['h2h', 'spreads', 'totals'], 'type': 'string', 'description': 'Main-line family filter (h2h, spreads, or totals). Main-line sports publish a high-confidence side of each family when the lean clears the coin-flip gate. Ignored on prop-only sports (nba, ncaab, nhl).'}}}
Esquema de salida
{'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'UTC slate date (YYYY-MM-DD).'}, 'sport': {'type': 'string', 'description': 'Sport slug this slate was scored for.'}, 'total': {'type': 'integer', 'description': 'Count of wagers on this page.'}, 'wagers': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': ['number', 'null'], 'description': 'Posted line the model was scored against. Prop and totals main-line rows: Over/Under number. Spreads main-line rows: the spread number. Null on h2h/moneyline rows.'}, 'side': {'type': ['string', 'null'], 'description': "Prop rows: 'over' or 'under' — the more likely side given the player's shrunken rate versus line. Null on main-line rows — read the picked outcome from bet_type instead."}, 'books': {'type': 'object', 'description': 'American price for the picked outcome, keyed by bookmaker slug (e.g. {draftkings: -453}). Posted market price for the side/bet_type the model picked.'}, 'p_hit': {'type': 'number', 'description': "Model probability (0–1) that the picked outcome (side on prop rows, bet_type on main-line rows) hits. Prop rows: built from the player's shrunken counting-stat rate (Poisson vs the posted Over/Under). Optional research may nudge a prop's p_hit by at most ±0.03; the chosen side stays the same."}, 'sport': {'type': ['string', 'null'], 'description': 'Sport slug. Slate only.'}, 'league': {'type': ['string', 'null'], 'description': 'League slug, if any. Slate only.'}, 'market': {'type': 'string', 'description': 'Player-prop rows: prop category (counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions, passing_tds, rushing_tds, touchdowns (anytime-TD combo: rushing + receiving + defensive TDs), rush_rec_yards, pass_rush_yards. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals.'}, 'player': {'type': ['string', 'null'], 'description': 'Player display name from the priced line. Null on main-line rows with no player attribution (bet_type is a match-level token like OVER/UNDER/ML_DRAW).'}, 'drivers': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Prop rows: typically player.l10_rate — the recent-form rate that fed Poisson. Main-line rows would use a different namespace once a main-line forecast model ships.'}, 'input': {'type': ['number', 'null'], 'description': 'Measured rate/rating behind this driver, in native units.'}, 'effect': {'type': 'number', 'description': 'Signed shift in p_hit versus a baseline case on the same line. 0.0 on yardage markets.'}, 'direction': {'type': 'string', 'description': 'up / down / neutral from the sign of effect.'}}}, 'description': 'Signed contributions that moved p_hit. Read input as the measured rate/rating behind the pick and effect as how far it lifts the chosen outcome versus a baseline.'}, 'bet_type': {'type': ['string', 'null'], 'description': "Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. Tennis sets ML_P1/ML_P2 (moneyline), SPREAD_P1/SPREAD_P2 (game handicap), and OVER/UNDER (total games)."}, 'event_id': {'type': ['integer', 'null'], 'description': 'Lumify event ID. Present on list_forecasts; omitted on get_intelligence.forecasts (the event is the argument).'}, 'interval': {'type': 'array', 'items': {'type': 'number'}, 'description': '[lo, hi] stated band around p_hit. Wider when sufficiency is low. A stated evidence band, not a statistical confidence interval.'}, 'research': {'type': ['object', 'null'], 'description': 'Optional Deep Research overlay when the background job has written a row for this wager — every wager on the daily board (selected: true), plus other high-probability wagers (p_hit ≥ 0.80) in the catalog: {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why — on a selected main-line row it is also copied to bets[].narrative. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone.'}, 'selected': {'type': 'boolean', 'description': 'True when this wager is on the daily board (top conviction). On get_intelligence the array includes selected and the rest of the event catalog.'}, 'away_team': {'type': ['string', 'null'], 'description': 'Away team display name. Slate only.'}, 'home_team': {'type': ['string', 'null'], 'description': 'Home team display name. Slate only.'}, 'player_id': {'type': ['integer', 'null'], 'description': 'Lumify player ID. Bound by exact / Jr-stripped name match. Null on main-line rows with no player attribution.'}, 'conviction': {'type': 'number', 'description': 'Board rank key on 0–1: |p_hit−0.5|×2×sufficiency×research. A high p_hit on a thin sample ranks below a moderate p_hit on a long one. Highest conviction first on the daily slate.'}, 'player_role': {'type': ['string', 'null'], 'description': "'home'/'away' for team sports or 'p1'/'p2' for head-to-head sports, set only alongside a non-null bet_type. Null for player-prop rows and for match-level main-line tokens (OVER, UNDER, ML_DRAW)."}, 'reliability': {'type': 'string', 'description': 'Badge on this sport×market cell: emerging, moderate, high, or informational. v0 ships emerging for every wager.'}, 'sufficiency': {'type': 'number', 'description': "Evidence weight on 0–1: n/(n+12), where n is the recent-form game count (typically L10). A player with 10 games has sufficiency ≈ 0.45. The wager still ships; this field tells you how much of p_hit is earned from this player's own boxes."}, 'commence_time': {'type': ['string', 'null'], 'description': 'ISO-8601 UTC scheduled start. Slate only.'}, 'model_version': {'type': 'string', 'description': 'Scorer version, e.g. forecast-v0.'}}}, 'description': 'Selected forecasted wagers, highest conviction first. Read p_hit as P(the picked outcome — side on prop rows, bet_type on main-line rows — hits); conviction is the board rank. How + field catalog: https://lumify.ai/docs/forecasts'}, 'reliability': {'type': 'string', 'description': 'Default badge on this slate. v0 ships emerging; each wager repeats the same field.'}, 'model_version': {'type': 'string', 'description': 'Scorer version (forecast-v0).'}}}
Esquema de entrada
{'type': 'object', 'properties': {'sport': {'type': 'string', 'description': 'Filter by sport slug, e.g. nhl, nba, soccer.'}, 'current_only': {'type': 'boolean', 'default': True, 'description': 'Return only currently active seasons (default true). Pass false for historical seasons.'}}}
Esquema de salida
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'seasons': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': ['string', 'null']}, 'year': {'type': ['integer', 'null']}, 'phase': {'type': ['string', 'null']}, 'sport': {'type': 'object'}, 'league': {'type': 'object'}, 'end_date': {'type': ['string', 'null']}, 'is_current': {'type': 'boolean'}, 'start_date': {'type': ['string', 'null']}}}}}}
Esquema de entrada
{'type': 'object', 'properties': {'active_only': {'type': 'boolean', 'default': True, 'description': 'When true (default), omit sports with no active coverage.'}}}
Esquema de salida
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'sports': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'leagues': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'current_season': {'type': ['object', 'null']}}}}, 'is_team_sport': {'type': 'boolean'}}}}}}
Esquema de entrada
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Team name search (partial match).'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max teams to return per page.'}, 'sport': {'type': 'string', 'description': 'Sport slug, e.g. nfl, nba, soccer.'}, 'active': {'type': 'boolean', 'description': 'Filter by active status.'}, 'league': {'type': 'string', 'description': 'League slug, e.g. nfl, mls.'}, 'country': {'type': 'string', 'description': 'ISO country code, e.g. USA.'}, 'after_id': {'type': 'integer', 'description': "Cursor: last team id from the previous page's next_after_id."}, 'division': {'type': 'string', 'description': 'Division name, e.g. AFC East.'}, 'conference': {'type': 'string', 'description': 'Conference name, e.g. AFC, Eastern.'}}}
Esquema de salida
{'type': 'object', '$defs': {'Team': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'city': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'sport': {'type': 'string'}, 'state': {'type': ['string', 'null']}, 'venue': {'type': ['object', 'null']}, 'league': {'type': ['string', 'null']}, 'division': {'type': ['string', 'null']}, 'image_url': {'type': ['string', 'null'], 'description': 'Lumify media URL for the team logo (https://lumify.ai/media/teams/{sport}/{id}.png). Null until ingest. Never a vendor CDN.'}, 'is_active': {'type': 'boolean'}, 'conference': {'type': ['string', 'null']}, 'short_name': {'type': ['string', 'null']}, 'abbreviation': {'type': ['string', 'null']}, 'country_code': {'type': ['string', 'null']}}}}, 'properties': {'data': {'type': 'array', 'items': {'$ref': '#/$defs/Team'}}, 'has_more': {'type': 'boolean'}, 'next_after_id': {'type': ['integer', 'null'], 'description': 'Pass as after_id to fetch the next page; null on the last page.'}}}
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Overrides any limit parsed from the query text. Max 100.'}, 'query': {'type': 'string', 'description': "Free text, e.g. 'live nfl games today'."}}}
Esquema de salida
{'type': 'object', 'properties': {'query': {'type': 'string', 'description': 'The original natural-language query text.'}, 'total': {'type': 'integer'}, 'events': {'type': 'array', 'items': {'type': 'object'}}, 'interpreted': {'type': 'object', 'description': 'The list_events-equivalent filters parsed from the query text (sport, status, date, from, to, limit).'}, 'next_after_id': {'type': ['integer', 'null']}, 'equivalent_request': {'type': 'string', 'description': 'The literal GET /v1/events request this query was translated to.'}, 'unrecognized_terms': {'type': 'array', 'items': {'type': 'string'}, 'description': "Query words that didn't map to a known filter."}}}
Esquema de entrada
{'type': 'object', 'properties': {'clues': {'type': 'object', 'properties': {'team_id': {'type': 'integer'}, 'end_date': {'type': 'string', 'description': 'UTC YYYY-MM-DD. Requires start_date.'}, 'event_id': {'type': 'integer'}, 'player_id': {'type': 'integer'}, 'start_date': {'type': 'string', 'description': 'UTC YYYY-MM-DD. Requires end_date.'}, 'opponent_team_id': {'type': 'integer', 'description': 'Requires team_id or player_id.'}}, 'description': 'event_id (ground truth), or player_id/team_id plus a date window.'}, 'options': {'type': 'object', 'properties': {'max_candidates': {'type': 'integer', 'default': 5, 'maximum': 25, 'minimum': 1}, 'min_confidence': {'type': 'number', 'default': 0.85, 'maximum': 1, 'minimum': 0}}}}}
Esquema de salida
{'type': 'object', 'properties': {'sport': {'type': ['string', 'null']}, 'league': {'type': ['string', 'null']}, 'method': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'resolved | ambiguous | not_found | error'}, 'message': {'type': ['string', 'null']}, 'event_id': {'type': ['integer', 'null']}, 'away_team': {'type': ['string', 'null']}, 'home_team': {'type': ['string', 'null']}, 'starts_at': {'type': ['string', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object'}}, 'clues_used': {'type': 'array', 'items': {'type': 'string'}}, 'confidence': {'type': ['number', 'null']}, 'event_status': {'type': ['string', 'null']}, 'match_reasons': {'type': 'array', 'items': {'type': 'string'}}, 'participant_conflict': {'type': 'boolean'}}}
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'clues': {'type': 'object', 'properties': {'sport': {'type': 'string', 'description': 'Sport slug, e.g. nfl.'}, 'vendor': {'type': 'string'}, 'team_id': {'type': 'integer'}, 'event_id': {'type': 'integer'}, 'position': {'type': 'string'}, 'team_text': {'type': 'string', 'description': 'Team abbreviation, slug, or name.'}, 'vendor_player_key': {'type': 'string'}}, 'description': 'Optional sport, team, event, or position clues.'}, 'query': {'type': 'string', 'description': 'Messy player name or fragment, e.g. J. Chase.'}, 'options': {'type': 'object', 'properties': {'mode': {'enum': ['strict', 'permissive', 'ingest'], 'type': 'string', 'default': 'strict'}, 'max_candidates': {'type': 'integer', 'default': 5, 'maximum': 25, 'minimum': 1}, 'min_confidence': {'type': 'number', 'default': 0.85, 'maximum': 1, 'minimum': 0}}}}}
Esquema de salida
{'type': 'object', 'properties': {'sport': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'resolved | ambiguous | not_found | error'}, 'message': {'type': ['string', 'null']}, 'team_id': {'type': ['integer', 'null']}, 'player_id': {'type': ['integer', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object'}}, 'clues_used': {'type': 'array', 'items': {'type': 'string'}}, 'confidence': {'type': ['number', 'null']}, 'display_name': {'type': ['string', 'null']}, 'match_reasons': {'type': 'array', 'items': {'type': 'string'}}}}
Esquema de entrada
{'type': 'object', 'properties': {'clues': {'type': 'object', 'properties': {'sport': {'type': 'string', 'description': 'Sport slug, e.g. nfl.'}, 'league': {'type': 'string', 'description': 'League slug, e.g. mls.'}, 'team_id': {'type': 'integer'}, 'event_id': {'type': 'integer'}, 'player_id': {'type': 'integer'}}, 'description': 'Optional sport, league, event, player, or team-id clues.'}, 'query': {'type': 'string', 'description': 'Team string, e.g. Niners, CIN, NY Giants.'}, 'options': {'type': 'object', 'properties': {'max_candidates': {'type': 'integer', 'default': 5, 'maximum': 25, 'minimum': 1}, 'min_confidence': {'type': 'number', 'default': 0.85, 'maximum': 1, 'minimum': 0}}}}}
Esquema de salida
{'type': 'object', 'properties': {'sport': {'type': ['string', 'null']}, 'league': {'type': ['string', 'null']}, 'method': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'resolved | ambiguous | not_found | error'}, 'message': {'type': ['string', 'null']}, 'team_id': {'type': ['integer', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object'}}, 'clues_used': {'type': 'array', 'items': {'type': 'string'}}, 'confidence': {'type': ['number', 'null']}, 'abbreviation': {'type': ['string', 'null']}, 'display_name': {'type': ['string', 'null']}, 'match_reasons': {'type': 'array', 'items': {'type': 'string'}}, 'sport_conflict': {'type': 'boolean'}}}
Esquema de entrada
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Name search (partial match).'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max players to return per page.'}, 'sport': {'type': 'string', 'description': 'Sport slug, e.g. tennis, nba.'}, 'active': {'type': 'boolean', 'description': 'Filter by active status.'}, 'ranked': {'type': 'boolean', 'description': 'If true, only tennis players with an ATP/WTA singles ranking (rankings.singles).'}, 'country': {'type': 'string', 'description': 'ISO 3166-1 alpha-3 country code, e.g. USA.'}, 'after_id': {'type': 'integer', 'description': "Cursor: last player id from the previous page's next_after_id."}}}
Esquema de salida
{'type': 'object', '$defs': {'Player': {'type': 'object', 'properties': {'id': {'type': 'integer', 'description': 'Lumify player ID.'}, 'slug': {'type': 'string', 'description': 'URL-safe unique slug.'}, 'sport': {'type': 'string', 'description': 'Sport slug, e.g. mlb, tennis, nfl.'}, 'position': {'type': ['string', 'null'], 'description': 'Roster position abbreviation when the sport has one (e.g. C, P, SS for MLB; QB, WR for NFL). Null for tennis and when not yet ingested.'}, 'rankings': {'type': ['object', 'null'], 'properties': {'points': {'type': ['integer', 'null'], 'description': 'ATP/WTA ranking points. Tennis only.'}, 'singles': {'type': ['integer', 'null'], 'description': 'ATP/WTA singles ranking. Tennis only.'}}, 'description': 'Sport ranking block. Tennis: {singles, points} from ATP/WTA standings. Null for every other sport. Tennis /stats also exposes ranking / ranking_points on the tennis player block.'}, 'birthdate': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD date of birth.'}, 'full_name': {'type': 'string', 'description': 'Display name.'}, 'height_cm': {'type': ['integer', 'null'], 'description': 'Height in centimetres. Null when not ingested.'}, 'image_url': {'type': ['string', 'null'], 'description': "Lumify media URL for the player headshot (https://lumify.ai/media/players/{sport}/{id}.{ext}). Null until the sport's headshot/enrichment job. Never a vendor CDN."}, 'is_active': {'type': 'boolean', 'description': 'False when deactivated or retired.'}, 'last_name': {'type': ['string', 'null']}, 'weight_kg': {'type': ['number', 'null'], 'description': 'Weight in kilograms. Null when not ingested.'}, 'first_name': {'type': ['string', 'null']}, 'handedness': {'type': ['string', 'null'], 'description': 'left | right | switch. Meaning is sport-specific (bats for MLB, shoots for NHL, playing hand for tennis). Null when unknown.'}, 'retired_at': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD retirement date when known.'}, 'country_code': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'current_team_id': {'type': ['integer', 'null'], 'description': 'Lumify team ID when the player is on a club roster. Null for tennis.'}, 'current_team_name': {'type': ['string', 'null'], 'description': 'Current team display name. Null for tennis.'}}}}, 'properties': {'data': {'type': 'array', 'items': {'$ref': '#/$defs/Player'}}, 'has_more': {'type': 'boolean'}, 'next_after_id': {'type': ['integer', 'null'], 'description': 'Pass as after_id to fetch the next page; null on the last page.'}}}
Cambios recientes en herramientas
Servidores MCP similares
LiveDataLink
Exposes public-data tools covering economics, labor, banking, transport, books, legal opinions, carriers, environmental data, and…
AlpineDataWorks Intelligence Server
Provides economic, market, supply-chain, real-estate, energy, consumer, labor, and other scored intelligence indices with histori…
SharksAPI.AI
Provides marketing analytics and actions across GA4, Search Console, Google Ads, social channels, SEO, WordPress, and marketing p…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…