---
title: "Measured completeness rollup per tour × draw bucket (BASIC)"
method: GET
path: "/history/coverage"
---

# Measured completeness rollup per tour × draw bucket (BASIC)

`GET /history/coverage`

## Request

- Base URL: `https://api.livetennisapi.com/api/public/v1`
- URL: `https://api.livetennisapi.com/api/public/v1/history/coverage`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Requires BASIC on the live API, or any Historical Data API plan (Starter and up — see https://livetennisapi.com/historical-tennis-data-api). A FREE key may spend its 20 free history calls per calendar month here; past that the answer is `403 upgrade_required` carrying `free_history_taste: "used"`. The numbers to read BEFORE choosing what to backtest, in one call instead of paging the archive. A PREBUILT snapshot rebuilt nightly right after the completeness ledger reconverges — never computed at read time — so `as_of` (= `built_at`) dates every number, and `ledger_max_computed_at` is the newest underlying per-match measurement. Buckets are atp/wta/challenger/itf/juniors × singles/doubles plus `other` (team ties, mixed, exhibitions, and matches with no stated event type — counted, never dropped, so the totals cannot lie), derived from the same registries as the `tour` and `draw` fields. `method` states the full measurement rule in one paragraph, so every number carries its own definition. As of 2026-08-18 the headline spread it exposes: 51.1% of ITF singles matches are point-complete on the best basis against 3.5% of ITF doubles — do not extrapolate a completeness rate across a tour group.

## Response `200`

The rollup artifact, dated by its own as_of

- CoverageRollup: The measured completeness rollup — what the archive HOLDS, per tour × draw bucket, as of the artifact's own build clock.
  - `as_of` string, date-time: Equal to `built_at`, verbatim — the artifact's own clock, and the date to quote with every number in this response.
  - `built_at` string, date-time: When the rollup was built (UTC).
  - `ledger_max_computed_at` string, date-time, nullable: The newest underlying per-match measurement in the completeness ledger.
  - `method` string: The full measurement rule for point_complete, in one paragraph — every number carries its own definition.
  - `buckets` object: One CoverageBucket per tour × draw bucket (`atp_singles` … `juniors_doubles`, plus `other`). A bucket with zero completed matches is OMITTED rather than emitted as zeros — read a missing key as "nothing to count", not an error.
  - `totals` CoverageBucket: The five verifiable numbers for one bucket.
    - `completed` integer: Completed matches in the bucket.
    - `any_tape` integer: Matches with at least one tape row on any basis.
    - `point_complete` integer: Measured point-complete on the BEST basis — what `?points=complete` can serve.
    - `complete_on_default_read` integer: Point-complete on the default read alone. The difference against `point_complete` is the set of matches where `?points=complete` is load-bearing.
    - `share` number, nullable: point_complete / completed. Null on an empty bucket.

## Other responses

- `401`: Missing, unknown, or disabled credentials
- `403`: Your tier doesn't unlock this endpoint
- `429`: Rate limit exceeded (Retry-After header present). Three body shapes, told apart by `error` and `scope`: the per-MINUTE limit (`rate_limited`, with `upgrade_url`, `tier` and `price` naming the next tier up); the per-DAY quota (`rate_limited` with `scope: "day"`, `limit_per_day`, and `resets_at` — the absolute ISO instant the daily window resets); and `abuse_throttled` with `retry_at_epoch` — a 24-hour block applied to clients that keep hammering far past their cap, which a well-behaved retry loop never sees. Fix the loop rather than retrying through it.
- `503`: coverage_unavailable — the artifact has not been built yet (or is unreadable). Honest and temporary; retry after the nightly build. The rollup is never computed inline.

---

[API](https://skmtc.dev/livetennisapi/apis/live-tennis-api.md) · [All operations](https://skmtc.dev/livetennisapi/apis/live-tennis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/livetennisapi/apis/live-tennis-api/revisions/7881947e8e43?raw)
