---
title: "Returns player injury designations for a sport from two independent sources, each attributed and separately timestamped, plus a derived consensus where the sources can be matched to the same player with confidence."
method: GET
path: "/api/v1/{sport}/injuries"
tags: ["Player props"]
---

# Returns player injury designations for a sport from two independent sources, each attributed and separately timestamped, plus a derived consensus where the sources can be matched to the same player with confidence.

`GET /api/v1/{sport}/injuries`

## Request

- Base URL: `https://api.owlsinsight.com`
- URL: `https://api.owlsinsight.com/api/v1/{sport}/injuries`
- Auth: HTTP bearer

Returns player injury designations for a sport from two independent sources, each attributed and separately timestamped, plus a derived consensus where the sources can be matched to the same player with confidence.

Supported sports are nfl and mlb. Other sports return 404.

Every player carries one record per source that covers them, with that source own status, detail and report time. Records are never merged into one another.

record.source is a role label, either primary or secondary, and meta.sources is keyed the same way. It identifies which of the sport two feeds a record came from so you can tell them apart and prefer one consistently. It is stable if a feed is changed underneath it.

consensus is present only when the two sources can be matched to the same player with confidence. When they disagree, consensus.agreement is conflict and consensus.injuryStatus is null, and both records are returned.

Players whose identity could not be established are listed in meta.unresolvedIdentity and carry no consensus. That includes a player whose two spellings differ only by a suffix when nothing else corroborates that they are the same person, since adding a suffix to one of two players is how a league separates a shared name.

consensus.listDaysConflict is true when both sources agree a player is on an injured list but disagree about its length, for example 10 days against 60. The designation still reads as agreeing, so check this flag when the length matters.

meta.sources[source].ageSeconds is null when the age is unknown, and is never 0 as a placeholder. A source is marked stale when its age is unknown, when it is older than 30 minutes, or when it holds no records.

meta.sources[source].checks names the validations that ran on that source own data. Checks are reported per source, never pooled, so one source never inherits another.

Cleared and roster-move designations are excluded by default. Pass includeActive=true to receive them, or name them explicitly in status, which overrides the default view.

There are two clocks and they answer different questions. meta.sources[source].ageSeconds is how long ago we fetched the feed. record.reportAgeSeconds is how long ago that source published the designation itself, which is the one that tells you whether a status is current.

record.reportAgeSeconds is null when a source publishes no timestamp of its own, and is never 0 as a placeholder. player.reportAge counts how many of a player records could be dated and how many could not, so a partly dated player is visible as such.

consensus.stale is true when every dated record behind a designation is older than consensus.staleAfterSeconds, false when at least one is inside it, and null when no verdict is possible. Null is never a substitute for false.

There are two reasons stale can be null, and staleAfterSeconds tells them apart. A number beside a null stale means the rule exists but nothing carried a timestamp to judge against it. A null staleAfterSeconds means no rule applies at all, for one of four reasons: the designation is one whose currency does not decay, such as active or a status we could not map; the sources disagree about the designation; they disagree about the length of an injured list stint; or a season ending placement does not expire. The first of those covers most players on a response that includes cleared designations.

The staleness window depends on the designation, not only the sport. A weekly football designation such as questionable lapses after 10 days because the injury report is reissued every game week, while a baseball injured-list placement is given its own stint length plus two weeks, and a season-ending placement is never marked stale.

meta.reportAgeSummary describes this response. staleConsensus, freshConsensus, noVerdict and noConsensus partition the players returned and add up to count. playersWithNoDatedRecord, datedRecords and undatedRecords say how much of the whole response could be dated, and are not scoped to any of those four buckets.

A source that publishes no timestamps of its own yields no staleness verdict for a player only it covers, so filtering with source can return a page on which every consensus.stale is null.

Records are retained by the source after a season ends, so check reportedAt and reportAgeSeconds on each record.

503 until the first collection has completed.

## Path parameters

- `sport` string, required

## Query parameters

- `source` string
- `status` string
- `team` string
- `includeActive` string

## Response `200`

OK

- InjuriesResponse
  - `count` number, double
  - `meta` object
    - `conflicts` number, double: Players both sources cover but disagree about. Counted over what is SERVED.
    - `listDaysConflicts` number, double: Players both sources call injured but disagree about the LENGTH of.
    - `reportAgeSummary` object: Freshness of THIS response. The first four partition the players returned and sum to `count`; the last three describe how much of the whole response could be dated and are not scoped to those buckets.
      - `datedRecords` number, double
      - `freshConsensus` number, double
      - `noConsensus` number, double
      - `noVerdict` number, double
      - `playersWithNoDatedRecord` number, double
      - `staleConsensus` number, double
      - `undatedRecords` number, double
    - `sources` object
    - `suffixJoins` InjurySuffixJoin[]
      - `playerKey` string
      - `spellings` string[]
      - `teamName` string, nullable
    - `timestamp` string
    - `unresolvedIdentity` InjuryUnresolvedIdentity[]
      - `playerKey` string
      - `reason` string
      - `spellings` string[]
      - `teamName` string, nullable
  - `players` InjuryPlayer[]
    - `consensus` InjuryConsensus: Derived agreement between sources. Present ONLY when the player's identity is certain; absent players are listed in `meta.unresolvedIdentity`.
      - `agreement` string: Whether the sources corroborate one another for this player.
      - `idVerified` boolean: True only when a shared player id corroborates the name-and-team join.
      - `injuryStatus` string: Normalised availability. `unmapped` is a first-class value, not an error: an unrecognised upstream token surfaces as unknown rather than defaulting to healthy, because "healthy" is an affirmative claim you would act on.
      - `listDaysConflict` boolean: True when both sources agree a player is on an injured list but disagree about its length, for example 10 days against 60. `agreement` still reads "agrees", so check this when the length matters.
      - `sources` InjurySourceLabel[]
      - `stale` boolean, nullable: Whether the designation is still current, judged against `staleAfterSeconds`. True when every dated record behind it is older than the window, false when at least one is inside it, and null when no verdict is possible. Null is never a substitute for false.
      - `staleAfterSeconds` number, double, nullable: The window the designation was judged against, in seconds, chosen by what the designation IS rather than by sport alone: a weekly football designation lapses far sooner than a baseball injured-list stint, which is given its own length plus grace. Read it together with `stale` to tell the two nulls apart. A number beside a null `stale` means the rule exists but nothing carried a timestamp. A null here means no rule applies at all.
      - `suffixJoin` boolean: True when the join bridged a name suffix. Disclosed rather than hidden.
    - `playerKey` string
    - `playerName` string
    - `position` string, nullable
    - `records` InjurySourceRecord[]: Every source's own view, always present, never collapsed.
      - `bodyPart` string, nullable: A factual descriptor such as "Ankle", not editorial copy.
      - `depthChartOrder` number, double, nullable
      - `injuryStatus` string: Normalised availability. `unmapped` is a first-class value, not an error: an unrecognised upstream token surfaces as unknown rather than defaulting to healthy, because "healthy" is an affirmative claim you would act on.
      - `listDays` number, double, nullable: Injured-list length in days, where the source encodes one.
      - `playerName` string: This source's own spelling of the name, which is why it can differ per record.
      - `position` string, nullable
      - `practiceDescription` string, nullable
      - `practiceParticipation` string, nullable
      - `reportAgeSeconds` number, double, nullable: Seconds since this source published the state, derived from `reportedAt`. Null when the source publishes no timestamp, and never 0 as a stand-in for unknown. Distinct from `meta.sources[source].ageSeconds`, which is how long ago the feed was fetched: a designation weeks past its weekly reissue can sit behind a fetch that happened seconds ago.
      - `reportedAt` string, nullable: The SOURCE's timestamp for this state, not when it was fetched. Null when the source publishes none.
      - `seasonEnding` boolean
      - `source` string: Which of the sport's sources a record came from. Deliberately a ROLE, not a vendor name: "primary" is the source the API leads with for that sport. The label stays correct if a source is swapped underneath it, and it is stable across sports, where the primary differs.
      - `statusLabel` string: The source's own display string, verbatim. Shown, never compared.
      - `teamAbbreviation` string, nullable
      - `teamId` string, nullable: Canonical team id, stable across sources and sports.
      - `teamName` string, nullable
    - `reportAge` InjuryReportAge: How much of a player's evidence carries a timestamp, and how old it is.
      - `datedRecords` number, double
      - `newestSeconds` number, double, nullable: Age of the most recently dated record. Null when nothing is dated.
      - `oldestSeconds` number, double, nullable: Age of the least recently dated record. Null when nothing is dated.
      - `undatedRecords` number, double
    - `teamAbbreviation` string, nullable
    - `teamName` string, nullable
  - `sport` string
  - `success` boolean

---

[API](https://skmtc.dev/owlsinsight/apis/owls-insight-api.md) · [All operations](https://skmtc.dev/owlsinsight/apis/owls-insight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/owlsinsight/apis/owls-insight-api/revisions/76c1ea016ff1?raw)
