---
title: "List sports fixtures with live status and win probabilities"
method: GET
path: "/txodds/fixtures"
tags: ["Sports"]
---

# List sports fixtures with live status and win probabilities

`GET /txodds/fixtures`

## Request

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

Fixture board backed by the TxODDS score event store. Kick-off bounds are snapped to the minute — `from_ms` rounds down and `to_ms` rounds up, so the window may extend up to 59s past what was asked for. Per-row status is computed at cache time from feed phase plus wall clock, so a live-status flip can lag by up to one cache TTL. Concurrent misses on the same page share a single build.

## Query parameters

- `competition_id` integer, nullable
- `sport` 'soccer' | 'usfootball', nullable
- `from_ms` integer, nullable
- `to_ms` integer, nullable
- `limit` integer
- `offset` integer

## Response `200`

One page of fixtures.

- TxoddsFixtureList
  - `items` TxoddsFixtureListItem[], required
    - `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: Kick-off, epoch milliseconds.
    - `winProb` TxoddsWinProb
      - `home` number, required
      - `draw` number, required
      - `away` number, required
    - `status` string: Derived from feed phase plus wall clock at cache time, so it can be up to one cache TTL stale.
    - `homeScore` integer
    - `awayScore` integer
    - `sport` string
  - `limit` integer, required: Echo of the requested page size.
  - `offset` integer, 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.
- `422`: Parameter validation failed — unknown `sport`, out-of-range `limit`/`offset`, `from_ms` greater than `to_ms`, or a window wider than 400 days. The inverted/oversized-window cases return the plain `{"detail": "..."}` envelope, not the field-list envelope.
- `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)
