---
title: "Score, timeline, and possession metrics for one fixture"
method: GET
path: "/txodds/fixtures/{fixture_id}"
tags: ["Sports"]
---

# Score, timeline, and possession metrics for one fixture

`GET /txodds/fixtures/{fixture_id}`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/txodds/fixtures/{fixture_id}`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Full detail for a single fixture: scoreline, event timeline, and possession-derived metrics. Independent parts are read concurrently and degrade individually — a part that fails is returned in its empty shape rather than failing the response, and the degraded payload is cached for a shorter time than a clean one. Possession metrics are soccer-only; `usfootball` fixtures carry their situational state in `football` instead.

## Path parameters

- `fixture_id` integer, required

## Response `200`

Fixture detail, possibly degraded.

- TxoddsFixtureDetail: Everything the match detail view renders, from the score event store.
  - `fixtureId` integer, required
  - `competitionId` integer, required
  - `competition` string, required
  - `home` TxoddsTeamRef, required
    - `code` string, required
    - `name` string, required
  - `away` TxoddsTeamRef, required
    - `code` string, required
    - `name` string, required
  - `kickoff` integer, required
  - `status` string, required
  - `sport` string
  - `football` TxoddsFootballState: US-football situational state. Present only when `sport` is `usfootball`.
    - `homePoints` integer, required
    - `awayPoints` integer, required
    - `touchdowns` integer[], required
    - `fieldGoals` integer[], required
    - `onePointConversions` integer[]
    - `twoPointConversions` integer[]
    - `safeties` integer[]
    - `periodScores` TxoddsFootballPeriodScore[], required
      - `period` string, required
      - `home` integer, required
      - `away` integer, required
    - `down` TxoddsFootballDown
      - `number` integer, required
      - `yardsToGo` integer, required
      - `yardsToEndzone` integer, nullable
      - `possession` string, required
    - `clockSeconds` integer, nullable
    - `clockRunning` boolean
    - `redZone` boolean
    - `phase` string
  - `score` TxoddsScoreStats, required: Latest score state. Soccer-shaped; gridiron fixtures carry their counters in `football`.
    - `gameState` string, required
    - `homeGoals` integer, required
    - `awayGoals` integer, required
    - `homeYellow` integer, required
    - `awayYellow` integer, required
    - `homeRed` integer, required
    - `awayRed` integer, required
    - `homeCorners` integer, required
    - `awayCorners` integer, required
    - `possessionHome` number, nullable, required
    - `possessionAway` number, nullable, required
    - `shotsHome` integer, nullable, required
    - `shotsAway` integer, nullable, required
    - `shotsOnTargetHome` integer, nullable, required
    - `shotsOnTargetAway` integer, nullable, required
    - `updateCount` integer, required
    - `currentHolder` string, nullable
    - `possessionThreat` string, nullable
  - `timeline` TxoddsTimelineEvent[], required
    - `ts` integer, required: Event time, epoch milliseconds.
    - `seq` integer, required
    - `minute` integer, nullable, required
    - `action` string, required
    - `gameState` string, required
    - `homeGoals` integer, required
    - `awayGoals` integer, required
    - `side` string, nullable, required
    - `data` string, required
    - `detail` string, nullable
  - `metrics` TxoddsMetrics, required: Possession-derived metrics. Empty shapes for gridiron fixtures, which emit no possession events, and for any part that failed while the rest of the detail loaded.
    - `avgPossessionHome` number, nullable, required
    - `avgPossessionAway` number, nullable, required
    - `momentum` TxoddsMomentumPoint[], required
      - `minute` integer, required
      - `home` integer, required
      - `away` integer, required
    - `conversion` TxoddsConversion, required
      - `homeShots` integer, nullable, required
      - `awayShots` integer, nullable, required
      - `homeConversion` number, nullable, required
      - `awayConversion` number, nullable, required
    - `turnover` TxoddsTurnover, required
      - `switches` integer, required
      - `perMinute` number, nullable, required

## Other responses

- `401`: No valid credential presented — missing/invalid API-key headers, or an invalid/expired session token.
- `403`: Authenticated but not permitted. Three distinct causes: the session user is not invited (`Invite required`), the API key lacks the operation's scope, or API-key access to the requested venue is switched off (`API access is disabled for <provider>`). Admin and API-key callers bypass the invite check; session and admin callers bypass scope and venue checks.
- `404`: No such fixture. Misses are cached, so a repeated probe for an unknown id does not reach the store.
- `422`: Request failed FastAPI parameter validation.
- `429`: Rate limit exceeded for this route's sliding window, keyed on the session `sub` when authenticated and on the trusted client IP otherwise. Honor `Retry-After`. A per-API-key data ceiling (set per credential) rejects with `{"detail": "API key data rate limit exceeded"}` instead of the `error` envelope below.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
