Skip to content

Events

Every event detected in an analysis, as a flat time-ordered array.

Request

GET /analyses/{id}/events
Parameter Type Required Description
id integer Yes Analysis ID
include string No properties adds event_status and properties to every row. See Properties. Omitted, the rows carry only the fields below

Requires status: "done" on Get Analysis. Which event types an analysis carries depends on its data version, given per type in Event types. To select events by metadata or to turn them into clip windows, use Query Intervals with an event_property or ball_action filter.

Response

[
  {
    "event_id": "06a0765b-0001-7001-8000-000000000001",
    "start": 0.04,
    "end": 20.36,
    "label": "Team A",
    "event_type": "team_possession",
    "team_id": "team_0",
    "timeline_confidence": null
  },
  {
    "event_id": "06a0765b-0003-7003-8000-000000000003",
    "start": 0.00,
    "end": 3.00,
    "label": "not analysable",
    "event_type": "scene",
    "team_id": null,
    "timeline_confidence": null
  },
  {
    "event_id": "06a0765b-0005-7005-8000-000000000005",
    "start": 0.00,
    "end": 5400.00,
    "label": "full_game",
    "event_type": "match_timeline",
    "team_id": null,
    "timeline_confidence": 1.0
  },
  {
    "event_id": "06a0765b-0006-7006-8000-000000000006",
    "start": 617.92,
    "end": 618.32,
    "label": "pass",
    "event_type": "pass",
    "team_id": "team_0",
    "timeline_confidence": null
  },
  {
    "event_id": "06a0765b-0007-7007-8000-000000000007",
    "start": 633.48,
    "end": 634.72,
    "label": "carry",
    "event_type": "carry",
    "team_id": "team_1",
    "timeline_confidence": null
  },
  {
    "event_id": "06a0765b-000a-700a-8000-00000000000a",
    "start": 0.04,
    "end": 617.88,
    "label": "in_play",
    "event_type": "ball_phase",
    "team_id": null,
    "timeline_confidence": null
  }
  // ... one entry per detected event
]

Response Fields

Field Type Unit Description
event_id string | null Identifier of the event, unique within the analysis. Join key to the on-ball rows of the Player Report. Null on analyses whose event export predates identifiers
start float s Start time from video start
end float s End time. Equal to start on point events (shot, goal). pass and carry are spans
label string Value carried by the event, per type
event_type string One of the types below
team_id string | null team_0 or team_1: the actor's team on player events, the credited team on team_possession and goal. Null on events without a team
timeline_confidence float | null On match_timeline events, confidence in the period span, 0-1. 1.0 on full_game, near 1.0 when the detected half split is confirmed by two independent signals, near 0.4 for a best-effort split. Null on every other event type and on analyses before version 0.5.45

label is a display name and may change when team identity resolves. Key on team_id, and resolve names via team-mapping.

Event Types

Type Description Labels
team_possession Team in control of the ball. A gap between two events is time with no team credited: ball out of play, contested, or a transition. See Possession Team names
player_possession Player in control of the ball Player ID
scene Whether the footage is gameplay. not analysable covers replays, crowd shots, graphics and half-time analysable, not analysable
match_timeline Game period. full_game is the whole video, match the envelope of the two halves. The halves are emitted from analysis version 0.5.45 when the split could be resolved, with timeline_confidence saying how firmly full_game, first_half, second_half, match
pass Pass. Data version 2+ pass
carry Player moving with the ball at their feet, spanning the run with the ball. Data version 2+. Named drive before analysis version 0.5.45; older analyses are served as carry carry
drive A carry of at least 3 m, listed next to it with the same span. See Drive. From analysis version 0.5.45 drive
shot Shot. Data version 2+ shot
ball_phase Ball in or out of play. in_bounds_stoppage is play stopped with the ball on the field (foul, injury), half_kickoff the period around a half kickoff. Data version 3+ in_play, out_of_bounds, in_bounds_stoppage, half_kickoff
ball_pitchzone Pitch third the ball is in ball_pitchzone
goal Goal scored, followed by a kickoff restart goal

Without include, this response carries no actor, position or metadata beyond the fields above. Query Intervals returns those for the events it matches.

Properties

GET /analyses/{id}/events?include=properties

Each row gains two fields. The other fields and the row order are the same as without include.

{
  "event_id": "06ac5122-7aef-7fae-8000-a968f5f67d10",
  "start": 751.92,
  "end": 753.08,
  "label": "pass",
  "event_type": "pass",
  "team_id": "team_0",
  "timeline_confidence": null,
  "event_status": "stable",
  "properties": {
    "confidence_event": 0.951,
    "confidence_identity": 0.947,
    "length_cm": 1254,
    "receiver_id": "0-14",
    "receiver_team": 0,
    "set_piece": "kick_off",
    "x_target": 3863,
    "y_target": 3660
  }
}
Field Type Description
event_status string | null stable or experimental, the status of the event type on Schema. Null on data version 1 and 2
properties object Every property Schema lists for the event type, keyed by name. Values and units are as described in Event types, with the unit in the name (length_cm). A property that is null, or the enum value unknown, is left out. Floats are rounded to 3 decimals. {} on data version 1 and 2

A property the engine adds to Schema appears here without an API change.