Monitor player availability for an upcoming event
How the injury monitor works — late-breaking player availability for an upcoming event, not a league-wide injury dump and not an in-game feed. Endpoint and MCP tool stay on the API reference. This page is the how-to agents and builders cite.
Lumify’s injury monitor watches for late-breaking status changes tied to a specific event ID. Agents call GET /v1/events/{id}/injuries (MCP get_injuries) or subscribe to webhook event_types: ["injury"] for material/critical transitions. Outputs are structured availability for builders wiring sports and predictive apps — not a human dashboard and not wagering advice.
Beta today: NFL and MLB, with more sports rolling out. Other sports may return available: false until monitoring is live for that slate. No in-game feed.
What this is (and is not)
| This page / surface | Not this |
|---|---|
| Event-scoped late-breaking availability | A full-league static IL / IR dump refreshed on a fixed timer |
| Status + severity + previous_status on one event ID | A substitute for official league reports as legal truth |
| Webhook push on material/critical changes | Push on every info-level reconfirm |
| Same event graph as odds, props, intelligence | A separate injury-only product with different player IDs |
| Agent / MCP / REST | A consumer scoreboard UI |
Lumify’s wedge is per-event monitoring with severity, odds-move triggers, and agent webhooks — Beta NFL and MLB.
How the monitor runs
- Resolve an upcoming event (list_events / query_events / get_event).
- The monitor starts watching inside a sport-specific pre-kickoff window (below).
- Each check may write or refresh structured rows on GET /v1/events/{id}/injuries.
- available: false means no first report yet — not charged.
- Material/critical transitions can also fire a signed webhook (event_types includes injury).
Cadence (Beta)
| Sport | Watch window | Extra triggers | Pre-kick confirmation |
|---|---|---|---|
| NFL | Starts ~4.5 days before kickoff (sparse Wed/Thu practice-report checks), then regular hours-to-start cadence | Main-market line move ≥ 20 American-odds points or ≥ 1.0 point (moneyline / spread / total) | ~T-90 min |
| MLB | 48-hour window before first pitch | Same odds-move rule | ~T-2.5 h |
Webhook payload trigger is one of cadence / odds_move / checkpoint / early_report when a delivery fires. early_report is the NFL Wednesday/Thursday practice-report snap (T-96h / T-72h).
REST — first call
Instant trial key (no signup): /docs/ai. Persistent key: /register.
# 1) Find an upcoming NFL or MLB event curl "https://lumify.ai/v1/events?sport=nfl&status=scheduled&limit=5" \ -H "Authorization: Bearer YOUR_API_KEY" # 2) Pull injury / availability for that event curl "https://lumify.ai/v1/events/{id}/injuries" \ -H "Authorization: Bearer YOUR_API_KEY" # Optional: drop long-term IR / IL roster designations curl "https://lumify.ai/v1/events/{id}/injuries?exclude_status=ir" \ -H "Authorization: Bearer YOUR_API_KEY"
Always 200 when the event exists. Read available before trusting injuries[]. 404 only if the event ID does not exist. available: false → X-Credits-Used: 0.
Inspector: API reference — event injuries.
MCP — get_injuries
Hosted MCP: https://lumify.ai/mcp (Bearer). Tool: get_injuries. Credits match REST (0 when available: false). Setup: /docs/ai · landing: /sports-mcp-server.
{
"mcpServers": {
"lumify": {
"url": "https://lumify.ai/mcp",
"headers": { "Authorization": "Bearer lmfy-YOUR_KEY" }
}
}
}
Agent prompt pattern (illustrative): “For event {id}, call get_injuries. If available is false, wait or poll later. Summarize players with status out/doubtful/questionable and any previous_status changes. Do not invent rows.”
Field catalog
Inspector fields and the full sample live on GET /v1/events/{id}/injuries. The tables below are the how-to subset.
Envelope
| Field | Type | Meaning |
|---|---|---|
event_id | integer | Lumify event ID you requested |
available | boolean | false until the monitor has written at least one structured report; free when false |
last_checked_at | string | null | Most recent monitor search for this event (any outcome) |
confirmed_at | string | null | Guaranteed pre-kickoff confirmation time; null until that checkpoint runs |
next_check_at | string | null | Next scheduled cadence check; null if watching stopped |
injuries | array | Per-player rows; empty when available is false |
injuries[] row
| Field | Type | Meaning |
|---|---|---|
player | string | Extracted name (always present, even if unmatched) |
player_id | integer | null | Lumify player ID when bound to a roster/participant |
team / team_id | string | integer | null | Resolved team; null if unmatched. When player_id is bound and the player's current roster team is one of this event's two participants, that roster team is served. |
status | string | out | doubtful | questionable | probable | day_to_day | ir | suspended | available |
previous_status | string | null | Prior status on this event; null on first sighting |
body_part | string | null | Body part when reported; often null on IR/IL designation rows |
note | string | null | Short extracted note |
source_url | string | null | Upstream report URL when captured |
severity | string | info | material | critical (see below) |
last_changed_at | string | null | When this row’s status last changed |
Severity (read this before wiring alerts)
| Severity | When | Webhook? |
|---|---|---|
info |
Unchanged reconfirm, or first sighting of a routine questionable / probable / day_to_day / available with nothing to compare | Never fires injury webhook |
material |
Real status change, including first-seen out / doubtful / ir / suspended | Yes |
critical |
out / doubtful — first seen, or worsened from available / probable — with ≤ 6 hours to start | Yes |
exclude_status
Comma-separated, case-insensitive statuses to drop from injuries[] (e.g. exclude_status=ir). Useful to hide injured-reserve / long-term IL roster designations (not late-breaking news). Those rows also most often have body_part: null. Unknown values → 400. Filtering every row out does not flip available to false if the monitor has data; credits unchanged by filter alone.
Webhook recipe — push on material/critical only
curl -X POST https://lumify.ai/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/lumify",
"event_types": ["injury"],
"sport": "nfl"
}'
Or scope to one event with "event_id": 19190 instead of sport.
Behavior (Beta): one signed POST per player-status transition at material or critical severity. Info reconfirms never fire. Deduped via notified_at so the same transition is not re-sent. Delivery data carries player, team, status, previous_status, severity, hours_to_start, and trigger (cadence / odds_move / checkpoint / early_report). 0.5 credits per delivery.
Verify signatures with the signing_secret returned once on create — see webhooks in the API reference. Polling get_injuries remains valid when you do not want push.
Agent loop (copy-paste intent)
- list_events / query_events → pick event_id (NFL or MLB, upcoming).
- get_injuries → if available is false, backoff until next_check_at or poll on a coarse cadence.
- Prefer rows where severity is material or critical, or where previous_status is non-null.
- Optionally register webhook event_types: ["injury"] for the sport or event.
- Join player_id to props / intelligence on the same event ID when you need line context — do not scrape a second ID space.
- Never present status tags as betting advice.
Example response
{
"event_id": 19190,
"available": true,
"last_checked_at": "2026-09-03T21:07:00Z",
"confirmed_at": null,
"next_check_at": "2026-09-03T21:22:00Z",
"injuries": [
{
"player": "Patrick Mahomes",
"player_id": 44012,
"team": "Kansas City Chiefs",
"team_id": 18,
"status": "questionable",
"previous_status": null,
"body_part": "ankle",
"note": "Listed as questionable on the Friday injury report.",
"source_url": "https://www.nfl.com/injuries",
"severity": "info",
"last_changed_at": "2026-09-03T21:07:00Z"
}
]
}
Illustrative shape — first sighting of a routine questionable is info (no webhook). A later change to out / doubtful would be material (or critical inside 6 hours of kickoff). Always verify against a live event ID.
FAQ
Yes. Beta event-scoped injury / availability: GET /v1/events/{id}/injuries and MCP get_injuries, plus optional webhook event_types: ["injury"]. Not a league-wide dump API.
NFL and MLB in Beta, with more sports rolling out. Check available per event rather than assuming every sport is live.
No. The event exists but the monitor has not written a first report yet. Response is free (X-Credits-Used: 0 / MCP _meta.credits_used: 0).
No. Info-level reconfirms and routine first sightings of questionable/probable/day_to_day/available do not fire. Webhooks fire on material and critical transitions only (0.5 credits each).
No. Lumify monitors late-breaking availability for one event, with severity, odds-move triggers, and agent webhooks on the same event graph as odds/props/intelligence. Beta NFL/MLB; no in-game feed.
Yes — exclude_status=ir (comma-separated, case-insensitive). Unknown statuses return 400.
Limits (frank)
- Beta — NFL + MLB windows above; more sports rolling out.
- No in-game injury feed after kickoff/first pitch.
- Not a guaranteed-complete official report; rows are structured extractions with source_url when captured.
- Unmatched names keep the player string with null player_id.