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.

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

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 / surfaceNot this
Event-scoped late-breaking availabilityA full-league static IL / IR dump refreshed on a fixed timer
Status + severity + previous_status on one event IDA substitute for official league reports as legal truth
Webhook push on material/critical changesPush on every info-level reconfirm
Same event graph as odds, props, intelligenceA separate injury-only product with different player IDs
Agent / MCP / RESTA 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

  1. Resolve an upcoming event (list_events / query_events / get_event).
  2. The monitor starts watching inside a sport-specific pre-kickoff window (below).
  3. Each check may write or refresh structured rows on GET /v1/events/{id}/injuries.
  4. available: false means no first report yet — not charged.
  5. Material/critical transitions can also fire a signed webhook (event_types includes injury).

Cadence (Beta)

SportWatch windowExtra triggersPre-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.

cURL
# 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: falseX-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.

JSON
{
  "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

FieldTypeMeaning
event_idintegerLumify event ID you requested
availablebooleanfalse until the monitor has written at least one structured report; free when false
last_checked_atstring | nullMost recent monitor search for this event (any outcome)
confirmed_atstring | nullGuaranteed pre-kickoff confirmation time; null until that checkpoint runs
next_check_atstring | nullNext scheduled cadence check; null if watching stopped
injuriesarrayPer-player rows; empty when available is false

injuries[] row

FieldTypeMeaning
playerstringExtracted name (always present, even if unmatched)
player_idinteger | nullLumify player ID when bound to a roster/participant
team / team_idstring | integer | nullResolved 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.
statusstringout | doubtful | questionable | probable | day_to_day | ir | suspended | available
previous_statusstring | nullPrior status on this event; null on first sighting
body_partstring | nullBody part when reported; often null on IR/IL designation rows
notestring | nullShort extracted note
source_urlstring | nullUpstream report URL when captured
severitystringinfo | material | critical (see below)
last_changed_atstring | nullWhen this row’s status last changed

Severity (read this before wiring alerts)

SeverityWhenWebhook?
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
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)

  1. list_events / query_events → pick event_id (NFL or MLB, upcoming).
  2. get_injuries → if available is false, backoff until next_check_at or poll on a coarse cadence.
  3. Prefer rows where severity is material or critical, or where previous_status is non-null.
  4. Optionally register webhook event_types: ["injury"] for the sport or event.
  5. Join player_id to props / intelligence on the same event ID when you need line context — do not scrape a second ID space.
  6. Never present status tags as betting advice.

Example response

JSON
{
  "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

Does Lumify have an injury API?

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.

Which sports are covered?

NFL and MLB in Beta, with more sports rolling out. Check available per event rather than assuming every sport is live.

Is available: false an error?

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).

Will I get a webhook for every questionable listing?

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).

Is this a league-wide injury feed?

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.

Can I hide IR / long-term IL rows?

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.