Rocket League Stats API

This document outlines capabilities of the Rocket League Game Data API. First, players must ask the game to enable this feature by editing their TAStatsAPI.ini (or DefaultStatsAPI.ini if it doesn't exist), explained below. Once active, this feature will open a tcp and/or web socket on the player's machine that emits gameplay data and events as well as ingests certain commands. Third party programs can ingest this data to power a variety of applications, such as custom broadcaster HUDs.

Overview

The Stats API broadcasts JSON messages over a local socket while a match is in progress. Messages are sent both at a configurable periodic rate and when specific match events occur. Event data is always emitted on the same tick that the event occurs, regardless of the user's PacketSendRate.
Note: All configuration must be done before the client starts — changes to the ini while the client is running require a restart.
Field visibility:
  • Fields marked CONDITIONAL are only present when relevant.
  • Fields marked SPECTATOR are only sent while spectating.
  • Fields marked TEAM are only sent when you're on the same team as the player they describe.
  • Fields marked REPLAY are only relevant during replays.

Configuration

Edit <Install Dir>\TAGame\Config\TAStatsAPI.ini (or DefaultStatsAPI.ini if it doesn't exist) under the [TAGame.MatchStatsExporter_TA] section before launching the client.
SettingTypeDefaultDescription
PacketSendRatefloat0 (disabled)Number of UpdateState packets broadcast per second. Capped at 120; 0 disables the feature.
Portint49123Local port the client listens on for TCP connections. Set to 0 to disable. Must be different from WebPort.
WebPortint49124Local port the client listens on to open a WebSocket. Set to 0 to disable. Must be different from Port.

Message Format

Every message follows this envelope structure:
{
  "Event": "EventName",
  "Data":  { /* event-specific payload */ }
}

Tick

Sent X amount of times per second based on the player's PacketSendRate preference.

Example

{
  "Event": "UpdateState",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "Players": [
      {
        "Name": "PlayerA",
        "PrimaryId": "Steam|123|0",
        "Shortcut": 1,
        "TeamNum": 0,
        "Score": 125,
        "Goals": 1,
        "Shots": 2,
        "Assists": 0,
        "Saves": 1,
        "Touches": 14,
        "CarTouches": 3,
        "Demos": 0,
        "Loadout": [
          "body_grain",
          "Skin_bartees",
          "Wheel_SoccerBall",
          "Boost_AlphaReward",
          "None",
          "None"
        ],
        "bHasCar": true,
        "Speed": 1200,
        "Boost": 45,
        "bBoosting": true,
        "bOnGround": true,
        "bOnWall": false,
        "bPowersliding": false,
        "bDemolished": true,
        "Attacker": {
          "Name": "PlayerB",
          "Shortcut": 2,
          "TeamNum": 1
        },
        "bSupersonic": true,
        "PickupClass": "SpecialPickup_GrapplingHook_TA"
      }
    ],
    "Game": {
      "Teams": [
        {
          "Name": "Blue",
          "TeamNum": 0,
          "Score": 1,
          "ColorPrimary": "0000FF",
          "ColorSecondary": "0000AA"
        }
      ],
      "PlaylistId": 11,
      "TimeSeconds": 180,
      "bOvertime": false,
      "Frame": 120,
      "Elapsed": 50.2,
      "Ball": {
        "Speed": 850.5,
        "TeamNum": 0
      },
      "bReplay": false,
      "bHasWinner": true,
      "Winner": "Blue",
      "Arena": "Stadium_P",
      "bHasTarget": true,
      "Target": {
        "Name": "PlayerA",
        "Shortcut": 1,
        "TeamNum": 0
      }
    }
  }
}
FieldTypeDescription
PlayersarrayOne entry per player in the match.
NamestringDisplay name.
PrimaryIdstringPlatform identifier in the format Platform|Uid|Splitscreen (e.g. "Steam|123|0", "Epic|456|0").
ShortcutintSpectator shortcut number.
TeamNumintTeam index (0 = Blue, 1 = Orange).
ScoreintTotal match score.
GoalsintGoals scored this match.
ShotsintShot attempts this match.
AssistsintAssists earned this match.
SavesintSaves made this match.
TouchesintTotal ball touches.
CarTouchesintTouches by the car body (not ball).
DemosintDemolitions inflicted.
Loadoutarray<string>Asset names of the equipped loadout for the player's current team sorted by product slot.
bHasCarboolSPECTATORTrue if the player currently has a vehicle.
SpeedfloatSPECTATORVehicle speed in Unreal Units/second.
BoostintSPECTATORBoost amount 0–100.
bBoostingboolSPECTATORTrue if the player is currently boosting.
bOnGroundboolSPECTATORTrue if at least 3 wheels are touching the world.
bOnWallboolSPECTATORTrue if the vehicle is on a wall.
bPowerslidingboolSPECTATORTrue if the player is holding handbrake.
bDemolishedboolSPECTATORTrue if the vehicle is currently destroyed.
bSupersonicboolSPECTATORTrue if the vehicle is at supersonic speed.
PickupClassstringSPECTATORClass name of the player's currently available Rumble pickup. Omitted when not playing with rumble powerups.
AttackerobjectCONDITIONALThe player who demolished this player. Present only when demolished.
NamestringName of the player who demolished this player.
ShortcutintSpectator shortcut of the attacker.
TeamNumintTeam index of the attacker.
GameobjectMatch metadata.
TeamsarrayOne entry per team, ordered by TeamNum.
NamestringTeam name.
TeamNumintTeam index.
ScoreintTeam goal count.
ColorPrimarystringHex color code (no #) for the team’s primary color.
ColorSecondarystringHex color code for the team’s secondary color.
PlaylistIdintPlaylist Id of the current match.
TimeSecondsintSeconds remaining in the match.
bOvertimeboolTrue if the match is in overtime.
BallobjectCurrent ball state.
SpeedfloatCurrent ball speed in Unreal Units/second.
TeamNumintIndex of the last team to touch the ball. 255 if the ball has not been touched.
bReplayboolTrue if a goal replay or history replay is active.
bHasWinnerboolTrue if a team has won.
WinnerstringName of the winning team. Empty string if no winner yet.
ArenastringAsset name of the current map (e.g. "Stadium_P").
bHasTargetboolTrue if the client is currently viewing a specific vehicle.
TargetobjectCONDITIONALPlayer currently being viewed. Members are an empty string or 0 if the player does not have a spectator target.
NamestringName of the player being viewed.
ShortcutintSpectator shortcut of the viewed player.
TeamNumintTeam index of the viewed player.
FrameintCONDITIONALCurrent frame number if a replay is active.
ElapsedfloatCONDITIONALSeconds elapsed since game start if a replay is active.

Events

Sent one frame after the ball is hit.

Example

{
  "Event": "BallHit",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "Players": [
      {
        "Name": "PlayerA",
        "Shortcut": 1,
        "TeamNum": 0
      }
    ],
    "Ball": {
      "PreHitSpeed": 0,
      "PostHitSpeed": 1450.2,
      "Location": {
        "X": -512,
        "Y": 100,
        "Z": 200
      }
    }
  }
}
FieldTypeDescription
PlayersarrayPlayers that hit the ball that frame.
NamestringDisplay name.
ShortcutintSpectator shortcut.
TeamNumintTeam index (0 = Blue, 1 = Orange).
BallobjectBall state at the moment of the hit.
PreHitSpeedfloatBall speed before the hit (Unreal Units/second).
PostHitSpeedfloatBall speed after the hit (Unreal Units/second).
LocationvectorWorld position (X, Y, Z) of the ball at impact.
MatchGuidstringOnly set for online or LAN matches.

SPECTATOR
Sent when a vehicle collects a boost pad or pill.

Example

{
  "Event": "BoostPickup",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "Player": {
      "Name": "PlayerA",
      "Shortcut": 1,
      "TeamNum": 0
    },
    "Location": {
      "X": -3072,
      "Y": 0,
      "Z": 73
    },
    "BoostAmount": 100,
    "BoostType": "BoostType_Pill",
    "bReplay": false
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.
PlayerobjectThe player who collected the boost.
NamestringDisplay name.
ShortcutintSpectator shortcut number.
TeamNumintTeam index (0 = Blue, 1 = Orange).
LocationvectorWorld location of the pickup, as { X, Y, Z }.
BoostAmountfloatAmount of boost granted by the pickup.
BoostTypestringPickup class: BoostType_Pad (small pad), BoostType_Pill (full/big boost).
bReplayboolTrue if the pickup occurred during replay playback.

Sent when the in-game clock has changed.

Example

{
  "Event": "ClockUpdatedSeconds",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "TimeSeconds": 180,
    "bOvertime": false
  }
}
FieldTypeDescription
TimeSecondsintSeconds remaining in the match.
bOvertimeboolTrue if the game is in overtime.
MatchGuidstringOnly set for online or LAN matches.

Sent at the start of each round when the countdown starts.

Example

{
  "Event": "CountdownBegin",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when the ball hits a crossbar.

Example

{
  "Event": "CrossbarHit",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "BallLocation": {
      "X": 120,
      "Y": -2944,
      "Z": 320
    },
    "BallSpeed": 870.3,
    "ImpactForce": 127.5,
    "BallLastTouch": {
      "Player": {
        "Name": "PlayerA",
        "Shortcut": 1,
        "TeamNum": 0
      },
      "Speed": 120
    }
  }
}
FieldTypeDescription
BallSpeedfloatBall speed on impact.
ImpactForcefloatImpact force of the ball relative to the crossbar normal.
BallLastTouchobjectThe last touch of the ball before the crossbar hit.
PlayerobjectThe player who made the last touch.
NamestringDisplay name.
ShortcutintSpectator shortcut.
TeamNumintTeam index (0 = Blue, 1 = Orange).
SpeedfloatSpeed of the ball resulting from this hit.
BallLocationvectorWorld position (X, Y, Z) of the ball when the impact occurred.
MatchGuidstringOnly set for online or LAN matches.

Sent when a goal replay ends.

Example

{
  "Event": "GoalReplayEnd",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when a goal replay starts.

Example

{
  "Event": "GoalReplayStart",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when the ball explodes during a goal replay. If the replay is skipped this event will not fire.

Example

{
  "Event": "GoalReplayWillEnd",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when a goal is scored.

Example

{
  "Event": "GoalScored",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "GoalSpeed": 87.3,
    "GoalTime": 127.5,
    "ImpactLocation": {
      "X": 0,
      "Y": -2944,
      "Z": 320
    },
    "Scorer": {
      "Name": "PlayerA",
      "Shortcut": 1,
      "TeamNum": 0
    },
    "Assister": {
      "Name": "PlayerC",
      "Shortcut": 3,
      "TeamNum": 0
    },
    "BallLastTouch": {
      "Player": {
        "Name": "PlayerA",
        "Shortcut": 1,
        "TeamNum": 0
      },
      "Speed": 125
    }
  }
}
FieldTypeDescription
GoalSpeedfloatSpeed of the ball (Unreal Units/second) when it crossed the goal line.
GoalTimefloatLength of the previous round in seconds.
ImpactLocationvectorWorld position (X, Y, Z) of the ball when the goal was scored.
ScorerobjectThe player who scored the goal.
NamestringDisplay name of the scorer.
ShortcutintSpectator shortcut.
TeamNumintTeam index of the scorer.
BallLastTouchobjectThe last touch of the ball before the goal.
PlayerobjectThe player who made the last touch.
NamestringName of the player who last touched the ball.
ShortcutintSpectator shortcut.
TeamNumintTeam index.
SpeedfloatSpeed of the ball resulting from this touch.
AssisterobjectCONDITIONALSame shape as Scorer. Present only when an assist was recorded.
MatchGuidstringOnly set for online or LAN matches.

Sent when all teams are created and replicated.

Example

{
  "Event": "MatchCreated",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when leaving the game.

Example

{
  "Event": "MatchDestroyed",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when the match ends and a winner is chosen.

Example

{
  "Event": "MatchEnded",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "WinnerTeamNum": 0
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.
WinnerTeamNumintTeam index of the winning team.

Sent when the first countdown starts.

Example

{
  "Event": "MatchInitialized",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when the game is paused by a match admin.

Example

{
  "Event": "MatchPaused",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when the game is unpaused by a match admin.

Example

{
  "Event": "MatchUnpaused",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when a player is added to the current match.

Example

{
  "Event": "PlayerJoined",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "PlayerName": "PlayerA",
    "PrimaryId": "Steam|123|0"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.
PlayerNamestringDisplay name of the player who joined.
PrimaryIdstringPlatform identifier in the format Platform|Uid|Splitscreen (e.g. "Steam|123|0", "Epic|456|0").

Sent when a player is removed from the current match.

Example

{
  "Event": "PlayerLeft",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "PlayerName": "PlayerA",
    "PrimaryId": "Steam|123|0"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.
PlayerNamestringDisplay name of the player who left.
PrimaryIdstringPlatform identifier in the format Platform|Uid|Splitscreen (e.g. "Steam|123|0", "Epic|456|0").

Sent when the game enters the podium state after the match ends.

Example

{
  "Event": "PodiumStart",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when a replay is initialized. Does not pertain to goal replays, only replays you load via the Match History menu.

Example

{
  "Event": "ReplayCreated",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "FileName": "Stadium_P_2026-06-05_18-42",
    "Date": "2026-06-05 18:42:13"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.
FileNamestringFile name of the replay.
DatestringTimestamp the replay was created.

Sent when the game enters the active state (after the countdown finishes).

Example

{
  "Event": "RoundStarted",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
  }
}
FieldTypeDescription
MatchGuidstringOnly set for online or LAN matches.

Sent when someone earns a stat.

Example

{
  "Event": "StatfeedEvent",
  "Data": {
    "MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
    "EventName": "Demolish",
    "Type": "Demolition",
    "MainTarget": {
      "Name": "PlayerA",
      "Shortcut": 1,
      "TeamNum": 0
    },
    "SecondaryTarget": {
      "Name": "PlayerB",
      "Shortcut": 2,
      "TeamNum": 1
    }
  }
}
FieldTypeDescription
EventNamestringAsset name of the StatEvent (e.g. "Demolish", "Save").
TypestringLocalized display label for the stat (e.g. "Demolition").
MainTargetobjectPlayer who earned the stat.
NamestringDisplay name.
ShortcutintSpectator shortcut.
TeamNumintTeam index (0 = Blue, 1 = Orange).
MatchGuidstringOnly set for online or LAN matches.
SecondaryTargetobjectCONDITIONALPlayer involved in the stat (e.g. the demolished player). Same shape as MainTarget.

Commands

Commands sent from the socket for the client to ingest. Each is a JSON object with a Command field naming the command and a Data object holding the variables below.

Command Format

Every command follows this envelope structure:
{
  "Command": "CommandName",
  "Data":    { /* command-specific variables */ }
}

ChangePOV

SPECTATORREPLAY
Changes the spectator/replay viewpoint. At least one of Focus or Perspective must be supplied; both may be combined.
VariableTypeRequiredDescription
FocusstringOne ofWhat to look at — the ball or a specific player. Limited values (see below).
PerspectivestringOne ofCamera mode to switch to. Limited values (see below).
Focus — accepted values
ValueMeaning
"Ball"Focus the ball.
"<shortcut>"A player's spectator shortcut number as a string (e.g. "1", "2"). Must be all digits; any other value is rejected.
Perspective — accepted values
ValueModeDescription
"Fly"FlyFreely move around the map.
"SoftAttach"Soft AttachFollow the position of a player or ball.
"HardAttach"Hard AttachFollow the position and rotation of a player.
"PlayerView"Player ViewView from a player's perspective. Applied automatically when Focus targets a player and no Perspective is given.
"AutoCam"Auto CamAutomatically spectates.
"Camera_Director"DirectorAutomatically switches between player views.

Example

{
  "Command": "ChangePOV",
  "Data": {
    "Focus": "1",
    "Perspective": "PlayerView"
  }
}

LoadReplay

Loads and begins playback of a replay by file name or by file path.
VariableTypeRequiredDescription
FileNamestringOne ofName of the replay file to play. Takes precedence over Path when both are set.
PathstringOne ofFile path of a replay to play. Used when FileName is empty.

Example

{
  "Command": "LoadReplay",
  "Data": {
    "FileName": "Stadium_P_2026-06-05_18-42"
  }
}

SeekReplay

REPLAY
Jumps replay playback to a target frame or time.
VariableTypeRequiredDescription
FrameintOne ofTarget frame number. Takes precedence over TimeSeconds when set.
TimeSecondsfloatOne ofTarget time in seconds.

Example

{
  "Command": "SeekReplay",
  "Data": {
    "TimeSeconds": 120.5
  }
}

SetGameSpeed

REPLAY
Sets replay playback speed.
VariableTypeRequiredDescription
SpeedfloatYesPlayback multiplier. 1.0 = normal, 0.5 = half speed, 2.0 = double. Must be ≥ 0.

Example

{
  "Command": "SetGameSpeed",
  "Data": {
    "Speed": 0.5
  }
}

SetHUDVisibility

Shows or hides the in-game HUD.
VariableTypeRequiredDescription
bVisibleboolYestrue shows the HUD; false hides it.

Example

{
  "Command": "SetHUDVisibility",
  "Data": {
    "bVisible": false
  }
}

SetMatchPaused

Pauses or unpauses the current match or replay.
VariableTypeRequiredDescription
bPausedboolYestrue pauses; false resumes.

Example

{
  "Command": "SetMatchPaused",
  "Data": {
    "bPaused": true
  }
}