Skip to content

Time, clocks and timezones

There are three independent time axes in this API, and mixing them is the most common source of wrong timelines. None of them converts into another.

AxisFieldsUnitWhat it answers
Wall timestart_date, ut, ct, occurred_attimestampwhen did this happen in the real world
Match clockclock_time, clock_status, played_timesecondshow far into the match are we
Incident timeevent_time, or minute + secondsee belowwhen in the match did this incident occur

All dates are UTC by default and follow ISO 8601. Pass tz with an IANA timezone name to get them converted:

Terminal window
curl "https://api.statscore.com/v2/events/12345?token=YOUR_TOKEN&tz=UTC"
# "start_date": "2026-04-22 20:00"
curl "https://api.statscore.com/v2/events/12345?token=YOUR_TOKEN&tz=America/New_York"
# "start_date": "2026-04-22 16:00"

tz also converts internal timestamps such as verification times, so a response is internally consistent - you never get a mix of zones in one payload.

Available on /v2/events and /v2/events/{id}:

FieldMeaning
clock_timetime in the current period, in seconds. Resets at each period.
clock_statusrunning, stopped or null
played_timecumulative time in seconds. Only some sports have it.

The relationship, verified on live matches:

played_time = clock_time + the sum of completed periods

Measured on production: a second-half match showed clock_time: 2051 (34:11) and played_time: 4751 (79:11). The difference is 2700 seconds - exactly the 45-minute first half. An ice-hockey match in the same sample had played_time: null entirely.

Breaks and waiting states are the other trap: Halftime, Waiting for extra time, Waiting for penalty and every Break after … status all have status_type: live while the clock is stopped. The status tables mark this per status.

This is where the source documentation and production disagree, so read carefully.

EndpointTime fieldsExtras
GET /v2/events/{id} → events_incidentsevent_time, a "MM:SS" stringimportant incidents only
GET /v2/events/{id}/important-incidentsminute + second as numbersrunning home_score / away_score, occurred_at with milliseconds, ct / ut

Verified on a finished Ekstraklasa match: events.show returned event_time: "32:21" and no minute field; important-incidents on the same match returned minute: 94, second: 53 and the score at that moment, with no event_time.

So the choice is not stylistic:

  • building a full timeline with phases → events.show
  • needing minutes, exact ordering, or the score at each incident → important-incidents

Do not compute 90+4 by comparing clock_time against a period length. Added time arrives as incident 449 (Added time) at the end of each period.

Confirmed on Ekstraklasa:

event_timePhaseIncident
45:031st halfAdded time
49:011st halfHalftime
90:012nd halfAdded time
95:042nd halfFinished regular time

There is also no wall_clock field anywhere in the specification or in any captured payload. The nearest equivalent is ut / ct on an incident, which is when the system recorded it - not when it happened in the match.

Incident 2895 (Key incident added with delay) marks an incident entered late. Its match time is earlier than its arrival, so a timeline sorted strictly by arrival puts it in the wrong place. Sort by id or by match time, and treat 2895 as a signal to re-sort.