Skip to main content
These endpoints let a Roblox game server check whether a player is banned or muted, and create or lift Roblox punishments that sync back to the dashboard. The guild ID lives in the path and must match your API key’s guild.
The plain /moderation/:guildId/ban, /unban, /mute, and /bans/active routes are dashboard-only. With a guild API key, use the roblox/ variants documented here.

Check ban status

The high-frequency check a game server runs when a player joins. Responses are cached briefly for performance.
GET /moderation/:guildId/ban-status/:identifier
guildId
string
required
Your guild ID. Must match the key’s guild.
identifier
number
required
The Roblox user ID to check.
place_id
number
The Roblox place ID. Lets the check honour place-specific bans in addition to global ones.
no_cache
boolean
Set to true to bypass the cache and read live.
data.banned
boolean
data.ban_info
object
Present only when banned is true.
{
  "status": "success",
  "code": 200,
  "message": "User is banned",
  "data": {
    "banned": true,
    "ban_info": {
      "reason": "Exploiting",
      "banned_by": "987654321",
      "created_at": 1746712921,
      "expires_at": null,
      "is_permanent": true
    }
  }
}

Check mute status

GET /moderation/:guildId/mute-status/:identifier
Same path params and query options as the ban check. The response uses muted and mute_info (with muted_by instead of banned_by).
{
  "status": "success",
  "code": 200,
  "message": "User is muted",
  "data": {
    "muted": true,
    "mute_info": {
      "reason": "Spam",
      "muted_by": "987654321",
      "created_at": 1746712921,
      "expires_at": 1746799321,
      "is_permanent": false
    }
  }
}

Create a ban

Bans a Roblox user. The ban syncs to your connected games and appears in the dashboard.
POST /moderation/:guildId/roblox/ban
guildId
string
required
roblox_id
string
required
The Roblox user ID to ban.
reason
string
required
moderator_roblox_id
string
required
The Roblox ID of the staff member issuing the ban.
username
string
The target’s Roblox username, for nicer logs.
moderator_username
string
duration
string
A duration like 5m, 1h, 7d, or permanent. Omit for a permanent ban.
is_global
boolean
default:"true"
Whether the ban applies across all games or only the source place.
source_server_id
string
The game.JobId of the server issuing the ban, used to prevent echo loops.
curl "https://api.technified.xyz/api/v1/moderation/$GUILD_ID/roblox/ban" \
  -H "X-API-Key: $TECHNIFIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "roblox_id": "261",
    "username": "Shedletsky",
    "reason": "Exploiting",
    "duration": "7d",
    "moderator_roblox_id": "1",
    "moderator_username": "Builderman"
  }'
{
  "status": "success",
  "code": 200,
  "message": "User banned successfully via game server",
  "data": {
    "banned": true,
    "expires_at": 1747317721,
    "is_permanent": false
  }
}
A second ban on an already-banned user returns 400. Check status first if you are unsure.

Lift a ban

POST /moderation/:guildId/roblox/unban
guildId
string
required
roblox_id
string
required
moderator_roblox_id
string
required
reason
string
Defaults to “Unbanned via game server”.
source_server_id
string
Returns 404 if the user has no active ban.

Create or lift a mute

Mutes mirror bans exactly. Use the same fields.
POST /moderation/:guildId/roblox/mute
POST /moderation/:guildId/roblox/unmute
mute accepts the same body as ban (roblox_id, reason, duration, moderator_roblox_id, and so on). unmute accepts the same body as unban.

List active punishments

Fetch every active ban or mute for the guild, for example to seed an admin system on startup.
GET /moderation/:guildId/roblox/bans/active
GET /moderation/:guildId/roblox/mutes/active
data.bans
array
The list of active ban records. The mutes endpoint returns data.mutes.
data.total
number
{
  "status": "success",
  "code": 200,
  "message": "Active bans retrieved",
  "data": {
    "bans": [
      {
        "id": 42,
        "identifier": "261",
        "reason": "Exploiting",
        "banned_by": "1",
        "expires_at": null,
        "is_active": 1
      }
    ],
    "total": 1
  }
}