> ## Documentation Index
> Fetch the complete documentation index at: https://docs.technified.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Plugin Protocol

> The lower-level endpoints the Roblox integration uses for staff activity and Server Manager.

These endpoints power staff activity tracking and the [Server Manager](/dashboard/roblox/server-manager) command queue. They are the protocol the [Roblox integration](/roblox-integration/overview) and the standalone Technified Admin speak. You only need them if you are building a custom in-game admin system. If you use the official plugin, it handles all of this for you.

<Warning>
  Unlike the moderation endpoints, these routes use **camelCase** field names (`guildId`, `robloxId`). Match the examples exactly.
</Warning>

## Staff permissions

Resolve a Roblox user's staff permission level so your admin system can grant the right access in-game.

```http theme={null}
GET /guilds/:guildId/staff/roblox/:robloxId/permissions
```

<ParamField path="guildId" type="string" required />

<ParamField path="robloxId" type="number" required />

## Game registration

Register the running game with Technified on startup. This is what makes the game appear under connected games in the dashboard.

```http theme={null}
POST /roblox/games/register
```

```json Body theme={null}
{
  "guildId": "123456789012345678",
  "placeId": "987654321",
  "universeId": "111222333",
  "gameName": "My Game",
  "creatorId": "1",
  "metadata": {
    "source": "adonis-plugin",
    "pluginVersion": "2.0.0",
    "jobId": "abc123-..."
  }
}
```

`metadata.source` identifies which client registered the game. The official integration sends `adonis-plugin` or `guardsman-plugin`. Pick your own identifier if you are building a custom admin system.

## Session tracking

Report when a staff member starts and stops playing, so their hours show up in [Staff Activity](/dashboard/roblox/staff-activity).

<Tabs>
  <Tab title="Start">
    ```http theme={null}
    POST /staff/roblox/session/start
    ```

    ```json Body theme={null}
    {
      "guildId": "123456789012345678",
      "robloxId": "261",
      "robloxUsername": "Shedletsky",
      "placeId": "987654321",
      "universeId": "111222333",
      "gameName": "My Game"
    }
    ```
  </Tab>

  <Tab title="End">
    ```http theme={null}
    POST /staff/roblox/session/end
    ```

    ```json Body theme={null}
    {
      "guildId": "123456789012345678",
      "robloxId": "261"
    }
    ```
  </Tab>

  <Tab title="Heartbeat">
    ```http theme={null}
    POST /staff/roblox/heartbeat
    ```

    Keeps an open session alive. Send periodically while the staff member is in-game.
  </Tab>
</Tabs>

## Action logging

Log a moderation or admin command so it appears in the audit logs and counts toward performance scoring.

```http theme={null}
POST /staff/roblox/action
```

```json Body theme={null}
{
  "guildId": "123456789012345678",
  "actorRobloxId": "261",
  "actorUsername": "Shedletsky",
  "actionType": "ban",
  "actionCategory": "moderation",
  "targetRobloxId": "156",
  "targetUsername": "Telamon",
  "placeId": "987654321",
  "universeId": "111222333",
  "details": {
    "reason": "Exploiting",
    "rawCommand": ":ban Telamon Exploiting",
    "source": "adonis"
  }
}
```

`actionCategory` is `moderation` or `admin`. See the [Roblox integration features](/roblox-integration/features#action-logging) for the full command list.

## Server Manager queue

The live server control endpoints (heartbeat, poll commands, acknowledge) are also part of this protocol and use the same guild API key. They have their own page.

<Card title="Server Manager" icon="server" href="/developer-api/server-manager">
  Heartbeat a server, poll for queued commands, and acknowledge results.
</Card>
