Skip to content

Event Catalogue

Every message published on a match:* Centrifugo channel follows the wire format described here. Build your bet-settlement logic against the event names, entity types, and payload shapes below.

Event name patterns

Events follow one of two naming conventions: entity lifecycle names that are derived from the entity type, or fixed names for cross-cutting signals.

PatternWhen emitted
{entity_type}_entity_createA new entity appears in the game state
{entity_type}_entity_updateAn existing entity's fields change
{entity_type}_entity_deleteAn entity is removed from the game state
{entity_type}_entity_leaveAn entity leaves the observable area
tick_endEnd of a server game tick
hero_killedA hero death event
banned_heroesDraft/hero-ban update
chat_messageIn-game chat message
state_jump_warningState discontinuity detected — see section below
endMatch has concluded

state_jump_warning

Entity types

Each entity type maps to a set of lifecycle events ({entity_type}_entity_create, _entity_update, _entity_delete, _entity_leave). The key fields listed are those most relevant for bet-settlement use cases; the full payload may include additional game-engine fields.

Entity typeDescriptionKey fields
game_rules_proxyGame state and timinggame_start_time, game_paused, total_paused_ticks
player_controllerPlayer stats and infosteam_id, steam_name, hero_id, kills, deaths, assists, net_worth, hero_damage
player_pawnPlayer character stateposition, health, max_health, level, hero_build_id
teamTeam infoteam, score, teamname
mid_bossMid boss NPChealth, max_health, position, team
trooperLane trooperhealth, max_health, position, lane, team
trooper_neutralNeutral camp trooperhealth, max_health, position
trooper_bossBoss trooperhealth, max_health, position, lane, team
trooper_barrack_bossBarrack bosshealth, max_health, position, lane, team
shielded_sentryShielded sentryhealth, max_health, position, shield_active
base_defense_sentryBase defense sentryhealth, max_health, position, team
boss_tier2Tier 2 bosshealth, max_health, position, team
boss_tier3Tier 3 bosshealth, max_health, position, team
breakable_propBreakable objectposition
breakable_prop_modifier_pickupModifier orb pickupposition, active
breakable_prop_gold_pickupGold orb pickupposition, active
punchable_powerupPunchable urn / powerupposition
destroyable_buildingGuardian / Walker / etc.health, max_health, position, team
sinners_sacrificeSinners sacrifice objectivehealth, max_health, position
ability_melee_parryMelee parry eventowner_entity, attack_parried, start_time, success_time

Example payloads

Player controller update (player_entity_update)

{
  "tick": 5432,
  "game_time": 245.6,
  "event_type": "entity_update",
  "delta": "update",
  "entity_index": 3,
  "entity_type": "player_controller",
  "steam_id": 123456789,
  "steam_name": "PlayerOne",
  "team": 2,
  "hero_id": 15,
  "kills": 4,
  "deaths": 1,
  "assists": 7,
  "net_worth": 12350,
  "hero_damage": 8420
}

NPC update (npc_entity_update)

{
  "tick": 5433,
  "game_time": 245.7,
  "event_type": "entity_update",
  "delta": "create",
  "entity_index": 87,
  "entity_type": "trooper",
  "health": 275,
  "max_health": 275,
  "position": [1234.5, -678.9, 128.0],
  "lane": 1,
  "team": 2
}

Chat message (chat_message)

{
  "tick": 5500,
  "game_time": 250.0,
  "event_type": "chat_message",
  "steam_name": "PlayerOne",
  "steam_id": 123456789,
  "text": "gg",
  "all_chat": true,
  "lane_color": 3
}

The end event

The end event has no payload fields beyond the standard envelope. It signals that the broadcast stream has finished — the match has concluded and no further events will be published on this channel.

To detect it, subscribe by name:

channel.subscribe('end', () => {
  console.log('Match stream ended')
  realtime.close()
})

Once you receive end, the match has been marked completed and publishing has stopped. You do not need to take any cleanup action — release is handled server-side.

The channel remains attachable for 168 hours after the last event is published on it (matching Centrifugo's history_ttl for the match namespace). If you need to re-read events, reconnect with since: { offset, epoch } to replay missed publications — no new messages will arrive, but history-backed recovery works normally.

Need a different event?

If your integration requires an event type that is not listed in this catalogue, email [email protected] and we will assess whether it can be added to the stream.