# The fixture events object

A fixture's match events as known at the cutoff (`GET /v1/fixtures/{id}/events`).

Attributes:
- `fixture_id` (string): Fixture identifier (`fx_<digits>`).
- `status` (enum): `available` = the events are served; `unavailable` = no event is known for the fixture at the cutoff; `withheld` = events exist but a source of them holds no display right for events. One of: `available`, `unavailable`, `withheld`.
- `events` (array of objects): In match order (minute, extra minute, then the source's event order); empty unless `status` is `available`.
  - `id` (string): Match event identifier (`ev_<digits>`).
  - `version` (integer)
  - `kind` (enum): Match event kinds: `goal`, `own_goal`, `penalty_goal` (scored), `penalty_missed` (missed or saved; `detail` `penalty_saved` when saved), `yellow_card`, `second_yellow` (the second yellow, which sends the player off), `red_card` (a straight red), `substitution`, `var_decision` (a decision of its own, never an edit of the event it concerns), `shootout_goal`, `shootout_missed`. One of: `goal`, `own_goal`, `penalty_goal`, `penalty_missed`, `yellow_card`, `second_yellow`, `red_card`, `substitution`, `var_decision`, `shootout_goal`, `shootout_missed`.
  - `detail` (string, nullable): The detail of the event from the source's sub type: `header`, `right_foot_shot`, `penalty_saved`, `goal_disallowed`, `goal_awarded`, `card_adjusted`, `red_card_cancelled`, `card_withdrawn`; more codes may be added. `null` means unavailable (none given, or not mapped yet).
  - `team_id` (string): The side the event counts for (an own goal is filed under the side it benefits), canonical at the cutoff.
  - `side` (enum): Whether `team_id` is the home or the away side. One of: `home`, `away`.
  - `period` (enum): The period of play, from the regulation clock minute (up to 45 first half, up to 90 second half, later extra time) and `penalty_shootout` for shootout kicks. One of: `first_half`, `second_half`, `extra_time`, `penalty_shootout`.
  - `minute` (integer): Regulation clock minute (45+2 is minute 45 with `extra_minute` 2).
  - `extra_minute` (integer, nullable): Stoppage minutes past `minute`; `null` when the event was not in stoppage time.
  - `person_id` (string, nullable): The player the event is about (the scorer, the booked player; for a substitution the player coming on), canonical at the cutoff; `null` when the source names no player (a card shown to a coach, a VAR decision).
  - `person_team_id` (string, nullable): The team of `person_id`'s lineup entry on the fixture (the scorer's own side for an own goal); `null` when no lineup entry the caller may be served names him, or the caller holds no `lineups` grant for the fixture (or one with a longer delay than its `events` grant).
  - `related_person_id` (string, nullable): The assist of a goal, the player going off in a substitution; `null` when there is none.
  - `result` (string, nullable): The score (home-away) after a goal as the source reported it; `null` for other events.
  - `info` (string, nullable): The source's short description verbatim (`Foul`, `Header`); `null` when none.
  - `injured` (boolean, nullable): The source's flag that the event involved an injury; `null` when the source did not say.
  - `on_bench` (boolean, nullable): The source's flag that the person was on the bench; `null` when the source did not say.
  - `rescinded` (boolean, nullable): The source's own flag that it withdrew the event; `null` when the source did not say.
  - `recorded_at` (timestamp): When the platform recorded this version (`known_at` compares against it).
- `sources` (object): Source references, or an explicit statement that they are withheld by source rights or unknown.
  - `status` (enum):  One of: `included`, `withheld`, `unknown`.
  - `items` (array of objects)
    - `source` (string): Source namespace (for example `footystats`).
    - `observed_at` (timestamp, nullable): A `Timestamp`, or `null` when unknown; the owning object says why.
    - `recorded_at` (timestamp): RFC 3339 instant in UTC with `Z` suffix; optional fractional seconds up to microseconds.
    - `precision` (enum): Precision of the source timestamp; `unknown` when the source gave none. One of: `unknown`, `day`, `hour`, `minute`, `second`, `millisecond`.
- `knowledge` (object): The effective knowledge cutoff of the response. Under a grant freshness delay it is never later than the request time minus the delay, whatever `known_at` asked for.
  - `known_at` (timestamp): RFC 3339 instant in UTC with `Z` suffix; optional fractional seconds up to microseconds.
  - `as_requested` (boolean): True when the caller supplied `known_at`; false when it defaulted to the request time.
- `resolution` (object): How the requested identifier resolved. Present whenever the requested identifier is not the canonical one, and optional otherwise.
  - `requested_id` (string): OddsFinder identifier, `<prefix>_<digits>`, a per-kind sequence number without padding, leading zeros, grouping or sign (1 to 9223372036854775807). The prefix names the kind; the per-kind schemas fix it where a field or parameter has one kind. `Resolution` uses this generic form because its identifiers are of the resource's kind.
  - `canonical_id` (string): OddsFinder identifier, `<prefix>_<digits>`, a per-kind sequence number without padding, leading zeros, grouping or sign (1 to 9223372036854775807). The prefix names the kind; the per-kind schemas fix it where a field or parameter has one kind. `Resolution` uses this generic form because its identifiers are of the resource's kind.
  - `status` (enum): `canonical`: the requested identifier is the identity itself; `alias`: it was retired by a merge decision and resolves to `canonical_id`. One of: `canonical`, `alias`.
  - `decision_id` (string, nullable): Identifier of a merge or reversal decision (`dec_<digits>`), a record you can cite.
  - `decided_at` (timestamp, nullable): A `Timestamp`, or `null` when unknown; the owning object says why.

Example:

```json
{
  "fixture_id": "fx_1",
  "status": "withheld",
  "events": [],
  "knowledge": {
    "known_at": "2026-10-03T19:00:00Z",
    "as_requested": false
  }
}
```
