<aside> <img src="/icons/info-alternate_red.svg" alt="/icons/info-alternate_red.svg" width="40px" />

Only works in 0.021, which is as of this writing in-development.

</aside>

You can enable a simple HTTP server to query data from a running game instance.

To do this, add

HTTPPort=8080

under the [/Script/Vein.VeinGameSession] section in Game.ini. A HTTP server will start on that port. You can then send HTTP requests to the server’s IP and the HTTPPort specified and receive responses in JSON format.

Please note that there’s no built-in security or authentication to this, so if you expose your HTTP port to the world, anyone can run these queries. If you do this we recommend writing an intermediate server to handle requests and forward them from the game server.

Routes

You may notice some of the responses are formatted quite strangely compared to what you might see in web APIs. This is because Unreal makes some arbitrary changes to how keys and values get rendered to JSON, and we have little control over how these are displayed.

GET /status

{
  "uptime": 0.408333506435156,
  "onlinePlayers": {
    "76561197994984598": {
      "characterId": "8210662245F5ADFCB3692A9D7F8CAB13",
      "timeConnected": 0.408333506435156,
      "name": "disseminate",
      "status": "admin"
    }
  }
}

GET /characters/:id

This returns a lot of data, so I’m just going to put a small excerpt here.

{
  "playerId": "76561197994984598",
  "playerCharacterData": {
    "iD": "8210662245F5ADFCB3692A9D7F8CAB13",
    "name": "Standalone",
    ...
  },
  "characterData": {
    ...
  },
  "inventory": {
    ...
  },
  ...
}

GET /players/:id

{
  "iD": "76561197994984598",
  "characterIds": [
    "8210662245F5ADFCB3692A9D7F8CAB13"
  ],
  "firstJoinTime": "2025.09.19-17.18.17",
  "lastJoinTime": "2025.09.25-13.59.30",
  "lastName": "disseminate",
  "bServerMuted": false,
  "stats": {
    "startTime": "2033.04.24-12.50.20",
    "statsKeys": [
      "StepsTaken",
      "ItemsTaken"
    ],
    "statsValues": [11, 2]
  }
}

GET /players

{
  "players": [
    "76561197994984598"
  ]
}

GET /time

{
  "unixSeconds": 1997959969
}

GET /weather