Every court
Every hour
Deliberately early
Where to find it
Estimates live in the same fields as announced times, on every match resource:scheduled_at is the value to sort and compare on; it holds the same instant whether the time was announced by the tournament or estimated by us, so a court sorted by it is the running order of the day. schedule_label is what you show to a user, and it is also where the distinction lives: labels reading Estimated around are ours, and a client that only wants official times can skip them.
How the estimate is built
Every court on every day is a chain, and the estimate walks it from top to bottom.Anchor the court
Add the expected duration
Add the turnaround
Re-anchor on every announced time
"Not before 6:00 PM" in the middle of the session resets the chain: everything below it is estimated from that time, not from the accumulated drift above it.Estimated around X.
A real example
Centre Court at Pretoria P1 2026, as the API had it at midday. Only the first match had an announced time, the sixth carried aNot before, and the second one was on court:
Why medians, and why early
Two calibration decisions do most of the work, and both are deliberate. Durations are medians, not averages. Across 2,132 professional matches with a recorded duration, the median is 83 minutes and the average is 92. The distribution has a long right tail: about 26% of matches go to a third set, and those run well past two hours (the 90th percentile is 138 minutes, the 10th is 55). Chaining averages down a court pushes every estimate progressively later than reality; chaining medians keeps the middle of the day honest. The turnaround allowance is shorter than the real one. The measured median gap between one match finishing and the next starting on the same court is 20 minutes. We use less than that on purpose, and we round the final estimate down to the half hour. Both choices bias the number early.How accurate it is
The estimator was validated by replaying it hour by hour against 89 tournament days of 2026 with live coverage, comparing every estimate to the real start time that followed:What it does not do
It never overrides an announced time
It never overrides an announced time
Not before labels. Estimates only fill the silence.It stops once the match is on court
It stops once the match is on court
started_time, and a finished match has a score. Neither carries an estimate: the label is dropped rather than left to go stale.It does not cross local midnight
It does not cross local midnight
It does not know about weather or walkovers on the fly
It does not know about weather or walkovers on the fly
It is not a promise
It is not a promise
Using it in your app
- Refresh hourly. Estimates are recomputed once an hour, so caching one for longer than that means showing a time the API has already corrected.
- Poll what changed. Both
GET /api/matchesandGET /api/tournaments/{tournament}/matchesacceptupdated_after, and a re-estimated label bumpsupdated_at. See Data Synchronization for the full polling strategy. - Sort by
scheduled_at, or bycourtpluscourt_order, to render a court’s running order. - Show the label, not just the time.
"Estimated around 12:30 PM"sets the right expectation on its own. If you render your own copy, keep the word estimated in it. - Switch to live data when it starts. Once a match is on court,
started_timeis a fact and the WebSocket channel carries the score point by point.
Frequently asked questions
Why do most padel matches have no scheduled start time?
Why do most padel matches have no scheduled start time?
How long does a professional padel match last?
How long does a professional padel match last?
What is the difference between scheduled_at and started_time?
What is the difference between scheduled_at and started_time?
scheduled_at is when the match is expected to start, whether that time was announced or estimated. started_time is when play actually began, tracked from the first point after warm-up. Only matches with live coverage have the second one.Can I tell whether a time was announced or estimated?
Can I tell whether a time was announced or estimated?
Estimated around. Announced ones read Starting at or Not before.Why did the estimate move backwards?
Why did the estimate move backwards?
Which matches get an estimate?
Which matches get an estimate?
started_time, and a court with nothing known yet stays without a label until its first time is confirmed.Next steps
Tournament matches endpoint
Match statuses
scheduled, live, finished, walkover and bye mean for a match.