Reference: Game servers

Your live Roblox game servers, the players in them, and commands to one server or all of them.

Good to know

Every request needs your key: Authorization: Bearer tfy_…. Replace YOUR_SERVER_ID with your Discord server id. Errors are explained in Requests, errors and limits.

GET /servers

GET /guilds/{guildId}/servers

What is running right now.

Key permissionservers.read (See live servers)

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
state"online" | "unreachable" | "offline" | "live"Nolive (the default) for running servers, including ones that missed a heartbeat; online, unreachable or offline for exactly that state.default "live"
universeIdstringNoOnly the servers of this game (Roblox universe id).1 to 32 characters · digits only

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"
Answer · 200
{
  "items": [
    {
      "id": "gsv_01M5TXYM3M0AGW0A8F0KGGTY2W",
      "jobId": "b1a2c3d4-0000-4000-8000-000000000001",
      "universeId": "4520000000",
      "placeId": "9870000000",
      "state": "online",
      "playerCount": 1,
      "maxPlayers": 30,
      "fps": null,
      "memoryMb": null,
      "uptimeSeconds": 600,
      "region": null,
      "lastHeartbeatAt": "2026-10-26T01:42:11.831Z",
      "firstSeenAt": "2026-10-26T01:42:11.831Z"
    }
  ]
}

GET /servers/{serverId}

GET /guilds/{guildId}/servers/{serverId}

One server and everybody in it, with their avatars.

Key permissionservers.read (See live servers)

In the address

FieldTypeRequiredWhat it is
serverIdstringYesA game server’s id (gsv_…), from GET /servers.

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/SERVERID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"
Answer · 200
{
  "id": "gsv_01M5TXYM3M0AGW0A8F0KGGTY2W",
  "jobId": "b1a2c3d4-0000-4000-8000-000000000001",
  "universeId": "4520000000",
  "placeId": "9870000000",
  "state": "online",
  "playerCount": 1,
  "maxPlayers": 30,
  "fps": null,
  "memoryMb": null,
  "uptimeSeconds": 600,
  "region": null,
  "lastHeartbeatAt": "2026-10-26T01:42:11.831Z",
  "firstSeenAt": "2026-10-26T01:42:11.831Z",
  "players": [
    {
      "robloxUserId": "156",
      "username": "builderman",
      "displayName": "Builderman",
      "joinedAt": "2026-10-26T01:42:11.828Z",
      "avatarUrl": null
    }
  ]
}

GET /servers/{serverId}/commands

GET /guilds/{guildId}/servers/{serverId}/commands

What that server was told, and what it said back.

Key permissionservers.read (See live servers)

In the address

FieldTypeRequiredWhat it is
serverIdstringYesA game server’s id (gsv_…), from GET /servers.

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
limitintegerNoHow many to answer with at most, 1 to 100.1 to 100 · default 25
cursorstringNoThe nextCursor of the page before, to get the next page. Absent: the first page.at most 64 characters
order"asc" | "desc"Nodesc for newest first, asc for oldest first.default "desc"
state"pending" | "delivered" | "completed" | "failed" | "expired"NoOnly commands in this state.
type"kick" | "ban" | "unban" | "mute" | "unmute" | "message" | "announce" | "teleport" | "shutdown" | "custom"NoOnly commands of this type.

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/SERVERID/commands" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /servers/{serverId}/commands

POST /guilds/{guildId}/servers/{serverId}/commands

Tells one server to do something.

Key permissionservers.command (Send commands to a server)
Retry safelySend an Idempotency-Key header; a retry with the same one is not done twice.

In the address

FieldTypeRequiredWhat it is
serverIdstringYesA game server’s id (gsv_…), from GET /servers.

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
commandobject, one of the shapes belowYesWhat to do. type decides which other fields it takes.
expiresInSecondsintegerNoHow long the command waits for the server to pick it up, 5 to 600 seconds.5 to 600 · default 60

command takes one of these shapes:

type: "kick" · Removes one player from the server.

FieldTypeRequiredWhat it is
type"kick"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters

type: "ban" · Keeps one player out of this one server. For a ban in every server, issue a punishment instead.

FieldTypeRequiredWhat it is
type"ban"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters
expiresAtstring or nullNoWhen it ends (ISO 8601), or null for as long as that server runs.ISO 8601 date and time · default null

type: "unban" · Lifts a ban given with a command.

FieldTypeRequiredWhat it is
type"unban"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only

type: "mute" · Stops one player chatting in this server.

FieldTypeRequiredWhat it is
type"mute"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters
expiresAtstring or nullNoWhen it ends (ISO 8601), or null for as long as that server runs.ISO 8601 date and time · default null

type: "unmute" · Lifts a mute given with a command.

FieldTypeRequiredWhat it is
type"unmute"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only

type: "message" · Shows one player a message.

FieldTypeRequiredWhat it is
type"message"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
messagestringYesWhat the player is shown.1 to 500 characters

type: "announce" · Shows every player in the server a message.

FieldTypeRequiredWhat it is
type"announce"Yes
messagestringYesWhat every player is shown.1 to 500 characters

type: "teleport" · Sends one player to another place.

FieldTypeRequiredWhat it is
type"teleport"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
placeIdstringYesThe place to send them to.1 to 32 characters · digits only
jobIdstring or nullNoA particular server of that place, or null for any.at most 100 characters · default null

type: "shutdown" · Closes the server and sends everybody out.

FieldTypeRequiredWhat it is
type"shutdown"Yes
reasonstringNoWhat players are shown as they leave.at most 500 characters · default ""

type: "custom" · Your own action, handed to your game code as it is.

FieldTypeRequiredWhat it is
type"custom"Yes
actionstringYesA name your own game code listens for.1 to 64 characters
dataobjectNoAnything your game code needs, as JSON.default {}

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/SERVERID/commands" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"command":{"type":"message","robloxUserId":"156","message":"Please come to the station."}}'
Answer · 202
{
  "id": "cmd_01M5TXYMA2NJ4NFTJYEP01BK35",
  "serverId": "gsv_01M5TXYM3M0AGW0A8F0KGGTY2W",
  "broadcastId": null,
  "type": "message",
  "payload": {
    "robloxUserId": "156",
    "message": "Please come to the station."
  },
  "state": "pending",
  "punishmentId": null,
  "issuer": {
    "type": "key",
    "id": "key_01M5TXYJPZQGNT2KXZG3ZBA672",
    "label": "key:test key"
  },
  "deliveredAt": null,
  "finishedAt": null,
  "result": null,
  "error": null,
  "expiresAt": "2026-10-26T01:43:12.033Z",
  "createdAt": "2026-10-26T01:42:12.034Z"
}

POST /servers/broadcast

POST /guilds/{guildId}/servers/broadcast

Tells every live server at once. A separate permission, because the reach is different.

Key permissionservers.broadcast (Send to every server at once)
Retry safelySend an Idempotency-Key header; a retry with the same one is not done twice.

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
commandobject, one of the shapes belowYesWhat to do. type decides which other fields it takes.
universeIdstringNoOnly the servers of this game (Roblox universe id). Absent: every live server.1 to 32 characters · digits only
expiresInSecondsintegerNoHow long the command waits for the server to pick it up, 5 to 600 seconds.5 to 600 · default 60

command takes one of these shapes:

type: "kick" · Removes one player from the server.

FieldTypeRequiredWhat it is
type"kick"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters

type: "ban" · Keeps one player out of this one server. For a ban in every server, issue a punishment instead.

FieldTypeRequiredWhat it is
type"ban"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters
expiresAtstring or nullNoWhen it ends (ISO 8601), or null for as long as that server runs.ISO 8601 date and time · default null

type: "unban" · Lifts a ban given with a command.

FieldTypeRequiredWhat it is
type"unban"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only

type: "mute" · Stops one player chatting in this server.

FieldTypeRequiredWhat it is
type"mute"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
reasonstringYesWhy. The player is shown this.at most 500 characters
expiresAtstring or nullNoWhen it ends (ISO 8601), or null for as long as that server runs.ISO 8601 date and time · default null

type: "unmute" · Lifts a mute given with a command.

FieldTypeRequiredWhat it is
type"unmute"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only

type: "message" · Shows one player a message.

FieldTypeRequiredWhat it is
type"message"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
messagestringYesWhat the player is shown.1 to 500 characters

type: "announce" · Shows every player in the server a message.

FieldTypeRequiredWhat it is
type"announce"Yes
messagestringYesWhat every player is shown.1 to 500 characters

type: "teleport" · Sends one player to another place.

FieldTypeRequiredWhat it is
type"teleport"Yes
robloxUserIdstringYesThe Roblox user id of the player.1 to 32 characters · digits only
placeIdstringYesThe place to send them to.1 to 32 characters · digits only
jobIdstring or nullNoA particular server of that place, or null for any.at most 100 characters · default null

type: "shutdown" · Closes the server and sends everybody out.

FieldTypeRequiredWhat it is
type"shutdown"Yes
reasonstringNoWhat players are shown as they leave.at most 500 characters · default ""

type: "custom" · Your own action, handed to your game code as it is.

FieldTypeRequiredWhat it is
type"custom"Yes
actionstringYesA name your own game code listens for.1 to 64 characters
dataobjectNoAnything your game code needs, as JSON.default {}

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/broadcast" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"command":{"type":"announce","message":"Event starts in 10 minutes!"}}'
Answer · 202
{
  "id": "bct_01M5TXYMD267E378JYEXPZ920M",
  "addressed": 1,
  "type": "announce"
}

GET /servers/broadcasts/{broadcastId}

GET /guilds/{guildId}/servers/broadcasts/{broadcastId}

How a broadcast is landing, server by server.

Key permissionservers.read (See live servers)

In the address

FieldTypeRequiredWhat it is
broadcastIdstringYesA broadcast’s id (bct_…), from sending it.

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/broadcasts/BROADCASTID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /servers/experiences

GET /guilds/{guildId}/servers/experiences

The experiences that have ever reported in.

Key permissionservers.read (See live servers)

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/experiences" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /servers/players

GET /guilds/{guildId}/servers/players

Key permissionservers.read (See live servers)

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
qstringYesThe start of a username or display name, or a whole Roblox user id.1 to 64 characters

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/servers/players?q=Q" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"
Answer · 200
{
  "items": [
    {
      "robloxUserId": "156",
      "username": "builderman",
      "displayName": "Builderman",
      "joinedAt": "2026-10-26T01:42:11.828Z",
      "avatarUrl": null,
      "server": {
        "id": "gsv_01M5TXYM3M0AGW0A8F0KGGTY2W",
        "universeId": "4520000000",
        "placeId": "9870000000",
        "region": null,
        "state": "online",
        "playerCount": 1,
        "maxPlayers": 30
      }
    }
  ]
}

Still stuck? Get help from the Technified team.