{
  "cars": [
    [
      "1",
      "FIN",
      "LMP2",
      "1",
      "Daniel Gaunt",
      "Ligier JS P217",
      24,
      "",
      [53.772, ""],
      [35.093, ""],
      ["", ""],
      [127.845, ""],
      [111.95, ""],
      1
    ],
    [
      "36",
      "FIN",
      "LMP2",
      "2",
      "Nicholas Foster",
      "Ligier JS P217",
      27,
      "1.434",
      [49.761, ""],
      [34.184, ""],
      [31.091, ""],
      [115.036, ""],
      [113.384, ""],
      2
    ]
  ],
  "highlight": ["25"],
  "messages": [
    [1581687316, "LMP2 AM", "#25 Driver change (Anthony Lazzaro to Phillippe Mulacek)", null, "25"],
    [1581687291, "LMP3", "#8 Driver change (Rory Penttinen to Matthias Kaiser)", null, "8"],
    [1581687143, "LMP3", "#8 Driver change (Matthias Kaiser to Rory Penttinen)", null, "8"],
    [1581687136, "LMP3", "#13 (Martin Hippe) has entered the pits", "pit", "13"]
  ],
  "session": {
    "timeElapsed": 5688.422,
    "timeRemain": -288.422,
    "flagState": "chequered",
    "trackData": ["23°C", "34°C"]
  }
}

The service state message includes the current timing screen data for a service. It is display-oriented and requires an appropriate service manifest in order to interpret the data.

  • cars: Required. An array of cars in the current session, ordered by current classification. Each entry is itself an array, representing data for a single car.
    • Each entry in a car array should correspond to an entry in the colSpec of the service manifest.
    • A car entry can contain additional entries not specified in the colSpec, though this is discouraged. Such values should be ignored for display purposes.
    • Each entry in a car array may be either a primitive value (string, number, null) or a two-entry array of primitives. In the latter case, the first entry is the value, and the second metadata relating to that value, for example:
      • pb denoting a personal-best time
      • sb denoting a session-best (“purple”) time
      • sb-new denoting a session-best time that has just been set
      • old for older data (e.g. to differentiate sector times from previous and current lap)
      • For tyre types, data like tyre-soft that implementations can use to decide on display colours
    • Car numbers should be treated as strings, not numbers
    • Note that the car “state” field is free text, but standardised on certain values:
      • RUN: car is on track
      • PIT: car is in pits
      • OUT: car has left the pits
      • STOP: car is running slowly or stopped
      • FIN: car has taken the chequered flag Other values may be used by some service plugins.
  • highlight: Array of car numbers to highlight as changed in this state snapshot. Used by the Timing71 site to flash the car’s row.
  • messages: Required. List of messages generated by the service.
    • Each message entry is an array of between four and five elements:
      • Timestamp
      • Car or message category. For single-class racing this is usually something like Pits or Timing, but can be any display-formatted string.
      • Message text
      • Display class information that implementations can use to decide on message formatting and colours
      • Car number to which the message relates (optional)
  • session: Required. Data relating to the session.
    • timeElapsed: Seconds elapsed since start of session.
    • timeRemain: Seconds remaining in session.
    • lapsRemain: Laps remaining in race (for distance-certain events). When present this value is assumed to take precedence over timeRemain.
    • flagState: Required. Current flag. (Note the UK English spelling of chequered). For possible values see Constants and enumerations.
    • trackData: Array of values corresponding to the headings in the service manifest’s trackDataSpec array.