Protocol reference

Event upload

Gameplay events uploaded over HTTP.

Event upload

event_batch

agent → controller, HTTP POST

The body of an event upload: 1 to 128 frames of the server that allocation_id names, with consecutive seq. Store frames idempotently by allocation_id and seq, because a lost receipt means the same frames arrive again.

This schema checks only each frame's position, so one bad event cannot fail the batch. Parse each frame on its own with EventBatchFrame, and quarantine a frame that fails by listing it in rejected of the EventBatchReceipt.

A server plays the one match of its launch, so the match of a batch is the match that the controller launched allocation_id with. The frames come to at most 2 MiB together.

Rejected unless each frame's seq is one above the seq of the frame before it.

Example
{
  "allocation_id": "5b1e2c7a-8d4f-4c3b-9a6e-2f1d0c9b8a7e",
  "frames": [
    {
      "seq": 0,
      "event": {
        "type": "map_start",
        "timestamp": 1700000014000,
        "tick": 0,
        "plugin_version": "1.2.0",
        "framework_version": "1.1.4",
        "server_version": "1.41.0.3",
        "map_name": "de_mirage"
      }
    }
  ]
}

event_batch_receipt

controller → agent, HTTP 200

The controller's answer to a batch it holds. Every frame of the batch is either canonical history or quarantined under one of the rejected entries, and the agent may delete them all. Resending a quarantined frame would fail the same way.

  • rejectedobject[]

    Frames quarantined instead of stored.

    • seqEventSeq

      The quarantined frame.

      EventSeq

      An event's position among its server's events, from 0.

      integer ≥ 0

    • reasonstring ≥ 1 chars

      Why it was quarantined.

Example
{
  "rejected": []
}

event_batch_rejection

controller → agent, HTTP 409

The body of a 409 answer to an event upload. The controller could not read the identities of the batch, so it refuses the whole batch. The agent retries that server with a backoff of its own, and the node's other servers upload meanwhile.

  • code"event_integrity_error"

    Always event_integrity_error.

  • detailstring

    What made the batch untrustworthy.

Example
{
  "code": "event_integrity_error",
  "detail": "seq 12 was already stored with different content"
}

Match

The map starting, going live and ending, round backups, and plugin log lines.

map_start

Sent when a map has loaded on the server, as the first event of the map's history.

The plugin sends one on every load. A workshop map loads twice, and an admin's changelevel loads another map.

  • type"map_start"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • plugin_versionstring ≤ 128 chars

    The version of the Ankor plugin, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.

  • framework_versionstring ≤ 128 chars

    The version of SwiftlyS2, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.

  • server_versionstring ≤ 128 chars

    The version of the CS2 server, up to 128 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.

  • map_namestring

    The map that loaded, as the engine names it.

    string

    Must match ^[A-Za-z0-9_/-]{1,128}$

Example
{
  "type": "map_start",
  "timestamp": 1700000014000,
  "tick": 0,
  "plugin_version": "1.2.0",
  "framework_version": "1.1.4",
  "server_version": "1.41.0.3",
  "map_name": "de_mirage"
}

going_live

Sent when the match goes live, with the round settings that it plays under.

  • type"going_live"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • team1_sidePlayingSide

    Team 1's side for the first half.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • max_roundsinteger 1–240

    Rounds in regulation, as mp_maxrounds, up to 240. MR12 is 24 and MR15 is 30.

  • overtimeboolean

    Whether a tie after regulation goes to overtime, as mp_overtime_enable.

  • overtime_max_roundsinteger 1–60

    Rounds in one overtime, both halves together, as mp_overtime_maxrounds. The bound is 60, ten times the stock 6.

  • friendly_fireboolean

    Whether bullets and melee hurt teammates. Grenades always do.

Example
{
  "type": "going_live",
  "timestamp": 1700000014000,
  "tick": 100000,
  "team1_side": "ct",
  "max_rounds": 24,
  "overtime": true,
  "overtime_max_rounds": 6,
  "friendly_fire": false
}

round_backup

Sent as each live round starts. The newest one of a map, with the launch of that map, holds everything that a restore needs on another node.

  • type"round_backup"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • team1_sidePlayingSide

    Team 1's side in that round. On a launch, the plugin seats players by it through warmup, before the load.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • rulesMatchRules

    The rules that the map was played under. A restore plays on under these rules instead of the rules of its launch.

    MatchRules

    The rules of a match, as a launch asks for them and as going_live and round_backup report the server playing them.

    The plugin reads the round settings off the server's cvars. friendly_fire comes from the launch, and Ankor applies it through the damage reductions instead of mp_friendlyfire.

    • max_roundsinteger 1–240

      Rounds in regulation, as mp_maxrounds, up to 240. MR12 is 24 and MR15 is 30.

    • overtimeboolean

      Whether a tie after regulation goes to overtime, as mp_overtime_enable.

    • overtime_max_roundsinteger 1–60

      Rounds in one overtime, both halves together, as mp_overtime_maxrounds. The bound is 60, ten times the stock 6.

    • friendly_fireboolean

      Whether bullets and melee hurt teammates. Grenades always do.

  • filestring 1–524288 chars

    The backup file as the engine wrote it, up to 524288 characters. The file holds the money and equipment of every player, keyed by account, and only mp_backup_restore_load_file reads it.

    The file is text with tabs and line breaks, so a file at the length cap stays within the frame limits once JSON escapes it. Rejected when it holds a lone UTF-16 surrogate.

    string 1–524288 chars

    Must match ^[\t\n\r\P{Cc}]*$

  • roundRoundNumber

    The one-based round that the backup starts. The file numbers rounds from zero, one lower.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • team1_scoreinteger 0–1000

    Team 1's score before that round.

  • team2_scoreinteger 0–1000

    Team 2's score before that round.

  • rosterRoster

    The teams and spectators that the map is played with.

    Roster

    The teams and spectators of a match. Each player holds one place on the server, whichever team or list the player is in.

    Rejected when a SteamID appears twice across both teams and spectators, or when they hold more than 64 together.

    • team1RosterTeam

      Team 1, which events number 1.

      RosterTeam

      One team of a Roster.

      • namestring ≤ 30 chars

        The team name that players see, up to 30 characters. Rejected when it is blank, or when it holds a NUL or a lone UTF-16 surrogate.

        string ≤ 30 chars

        Must match \S

      • playersSteamId64[], ≥ 1 items

        The players of the team, captain first. The captain may use !forceready and picks the side after the knife round. A team has at least one player, so it always has a captain.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

    • team2RosterTeam

      Team 2, which events number 2.

      RosterTeam

      One team of a Roster.

      • namestring ≤ 30 chars

        The team name that players see, up to 30 characters. Rejected when it is blank, or when it holds a NUL or a lone UTF-16 surrogate.

        string ≤ 30 chars

        Must match \S

      • playersSteamId64[], ≥ 1 items

        The players of the team, captain first. The captain may use !forceready and picks the side after the knife round. A team has at least one player, so it always has a captain.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

    • spectatorsSteamId64[], ≤ 2 items

      Players allowed in as spectators, who watch with the game's free camera, up to 2. When ready_mode is manual, they ready up too.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

Example
{
  "type": "round_backup",
  "timestamp": 1700001214000,
  "tick": 180000,
  "round": 14,
  "team1_side": "t",
  "team1_score": 7,
  "team2_score": 6,
  "rules": {
    "max_rounds": 24,
    "overtime": true,
    "overtime_max_rounds": 6,
    "friendly_fire": false
  },
  "file": "\"SaveFile\"\n{\n\t\"round\"\t\t\"13\"\n\t…\n}\n",
  "roster": {
    "team1": {
      "name": "Blue",
      "players": [
        "76561198000000001",
        "76561198000000002"
      ]
    },
    "team2": {
      "name": "Orange",
      "players": [
        "76561198000000011",
        "76561198000000012"
      ]
    },
    "spectators": []
  }
}

match_restored

Sent when the server has loaded a round backup, from the restore of its launch, from a restore_round, or from an mp_backup_restore_load_file that someone ran by hand.

The round_start that follows plays round again. From that round_start on, the events of the server replace everything that it sent for that round and the rounds after it.

The plugin reads the scores and the side from the engine once the engine has loaded the file. The plugin refuses a load during the knife round, the side choice, the halftime break and after the match has ended.

  • type"match_restored"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The one-based round that the match plays on from.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • team1_sidePlayingSide

    Team 1's side in that round.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • team1_scoreinteger 0–1000

    Team 1's score before that round.

  • team2_scoreinteger 0–1000

    Team 2's score before that round.

Example
{
  "type": "match_restored",
  "timestamp": 1700001300000,
  "tick": 190000,
  "round": 14,
  "team1_side": "t",
  "team1_score": 7,
  "team2_score": 6
}

map_end

Sent when the map is over. After a played map, the scoreboard stays up for 60 seconds, then the server kicks the players, sends its remaining events and quits. After a ready_timeout, the server kicks the players at once.

Rejected unless winner_team is the team with the higher score of a played map, or null when the scores are equal or the map was not played out. Rejected unless teams is set for a ready_timeout, with both scores 0, and null otherwise.

  • type"map_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • reasonMapEndReason

    Why the map ended.

    MapEndReason

    Why a map ended:

    Only a played map has a winner. The controller decides what any other end means for the match.

    string enum

    • "played"

      the map was played out.

    • "ready_timeout"

      ready_timeout_seconds passed in warmup, before the match started.

    • "abandoned"

      every rostered player left after the match began, in the knife round, the side choice or live play.

  • winner_teamTeamNumber | null

    The team with the higher score of a played map. Null for a draw, and for any other end.

    TeamNumber

    A team of the Roster, team 1 or team 2, whichever side it plays.

    One of 2:

    1

  • team1_scoreinteger 0–1000

    Team 1's score when the map ended.

  • team2_scoreinteger 0–1000

    Team 2's score when the map ended.

  • teamsobject | null

    Who was on the server and ready when ready_timeout_seconds passed. Null for any other end.

    • team1ReadyTeam

      ReadyTeam

      A team's players when the ready deadline passed.

      • connectedinteger 0–64

        Rostered players of the team on the server.

      • readyboolean

        Whether the team counted as ready, its captain's force-ready included.

    • team2ReadyTeam

      ReadyTeam

      A team's players when the ready deadline passed.

      • connectedinteger 0–64

        Rostered players of the team on the server.

      • readyboolean

        Whether the team counted as ready, its captain's force-ready included.

    • spectatorsReadyTeam | null

      The rostered spectators, as one group. Null unless the match has them ready up.

      ReadyTeam

      A team's players when the ready deadline passed.

      • connectedinteger 0–64

        Rostered players of the team on the server.

      • readyboolean

        Whether the team counted as ready, its captain's force-ready included.

Examples
{
  "type": "map_end",
  "timestamp": 1700003614000,
  "tick": 460000,
  "reason": "played",
  "winner_team": 1,
  "team1_score": 13,
  "team2_score": 9,
  "teams": null
}
{
  "type": "map_end",
  "timestamp": 1700000310000,
  "tick": 19840,
  "reason": "ready_timeout",
  "winner_team": null,
  "team1_score": 0,
  "team2_score": 0,
  "teams": {
    "team1": {
      "connected": 5,
      "ready": true
    },
    "team2": {
      "connected": 3,
      "ready": false
    },
    "spectators": null
  }
}

log

Sent when the plugin logs a line worth keeping with the match.

  • type"log"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • level"debug" | "info" | "warn" | "error"

    The severity of the line.

  • messagestring ≤ 8192 chars

    The log line, up to 8192 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.

Example
{
  "type": "log",
  "timestamp": 1700000015000,
  "tick": 128,
  "level": "warn",
  "message": "force ready of team 1 by 76561198000000001 (alpha)"
}

Players

Players joining, leaving and changing sides.

player_connect

Sent when a player connects after the match leaves warmup. get_server_status lists who is on the server during warmup.

  • type"player_connect"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • playerPlayerRef

    The player who connected.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • rejectedboolean

    Whether the plugin kicked the player because the SteamID is not on any roster.

Example
{
  "type": "player_connect",
  "timestamp": 1700000014000,
  "tick": 64,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "spec",
    "team": 1
  },
  "rejected": false
}

player_disconnect

Sent when a player leaves after the match leaves warmup.

  • type"player_disconnect"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • playerPlayerRef

    The player who left.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • reasonstring ≤ 64 chars

    The engine's disconnect reason, up to 64 characters. Rejected when it holds a NUL or a lone UTF-16 surrogate.

Example
{
  "type": "player_disconnect",
  "timestamp": 1700000900000,
  "tick": 150000,
  "player": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2
  },
  "reason": "Disconnect"
}

Knife round

The knife round and side choice.

knife_start

Sent when the knife round begins.

  • type"knife_start"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

Example
{
  "type": "knife_start",
  "timestamp": 1700000030000,
  "tick": 2048
}

knife_end

Sent when the knife round ends. When both teams survive, the counts in this event decide the winner.

Rejected when a team's health is above 1000 times its players alive.

  • type"knife_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • winner_teamTeamNumber

    The team that won the knife round.

    TeamNumber

    A team of the Roster, team 1 or team 2, whichever side it plays.

    One of 2:

    1

  • winner_sidePlayingSide

    The side that the winning team won on.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • team1_aliveinteger 0–64

    Players of team 1 alive at the end.

  • team2_aliveinteger 0–64

    Players of team 2 alive at the end.

  • team1_healthinteger 0–64000

    Health points left to team 1, summed over its players alive, each at most 1000.

  • team2_healthinteger 0–64000

    Health points left to team 2, summed like team1_health.

Example
{
  "type": "knife_end",
  "timestamp": 1700000090000,
  "tick": 6000,
  "winner_team": 2,
  "winner_side": "t",
  "team1_alive": 0,
  "team2_alive": 2,
  "team1_health": 0,
  "team2_health": 145
}

side_choice

Sent when the knife round winners choose a side, or run out of time and stay.

  • type"side_choice"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • teamTeamNumber

    The team that chose.

    TeamNumber

    A team of the Roster, team 1 or team 2, whichever side it plays.

    One of 2:

    1

  • choicestring enum

    What the team chose.

    string enum

    • "stay"

      keep the sides of the knife round.

    • "swap"

      exchange the sides.

  • team1_sidePlayingSide

    The side of team 1 for the first half, after the choice.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

Example
{
  "type": "side_choice",
  "timestamp": 1700000100000,
  "tick": 6600,
  "team": 2,
  "choice": "swap",
  "team1_side": "t"
}

Rounds

Round boundaries, economy, shots and results.

round_start

Sent when a round begins.

The same round can begin again with no round_end between. The engine restarts a round that a team leaves before it is decided, as when every player on it disconnects or loses their connection. The later round_start replaces the earlier one, and the round is played from it.

  • type"round_start"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • team1_sidePlayingSide

    Team 1's side this round.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • playersRoundPlayer[], ≤ 64 items

    The players present when the round started, each once. An empty array is authoritative, so the round had no players. Rejected when two entries share a player.steam_id.

    RoundPlayer

    The state and money of a player when the plugin sampled the round. Money is in dollars.

    • playerPlayerRef

      The player sampled.

      PlayerRef

      A player as the event saw them.

      • steam_idSteamId64

        The player's SteamID64.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

      • namePlayerName

        The player's name when the event happened.

        PlayerName

        A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

        string ≤ 64 chars

        Must match ^[^\p{Cc}]*$

      • sideSide

        The side that the player was on.

        Side

        The side a player is on.

        string enum

        • "t"

          terrorists, a playing side.

        • "ct"

          counter-terrorists, a playing side.

        • "spec"

          spectators and players on no team.

      • teamTeamNumber | null

        The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

        TeamNumber

        A team of the Roster, team 1 or team 2, whichever side it plays.

        One of 2:

        1

    • aliveboolean

      Whether the player was alive when sampled.

    • equipment_valueinteger 0–65535

      Dollars of equipment that the player carried, the engine's figure.

    • cashinteger 0–65535

      Dollars in hand when sampled.

    • start_cashinteger 0–65535

      Dollars in hand at the start of the round.

    • cash_spentinteger 0–131070

      Dollars spent this round by the time of the sample.

  • carryoverobject | null

    The players of the previous round as that round left them, after exit kills and pickups. Null across an equipment reset.

    • from_roundRoundNumber

      The round after which the plugin took the snapshot.

      RoundNumber

      A one-based round number. A map's history holds far fewer than the 1000 it allows.

      integer 1–1000

    • sampled_ticknumber ≥ 0

      The server tick when the plugin took the snapshot.

    • playersobject[], ≤ 64 items

      The players as that round left them, with what each carried. Rejected when two entries share a player.steam_id.

      • playerPlayerRef

        The player sampled.

        PlayerRef

        A player as the event saw them.

        • steam_idSteamId64

          The player's SteamID64.

          SteamId64

          A SteamID64 as 17 decimal digits.

          string

          Must match ^\d{17}$

        • namePlayerName

          The player's name when the event happened.

          PlayerName

          A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

          string ≤ 64 chars

          Must match ^[^\p{Cc}]*$

        • sideSide

          The side that the player was on.

          Side

          The side a player is on.

          string enum

          • "t"

            terrorists, a playing side.

          • "ct"

            counter-terrorists, a playing side.

          • "spec"

            spectators and players on no team.

        • teamTeamNumber | null

          The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

          TeamNumber

          A team of the Roster, team 1 or team 2, whichever side it plays.

          One of 2:

          1

      • aliveboolean

        Whether the player was alive when sampled.

      • equipment_valueinteger 0–65535

        Dollars of equipment that the player carried, the engine's figure.

      • cashinteger 0–65535

        Dollars in hand when sampled.

      • start_cashinteger 0–65535

        Dollars in hand at the start of the round.

      • cash_spentinteger 0–131070

        Dollars spent this round by the time of the sample.

      • inventoryPlayerInventory | null

        What the player carried. Null when the plugin could not read the pawn.

        PlayerInventory

        What a player carries. A null inventory means that the plugin could not read the pawn.

        • itemsInventoryItem[], ≤ 64 items

          Weapons, grenades and other items held, up to 64.

          InventoryItem

          One kind of item that a player holds: the engine's item definition index as weapon, a quantity, and the unit price in this game build.

          • weaponinteger 1–65535

            The engine's item definition index.

          • quantityinteger 1–20

            Items of this kind that the player holds, up to ten times the stock limit of 2 flashbangs.

          • unit_valueinteger 0–52000

            Dollars that one item costs, up to ten times the dearest stock item, the M249 at 5,200.

        • armorinteger 0–1000

          Armor points, up to 1000, ten times the stock 100.

        • helmetboolean

          Whether the armor includes a helmet.

        • defuse_kitboolean

          Whether the player carries a defuse kit.

Example
{
  "type": "round_start",
  "timestamp": 1700000200000,
  "tick": 110000,
  "round": 2,
  "round_time": 0,
  "team1_side": "ct",
  "players": [
    {
      "player": {
        "steam_id": "76561198000000001",
        "name": "alpha",
        "side": "ct",
        "team": 1
      },
      "alive": true,
      "equipment_value": 1000,
      "cash": 2400,
      "start_cash": 2400,
      "cash_spent": 0
    }
  ],
  "carryover": {
    "from_round": 1,
    "sampled_tick": 109500,
    "players": [
      {
        "player": {
          "steam_id": "76561198000000001",
          "name": "alpha",
          "side": "ct",
          "team": 1
        },
        "alive": true,
        "equipment_value": 1000,
        "cash": 2400,
        "start_cash": 800,
        "cash_spent": 650,
        "inventory": {
          "items": [
            {
              "weapon": 32,
              "quantity": 1,
              "unit_value": 200
            }
          ],
          "armor": 100,
          "helmet": false,
          "defuse_kit": false
        }
      }
    ]
  }
}

round_freeze_end

Sent when freeze time ends, as the authoritative list of the players who take part in the round after reconnects during freeze time.

  • type"round_freeze_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • team1_sidePlayingSide

    Team 1's side this round.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • playersRoundPlayer[], ≤ 64 items

    Everyone who takes part in the round, each once. Rejected when two entries share a player.steam_id.

    RoundPlayer

    The state and money of a player when the plugin sampled the round. Money is in dollars.

    • playerPlayerRef

      The player sampled.

      PlayerRef

      A player as the event saw them.

      • steam_idSteamId64

        The player's SteamID64.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

      • namePlayerName

        The player's name when the event happened.

        PlayerName

        A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

        string ≤ 64 chars

        Must match ^[^\p{Cc}]*$

      • sideSide

        The side that the player was on.

        Side

        The side a player is on.

        string enum

        • "t"

          terrorists, a playing side.

        • "ct"

          counter-terrorists, a playing side.

        • "spec"

          spectators and players on no team.

      • teamTeamNumber | null

        The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

        TeamNumber

        A team of the Roster, team 1 or team 2, whichever side it plays.

        One of 2:

        1

    • aliveboolean

      Whether the player was alive when sampled.

    • equipment_valueinteger 0–65535

      Dollars of equipment that the player carried, the engine's figure.

    • cashinteger 0–65535

      Dollars in hand when sampled.

    • start_cashinteger 0–65535

      Dollars in hand at the start of the round.

    • cash_spentinteger 0–131070

      Dollars spent this round by the time of the sample.

Example
{
  "type": "round_freeze_end",
  "timestamp": 1700000215000,
  "tick": 110960,
  "round": 2,
  "round_time": 0,
  "team1_side": "ct",
  "players": [
    {
      "player": {
        "steam_id": "76561198000000001",
        "name": "alpha",
        "side": "ct",
        "team": 1
      },
      "alive": true,
      "equipment_value": 4100,
      "cash": 0,
      "start_cash": 2400,
      "cash_spent": 2400
    }
  ]
}

round_buy_end

Sent when buy time closes, mp_buytime after freeze time ends, with the equipment value that each roster team carried, as the sum of the engine's figure for each pawn.

The plugin reads a player at the last buy-zone exit inside the window, or live at the close while the player is still in a buy zone. Snapshots at a death or disconnect keep a buy that was made before the window closes. An earlier buy-zone exit counts for a player who never returned.

Rejected unless team1_equipment_value and team2_equipment_value are each the sum of equipment_value over the players whose player.team is that team.

  • type"round_buy_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playersobject[], ≤ 64 items

    The samples behind the team totals, each player once. Rejected when two entries share a player.steam_id.

    • playerPlayerRef

      The player read.

      PlayerRef

      A player as the event saw them.

      • steam_idSteamId64

        The player's SteamID64.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

      • namePlayerName

        The player's name when the event happened.

        PlayerName

        A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

        string ≤ 64 chars

        Must match ^[^\p{Cc}]*$

      • sideSide

        The side that the player was on.

        Side

        The side a player is on.

        string enum

        • "t"

          terrorists, a playing side.

        • "ct"

          counter-terrorists, a playing side.

        • "spec"

          spectators and players on no team.

      • teamTeamNumber | null

        The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

        TeamNumber

        A team of the Roster, team 1 or team 2, whichever side it plays.

        One of 2:

        1

    • equipment_valueinteger 0–65535

      Dollars of equipment that the player carried.

    • cashinteger 0–65535

      Dollars in hand.

    • start_cashinteger 0–65535

      Dollars in hand at the start of the round.

    • cash_spentinteger 0–131070

      Dollars spent this round.

    • sampled_ticknumber ≥ 0

      The server tick when the plugin read the player.

  • team1_equipment_valueinteger 0–4194240

    Dollars of equipment that team 1 carried, the sum of equipment_value over its players, so the event states the economy of the round on its own.

  • team2_equipment_valueinteger 0–4194240

    Dollars of equipment that team 2 carried, summed like team1_equipment_value.

Example
{
  "type": "round_buy_end",
  "timestamp": 1700000235000,
  "tick": 112240,
  "round": 2,
  "round_time": 20,
  "players": [
    {
      "player": {
        "steam_id": "76561198000000001",
        "name": "alpha",
        "side": "ct",
        "team": 1
      },
      "equipment_value": 4100,
      "cash": 0,
      "start_cash": 2400,
      "cash_spent": 2400,
      "sampled_tick": 111800
    },
    {
      "player": {
        "steam_id": "76561198000000002",
        "name": "bravo",
        "side": "t",
        "team": 2
      },
      "equipment_value": 3700,
      "cash": 300,
      "start_cash": 3400,
      "cash_spent": 3100,
      "sampled_tick": 111900
    }
  ],
  "team1_equipment_value": 4100,
  "team2_equipment_value": 3700
}

round_end

Sent when a round is decided. The last gameplay reports of the round may still follow, and round_complete closes it.

  • type"round_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • winner_sidePlayingSide

    The side that won the round.

    PlayingSide

    A playing side, for a field that never holds spec.

    string enum

    • "t"

      terrorists.

    • "ct"

      counter-terrorists.

  • winner_teamTeamNumber

    The roster team that won the round.

    TeamNumber

    A team of the Roster, team 1 or team 2, whichever side it plays.

    One of 2:

    1

  • reasonRoundEndReason

    Why the round ended.

    RoundEndReason

    Why a round ended, as the engine names it. When the engine gives a reason that this list does not name, the plugin sends unknown.

    string enum

    • "unknown"
    • "target_bombed"

      The bomb exploded.

    • "terrorists_escaped"
    • "cts_prevent_escape"
    • "escaping_terrorists_neutralized"
    • "bomb_defused"

      The bomb was defused.

    • "cts_win"

      Every T was killed.

    • "terrorists_win"

      Every CT was killed.

    • "round_draw"
    • "all_hostages_rescued"
    • "target_saved"

      Time ran out without the bomb planted.

    • "hostages_not_rescued"
    • "terrorists_not_escaped"
    • "game_commencing"
    • "terrorists_surrender"

      The Ts voted to surrender. The map ends after this round.

    • "cts_surrender"

      The CTs voted to surrender. The map ends after this round.

    • "terrorists_planted"
    • "cts_reached_hostage"
    • "survival_win"
    • "survival_draw"
  • team1_scoreinteger 0–1000

    Team 1's score after this round.

  • team2_scoreinteger 0–1000

    Team 2's score after this round.

  • round_lengthnumber 0–4000

    Seconds that the round lasted, from the end of freeze time to the end of the round.

Example
{
  "type": "round_end",
  "timestamp": 1700000300000,
  "tick": 116400,
  "round": 2,
  "round_time": 85.25,
  "winner_side": "ct",
  "winner_team": 1,
  "reason": "cts_win",
  "team1_score": 2,
  "team2_score": 0,
  "round_length": 70.25
}

round_complete

Sent after every gameplay report of a scored round, its round_shots included, before the next round or the map end.

  • type"round_complete"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

Example
{
  "type": "round_complete",
  "timestamp": 1700000305000,
  "tick": 116720,
  "round": 2,
  "round_time": 90.25
}

round_shots

Sent once for each round when it closes, at halftime, the next round_start or the map_end, with the shots that each player fired over the round.

A round that starts again with no round_end, as described on round_start, sends none for the attempt it abandoned. Neither does a round that a restore cut off, which the match_restored replaces.

players lists each player who fired, and is empty when nobody did. The plugin counts shots from the engine's weapon_fire, up to 4096 for each player, and counts no more. Knives and grenades are left out, because they fire no rounds. A throw arrives as grenade_throw instead. Hits are the player_hurt events of the same round, attacker and weapon.

Rejected when a player's shots add up to more than 4096, or when a player or a weapon of a player is listed twice.

  • type"round_shots"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the shots were fired in.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • playersPlayerShots[], ≤ 64 items

    Each player who fired, once each.

    PlayerShots

    The shots that one player fired over a round.

    • playerPlayerRef

      The player.

      PlayerRef

      A player as the event saw them.

      • steam_idSteamId64

        The player's SteamID64.

        SteamId64

        A SteamID64 as 17 decimal digits.

        string

        Must match ^\d{17}$

      • namePlayerName

        The player's name when the event happened.

        PlayerName

        A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

        string ≤ 64 chars

        Must match ^[^\p{Cc}]*$

      • sideSide

        The side that the player was on.

        Side

        The side a player is on.

        string enum

        • "t"

          terrorists, a playing side.

        • "ct"

          counter-terrorists, a playing side.

        • "spec"

          spectators and players on no team.

      • teamTeamNumber | null

        The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

        TeamNumber

        A team of the Roster, team 1 or team 2, whichever side it plays.

        One of 2:

        1

    • weaponsWeaponShots[], 1–4096 items

      Each weapon that the player fired, once each.

      WeaponShots

      The shots that a player fired with one weapon over a round. Rejected unless shots equals the number of ticks.

      • weaponWeapon

        The weapon fired.

        Weapon

        A weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when id is a number and fallback is not null.

        • idinteger 1–65535 | null

          The item definition index, a 16-bit unsigned integer. Null when the item has none.

        • fallbackstring | null

          The engine class name of an item without an index. Null when id is set, or when the engine named no weapon either.

          string

          Must match ^[A-Za-z0-9_]{1,64}$

      • shotsinteger 1–4096

        Shots fired, which equals the number of ticks.

      • ticksnumber ≥ 0[], 1–4096 items

        The server tick of each shot.

Example
{
  "type": "round_shots",
  "timestamp": 1700000300000,
  "tick": 116400,
  "round": 2,
  "players": [
    {
      "player": {
        "steam_id": "76561198000000001",
        "name": "alpha",
        "side": "ct",
        "team": 1
      },
      "weapons": [
        {
          "weapon": {
            "id": 16,
            "fallback": null
          },
          "shots": 3,
          "ticks": [
            113880.25,
            113888.5,
            113896
          ]
        }
      ]
    }
  ]
}

round_mvp

Sent when the engine names the MVP of a round.

  • type"round_mvp"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlayerRef

    The MVP of the round.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • reasoninteger 0–31

    The engine's MVP reason code, a small enum.

Example
{
  "type": "round_mvp",
  "timestamp": 1700000300000,
  "tick": 116400,
  "round": 2,
  "round_time": 85.25,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1
  },
  "reason": 1
}

Combat

Kills, damage, flashes and grenades.

player_death

Sent when a player dies. Rejected when the assister has the steam_id of the victim or the attacker.

  • type"player_death"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • victimPlacedPlayer

    The player who died.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • attackerPlayerAt | null

    The player credited with the kill. Null when no player dealt it.

    For a grenade kill, the position is where the thrower was at the death. The grenade_throw gives where they threw from.

    PlayerAt

    A PlayerRef with the position of the player when the event happened.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition | null

      Where the player stood and looked. Null when the player had no body in the world.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • assisterPlayerRef | null

    The player credited with the assist. Null when there is none.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • weaponWeapon

    The killing weapon.

    Weapon

    A weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when id is a number and fallback is not null.

    • idinteger 1–65535 | null

      The item definition index, a 16-bit unsigned integer. Null when the item has none.

    • fallbackstring | null

      The engine class name of an item without an index. Null when id is set, or when the engine named no weapon either.

      string

      Must match ^[A-Za-z0-9_]{1,64}$

  • causeDamageCause

    What caused the death.

    DamageCause

    What caused damage or a death.

    string enum

    • "player"

      another player dealt it, with a weapon or a grenade.

    • "bomb"

      the planted bomb exploded.

    • "fall"

      the victim fell.

    • "self"

      the victim's own grenade or fire.

    • "disconnect"

      the victim left the server, which kills a living player.

    • "other"

      anything else, such as a map's damage trigger or the plugin moving a player to the spectators.

  • headshotboolean

    Whether the killing hit was to the head.

  • penetratedinteger 0–10

    Surfaces that the bullet went through. The bound is a margin, not a measured engine limit.

  • thru_smokeboolean

    Whether the killing shot passed through smoke.

  • no_scopeboolean

    Whether the attacker fired a scoped weapon unscoped.

  • attacker_blindboolean

    Whether the attacker was flashed.

  • attacker_in_airboolean

    Whether the attacker was airborne.

  • flash_assistboolean

    Whether the assist came from a flashbang.

  • friendly_fireboolean

    Whether the attacker and the victim are on the same roster team, a team kill.

  • victim_blind_byPlayerRef | null

    The player who last blinded the victim, through a player_blind still running at the death. Null when the victim could see.

    victim_blind_remaining gives the seconds of that blind left. When the attacker is the blinder, the kill is a self-flash kill. The consumer decides how much blind must remain for that to count.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • victim_blind_remainingnumber 0–10

    Seconds left of the blind from victim_blind_by. Zero when the victim could see.

  • victim_equipment_valueinteger 0–65535

    Dollars of equipment that the victim carried when the killing blow landed, the engine's figure.

  • victim_grenades_heldInventoryItem[], ≤ 64 items | null

    Grenades still in the victim's inventory when the killing blow landed. The C4 and the knife are not grenades. Two flashbangs show as a quantity of 2, and unit_value is the price per grenade.

    An empty array means that the victim held none. Null when the plugin could not read the inventory from before the damage.

    InventoryItem

    One kind of item that a player holds: the engine's item definition index as weapon, a quantity, and the unit price in this game build.

    • weaponinteger 1–65535

      The engine's item definition index.

    • quantityinteger 1–20

      Items of this kind that the player holds, up to ten times the stock limit of 2 flashbangs.

    • unit_valueinteger 0–52000

      Dollars that one item costs, up to ten times the dearest stock item, the M249 at 5,200.

Example
{
  "type": "player_death",
  "timestamp": 1700000260000,
  "tick": 113900,
  "round": 2,
  "round_time": 45.5,
  "victim": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -1200.5,
      "y": 350,
      "z": -160,
      "pitch": 2.5,
      "yaw": 180
    }
  },
  "attacker": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -400,
      "y": 330.25,
      "z": -160,
      "pitch": 1,
      "yaw": 178.5
    }
  },
  "assister": null,
  "weapon": {
    "id": 16,
    "fallback": null
  },
  "cause": "player",
  "headshot": true,
  "penetrated": 0,
  "thru_smoke": false,
  "no_scope": false,
  "attacker_blind": false,
  "attacker_in_air": false,
  "flash_assist": false,
  "friendly_fire": false,
  "victim_blind_by": null,
  "victim_blind_remaining": 0,
  "victim_equipment_value": 3700,
  "victim_grenades_held": [
    {
      "weapon": 43,
      "quantity": 2,
      "unit_value": 200
    }
  ]
}

player_hurt

Sent when a player takes damage. Rejected when health_before is a number and health_after is above it.

  • type"player_hurt"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • victimPlacedPlayer

    The player hit.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • attackerPlayerAt | null

    The player who dealt the damage. Null for world damage.

    For grenade damage, the position is where the thrower was at the hit. The grenade_throw gives where they threw from.

    PlayerAt

    A PlayerRef with the position of the player when the event happened.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition | null

      Where the player stood and looked. Null when the player had no body in the world.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • weaponWeapon

    What dealt the damage.

    Weapon

    A weapon, by the engine's item definition index or, for an item without one, the engine's class name. Rejected when id is a number and fallback is not null.

    • idinteger 1–65535 | null

      The item definition index, a 16-bit unsigned integer. Null when the item has none.

    • fallbackstring | null

      The engine class name of an item without an index. Null when id is set, or when the engine named no weapon either.

      string

      Must match ^[A-Za-z0-9_]{1,64}$

  • causeDamageCause

    What caused the damage.

    DamageCause

    What caused damage or a death.

    string enum

    • "player"

      another player dealt it, with a weapon or a grenade.

    • "bomb"

      the planted bomb exploded.

    • "fall"

      the victim fell.

    • "self"

      the victim's own grenade or fire.

    • "disconnect"

      the victim left the server, which kills a living player.

    • "other"

      anything else, such as a map's damage trigger or the plugin moving a player to the spectators.

  • dmg_healthinteger 0–1000

    Health damage as the engine reports it, overkill included. health_before and health_after give the health that the victim actually lost.

  • health_beforeinteger 0–1000 | null

    The victim's health before the hit, as the engine reports it. Null when the plugin could not read it.

  • health_afterinteger 0–1000

    The victim's health after the hit, at most health_before.

  • dmg_armorinteger 0–1000

    Armor damage.

  • hitgroupinteger 0–15

    The engine's hit group, HitGroup_t in the Source 2 SDK. The plugin sends the engine's invalid group as 0, and 9 is unused.

    • 0: generic.
    • 1: head.
    • 2: chest.
    • 3: stomach.
    • 4: left arm.
    • 5: right arm.
    • 6: left leg.
    • 7: right leg.
    • 8: neck.
    • 10: gear, the backpack hitbox.
  • friendly_fireboolean

    Whether the attacker and the victim are on the same roster team.

  • projectile_impactboolean

    Whether the grenade itself struck the player before it detonated. Such a hit counts as damage and is stored as a hit, but not as utility damage, which matches the in-game scoreboard.

  • grenade_idGrenadeId | null

    The grenade that dealt the damage, as its grenade_throw identifies it. Null for anything else.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

Example
{
  "type": "player_hurt",
  "timestamp": 1700000260000,
  "tick": 113900,
  "round": 2,
  "round_time": 45.5,
  "victim": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -1200.5,
      "y": 350,
      "z": -160,
      "pitch": 2.5,
      "yaw": 180
    }
  },
  "attacker": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -400,
      "y": 330.25,
      "z": -160,
      "pitch": 1,
      "yaw": 178.5
    }
  },
  "weapon": {
    "id": 16,
    "fallback": null
  },
  "cause": "player",
  "dmg_health": 100,
  "dmg_armor": 0,
  "health_before": 100,
  "health_after": 0,
  "hitgroup": 1,
  "friendly_fire": false,
  "projectile_impact": false,
  "grenade_id": null
}

player_blind

Sent when a flashbang blinds a player.

  • type"player_blind"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • victimPlacedPlayer

    The player blinded.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • attackerPlayerAt

    The player who threw the flashbang, placed where they were when it went off. The grenade_throw gives where they threw from.

    PlayerAt

    A PlayerRef with the position of the player when the event happened.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition | null

      Where the player stood and looked. Null when the player had no body in the world.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • durationnumber 0–10

    Seconds that the blind lasts.

  • friendly_fireboolean

    Whether the thrower and the victim are on the same roster team.

  • grenade_idGrenadeId | null

    The flashbang, as its grenade_throw identifies it. Null when the plugin did not see it thrown.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

Example
{
  "type": "player_blind",
  "timestamp": 1700000250000,
  "tick": 113260,
  "round": 2,
  "round_time": 36.1,
  "victim": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -1150,
      "y": 345.5,
      "z": -160,
      "pitch": 0,
      "yaw": -5
    }
  },
  "attacker": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -380,
      "y": 300,
      "z": -160,
      "pitch": -20,
      "yaw": 175
    }
  },
  "duration": 2.4,
  "friendly_fire": false,
  "grenade_id": 3
}

grenade_throw

Sent when a grenade leaves a player's hand. Its grenade_id identifies the grenade in the events that follow: its grenade_detonate and grenade_end, and the player_hurt and player_blind that it causes.

  • type"grenade_throw"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • grenade_idGrenadeId

    The grenade's id, unique within the server.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

  • playerPlacedPlayer

    The player who threw the grenade, placed where they stood when the projectile spawned.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • grenadeGrenadeKind

    The kind of grenade thrown.

    GrenadeKind

    The engine class name of a grenade.

    string enum

    • "flashbang"
    • "hegrenade"
    • "smokegrenade"
    • "molotov"
    • "incgrenade"
    • "decoy"
Example
{
  "type": "grenade_throw",
  "timestamp": 1700000248400,
  "tick": 113200,
  "round": 2,
  "round_time": 34.5,
  "grenade_id": 3,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -380,
      "y": 300,
      "z": -160,
      "pitch": -20,
      "yaw": 175
    }
  },
  "grenade": "flashbang"
}

grenade_detonate

Sent when a grenade detonates or a fire grenade lights. A grenade that is removed before then sends none.

  • type"grenade_detonate"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • grenade_idGrenadeId

    The grenade, as its grenade_throw identifies it.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

  • playerPlayerRef

    The player who threw the grenade, as its grenade_throw saw them.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • detonate_posWorldPos | null

    Where the engine reported the detonation. Null for a fire that lit without reporting one.

    WorldPos

    A point in the world, in engine units.

    • xnumber -32768–32768

      Engine units along the map's x axis.

    • ynumber -32768–32768

      Engine units along the map's y axis.

    • znumber -32768–32768

      Engine units along the map's z axis, the height.

Example
{
  "type": "grenade_detonate",
  "timestamp": 1700000250000,
  "tick": 113260,
  "round": 2,
  "round_time": 36.1,
  "grenade_id": 3,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1
  },
  "detonate_pos": {
    "x": -900,
    "y": 340,
    "z": -60
  }
}

grenade_end

Sent when the effect of a grenade is over, because its last entity was removed or the round closed or reset on it. Every grenade that sent a grenade_throw sends one before the round_complete of its round. A grenade whose round a restore cut off sends none; the match_restored replaces that round.

  • type"grenade_end"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the grenade was thrown in.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • grenade_idGrenadeId

    The grenade, as its grenade_throw identifies it.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

  • playerPlayerRef

    The player who threw the grenade, as its grenade_throw saw them.

    PlayerRef

    A player as the event saw them.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

  • end_round_timenumber 0–4000

    Seconds since the round started, at the moment the effect ended. A fire ends when it goes out. When the round closed on the grenade, the value is the round length plus the restart delay, which is when the engine clears the entities.

  • fire_endFireEnd | null

    How the fire ended. Null for a grenade that was not a fire, and for a fire projectile removed before it lit.

    FireEnd

    How a fire ended.

    string enum

    • "expired"

      the fire burned out, or the round closed on it.

    • "extinguished"

      a smoke put the fire out.

    • "smothered"

      the fire grenade landed inside a smoke.

  • extinguished_byGrenadeId | null

    The smoke whose cloud put this fire out, credited to the nearest live smoke. Null when no smoke put the fire out.

    GrenadeId

    The zero-based id of a grenade within its server, counted in throw order. A server throws far fewer than a million.

    integer 0–1000000

Example
{
  "type": "grenade_end",
  "timestamp": 1700000250000,
  "tick": 113260,
  "round": 2,
  "grenade_id": 3,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1
  },
  "end_round_time": 36.1,
  "fire_end": null,
  "extinguished_by": null
}

Bomb

Plants, defuses and explosions.

bomb_begin_plant

Sent when a player begins to plant the bomb.

  • type"bomb_begin_plant"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player planting.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • site"a" | "b" | null

    The bombsite. Null when the engine's target index did not resolve to a func_bomb_target.

Example
{
  "type": "bomb_begin_plant",
  "timestamp": 1700000270000,
  "tick": 114540,
  "round": 3,
  "round_time": 55.5,
  "player": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -2100,
      "y": 820,
      "z": -125,
      "pitch": 35,
      "yaw": 90
    }
  },
  "site": "a"
}

bomb_abort_plant

Sent when a player abandons a plant.

  • type"bomb_abort_plant"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player who stopped planting.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • site"a" | "b" | null

    The bombsite. Null when the engine's target index did not resolve to a func_bomb_target.

Example
{
  "type": "bomb_abort_plant",
  "timestamp": 1700000271000,
  "tick": 114604,
  "round": 3,
  "round_time": 56.5,
  "player": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -2100,
      "y": 820,
      "z": -125,
      "pitch": 10,
      "yaw": 40
    }
  },
  "site": "a"
}

bomb_planted

Sent when the bomb is planted.

  • type"bomb_planted"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player who planted.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • site"a" | "b" | null

    The bombsite. Null when the engine's target index did not resolve to a func_bomb_target.

Example
{
  "type": "bomb_planted",
  "timestamp": 1700000276000,
  "tick": 114924,
  "round": 3,
  "round_time": 61.5,
  "player": {
    "steam_id": "76561198000000002",
    "name": "bravo",
    "side": "t",
    "team": 2,
    "position": {
      "x": -2100,
      "y": 820,
      "z": -125,
      "pitch": 35,
      "yaw": 90
    }
  },
  "site": "a"
}

bomb_begin_defuse

Sent when a player begins to defuse the bomb.

  • type"bomb_begin_defuse"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player defusing.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • has_kitboolean

    Whether the defuser has a kit.

Example
{
  "type": "bomb_begin_defuse",
  "timestamp": 1700000290000,
  "tick": 115820,
  "round": 3,
  "round_time": 75.5,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -2080,
      "y": 860,
      "z": -125,
      "pitch": 40,
      "yaw": -90
    }
  },
  "has_kit": true
}

bomb_abort_defuse

Sent when a player abandons a defuse.

  • type"bomb_abort_defuse"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player who stopped defusing.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

Example
{
  "type": "bomb_abort_defuse",
  "timestamp": 1700000291000,
  "tick": 115884,
  "round": 3,
  "round_time": 76.5,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -2080,
      "y": 860,
      "z": -125,
      "pitch": 40,
      "yaw": -90
    }
  }
}

bomb_defused

Sent when the bomb is defused.

  • type"bomb_defused"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

  • playerPlacedPlayer

    The player who defused.

    PlacedPlayer

    A PlayerRef with the position of the player, for a player who acted in the world when the event happened, so the position is always known.

    • steam_idSteamId64

      The player's SteamID64.

      SteamId64

      A SteamID64 as 17 decimal digits.

      string

      Must match ^\d{17}$

    • namePlayerName

      The player's name when the event happened.

      PlayerName

      A player's name, cut to up to 64 characters, without control characters. Rejected when it holds a lone UTF-16 surrogate.

      string ≤ 64 chars

      Must match ^[^\p{Cc}]*$

    • sideSide

      The side that the player was on.

      Side

      The side a player is on.

      string enum

      • "t"

        terrorists, a playing side.

      • "ct"

        counter-terrorists, a playing side.

      • "spec"

        spectators and players on no team.

    • teamTeamNumber | null

      The roster team of the player, which the plugin looks up in its roster. Null for spectators and unknown players.

      TeamNumber

      A team of the Roster, team 1 or team 2, whichever side it plays.

      One of 2:

      1

    • positionPlayerPosition

      Where the player stood and looked.

      PlayerPosition

      Where a player stood, as a WorldPos, and where the player looked.

      • xnumber -32768–32768

        Engine units along the map's x axis.

      • ynumber -32768–32768

        Engine units along the map's y axis.

      • znumber -32768–32768

        Engine units along the map's z axis, the height.

      • pitchnumber -90–90

        Degrees of eye pitch. A positive pitch looks down.

      • yawnumber -360–360

        Degrees of eye yaw, counter-clockwise from the +x axis.

  • time_remainingnumber 0–90

    Seconds left on the bomb, up to 90, the most that mp_c4timer allows.

  • has_kitboolean

    Whether the defuser has a kit.

Example
{
  "type": "bomb_defused",
  "timestamp": 1700000296000,
  "tick": 116204,
  "round": 3,
  "round_time": 81.5,
  "player": {
    "steam_id": "76561198000000001",
    "name": "alpha",
    "side": "ct",
    "team": 1,
    "position": {
      "x": -2080,
      "y": 860,
      "z": -125,
      "pitch": 40,
      "yaw": -90
    }
  },
  "time_remaining": 20,
  "has_kit": true
}

bomb_exploded

Sent when the bomb explodes.

  • type"bomb_exploded"
  • timestampinteger 1577836800000–4102444800000

    Unix milliseconds on the server's wall clock.

  • ticknumber ≥ 0

    The server tick when the event happened, as the engine's map tick plus its sub-tick fraction.

    The plugin sends events as they happen, so seq follows the same order. round_shots is the exception, because the plugin sends it when the round closes, and the ticks of each weapon place each shot.

  • roundRoundNumber

    The round that the event happened in, even when the event arrives later.

    RoundNumber

    A one-based round number. A map's history holds far fewer than the 1000 it allows.

    integer 1–1000

  • round_timenumber 0–4000

    Seconds since the round started.

Example
{
  "type": "bomb_exploded",
  "timestamp": 1700000316000,
  "tick": 117484,
  "round": 4,
  "round_time": 101.5
}