API Documentation

Comprehensive WebSocket API reference for interacting with Rust+ servers.


WebSocket Commands:
Get All Servers
// Get list of all paired servers
websocket.send(JSON.stringify({
    "type": "get_servers"
}));

Returns list of all paired servers with their status and smart devices.

Response:
{
  "type": "servers_list",
  "data": {
    "servers": {
      "943118f4-9988-7ddb-9fa1-d38d212fac16": {
        "name": "HopHop Build server | Main",
        "ip": "186.105.34.106",
        "port": "28082",
        "status": "connected",
        "switches": [
          {
            "entityId": "5774913",
            "entityName": "Smart Switch",
            "entityType": "switch"
          }
        ],
        "alarms": [
          {
            "entityId": "5774912", 
            "entityName": "Smart Alarm",
            "entityType": "alarm"
          }
        ]
      }
    }
  }
}
Get Server Info
// Get live server information
websocket.send(JSON.stringify({
    "type": "get_server_info",
    "serverId": "your-server-id"
}));

Returns live server information (population, time, etc.).

Response:
{
  "type": "server_info",
  "data": {
    "name": "HopHop Build server | Main",
    "ip": "186.105.34.106",
    "port": "28082",
    "population": 0,
    "maxPopulation": 100,
    "time": "12:34:56",
    "sunrise": "06:00:00",
    "sunset": "18:00:00"
  }
}
Get Map Data
// Get map image and markers
websocket.send(JSON.stringify({
    "type": "get_map_data",
    "serverId": "your-server-id"
}));

Returns map image and marker data.

Response:
{
  "type": "map_data",
  "data": {
    "map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=",
    "size": 1024,
    "timestamp": 1640995200,
    "oceanMargin": 500,
    "monuments": [
      {
        "token": "harbor_display_name",
        "x": 3690.75,
        "y": 3907.10
      },
      {
        "token": "airfield_display_name", 
        "x": 2843.70,
        "y": 3174.95
      },
      {
        "token": "outpost",
        "x": 2929.23,
        "y": 622.80
      }
    ],
    "markers": {
      "markers": [
        {
          "id": 563890193,
          "type": "VendingMachine",
          "x": 2958.51,
          "y": 640.64,
          "name": "Vendor Farming",
          "sellOrders": [
            {
              "itemId": -1488398114,
              "quantity": 1,
              "currencyId": -932201673,
              "costPerItem": 30,
              "amountInStock": 10
            }
          ]
        }
      ]
    },
    "background": "#0B3B4A"
  }
}
Toggle Smart Switch
// Toggle a smart switch
websocket.send(JSON.stringify({
    "type": "toggle_switch",
    "serverId": "your-server-id",
    "entityId": "entity-id"
}));

Toggles a smart switch on/off.

Response:
{
  "type": "switch_toggled",
  "data": {
    "entityId": "entity-id",
    "newState": true,
    "message": "Switch turned on successfully"
  }
}
Send Team Message
// Send team chat message
websocket.send(JSON.stringify({
    "type": "send_team_message",
    "serverId": "your-server-id",
    "message": "Hello team!"
}));

Sends a message to team chat.

Response:
{
  "type": "team_message_sent",
  "data": {
    "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
    "message": "Test message from Rust+ Provider at 2025-10-14T00:24:22.499Z",
    "success": true
  }
}
Get Team Info
// Get team information
websocket.send(JSON.stringify({
    "type": "get_team_info",
    "serverId": "your-server-id"
}));

Returns team members, leader, and notes.

Response:
{
  "type": "team_info",
  "data": {
    "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
    "teamInfo": {
      "seq": 2,
      "teamInfo": {
        "leaderSteamId": "76561198056409776",
        "members": [
          {
            "steamId": "76561198056409776",
            "name": "nerif.tafu",
            "x": 548.399658203125,
            "y": 3884.44482421875,
            "isOnline": true,
            "spawnTime": 1760374002,
            "isAlive": true,
            "deathTime": 1760108753
          }
        ],
        "mapNotes": [
          {
            "x": 907.8348388671875,
            "y": 3588.74658203125
          }
        ]
      }
    }
  }
}
Get Entity Info
// Get entity status
websocket.send(JSON.stringify({
    "type": "get_entity_info",
    "serverId": "your-server-id",
    "entityId": "entity-id"
}));

Returns current status of a smart device.

Response:
{
  "type": "entity_info",
  "data": {
    "entityId": "entity-id",
    "isActive": true,
    "available": true,
    "lastChecked": "2025-01-13T12:34:56.789Z"
  }
}

Listening to Broadcasts:
Team Chat Messages
// Listen for team chat messages
websocket.onmessage = function(event) {
    const message = JSON.parse(event.data);
    
    if (message.type === 'team_message') {
        console.log(message.data);
    }
};

Receives team chat messages from connected servers.

Console Output:
{
  "playerName": "nerif.tafu",
  "message": "Testing 123",
  "timestamp": 1760386074,
  "serverName": "HopHop Build server | Main"
}
Smart Entity State Changes
// Listen for entity state changes
websocket.onmessage = function(event) {
    const message = JSON.parse(event.data);
    
    if (message.type === 'entity_changed') {
        console.log(message.data);
    }
};

Receives notifications when smart switches or alarms change state.

Console Output:
{
  "entityId": "6141035",
  "entityName": "Smart Switch",
  "isActive": true,
  "serverName": "HopHop Build server | Main"
}
Server Connection Events
// Listen for server connection changes
websocket.onmessage = function(event) {
    const message = JSON.parse(event.data);
    
    if (message.type === 'server_connected') {
        console.log(message.data);
    } else if (message.type === 'server_disconnected') {
        console.log(message.data);
    }
};

Receives notifications when servers connect or disconnect.

Console Output:
// Server Connected
{
  "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
  "serverName": "HopHop Build server | Main"
}

// Server Disconnected
{
  "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
  "serverName": "HopHop Build server | Main"
}

// Server Connecting
{
  "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
  "serverName": "HopHop Build server | Main"
}

// Server Error
{
  "serverId": "df9525f2-4489-b8d9-ff19-b85296ddb39f",
  "serverName": "HopHop Build server | Main",
  "error": "Connection timeout"
}
Live Events Feed
// Listen for all live events
websocket.onmessage = function(event) {
    const message = JSON.parse(event.data);
    
    if (message.type === 'live_event') {
        console.log(message.data);
    }
};

Receives all live events including entity changes, server events, and team chat.

Console Output:
// Entity State Changes
{
  "type": "Entity Change",
  "message": "Entity 6141035 is now ACTIVE on HopHop Build server | Main",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

// Team Chat Messages
{
  "type": "Team Chat",
  "message": "nerif.tafu: Testing 123",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

// Server Connection Events
{
  "type": "Server Connected",
  "message": "Server df9525f2-4489-b8d9-ff19-b85296ddb39f connected successfully",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

// Entity Management
{
  "type": "Entity Paired",
  "message": "Smart Switch paired successfully",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

{
  "type": "Entity Renamed",
  "message": "Entity 6141035 renamed to 'Main Door Switch'",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

{
  "type": "Entity Deleted",
  "message": "Entity 6141035 deleted successfully",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

// FCM Registration
{
  "type": "FCM Registration",
  "message": "FCM tokens registered successfully",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

// Server Data Updates
{
  "type": "Map Markers",
  "message": "Map markers updated for server",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

{
  "type": "Team Info",
  "message": "Team information updated for server",
  "timestamp": "2025-10-14T00:48:11.117Z"
}

{
  "type": "Server Info",
  "message": "Server information updated for server",
  "timestamp": "2025-10-14T00:48:11.117Z"
}