Source ledger

Data rights before data volume.

A public football feed is not automatically legal to resell. Stats API enables a source only after its redistribution rights, attribution, coverage, and operating limits are recorded.

Enabled for the beta

OpenFootball explicitly dedicates its schema, data, and scripts to the public domain under CC0. It is suitable for proving the complete commercial delivery system, but it is community-maintained and is not positioned as a guaranteed live feed.

Stats API serves the historical/bootstrap snapshot as observed at the latest successful ingestion. It promises no maximum dataset age or refresh interval. The coverage summary exposes importer observations while source_updated_at remains null and freshness_guaranteed remains false.

Source Rights status Current use
OpenFootball football.json CC0 / public domain Fixtures, full-time results, competitions, seasons, and teams.
API-Football Licensed under a commercial redistribution agreement Competitions, seasons, teams, fixtures, results, and match team statistics including corners, shots, possession, cards and expected goals.

Evaluated but not approved for resale

A retail subscription that permits a website or app to display data does not necessarily permit operating a competing paid data API. No candidate source is enabled merely because its endpoint is technically accessible.

Source Decision
StatsBomb Open Data Research/public-analysis dataset; not treated as commercial API redistribution permission.
football-data.org Ordinary key is tied to one application and carries attribution and post-cancellation restrictions.
API-Football Published terms expressly prohibit direct resale of its data without permission.
Sportmonks and other aggregators Candidate only after a written redistribution or white-label agreement.

How replacement works

  • Each source adapter converts upstream records into one internal schema.
  • Source mappings retain known upstream IDs privately while customers receive Stats API IDs.
  • For CC0 rows without provider IDs, best-effort reconciliation can retain the existing Stats API ID for a unique team or fixture correction. Ambiguous corrections deliberately create a new record unless a mapping is reviewed.
  • A configured competition-season file is a complete match-presence snapshot. A missing match becomes an inactive tombstone, not a claimed real-world cancellation; a later reappearance restores the same Stats API ID.
  • Presence reconciliation is transactional and retry-safe. An empty snapshot cannot replace an existing non-empty dataset.
  • Scheduled ingestion writes only normalized changes. A data-version key increments only when customer-visible data changes.
  • Every run records the retrieved artifact SHA-256, byte count, and retrieval time; that timestamp is not a source freshness claim.
  • Customer requests read Redis or MySQL; they never call an upstream provider in the request path.
  • Logos, player photos, and other protected media are not assumed licensed with factual match data.

Commercial-source approval gate

Before enabling a professional or aggregator feed, keep the signed agreement, permitted fields, territories, attribution rules, cache/retention limits, sublicensing language, termination export rules, and renewal date in the source ledger. Legal review is required for a commercial launch beyond the CC0 dataset.