RSM Web API

Everything the RSM Web dashboard does goes through a JSON API on your own server. Give a script an API key and it can do the same: restart the server, look up players, run a wipe, read a log.

Getting started

  1. In RSM Web, open Settings → Developers → API Keys and choose Create key. You need settings manage access to see it.
  2. Name the key after what will use it, pick when it expires, and give it access only to the modules it needs.
  3. Copy the key when it is shown. It starts with rsm_ and is shown once; RSM Web keeps only a fingerprint of it, so a lost key has to be replaced.

Send the key in the Authorization header. The base URL is the address you open RSM Web on, followed by /api — port 3000 unless you changed it in config.json.

curl -H "Authorization: Bearer rsm_your_key_here" \
  http://your-server:3000/api/server/status
{
  "running": true,
  "pid": 4812,
  "startedAt": "2026-09-25T08:14:03.512Z",
  "rconConnected": true
}

Changing something works the same way, with a JSON body:

curl -X POST -H "Authorization: Bearer rsm_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Server restart in 5 minutes"}' \
  http://your-server:3000/api/players/76561198000000000/kick

Treat a key like a password. Anyone who has it can do whatever it allows. Keep it out of source control and chat logs, and revoke it the moment it leaks.

The key travels with every request, so reach RSM Web over HTTPS (behind a reverse proxy) when calling it across the internet. Browsers block calls from other websites, so use the API from scripts, bots and servers rather than from a web page.

Keys and permissions

RSM Web groups what it can do into modules — server, players, wipes and so on — and a key has its own level on each:

LevelWhat the key can do
noneNothing in that module. The default for every module you don’t pick.
viewRead: status, lists, logs, settings.
manageRead and change: start and stop, kick and ban, save settings. Includes view.

Each endpoint below shows the module and level it needs. A few more rules:

Expiry and revoking

A key expires after 30, 90 or 365 days, or never, chosen when it is made. The Developers tab shows when each key was last used and lets you rename it, change its access, or revoke it. Changes apply to the next request; the key itself stays the same, so nothing has to be redeployed. A revoked or expired key is refused with API_KEY_INVALID.

Requests and errors

Send bodies as JSON with Content-Type: application/json, except the few upload endpoints, which take a multipart form. Replies are JSON. A failed request returns a message you can show to a person, and for the cases a script should handle, a code:

{ "error": "This API key needs manage access to players", "code": "FORBIDDEN" }
StatusCodeMeaning
401API_KEY_INVALIDThe key is wrong, expired or revoked, or the person who made it was deleted.
403FORBIDDENThe key doesn’t have the level this endpoint needs. The message says which.
403SESSION_REQUIREDOnly a person signed in to RSM Web can do this.
403LICENSE_REQUIREDRSM Web isn’t linked to an active licence. Nothing works until it is.
401AUTH_INVALIDThe endpoint only accepts a signed-in session, not a key.
400Something in the request is missing or invalid; the message says what.
404The thing you asked for doesn’t exist.
409It can’t happen right now — something is already running, or it changed since you read it.
503The action needs RCON, and RCON isn’t connected.

There is no fixed rate limit, but the API runs on the same machine as your Rust server. Polling status every few seconds is plenty.

Not available to keys

Some parts of the API only work for a person signed in to RSM Web:

Endpoint reference

153 endpoints, grouped by what they work on. {steamId} and the like are placeholders for a value in the path.

Server

Start, stop and talk to the Rust server itself.

GET/api/server/statusserver · view

Whether the server process is running, its PID and start time, and whether RCON is connected.

GET/api/server/historyserver · view

Player count and FPS for the last hour, one point every few seconds.

GET/api/server/metrics-historyserver · view

Host CPU, memory and disk, the server process’s own CPU and memory, players and FPS for the last 24 hours, one point a minute.

POST/api/server/startserver · manage

Starts the server with its saved configuration.

POST/api/server/stopserver · manage

Shuts the server down over RCON. If RCON isn’t connected, use kill.

POST/api/server/restartserver · manage

Restarts the server after an in-game countdown.

Body countdown — seconds to warn players first (default 500)

POST/api/server/saveserver · manage

Saves the world now.

POST/api/server/killserver · manage

Ends the server process immediately, without saving. Use only when stop does not work.

POST/api/server/commandserver · manage

Runs a console command over RCON and returns its reply.

Body command — the command line, e.g. "status"

POST/api/server/rendermaplivemap · manage

Renders a fresh map image for the live map. Takes up to 45 seconds; 409 while a render is already running.

Installer and settings

Installing and updating the Rust server files, and the paths and keys RSM Web uses.

GET/api/installer/statusinstaller · view

Progress of the current or last install or update.

GET/api/installer/versioninstaller · view

The installed Rust build and the latest one available.

Query branch — main (default) or staging

POST/api/installer/startinstaller · manage

Installs or updates the server files with SteamCMD.

Body branch — main or staging; clean — true to validate every file

POST/api/installer/stopinstaller · manage

Stops a running install.

POST/api/installer/resetinstaller · manage

Clears a finished or failed install so a new one can start.

GET/api/installer/settingssettings · view

Server folder, refresh interval, CPU affinity and start-up options. The Steam and RustMaps API keys are only included for keys with settings manage.

PUT/api/installer/settingssettings · manage

Saves those settings.

Body serverPath (required), refreshInterval, steamApiKey, rustMapsApiKey, cpuAffinity (array of core numbers), startWithSystem, autoStartServer

Server configuration

The server.cfg-style settings RSM Web launches the server with.

GET/api/configconfig · view

Hostname, description, map, seed, world size, ports, max players and the rest. The RCON password is blank unless the key has config manage.

PUT/api/configconfig · manage

Changes any of those fields; send only the ones you want to change. Most take effect on the next restart.

GET/api/rustmaps/previewconfig · view

A RustMaps preview for a procedural map. Needs a RustMaps API key in settings.

Query seed, size

Players

Actions that reach the game need RCON to be connected; they return 503 or 400 when it is not.

GET/api/players/onlineplayers · view

Everyone connected right now.

GET/api/playersplayers · view

Every player the server has seen, most recent first. Returns { total, players }.

Query search (name or Steam ID), online (true/false), limit (1–100, default 50), offset

GET/api/players/eventsplayers · view

Joins, leaves, deaths, kills, wounds, respawns and chat, newest first.

Query from, to (ISO dates), steamId, types (comma-separated: player_join, player_leave, player_death, player_wounded, player_respawn, player_chat, pve_kill), limit (1–500, default 200)

GET/api/players/{steamId}/combat-statsplayers · view

Kills, deaths and headshot counts for one player.

POST/api/players/{steamId}/refresh-steamplayers · manage

Fetches the player’s Steam profile and ban record again.

POST/api/players/{steamId}/kickplayers · manage

Kicks the player.

Body reason (optional)

POST/api/players/{steamId}/banplayers · manage

Bans the player and records it in the ban history.

Body reason (optional), duration — minutes; 0 or omitted for permanent

POST/api/players/{steamId}/unbanplayers · manage

Lifts the ban.

POST/api/players/{steamId}/muteplayers · manage

Mutes the player in chat.

POST/api/players/{steamId}/unmuteplayers · manage

Unmutes the player.

POST/api/players/{steamId}/skipqueueplayers · manage

Moves a queued player to the front of the queue.

POST/api/players/{steamId}/teleportplayers · manage

Teleports the player to another player. Both must be online and alive.

Body toSteamId

POST/api/players/{steamId}/authlevelplayers · manage

Sets the player’s in-game auth level.

Body level — 0 (none), 1 (moderator) or 2 (owner)

GET/api/players/bansplayers · view

The ban history.

Query active — true for bans still in force

GET/api/players/bans/liveplayers · view

The server’s own ban list, read over RCON. While RCON is down, RSM Web’s ban records instead.

GET/api/players/banned-idsplayers · view

Just the Steam IDs that are banned right now.

GET/api/players/{steamId}/bansplayers · view

One player’s ban history.

Items and loadouts

Uses the players permission.

GET/api/inventory/itemsplayers · view

Searches the Rust item list.

Query search, limit (default 50)

POST/api/inventory/give/{steamId}players · manage

Gives an item to an online player.

Body item — shortname such as rifle.ak; amount (default 1); skinId (default 0)

GET/api/inventory/loadoutsplayers · view

Saved loadouts.

POST/api/inventory/loadoutsplayers · manage

Saves a loadout.

Body name, items — array of { shortname, name, amount, skinId }

PUT/api/inventory/loadouts/{id}players · manage

Renames a loadout or replaces its items.

DELETE/api/inventory/loadouts/{id}players · manage

Deletes a loadout.

POST/api/inventory/loadouts/{id}/give/{steamId}players · manage

Gives every item in a loadout to an online player.

Teams and clans

GET/api/teamsteams · view

Every in-game team with its leader and members.

POST/api/teams/{teamId}/kickteams · manage

Removes a member from a team.

Body steamId

POST/api/teams/{teamId}/promoteteams · manage

Makes a member the team leader.

Body steamId

POST/api/teams/{teamId}/disbandteams · manage

Disbands the team.

GET/api/clansclans · view

Every clan with its roles, members and pending invites.

POST/api/clans/{clanId}/kickclans · manage

Removes a member from a clan.

Body steamId

POST/api/clans/{clanId}/roleclans · manage

Puts a member in one of the clan’s roles.

Body steamId, roleId

POST/api/clans/{clanId}/cancel-inviteclans · manage

Withdraws an invitation.

Body steamId

POST/api/clans/{clanId}/disbandclans · manage

Disbands the clan.

Chat logs and leaderboard

GET/api/chat-logschatlogs · view

Chat messages, newest first.

Query steamId, search, channel (global, team, local, clan), from, to, limit (1–200, default 100), offset

GET/api/chat-logs/playerschatlogs · view

Everyone who has said something, with a message count.

GET/api/leaderboardleaderboard · view

Kills, deaths, K/D and headshot percentage per player.

Query from, to, sort (kd default, kills, deaths, headshotPct), limit (1–500, default 100)

Reports

Player reports and feedback sent from inside the game.

GET/api/reportsreports · view

Reports, newest first. Returns { reports, total, open }.

Query status (open, in_progress, resolved, dismissed), kind (player, feedback), type (general, bug, cheat, abuse, idea, offensive, rules), targetId, limit, offset

GET/api/reports/{id}reports · view

One report.

GET/api/reports/{id}/imagereports · view

The screenshot attached to a report, if it has one.

PATCH/api/reports/{id}reports · manage

Changes a report’s status or note.

Body status, note

DELETE/api/reports/{id}reports · manage

Deletes a report.

Mods and plugins

Oxide and Carbon, and the plugins installed on top of them. Endpoints that take framework expect oxide or carbon.

GET/api/mods/statusmods · view

Which framework is installed and the state of any install in progress.

POST/api/mods/switchmods · manage

Installs a framework, or removes it.

Body framework — oxide, carbon or none; branch

POST/api/mods/stopmods · manage

Stops a running framework install.

POST/api/mods/resetmods · manage

Clears a finished or failed framework install.

GET/api/mods/oxide/versionmods · view

The installed Oxide build and the latest release.

GET/api/mods/oxide/configmods · view

oxide.config.json.

PUT/api/mods/oxide/configmods · manage

Replaces oxide.config.json with the body.

GET/api/mods/carbon/modulesmods · view

Carbon’s built-in modules.

GET/api/mods/carbon/modules/{name}/configmods · view

One Carbon module’s config.

PUT/api/mods/carbon/modules/{name}/configmods · manage

Replaces that config with the body.

GET/api/plugins/installedmods · view

Installed plugins.

Query framework

GET/api/plugins/check-updatesmods · view

Which installed plugins have a newer version.

Query framework

GET/api/plugins/umod/searchmods · view

Searches uMod.

Query q, page, sort, tag

GET/api/plugins/umod/tagsmods · view

The most common uMod tags.

GET/api/plugins/umod/info/{id}mods · view

One uMod plugin’s details.

GET/api/plugins/codefling/searchmods · view

Searches Codefling.

Query q, sortBy

GET/api/plugins/codefling/purchasedmods · view

Codefling plugins the connected account owns.

Query q, sortBy

GET/api/plugins/codefling/statusmods · view

Whether a Codefling account is connected.

POST/api/plugins/installmods · manage

Installs a plugin from uMod or Codefling.

Body framework, source (umod or codefling), id, filename, version, and downloadUrl for uMod

POST/api/plugins/updatemods · manage

Updates an installed plugin to its latest version.

Body framework, filename

POST/api/plugins/uploadmods · manage

Uploads a .cs plugin (multipart form, 10 MB max).

Form file, framework, source (umod, codefling or manual)

DELETE/api/plugins/{filename}mods · manage

Removes a plugin.

Query framework

GET/api/plugins/{name}/configmods · view

A plugin’s config file.

Query framework

PUT/api/plugins/{name}/configmods · manage

Replaces a plugin’s config with the body.

Query framework

Wipes and map lists

GET/api/wipes/schedulewipes · view

The scheduled wipe: when it runs and what it wipes.

PUT/api/wipes/schedulewipes · manage

Changes the schedule; send only the fields you want to change.

POST/api/wipes/schedule/test-backup-pathwipes · manage

Checks that a backup folder can be written to.

Body path

POST/api/wipes/runwipes · manage

Runs the scheduled wipe now. Returns the automation run id.

GET/api/wipes/historywipes · view

Past wipes.

GET/api/wipes/scheduledwipes · view

Every automation that includes a wipe.

GET/api/wipes/forced-schedulewipes · view

What happens on Facepunch’s monthly forced wipe.

PUT/api/wipes/forced-schedulewipes · manage

Changes the forced-wipe options.

GET/api/map-listswipes · view

Map lists that wipes can pick the next map from.

POST/api/map-listswipes · manage

Creates a map list.

Body name, mode (random or rotate), entries

PUT/api/map-lists/{id}wipes · manage

Replaces a map list.

DELETE/api/map-lists/{id}wipes · manage

Deletes a map list. 409 while an automation still uses it.

Automations

Saving, switching on or running an automation also needs manage on every module its actions touch — on the key, not just on the person who made it.

GET/api/automationsautomation · view

Every automation, with its next run.

GET/api/automations/{id}automation · view

One automation.

GET/api/automations/{id}/runsautomation · view

That automation’s recent runs.

GET/api/automations/next-runsautomation · view

Upcoming scheduled runs across all automations that are switched on.

GET/api/automations/catalogautomation · view

The triggers, conditions and actions available, and which actions this key may use.

GET/api/automations/templatesautomation · view

Ready-made automations.

POST/api/automationsautomation · manage

Creates an automation.

Body name, description, enabled, definition — the easiest way to get a valid definition is to build one in RSM Web and read it back with GET

PUT/api/automations/{id}automation · manage

Changes an automation. Send back the version you read; 409 if someone changed it since.

POST/api/automations/{id}/enabledautomation · manage

Switches an automation on or off.

Body enabled — true or false

POST/api/automations/{id}/runautomation · manage

Runs it now.

POST/api/automations/{id}/resetautomation · manage

Puts a built-in automation back to its defaults.

DELETE/api/automations/{id}automation · manage

Deletes an automation you made. Built-ins can only be switched off or reset.

GET/api/automations/settingsautomation · view

The chat-command prefix and the tag in front of every Say.

PUT/api/automations/settingsautomation · manage

Changes them.

Body chatPrefix, sayPrefix

GET/api/automation-runsautomation · view

Recent runs across every automation.

GET/api/automation-runs/{id}automation · view

One run, step by step.

POST/api/automation-runs/{id}/cancelautomation · manage

Cancels a run in progress.

GET/api/automation/configautomation · view

Auto-update and auto-restart settings.

PUT/api/automation/configautomation · manage

Changes them; send only the fields you want to change.

GET/api/automation/logautomation · view

Everything automation has done to the server.

Query limit

Discord

GET/api/discord/statusdiscord · view

Whether the bot is connected, and to which server.

GET/api/discord/configdiscord · view

The bot’s settings. The bot token is blank unless the key has discord manage.

PUT/api/discord/configdiscord · manage

Changes the bot’s settings; send only the fields you want to change.

POST/api/discord/test-connectiondiscord · manage

Checks the bot token and connection.

POST/api/discord/avatardiscord · manage

Sets the bot’s avatar (multipart form: PNG, JPEG, GIF or WEBP).

GET/api/discord/channelsdiscord · manage

Channels on the connected Discord server.

GET/api/discord/membersdiscord · manage

Members of the Discord server and the RSM group each one is in.

GET/api/discord/groupsdiscord · manage

RSM groups a member can be put in.

PUT/api/discord/members/{discordId}/groupdiscord · manage

Puts a Discord member in an RSM group, or takes them out.

Body groupId — a group id, or null

Files

Two locations can be browsed: server (the Rust server folder) and rsmweb (RSM Web’s own folder). Every call takes a root and a path relative to it; nothing outside the two roots can be reached.

GET/api/files/rootsfiles · view

The two locations and whether each is available.

GET/api/files/listfiles · view

A folder’s contents.

Query root, path

GET/api/files/readfiles · view

A text file’s content, with modifiedAt and lineEnding. Refuses binary and very large files.

Query root, path

GET/api/files/tailfiles · view

Follows a growing file (a log, say) as a stream of newline-delimited JSON: {"type":"append","text":"…"}, {"type":"reset"} when the file is truncated, and {"type":"ping"} to keep the connection open.

Query root, path

POST/api/files/download-ticketfiles · view

Prepares a download and returns a ticket. Fetch GET /api/files/download?ticket=… within a minute to get the file, or a zip when you selected several items or a folder. Each ticket works once.

Body root, paths — array of paths

POST/api/files/writefiles · manage

Saves a text file.

Body root, path, content, and optionally expectedModifiedAt (the modifiedAt you read — 409 if the file changed since) and lineEnding (lf or crlf)

POST/api/files/uploadfiles · manage

Uploads files into a folder (multipart form). An existing file is only replaced with overwrite=1.

Query root, path, overwrite

POST/api/files/createfiles · manage

Creates an empty file.

Body root, path (the folder), name

POST/api/files/mkdirfiles · manage

Creates a folder.

Body root, path, name

POST/api/files/renamefiles · manage

Renames a file or folder.

Body root, path, name (the new name)

POST/api/files/pastefiles · manage

Copies or moves items into a folder, in either location.

Body sourceRoot, paths, destRoot, destPath, mode (copy or move), overwrite

POST/api/files/extractfiles · manage

Extracts a .zip into a folder named after it.

Body root, path, overwrite

POST/api/files/deletefiles · manage

Deletes files and folders.

Body root, paths

Notes and dashboards

GET/api/notesnotes · view

Every note page.

POST/api/notesnotes · manage

Creates a note.

Body title, category, content (Markdown)

PUT/api/notes/{slug}notes · manage

Changes a note; send only the fields you want to change.

DELETE/api/notes/{slug}notes · manage

Deletes a note.

GET/api/dashboardsdashboard · view

Dashboard views: the key creator’s own, plus public ones.

GET/api/dashboards/{id}dashboard · view

One view and its layout.

POST/api/dashboardsdashboard · manage

Creates a view owned by the key’s creator.

Body name, visibility (private or public)

PUT/api/dashboards/{id}dashboard · manage

Changes a view.

Body name, visibility, layout, sortOrder

DELETE/api/dashboards/{id}dashboard · manage

Deletes a view.

RSM Web updates

GET/api/app-update/statusappupdate · view

The installed RSM Web version, the latest release, the state of any update in progress, and whether the Rust server is running.

GET/api/app-update/logappupdate · view

The last lines of the most recent update’s log.

Query limit (1–50, default 20)

POST/api/app-update/checkappupdate · manage

Checks for an update now.

POST/api/app-update/startappupdate · manage

Installs the update and restarts RSM Web. The Rust server must be stopped first (409 SERVER_RUNNING).

POST/api/app-update/restoreappupdate · manage

Goes back to the version before the last update.