---
title: "Which point-in-time windows we actually observed, per relation"
method: GET
path: "/v1/as-of/coverage"
tags: ["as-of"]
---

# Which point-in-time windows we actually observed, per relation

`GET /v1/as-of/coverage`

## Request

- Base URL: `https://api.bigballsdata.com`
- URL: `https://api.bigballsdata.com/v1/as-of/coverage`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

What the `/v1/as-of/*` reads can and cannot answer, measured rather than asserted. FREE, for the same reason `/v1/coverage` is: you must be able to find out what we hold before paying for it.

REPORTED PER RELATION AND NEVER BLENDED. The three relations have genuinely different shapes, and a single "point-in-time coverage" number would be wrong about all of them: the prop archive is deep, running back to 2023, while the odds board is shallow and begins in 2026-05. Every row is one `(relation, sport)` pair and `meta.blending` says the rows are not averaged.

EVERY COUNT TRAVELS WITH ITS DENOMINATOR. `events_total` is the denominator and `denominator_subject` says what it counts, because that differs per relation: matches for odds, events for player props, player identities for availability. `events_with_series` and `events_with_pre_event_obs` are reported SEPARATELY, so a window holding a series that was only ever observed after kickoff reports 1 and 0 rather than collapsing to "covered".

AN ABSENT WINDOW IS `"coverage": "none"`, NEVER `0`. A window that was never measured and a window with genuinely nothing in it are different facts, so only a measured window carries counts and a `computed_at`. A sport with no coverage at all is listed with an empty `windows` array rather than omitted: an omitted sport reads as an oversight, an absent one reads as a fact.

## Query parameters

- `relation` 'odds' | 'player_props' | 'player_availability'
- `sport` 'football' | 'basketball' | 'baseball' | 'ice_hockey' | 'cricket' | 'mma' | 'boxing' | 'formula1' | 'american_football'

## Response `200`

ok. `{ data, meta }`. Each `data` entry is one `(relation, sport)` with `as_of_floor`, `as_of_ceiling`, `windows`, `gaps` and `denominator_subject`.

## Other responses

- `400`: unknown relation or sport
- `503`: the coverage windows are still being built

---

[API](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api.md) · [All operations](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/revisions/31fb54ac414e?raw)
