Properties
| Name | Type | Description |
|---|---|---|
| count | number | |
| meta | object | |
| players | array | |
| sport | string | |
| success | boolean |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/owlsinsight-com/json-schema/owlsinsight-com-injuries-response-schema.json",
"title": "InjuriesResponse",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/owlsinsight-com-openapi.json#/components/schemas/InjuriesResponse",
"properties": {
"count": {
"format": "double",
"type": "number"
},
"meta": {
"properties": {
"conflicts": {
"description": "Players both sources cover but disagree about. Counted over what is SERVED.",
"format": "double",
"type": "number"
},
"listDaysConflicts": {
"description": "Players both sources call injured but disagree about the LENGTH of.",
"format": "double",
"type": "number"
},
"reportAgeSummary": {
"description": "Freshness of THIS response. The first four partition the players returned\nand sum to `count`; the last three describe how much of the whole response\ncould be dated and are not scoped to those buckets.",
"properties": {
"datedRecords": {
"format": "double",
"type": "number"
},
"freshConsensus": {
"format": "double",
"type": "number"
},
"noConsensus": {
"format": "double",
"type": "number"
},
"noVerdict": {
"format": "double",
"type": "number"
},
"playersWithNoDatedRecord": {
"format": "double",
"type": "number"
},
"staleConsensus": {
"format": "double",
"type": "number"
},
"undatedRecords": {
"format": "double",
"type": "number"
}
},
"type": "object",
"x-owls-required": [
"staleConsensus",
"freshConsensus",
"noVerdict",
"noConsensus",
"playersWithNoDatedRecord",
"datedRecords",
"undatedRecords"
]
},
"sources": {
"additionalProperties": {
"$ref": "#/$defs/InjurySourceMeta"
},
"type": "object"
},
"suffixJoins": {
"items": {
"$ref": "#/$defs/InjurySuffixJoin"
},
"type": "array"
},
"timestamp": {
"type": "string"
},
"unresolvedIdentity": {
"items": {
"$ref": "#/$defs/InjuryUnresolvedIdentity"
},
"type": "array"
}
},
"type": "object",
"x-owls-required": [
"sources",
"conflicts",
"listDaysConflicts",
"suffixJoins",
"unresolvedIdentity",
"reportAgeSummary",
"timestamp"
]
},
"players": {
"items": {
"$ref": "#/$defs/InjuryPlayer"
},
"type": "array"
},
"sport": {
"type": "string"
},
"success": {
"type": "boolean"
}
},
"type": "object",
"x-owls-required": [
"success",
"sport",
"count",
"players",
"meta"
],
"$defs": {
"InjuryAgreement": {
"description": "Whether the sources corroborate one another for this player.",
"type": "string",
"x-extensible-enum": [
"agrees",
"conflict",
"single-source"
]
},
"InjuryConsensus": {
"description": "Derived agreement between sources. Present ONLY when the player's identity is\ncertain; absent players are listed in `meta.unresolvedIdentity`.",
"properties": {
"agreement": {
"$ref": "#/$defs/InjuryAgreement"
},
"idVerified": {
"description": "True only when a shared player id corroborates the name-and-team join.",
"type": "boolean"
},
"injuryStatus": {
"anyOf": [
{
"$ref": "#/$defs/InjuryStatus"
},
{
"type": "null"
}
],
"description": "Null on a conflict: an indeterminate answer is its own verdict, never a pick."
},
"listDaysConflict": {
"description": "True when both sources agree a player is on an injured list but disagree\nabout its length, for example 10 days against 60. `agreement` still reads\n\"agrees\", so check this when the length matters.",
"type": "boolean"
},
"sources": {
"items": {
"$ref": "#/$defs/InjurySourceLabel"
},
"type": "array"
},
"stale": {
"description": "Whether the designation is still current, judged against `staleAfterSeconds`.\n\nTrue when every dated record behind it is older than the window, false when\nat least one is inside it, and null when no verdict is possible. Null is\nnever a substitute for false.",
"type": [
"boolean",
"null"
]
},
"staleAfterSeconds": {
"description": "The window the designation was judged against, in seconds, chosen by what the\ndesignation IS rather than by sport alone: a weekly football designation\nlapses far sooner than a baseball injured-list stint, which is given its own\nlength plus grace.\n\nRead it together with `stale` to tell the two nulls apart. A number beside a\nnull `stale` means the rule exists but nothing carried a timestamp. A null\nhere means no rule applies at all.",
"format": "double",
"type": [
"number",
"null"
]
},
"suffixJoin": {
"description": "True when the join bridged a name suffix. Disclosed rather than hidden.",
"type": "boolean"
}
},
"type": "object",
"x-owls-required": [
"injuryStatus",
"agreement",
"sources",
"idVerified",
"suffixJoin",
"listDaysConflict",
"stale",
"staleAfterSeconds"
]
},
"InjuryPlayer": {
"properties": {
"consensus": {
"$ref": "#/$defs/InjuryConsensus"
},
"playerKey": {
"type": "string"
},
"playerName": {
"type": "string"
},
"position": {
"type": [
"string",
"null"
]
},
"records": {
"description": "Every source's own view, always present, never collapsed.",
"items": {
"$ref": "#/$defs/InjurySourceRecord"
},
"type": "array"
},
"reportAge": {
"$ref": "#/$defs/InjuryReportAge",
"description": "How much of this player's evidence could be dated, and how old it is."
},
"teamAbbreviation": {
"type": [
"string",
"null"
]
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"type": "object",
"x-owls-required": [
"playerKey",
"playerName",
"teamName",
"teamAbbreviation",
"position",
"reportAge",
"records"
]
},
"InjuryReportAge": {
"description": "How much of a player's evidence carries a timestamp, and how old it is.",
"properties": {
"datedRecords": {
"format": "double",
"type": "number"
},
"newestSeconds": {
"description": "Age of the most recently dated record. Null when nothing is dated.",
"format": "double",
"type": [
"number",
"null"
]
},
"oldestSeconds": {
"description": "Age of the least recently dated record. Null when nothing is dated.",
"format": "double",
"type": [
"number",
"null"
]
},
"undatedRecords": {
"format": "double",
"type": "number"
}
},
"type": "object",
"x-owls-required": [
"newestSeconds",
"oldestSeconds",
"datedRecords",
"undatedRecords"
]
},
"InjurySourceLabel": {
"description": "Which of the sport's sources a record came from.\n\nDeliberately a ROLE, not a vendor name: \"primary\" is the source the API leads\nwith for that sport. The label stays correct if a source is swapped underneath\nit, and it is stable across sports, where the primary differs.",
"type": "string",
"x-extensible-enum": [
"primary",
"secondary",
"tertiary"
]
},
"InjurySourceMeta": {
"description": "Per-source freshness and provenance.",
"properties": {
"ageSeconds": {
"description": "Seconds since this source was last stored, or null when unknown. Never 0 as a\nstand-in for unknown.",
"format": "double",
"type": [
"number",
"null"
]
},
"checks": {
"description": "The validations that ran on THIS source's data. Never pooled across sources.",
"items": {
"type": "string"
},
"type": "array"
},
"injuredCount": {
"format": "double",
"type": "number"
},
"lastDataAgeSeconds": {
"description": "How long since this source last produced a non-empty result.",
"format": "double",
"type": [
"number",
"null"
]
},
"lastFetchError": {
"description": "The reason CODE of the last refused write. Free-text detail is not served.",
"properties": {
"at": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"type": "object",
"x-owls-required": [
"at",
"reason"
]
},
"metaMismatch": {
"description": "Present when the stored metadata did not describe the stored data, so its age\nand counts were not trusted and `ageSeconds` is null. Surfaced rather than\nquietly corrected, because the divergence is itself the signal.",
"type": "boolean"
},
"partial": {
"properties": {
"unitsExpected": {
"format": "double",
"type": "number"
},
"unitsFetched": {
"format": "double",
"type": "number"
}
},
"type": "object",
"x-owls-required": [
"unitsExpected",
"unitsFetched"
]
},
"recordCount": {
"format": "double",
"type": "number"
},
"stale": {
"type": "boolean"
}
},
"type": "object",
"x-owls-required": [
"recordCount",
"injuredCount",
"checks",
"ageSeconds",
"stale",
"lastDataAgeSeconds"
]
},
"InjurySourceRecord": {
"description": "One player's status according to ONE source. Never merged with another source's view.",
"properties": {
"bodyPart": {
"description": "A factual descriptor such as \"Ankle\", not editorial copy.",
"type": [
"string",
"null"
]
},
"depthChartOrder": {
"format": "double",
"type": [
"number",
"null"
]
},
"injuryStatus": {
"$ref": "#/$defs/InjuryStatus"
},
"listDays": {
"description": "Injured-list length in days, where the source encodes one.",
"format": "double",
"type": [
"number",
"null"
]
},
"playerName": {
"description": "This source's own spelling of the name, which is why it can differ per record.",
"type": "string"
},
"position": {
"type": [
"string",
"null"
]
},
"practiceDescription": {
"type": [
"string",
"null"
]
},
"practiceParticipation": {
"type": [
"string",
"null"
]
},
"reportAgeSeconds": {
"description": "Seconds since this source published the state, derived from `reportedAt`.\n\nNull when the source publishes no timestamp, and never 0 as a stand-in for\nunknown. Distinct from `meta.sources[source].ageSeconds`, which is how long\nago the feed was fetched: a designation weeks past its weekly reissue can sit\nbehind a fetch that happened seconds ago.",
"format": "double",
"type": [
"number",
"null"
]
},
"reportedAt": {
"description": "The SOURCE's timestamp for this state, not when it was fetched. Null when the\nsource publishes none.",
"type": [
"string",
"null"
]
},
"seasonEnding": {
"type": "boolean"
},
"source": {
"$ref": "#/$defs/InjurySourceLabel"
},
"statusLabel": {
"description": "The source's own display string, verbatim. Shown, never compared.",
"type": "string"
},
"teamAbbreviation": {
"type": [
"string",
"null"
]
},
"teamId": {
"description": "Canonical team id, stable across sources and sports.",
"type": [
"string",
"null"
]
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"type": "object",
"x-owls-required": [
"source",
"playerName",
"position",
"teamName",
"teamAbbreviation",
"teamId",
"injuryStatus",
"statusLabel",
"listDays",
"seasonEnding",
"bodyPart",
"practiceParticipation",
"practiceDescription",
"depthChartOrder",
"reportedAt",
"reportAgeSeconds"
]
},
"InjuryStatus": {
"description": "Normalised availability. `unmapped` is a first-class value, not an error: an\nunrecognised upstream token surfaces as unknown rather than defaulting to\nhealthy, because \"healthy\" is an affirmative claim you would act on.",
"type": "string",
"x-extensible-enum": [
"active",
"day_to_day",
"doubtful",
"injured_list",
"not_injury_list",
"out",
"questionable",
"suspended",
"unmapped"
]
},
"InjurySuffixJoin": {
"properties": {
"playerKey": {
"type": "string"
},
"spellings": {
"items": {
"type": "string"
},
"type": "array"
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"type": "object",
"x-owls-required": [
"playerKey",
"teamName",
"spellings"
]
},
"InjuryUnresolvedIdentity": {
"description": "Why a player could not be given a consensus.",
"properties": {
"playerKey": {
"type": "string"
},
"reason": {
"type": "string",
"x-extensible-enum": [
"duplicate_source_id",
"name_collision",
"suffix_unverified",
"unresolved_team"
]
},
"spellings": {
"items": {
"type": "string"
},
"type": "array"
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"type": "object",
"x-owls-required": [
"playerKey",
"teamName",
"reason",
"spellings"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/owlsinsight-com-injuries-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.