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
- In RSM Web, open Settings → Developers → API Keys and choose Create key. You need
settingsmanage access to see it. - Name the key after what will use it, pick when it expires, and give it access only to the modules it needs.
- 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:
| Level | What the key can do |
|---|---|
none | Nothing in that module. The default for every module you don’t pick. |
view | Read: status, lists, logs, settings. |
manage | Read 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:
- A key never outranks the person who made it. You can only give a key access you have yourself, and it keeps following you: if your access is later lowered, your keys lose it too. Delete the account and its keys are deleted with it.
- Secrets such as the RCON password, the Discord bot token and the Steam API key are only returned to keys with
manageon their module. Atviewthey come back blank. - The request acts as the key’s creator: bans, notes and audit entries it makes carry that person’s name, and dashboard views belong to them.
- A key can’t be given access to user management, and keys can’t create, change or read other keys.
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" }
| Status | Code | Meaning |
|---|---|---|
| 401 | API_KEY_INVALID | The key is wrong, expired or revoked, or the person who made it was deleted. |
| 403 | FORBIDDEN | The key doesn’t have the level this endpoint needs. The message says which. |
| 403 | SESSION_REQUIRED | Only a person signed in to RSM Web can do this. |
| 403 | LICENSE_REQUIRED | RSM Web isn’t linked to an active licence. Nothing works until it is. |
| 401 | AUTH_INVALID | The endpoint only accepts a signed-in session, not a key. |
| 400 | Something in the request is missing or invalid; the message says what. | |
| 404 | The thing you asked for doesn’t exist. | |
| 409 | It can’t happen right now — something is already running, or it changed since you read it. | |
| 503 | The 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:
- Signing in, passwords and sessions (
/api/auth/…), and linking your RSM account (/api/rsm-account/…). - Creating and managing API keys, and managing users and groups.
- The live streams behind the console, installer and automation progress. Poll the matching status endpoints instead.
- The live map image.
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.
/api/server/statusserver · viewWhether the server process is running, its PID and start time, and whether RCON is connected.
/api/server/historyserver · viewPlayer count and FPS for the last hour, one point every few seconds.
/api/server/metrics-historyserver · viewHost CPU, memory and disk, the server process’s own CPU and memory, players and FPS for the last 24 hours, one point a minute.
/api/server/startserver · manageStarts the server with its saved configuration.
/api/server/stopserver · manageShuts the server down over RCON. If RCON isn’t connected, use kill.
/api/server/restartserver · manageRestarts the server after an in-game countdown.
Body countdown — seconds to warn players first (default 500)
/api/server/saveserver · manageSaves the world now.
/api/server/killserver · manageEnds the server process immediately, without saving. Use only when stop does not work.
/api/server/commandserver · manageRuns a console command over RCON and returns its reply.
Body command — the command line, e.g. "status"
/api/server/rendermaplivemap · manageRenders 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.
/api/installer/statusinstaller · viewProgress of the current or last install or update.
/api/installer/versioninstaller · viewThe installed Rust build and the latest one available.
Query branch — main (default) or staging
/api/installer/startinstaller · manageInstalls or updates the server files with SteamCMD.
Body branch — main or staging; clean — true to validate every file
/api/installer/stopinstaller · manageStops a running install.
/api/installer/resetinstaller · manageClears a finished or failed install so a new one can start.
/api/installer/settingssettings · viewServer folder, refresh interval, CPU affinity and start-up options. The Steam and RustMaps API keys are only included for keys with settings manage.
/api/installer/settingssettings · manageSaves 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.
/api/configconfig · viewHostname, description, map, seed, world size, ports, max players and the rest. The RCON password is blank unless the key has config manage.
/api/configconfig · manageChanges any of those fields; send only the ones you want to change. Most take effect on the next restart.
/api/rustmaps/previewconfig · viewA 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.
/api/players/onlineplayers · viewEveryone connected right now.
/api/playersplayers · viewEvery 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
/api/players/eventsplayers · viewJoins, 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)
/api/players/{steamId}/combat-statsplayers · viewKills, deaths and headshot counts for one player.
/api/players/{steamId}/refresh-steamplayers · manageFetches the player’s Steam profile and ban record again.
/api/players/{steamId}/kickplayers · manageKicks the player.
Body reason (optional)
/api/players/{steamId}/banplayers · manageBans the player and records it in the ban history.
Body reason (optional), duration — minutes; 0 or omitted for permanent
/api/players/{steamId}/unbanplayers · manageLifts the ban.
/api/players/{steamId}/muteplayers · manageMutes the player in chat.
/api/players/{steamId}/unmuteplayers · manageUnmutes the player.
/api/players/{steamId}/skipqueueplayers · manageMoves a queued player to the front of the queue.
/api/players/{steamId}/teleportplayers · manageTeleports the player to another player. Both must be online and alive.
Body toSteamId
/api/players/{steamId}/authlevelplayers · manageSets the player’s in-game auth level.
Body level — 0 (none), 1 (moderator) or 2 (owner)
/api/players/bansplayers · viewThe ban history.
Query active — true for bans still in force
/api/players/bans/liveplayers · viewThe server’s own ban list, read over RCON. While RCON is down, RSM Web’s ban records instead.
/api/players/banned-idsplayers · viewJust the Steam IDs that are banned right now.
/api/players/{steamId}/bansplayers · viewOne player’s ban history.
Items and loadouts
Uses the players permission.
/api/inventory/itemsplayers · viewSearches the Rust item list.
Query search, limit (default 50)
/api/inventory/give/{steamId}players · manageGives an item to an online player.
Body item — shortname such as rifle.ak; amount (default 1); skinId (default 0)
/api/inventory/loadoutsplayers · viewSaved loadouts.
/api/inventory/loadoutsplayers · manageSaves a loadout.
Body name, items — array of { shortname, name, amount, skinId }
/api/inventory/loadouts/{id}players · manageRenames a loadout or replaces its items.
/api/inventory/loadouts/{id}players · manageDeletes a loadout.
/api/inventory/loadouts/{id}/give/{steamId}players · manageGives every item in a loadout to an online player.
Teams and clans
/api/teamsteams · viewEvery in-game team with its leader and members.
/api/teams/{teamId}/kickteams · manageRemoves a member from a team.
Body steamId
/api/teams/{teamId}/promoteteams · manageMakes a member the team leader.
Body steamId
/api/teams/{teamId}/disbandteams · manageDisbands the team.
/api/clansclans · viewEvery clan with its roles, members and pending invites.
/api/clans/{clanId}/kickclans · manageRemoves a member from a clan.
Body steamId
/api/clans/{clanId}/roleclans · managePuts a member in one of the clan’s roles.
Body steamId, roleId
/api/clans/{clanId}/cancel-inviteclans · manageWithdraws an invitation.
Body steamId
/api/clans/{clanId}/disbandclans · manageDisbands the clan.
Chat logs and leaderboard
/api/chat-logschatlogs · viewChat messages, newest first.
Query steamId, search, channel (global, team, local, clan), from, to, limit (1–200, default 100), offset
/api/chat-logs/playerschatlogs · viewEveryone who has said something, with a message count.
/api/leaderboardleaderboard · viewKills, 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.
/api/reportsreports · viewReports, 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
/api/reports/{id}reports · viewOne report.
/api/reports/{id}/imagereports · viewThe screenshot attached to a report, if it has one.
/api/reports/{id}reports · manageChanges a report’s status or note.
Body status, note
/api/reports/{id}reports · manageDeletes a report.
Mods and plugins
Oxide and Carbon, and the plugins installed on top of them. Endpoints that take framework expect oxide or carbon.
/api/mods/statusmods · viewWhich framework is installed and the state of any install in progress.
/api/mods/switchmods · manageInstalls a framework, or removes it.
Body framework — oxide, carbon or none; branch
/api/mods/stopmods · manageStops a running framework install.
/api/mods/resetmods · manageClears a finished or failed framework install.
/api/mods/oxide/versionmods · viewThe installed Oxide build and the latest release.
/api/mods/oxide/configmods · viewoxide.config.json.
/api/mods/oxide/configmods · manageReplaces oxide.config.json with the body.
/api/mods/carbon/modulesmods · viewCarbon’s built-in modules.
/api/mods/carbon/modules/{name}/configmods · viewOne Carbon module’s config.
/api/mods/carbon/modules/{name}/configmods · manageReplaces that config with the body.
/api/plugins/installedmods · viewInstalled plugins.
Query framework
/api/plugins/check-updatesmods · viewWhich installed plugins have a newer version.
Query framework
/api/plugins/umod/searchmods · viewSearches uMod.
Query q, page, sort, tag
/api/plugins/umod/tagsmods · viewThe most common uMod tags.
/api/plugins/umod/info/{id}mods · viewOne uMod plugin’s details.
/api/plugins/codefling/searchmods · viewSearches Codefling.
Query q, sortBy
/api/plugins/codefling/purchasedmods · viewCodefling plugins the connected account owns.
Query q, sortBy
/api/plugins/codefling/statusmods · viewWhether a Codefling account is connected.
/api/plugins/installmods · manageInstalls a plugin from uMod or Codefling.
Body framework, source (umod or codefling), id, filename, version, and downloadUrl for uMod
/api/plugins/updatemods · manageUpdates an installed plugin to its latest version.
Body framework, filename
/api/plugins/uploadmods · manageUploads a .cs plugin (multipart form, 10 MB max).
Form file, framework, source (umod, codefling or manual)
/api/plugins/{filename}mods · manageRemoves a plugin.
Query framework
/api/plugins/{name}/configmods · viewA plugin’s config file.
Query framework
/api/plugins/{name}/configmods · manageReplaces a plugin’s config with the body.
Query framework
Wipes and map lists
/api/wipes/schedulewipes · viewThe scheduled wipe: when it runs and what it wipes.
/api/wipes/schedulewipes · manageChanges the schedule; send only the fields you want to change.
/api/wipes/schedule/test-backup-pathwipes · manageChecks that a backup folder can be written to.
Body path
/api/wipes/runwipes · manageRuns the scheduled wipe now. Returns the automation run id.
/api/wipes/historywipes · viewPast wipes.
/api/wipes/scheduledwipes · viewEvery automation that includes a wipe.
/api/wipes/forced-schedulewipes · viewWhat happens on Facepunch’s monthly forced wipe.
/api/wipes/forced-schedulewipes · manageChanges the forced-wipe options.
/api/map-listswipes · viewMap lists that wipes can pick the next map from.
/api/map-listswipes · manageCreates a map list.
Body name, mode (random or rotate), entries
/api/map-lists/{id}wipes · manageReplaces a map list.
/api/map-lists/{id}wipes · manageDeletes 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.
/api/automationsautomation · viewEvery automation, with its next run.
/api/automations/{id}automation · viewOne automation.
/api/automations/{id}/runsautomation · viewThat automation’s recent runs.
/api/automations/next-runsautomation · viewUpcoming scheduled runs across all automations that are switched on.
/api/automations/catalogautomation · viewThe triggers, conditions and actions available, and which actions this key may use.
/api/automations/templatesautomation · viewReady-made automations.
/api/automationsautomation · manageCreates 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
/api/automations/{id}automation · manageChanges an automation. Send back the version you read; 409 if someone changed it since.
/api/automations/{id}/enabledautomation · manageSwitches an automation on or off.
Body enabled — true or false
/api/automations/{id}/runautomation · manageRuns it now.
/api/automations/{id}/resetautomation · managePuts a built-in automation back to its defaults.
/api/automations/{id}automation · manageDeletes an automation you made. Built-ins can only be switched off or reset.
/api/automations/settingsautomation · viewThe chat-command prefix and the tag in front of every Say.
/api/automations/settingsautomation · manageChanges them.
Body chatPrefix, sayPrefix
/api/automation-runsautomation · viewRecent runs across every automation.
/api/automation-runs/{id}automation · viewOne run, step by step.
/api/automation-runs/{id}/cancelautomation · manageCancels a run in progress.
/api/automation/configautomation · viewAuto-update and auto-restart settings.
/api/automation/configautomation · manageChanges them; send only the fields you want to change.
/api/automation/logautomation · viewEverything automation has done to the server.
Query limit
Discord
/api/discord/statusdiscord · viewWhether the bot is connected, and to which server.
/api/discord/configdiscord · viewThe bot’s settings. The bot token is blank unless the key has discord manage.
/api/discord/configdiscord · manageChanges the bot’s settings; send only the fields you want to change.
/api/discord/test-connectiondiscord · manageChecks the bot token and connection.
/api/discord/avatardiscord · manageSets the bot’s avatar (multipart form: PNG, JPEG, GIF or WEBP).
/api/discord/channelsdiscord · manageChannels on the connected Discord server.
/api/discord/membersdiscord · manageMembers of the Discord server and the RSM group each one is in.
/api/discord/groupsdiscord · manageRSM groups a member can be put in.
/api/discord/members/{discordId}/groupdiscord · managePuts 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.
/api/files/rootsfiles · viewThe two locations and whether each is available.
/api/files/listfiles · viewA folder’s contents.
Query root, path
/api/files/readfiles · viewA text file’s content, with modifiedAt and lineEnding. Refuses binary and very large files.
Query root, path
/api/files/tailfiles · viewFollows 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
/api/files/download-ticketfiles · viewPrepares 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
/api/files/writefiles · manageSaves 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)
/api/files/uploadfiles · manageUploads files into a folder (multipart form). An existing file is only replaced with overwrite=1.
Query root, path, overwrite
/api/files/createfiles · manageCreates an empty file.
Body root, path (the folder), name
/api/files/mkdirfiles · manageCreates a folder.
Body root, path, name
/api/files/renamefiles · manageRenames a file or folder.
Body root, path, name (the new name)
/api/files/pastefiles · manageCopies or moves items into a folder, in either location.
Body sourceRoot, paths, destRoot, destPath, mode (copy or move), overwrite
/api/files/extractfiles · manageExtracts a .zip into a folder named after it.
Body root, path, overwrite
/api/files/deletefiles · manageDeletes files and folders.
Body root, paths
Notes and dashboards
/api/notesnotes · viewEvery note page.
/api/notesnotes · manageCreates a note.
Body title, category, content (Markdown)
/api/notes/{slug}notes · manageChanges a note; send only the fields you want to change.
/api/notes/{slug}notes · manageDeletes a note.
/api/dashboardsdashboard · viewDashboard views: the key creator’s own, plus public ones.
/api/dashboards/{id}dashboard · viewOne view and its layout.
/api/dashboardsdashboard · manageCreates a view owned by the key’s creator.
Body name, visibility (private or public)
/api/dashboards/{id}dashboard · manageChanges a view.
Body name, visibility, layout, sortOrder
/api/dashboards/{id}dashboard · manageDeletes a view.
RSM Web updates
/api/app-update/statusappupdate · viewThe installed RSM Web version, the latest release, the state of any update in progress, and whether the Rust server is running.
/api/app-update/logappupdate · viewThe last lines of the most recent update’s log.
Query limit (1–50, default 20)
/api/app-update/checkappupdate · manageChecks for an update now.
/api/app-update/startappupdate · manageInstalls the update and restarts RSM Web. The Rust server must be stopped first (409 SERVER_RUNNING).
/api/app-update/restoreappupdate · manageGoes back to the version before the last update.