Org Admin Guide

SDK Installation

Download the Luau SDK files, place them in your Roblox game, and configure your API key. The whole setup takes under 10 minutes.

Downloading the SDK files#

In your RoPerms dashboard, go to Settings → API and click Download SDK. This downloads three Lua files:

  • RoPerms.lua — the main server-side module. Required.
  • RoPermsClient.lua — the client-side companion script for tool bans and chat bans. Required if you use punishments.
  • RoPermsPayments.lua — drop-in payment handler for Developer Products. Only needed if you use Payments.

You can also download individual files from the download endpoint:/api/sdk/download?file=RoPerms.lua

Placing files in Studio#

RoPerms.lua (server module)

  1. 1

    Insert a ModuleScript

    In Roblox Studio, place a new ModuleScript inside ServerScriptService (or anywhere accessible to server scripts).
  2. 2

    Paste the module code

    Open RoPerms.lua and paste its contents into the ModuleScript. Rename the ModuleScript to RoPerms.

RoPermsClient.lua (client script)

  1. 1

    Insert a LocalScript

    Place a new LocalScript inside StarterPlayer → StarterPlayerScripts.
  2. 2

    Paste the client code

    Paste the contents of RoPermsClient.lua into the LocalScript. Rename it to RoPermsClient.

Why a client script?

RoPermsClient.lua handles hiding the Backpack and Chat CoreGUI for tool-banned and chat-banned players. Server scripts cannot modify these CoreGUI elements — they must be controlled from a LocalScript.

Configuration#

Open RoPerms.lua and find the CONFIG block near the top of the file:

RoPerms.lualua
local CONFIG = {
    -- Required: your RoPerms API key from Settings → API
    apiKey = "your-api-key-here",

    -- Required: the base URL of your RoPerms instance
    baseUrl = "https://roperms.app",

    -- How long (seconds) to cache player data per-player
    cacheDuration = 60,

    -- How often (seconds) to poll for pending kicks
    kickPollInterval = 5,

    -- Whether to track server heartbeats (live server panel)
    heartbeatEnabled = true,
}

Store your API key as a Roblox Secret

Hard-coding the API key in your Script is a security risk if you ever make the place public or share the Studio file. Use Roblox Secrets (available in Studio under File → Game Settings → Security → Secrets) to store it, then read it with game:GetService("HttpService"):GetSecret("ROPERMS_KEY").
RoPerms.lua (recommended)lua
local CONFIG = {
    apiKey = game:GetService("HttpService"):GetSecret("ROPERMS_KEY"),
    baseUrl = "https://roperms.app",
    cacheDuration = 60,
    kickPollInterval = 5,
}

Requiring the module#

From any Script (not LocalScript) in your game, require the module:

lua
local RoPerms = require(game.ServerScriptService.RoPerms)
RoPerms.Init()

Call RoPerms.Init() once at server startup before using any other functions. This initialises the HTTP client, starts the kick-poll loop, and sends the first server heartbeat.

Enabling HTTP requests#

RoPerms uses HttpService to communicate with the backend. You must enable HTTP requests in Studio:

  1. 1

    Open Game Settings

    In Roblox Studio, click File → Game Settings (or the gear icon in the Home tab).
  2. 2

    Enable HTTP requests

    Under Security, toggle Allow HTTP Requests to on.
  3. 3

    Publish your place

    The setting does not persist in Studio test runs unless the place is published. Publish your place (File → Publish to Roblox) then test again.

Health check#

After setup, verify connectivity by calling RoPerms.Ping() from a Script. It should return true:

lua
local RoPerms = require(game.ServerScriptService.RoPerms)
RoPerms.Init()

local ok = RoPerms.Ping()
print("RoPerms connected:", ok)  -- should print: RoPerms connected: true

If Ping() returns false, check:

  • HTTP requests are enabled in Game Settings.
  • Your API key is correct (copy it fresh from Settings → API).
  • This place is claimed in Settings → Places.
  • The server can reach https://roperms.app (no network restrictions).

Basic usage example#

ServerScriptService/MainScript.lualua
local Players = game:GetService("Players")
local RoPerms = require(game.ServerScriptService.RoPerms)

RoPerms.Init()
RoPerms.EnableEnforcement()        -- auto-kick banned players
RoPerms.EnableActivityTracking()   -- log play sessions
RoPerms.EnableModcallCommand()     -- /modcall command

Players.PlayerAdded:Connect(function(player)
    -- Check if the player has the VIP permission
    if RoPerms.GetPerm(player, "vip") then
        -- give VIP benefits here
    end
end)