Status & data freshness

Availability is measured by an independent external monitor. Data freshness is measured once a minute against the same database /v1 serves from. Every figure below is measured — none is a target or a promise.

All systems operational state logic provisional, under calibration

Data snapshot 57s ago · collector runs every minute

API availability

Independent external monitor, checking over the public internet every 5 minutes. Not self-reported.

Uptime, 24 h
100.00%
Uptime, 7 days
100.00%
Uptime, 30 days
100.00%
Uptime, 90 days
99.99%
90 days agotoday

≥ 99.9% ≥ 99% < 99% not monitored yet · monitored since 2026-08-24

Response time, last 24 h (p50 274 ms · max 783 ms)

Incidents, last 90 days (1)

  • 2026-09-16 23:01 UTC — down 10 min (Connection Timeout)
Daily uptime, last 14 days (text)
DateUptimeDowntime
2026-10-06100.00%0
2026-10-07100.00%0
2026-10-08100.00%0
2026-10-09100.00%0
2026-10-10100.00%0
2026-10-11100.00%0
2026-10-12100.00%0
2026-10-13100.00%0
2026-10-14100.00%0
2026-10-15100.00%0
2026-10-16100.00%0
2026-10-17100.00%0
2026-10-18100.00%0
2026-10-19100.00%0

Data pipeline

Measured once a minute against the source database. Only measured values are shown; the day-bar rule is provisional while calibration data accumulates.

Last 24 hours, hourly

24 h agonow

Last 90 days, daily

90 days agotoday

updating while matches in play brief lag stalled no matches in play not monitored

Provisional rule, under calibration: a day is green when live writes kept up throughout every in-play minute sampled; red when writes stopped for a sustained stretch while matches were in play. "No matches in play" days are neither.

Live statistics freshness
median age 1s

p95 4226s · max 4226s, across 6 in-play matches · 0 untracked. A lagging match shows up in p95/max.

How often in-play odds change, last 60 min
a change every 31s

Median gap between consecutive bookmaker price changes for the same match; p95 259s, 4,459 samples. This measures how often the market moves — it is not a data delay. A quiet market simply produces no ticks.

Results settled, last 24 h
1,073 / 1,078 99.5%

Share of kicked-off matches with a final (FT-90) result · 5 awaiting a final state · 78 scheduled with no kickoff recorded (postponed, cancelled, rescheduled or untracked — reported separately, never mixed in).

Standings
4 min ago

Last write to the league, corner and card tables. Newest match settled ≈ 21 min ago.

Event capture delay

Last probe · 17 Oct 2026 15:05 UTC · 55 min, polled every 15s
96.7% within 2 match-minutes

2,523 new goals, corners and cards across 405 matches in play: p50 0 min · p95 2 min · max 11 min between the minute an event happened and the match minute at which it was first visible in /v1/fixtures?status=live&include=events. 2388 within 1 minute, 2511 within 5. During the watch the source retracted 56 events and revised the minute of 513.

Freshness above says how recently a match was written to; it does not say how long after a corner is taken the corner is in the API. This does. A probe polls the live fixture list with events, through the same code path a customer's key uses, every few seconds for most of an hour. An event is new the first time its identity (fixture, type, side, running count) appears; its delay is the match clock at that poll minus the event's own minute. Match-clock minutes rather than wall-clock seconds, because kickoff time, the length of half-time and stoppage time are not in the feed and would otherwise be guessed. Events first seen during the break have no clock to compare with and are counted but not measured. The probe runs twice a week in busy kick-off windows; every run is kept.

Retractions and revisions are counted, not hidden. A goal the source withdraws after review disappears from the timeline and the score reverts; a corner's minute is sometimes corrected by one. Build on the event's identity, not its minute, and treat a goal as settled only once the fixture is finished.

Definitions

Availability is measured by an independent external monitor over the public internet every 5 minutes; daily bars, uptime ratios, response times and incidents all come from that monitor, not from this server. Data freshness is measured by our collector once a minute against the source database and shown with the snapshot's age — a stalled collector is flagged, never papered over.

Live-stat freshness is per match in play: seconds since that match's latest live-statistics write, reported as a distribution (p50/p95/max, plus a count of untracked matches) — a single "newest write" can hide 199 stale matches behind 1 healthy one, so we don't lead with it. During live play, writes normally land within seconds.

Odds price-change frequency is the observed gap between consecutive in-play price changes for the same match — how often bookmakers move prices, captured tick by tick. Gaps that straddle the half-time break are excluded, so the break never counts as a 15-minute \"interval\". It is not a data delay and not a pipeline-liveness metric; it varies with how eventful the matches are.

Result completeness counts a match as settled only when the feed marks it finished (FT-90; extra time and penalties excluded — the betting convention). The rate's denominator is matches that actually kicked off. Fixtures with no recorded kickoff are shown separately because the feed cannot distinguish postponed from cancelled from untracked.

No thresholds are published yet. The traffic-light state logic uses internal, provisional bounds while weeks of recorded samples accumulate; calibrated thresholds and historical percentages for the data pipeline will appear once that is done.

Known limitations

Matches the feed never finalises — abandoned, interrupted, or lost to a source outage — are never auto-marked finished. In /v1 such a fixture is reported as status = "unknown" with status_reason = "result_unconfirmed" once it is more than 4 hours past kickoff, with the raw feed code in status_code. Build settlement logic on status = "finished" only — see the Fixture status guide.

Postponed matches are rescheduled as a new fixture id. The original row never starts; once it is more than 4 hours past its kickoff /v1 reports it as status = "unknown" with status_reason = "kickoff_unconfirmed". It is counted under "no kickoff recorded" above rather than as a missing result.

Coverage depth is not uniform. Top competitions carry live statistics and full odds; smaller ones may have fixtures and results only. The data quality page measures it per competition and season — the share of finished matches with corners, odds, events and live statistics — so you can check the one you need rather than take our word for it.

Not included: injuries, transfers, player profiles, player-level statistics and xG. We do not claim parity with providers that offer those.

Machine-readable twin of this page: /status.json.

Query it yourself

Grab a free key and hit /v1/fixtures?status=live — what you see here is what you get.