# The fixture object

Attributes:
- `id` (string): Fixture identifier (`fx_<digits>`).
- `competition_id` (string): Competition identifier (`cmp_<digits>`).
- `season_id` (string): Season identifier (`ssn_<digits>`).
- `stage_id` (string): The stage the fixture belongs to as known at the cutoff (never null; the season's default stage until the fixture is assigned to another).
- `venue` (string, nullable): The venue name as the source reported it; `null` when no source reported one.
- `venue_id` (string, nullable): The venue, once the reported name is matched to one; `null` until then.
- `result` (object, nullable): The highest result version recorded by the cutoff; `null` when no result record is known yet.
  - `id` (string): Result identifier (`res_<digits>`).
  - `version` (integer)
  - `status` (enum): `pending` = not yet (no kind, no scores); `provisional` = reported but not settled; `final` = settled (`decided_at` set). One of: `pending`, `provisional`, `final`.
  - `result_kind` (enum, nullable): How the match was decided (`played`, `awarded`, `annulled`, `abandoned`); `null` exactly while `status` is `pending`. One of: `played`, `awarded`, `annulled`, `abandoned`.
  - `score_ht` (object, nullable): A score pair for one period; both sides or neither (the owning `status` says why a pair is `null`).
    - `home` (integer)
    - `away` (integer)
  - `score_ft` (object, nullable): A score pair for one period; both sides or neither (the owning `status` says why a pair is `null`).
    - `home` (integer)
    - `away` (integer)
  - `score_et` (object, nullable): A score pair for one period; both sides or neither (the owning `status` says why a pair is `null`).
    - `home` (integer)
    - `away` (integer)
  - `score_pens` (object, nullable): A score pair for one period; both sides or neither (the owning `status` says why a pair is `null`).
    - `home` (integer)
    - `away` (integer)
  - `retracted` (boolean): True when this version retracts the result.
  - `decided_at` (timestamp, nullable): Settlement time; `null` while pending (and optionally while provisional).
  - `recorded_at` (timestamp): RFC 3339 instant in UTC with `Z` suffix; optional fractional seconds up to microseconds.
- `provenance` (object): `include=provenance`: for every field whose value OddsFinder chooses among several sources, the source report its ranking of sources selects among those recorded by the cutoff. The served value is in the body; this block says where it came from. `policy` identifies the ranking used (sport and version).
  - `policy` (object)
    - `sport` (string)
    - `version` (integer)
  - `fields` (map)
    - `status` (enum):  One of: `known`, `unavailable`, `no_observation`, `withheld`.
    - `provider` (string, nullable): A source provider or namespace name (`footystats`, `football`).
    - `namespace` (string, nullable): A source provider or namespace name (`footystats`, `football`).
    - `source_time` (timestamp, nullable): A `Timestamp`, or `null` when unknown; the owning object says why.
    - `source_time_precision` (enum, nullable):  One of: `unknown`, `day`, `hour`, `minute`, `second`, `millisecond`.
    - `observed_at` (timestamp, nullable): A `Timestamp`, or `null` when unknown; the owning object says why.
    - `recorded_at` (timestamp, nullable): A `Timestamp`, or `null` when unknown; the owning object says why.
- `home_team_id` (string): Team identifier (`tm_<digits>`).
- `away_team_id` (string): Team identifier (`tm_<digits>`).
- `kickoff_at` (timestamp): Kickoff as known at the cutoff. Always present; `kickoff_precision` says how much of it is confirmed.
- `kickoff_precision` (enum): Precision of `kickoff_at`: `minute`/`second`/`millisecond` are confirmed instants, `hour`/`day` mean only that part is known and `kickoff_at` is the start of it (an early listing with the date only). One of: `day`, `hour`, `minute`, `second`, `millisecond`.
- `status` (enum): The fixture's status as known at the cutoff. One of: `scheduled`, `postponed`, `in_play`, `finished`, `cancelled`, `abandoned`.
- `kickoff_revisions` (array of objects): Every kickoff revision recorded by the cutoff, oldest first.
  - `id` (string): Revision identifier (`rev_<digits>`).
  - `revision_no` (integer): Sequential per fixture; revision 1 is always `initial`.
  - `kickoff_at` (timestamp): RFC 3339 instant in UTC with `Z` suffix; optional fractional seconds up to microseconds.
  - `kickoff_precision` (enum):  One of: `day`, `hour`, `minute`, `second`, `millisecond`.
  - `status` (enum): The fixture status the revision set. One of: `scheduled`, `postponed`, `in_play`, `finished`, `cancelled`, `abandoned`.
  - `recorded_at` (timestamp): RFC 3339 instant in UTC with `Z` suffix; optional fractional seconds up to microseconds.
  - `reason` (enum): Why the revision was recorded; revision 1 is `initial`. One of: `initial`, `kickoff_correction`, `postponement`, `status_change`, `venue_change`, `participant_change`, `stage_change`, `result_correction`.
- `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.
- `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.
- `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`.

Example:

```json
{
  "id": "fx_1",
  "competition_id": "cmp_1",
  "season_id": "ssn_1",
  "stage_id": "stg_1",
  "home_team_id": "tm_1",
  "away_team_id": "tm_2",
  "kickoff_at": "2026-10-03T16:30:00Z",
  "kickoff_precision": "minute",
  "status": "scheduled",
  "venue": "Northbridge Park",
  "venue_id": "ven_1",
  "kickoff_revisions": [
    {
      "id": "rev_1",
      "revision_no": 1,
      "kickoff_at": "2026-10-03T14:00:00Z",
      "kickoff_precision": "minute",
      "status": "scheduled",
      "recorded_at": "2026-09-01T09:00:00Z",
      "reason": "initial"
    },
    {
      "id": "rev_2",
      "revision_no": 2,
      "kickoff_at": "2026-10-03T16:30:00Z",
      "kickoff_precision": "minute",
      "status": "scheduled",
      "recorded_at": "2026-09-25T09:00:00Z",
      "reason": "kickoff_correction"
    }
  ],
  "result": {
    "id": "res_1",
    "version": 1,
    "status": "pending",
    "result_kind": null,
    "score_ht": null,
    "score_ft": null,
    "score_et": null,
    "score_pens": null,
    "retracted": false,
    "decided_at": null,
    "recorded_at": "2026-09-01T09:00:00Z"
  },
  "knowledge": {
    "known_at": "2026-10-01T00:00:00Z",
    "as_requested": true
  },
  "sources": {
    "status": "included",
    "items": [
      {
        "source": "synthetic_alpha",
        "observed_at": "2026-09-25T08:55:00Z",
        "recorded_at": "2026-09-25T09:00:00Z",
        "precision": "minute"
      }
    ]
  }
}
```
