RSM Web API RESTJSON
[ Base URL: http://your-server:3000/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.
Bearer rsm_…
An API key from Settings → Developers → API Keys, sent with every request.
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. The curl examples read both from environment variables, so the key stays out of your shell history:
export RSM_URL=http://your-server:3000
export RSM_KEY=rsm_your_key_hereThen ask for the server’s status. Every example shows the request as raw HTTP, headers included, and as a curl command:
GET /api/server/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/server/status" \
-H "Authorization: Bearer $RSM_KEY"
200 OK
{
"running": true,
"pid": 4812,
"startedAt": "2026-09-26T08:14:03.512Z",
"rconConnected": true
}Changing something works the same way, with a JSON body and a Content-Type header. This kicks a player:
POST /api/players/76561198000000001/kick
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "reason": "AFK" }
curl -X POST "$RSM_URL/api/players/76561198000000001/kick" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"AFK"}'
200 OK
{ "ok": true, "response": "" }When it fails, the status says so and the body says why. The same request with a key that only has players view:
403 Forbidden
{ "error": "This API key needs manage access to players", "code": "FORBIDDEN" }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. Disable the account and its keys stop working until it is enabled again; delete it and they 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:
401 Unauthorized { "error": "Invalid or expired API key", "code": "API_KEY_INVALID" }
403 Forbidden { "error": "This API key needs manage access to players", "code": "FORBIDDEN" }
403 Forbidden { "error": "This action is not available to API keys", "code": "SESSION_REQUIRED" }
503 Service Unavailable { "error": "RCON not connected" }
| Status | Code | Meaning |
|---|---|---|
| 401 | API_KEY_INVALID | The key is wrong, expired or revoked, or the person who made it was disabled or deleted. |
| 401 | AUTH_INVALID | There is no Authorization header, what it holds isn’t an API key (keys start with rsm_), or the endpoint only accepts a signed-in person. |
| 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. |
| 400 | Something in the request is missing or invalid; the message says what. The /api/server actions also answer 400 while RCON is down. | |
| 404 | The thing you asked for doesn’t exist. A few endpoints add a code, such as NOT_GENERATED for a config file the server hasn’t written yet. | |
| 409 | It can’t happen right now — something is already running, or it changed since you read it. | |
| 429 | Too many file requests; wait a moment. See below. | |
| 503 | The action needs RCON, and RCON isn’t connected. |
The file endpoints allow 300 reads and 120 changes a minute from each address, and answer 429 past that. Nothing else has a fixed limit, but the API runs on the same machine as your Rust server: polling status every few seconds is plenty.
Data formats
- Steam IDs are strings, such as
"76561198000000001". They are too large for a JavaScript number, so don’t convert them. - Times are UTC, but not all in one format. Parse whichever you get:
Looks like Where 2026-09-26T14:02:11.483ZMost things: server status, bans, demos, automation runs, updates. 2026-09-26T14:02:11.4830000+00:00Anything reported by the game: players, events, chat, kicks, mutes, staff changes. 2026-09-26 14:02:11When a record was saved: automations, notes, loadouts, dashboards, reports, wipe history. 1790431331483Milliseconds since 1970, in the history charts ( t) and file lists (modifiedAt). - Lists that can be long are paged with
limitandoffsetand come back with atotal, as in{ "total": 5210, "messages": […] }. Ask for the next page untiloffsetreachestotal. - Missing values are
nullor empty: a player with no country has"countryCode": "", and a server that has never run has"startedAt": null.
Recipes
Complete jobs, each one a few requests long, in the order a script would send them.
Restart with a warning, then wait until it’s back
Needs server manage.
-
Note when the current server process started.
GET /api/server/status Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/server/status" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK { "running": true, "pid": 4812, "startedAt": "2026-09-26T08:14:03.512Z", "rconConnected": true } -
Tell players why. Rust counts the restart down in chat by itself; this adds your reason.
POST /api/server/command Authorization: Bearer rsm_your_key_here Content-Type: application/json { "command": "say Restarting for an update in 5 minutes" }curl -X POST "$RSM_URL/api/server/command" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"command":"say Restarting for an update in 5 minutes"}'Response200 OK { "response": "" } -
Restart after a five-minute countdown.
POST /api/server/restart Authorization: Bearer rsm_your_key_here Content-Type: application/json { "countdown": 300 }curl -X POST "$RSM_URL/api/server/restart" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"countdown":300}'Response200 OK { "restarting": true, "countdown": 300 } -
Ask for the status every 10 seconds. The server is back once it is running, RCON is connected and
startedAthas changed: a new process, not the old one shutting down.GET /api/server/status Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/server/status" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK { "running": true, "pid": 5190, "startedAt": "2026-09-26T14:08:37.904Z", "rconConnected": true }
Find a player by name and ban them
Needs players manage.
-
Search for the name. Names aren’t unique, so go on only if exactly one player’s name matches.
GET /api/players?search=Rook&limit=10 Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/players?search=Rook&limit=10" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK { "total": 1, "players": [ { "steamId": "76561198000000001", "name": "Rook", "ip": "203.0.113.24:51820", "isAdmin": false, "firstSeen": "2026-08-02T19:40:11.2718830+00:00", "lastSeen": "2026-09-26T14:02:11.4830000+00:00", "totalPlaySeconds": 183420, "isOnline": true, "countryCode": "DE", "countryName": "Germany", "os": "windows", "isp": "Example Telecom", "isVpn": false, "steamAvatarUrl": "https://avatars.steamstatic.com/…_full.jpg", "vacBanned": false, "vacBanCount": 0, "gameBanCount": 0, "communityBanned": false, "daysSinceLastBan": null, "rustPlaytimeHours": 1412 } ] } -
Ban that player by Steam ID.
durationis in minutes; leave it out for a permanent ban.POST /api/players/76561198000000001/ban Authorization: Bearer rsm_your_key_here Content-Type: application/json { "reason": "Cheating", "duration": 1440 }curl -X POST "$RSM_URL/api/players/76561198000000001/ban" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"reason":"Cheating","duration":1440}'Response200 OK { "ok": true, "response": "" }
Record a player and download the demo
Needs demos manage. The player has to be online; to catch someone the next time they join, put them on the auto-record list with PUT /api/demos/auto/{steamId} instead.
-
Start recording.
minutesis how long to record for; leave it out to record until they leave.POST /api/demos/start Authorization: Bearer rsm_your_key_here Content-Type: application/json { "steamId": "76561198000000003", "minutes": 30 }curl -X POST "$RSM_URL/api/demos/start" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"steamId":"76561198000000003","minutes":30}'Response200 OK { "ok": true } -
Once the time is up, list that player’s demos. A recording only appears here when it has finished; until then it is under
sessionsin/api/demos/status.GET /api/demos?steamId=76561198000000003&limit=1 Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/demos?steamId=76561198000000003&limit=1" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK { "demos": [ { "id": 7, "steamId": "76561198000000003", "name": "Hatch", "file": "demos/rsm/76561198000000003/2026-09-26_13-52-07Z.dem", "fileName": "2026-09-26_13-52-07Z.dem", "startedAt": "2026-09-26T13:52:07.000Z", "endedAt": "2026-09-26T14:22:07.000Z", "durationMs": 1800000, "sizeBytes": 148934656, "reason": "timed", "startedBy": "admin", "endReason": "expired", "stoppedBy": "", "parentId": null, "status": "saved", "error": "", "recovered": false, "pinned": false, "note": "" } ], "total": 3, "totalBytes": 402653184 } -
Ask for a ticket for that demo’s
id.POST /api/demos/download-ticket Authorization: Bearer rsm_your_key_here Content-Type: application/json { "ids": [7] }curl -X POST "$RSM_URL/api/demos/download-ticket" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"ids":[7]}'Response200 OK { "ticket": "e4a17c90d3b6…", "filename": "76561198000000003_2026-09-26_13-52-07Z.dem", "archive": false, "fileCount": 1 } -
Fetch the file with the ticket within a minute. As with any download, the ticket is the permission, so this request has no
Authorizationheader.GET /api/files/download?ticket=e4a17c90d3b6…curl -OJ "$RSM_URL/api/files/download?ticket=$TICKET"Response200 OK Content-Type: application/octet-stream Content-Disposition: attachment; filename="76561198000000003_2026-09-26_13-52-07Z.dem" The demo itself.
Post the player count to Discord
Needs players view and config view, plus a webhook from your Discord channel’s Integrations settings. RSM Web’s own Discord bot can also show this; a webhook suits a channel the bot isn’t in.
-
Read the player limit once. The reply is the whole configuration; the limit is
maxplayers.GET /api/config Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/config" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK The configuration, with "maxplayers": 100 among it. -
Every five minutes, list who is online and count them.
GET /api/players/online Authorization: Bearer rsm_your_key_herecurl "$RSM_URL/api/players/online" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK [ { "steamId": "76561198000000001", "name": "Rook", "ip": "203.0.113.24:51820", "isAdmin": false, "joinedAt": "2026-09-26T12:20:05.9120000+00:00", "os": "windows", "countryCode": "DE", "countryName": "Germany", "isp": "Example Telecom", "isVpn": false, "steamAvatarUrl": "https://avatars.steamstatic.com/…_full.jpg", "vacBanned": false, "vacBanCount": 0, "gameBanCount": 0, "communityBanned": false, "daysSinceLastBan": null, "rustPlaytimeHours": 1412, "x": 1204.5, "z": -388.2, "ping": 38 } ] -
Post the count to the webhook. This goes to Discord, not RSM Web, so it carries no API key.
POST https://discord.com/api/webhooks/… Content-Type: application/json { "content": "37/100 players online" }curl -X POST "$DISCORD_WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d '{"content":"37/100 players online"}'Response204 No Content
Download a file
Needs files view.
-
Ask for a ticket. Several paths, or a folder, come back as one zip.
POST /api/files/download-ticket Authorization: Bearer rsm_your_key_here Content-Type: application/json { "root": "server", "paths": ["server/rsm/cfg/server.cfg"] }curl -X POST "$RSM_URL/api/files/download-ticket" \ -H "Authorization: Bearer $RSM_KEY" \ -H "Content-Type: application/json" \ -d '{"root":"server","paths":["server/rsm/cfg/server.cfg"]}'Response200 OK { "ticket": "c1f0e6a4b8d2…", "filename": "server.cfg", "archive": false, "fileCount": 1 } -
Fetch the file with the ticket from step 1 within a minute. The ticket is the permission, so this request has no
Authorizationheader, and it works once.GET /api/files/download?ticket=c1f0e6a4b8d2…curl -OJ "$RSM_URL/api/files/download?ticket=$TICKET"Response200 OK Content-Type: application/octet-stream Content-Disposition: attachment; filename="server.cfg" The file itself.
Follow a log as it grows
Needs files view. The reply is a stream that stays open, one JSON object per line: the end of the file first, then each new piece as it is written.
-
Open the stream and keep reading.
appendcarries new text,resetmeans the file was emptied or replaced,pingonly keeps the connection open, anderrorends it.GET /api/files/tail?root=server&path=oxide/logs/oxide_2026-09-26.txt Authorization: Bearer rsm_your_key_herecurl -N "$RSM_URL/api/files/tail?root=server&path=oxide/logs/oxide_2026-09-26.txt" \ -H "Authorization: Bearer $RSM_KEY"Response200 OK Content-Type: application/x-ndjson; charset=utf-8 { "type": "append", "text": "14:02:11 [Info] Rook has connected\n" } { "type": "ping" } { "type": "append", "text": "14:02:40 [Info] Mira has disconnected\n" }
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
165 endpoints, grouped by what they work on. Open one to see its parameters, a request with its headers, and the reply. {steamId} and the like are placeholders for a value in the path; the values in the examples are made up.
ServerStart, stop and talk to the Rust server itself.
GET
/api/server/status
Whether the server process is running, its PID and start time, and whether RCON is connected.
server · view
Whether the server process is running, its PID and start time, and whether RCON is connected.
Parameters
No parameters
Request
GET /api/server/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/server/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/server/history
Player count and FPS for the last hour, one point every few seconds.
server · view
Player count and FPS for the last hour, one point every few seconds.
Parameters
No parameters
Request
GET /api/server/history
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/server/history" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | Shortened: the full reply holds every point from the last hour. |
GET
/api/server/metrics-history
Host CPU, memory and disk, the server process’s own CPU and memory, and the game’s players, FPS, entities, queue and network traffic. Recorded once a minute and kept for 7 days; longer ranges are averaged down to at most 720 points.
server · view
Host CPU, memory and disk, the server process’s own CPU and memory, and the game’s players, FPS, entities, queue and network traffic. Recorded once a minute and kept for 7 days; longer ranges are averaged down to at most 720 points.
Parameters
| In | Description |
|---|---|
| query | range — 1h, 6h, 24h (default) or 7d |
Request
GET /api/server/metrics-history?range=6h
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/server/metrics-history?range=6h" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | netIn and netOut are bytes a second. The server’s own figures are null for minutes when it wasn’t running. |
POST
/api/server/start
Starts the server with its saved configuration.
server · manage
Starts the server with its saved configuration.
Parameters
No parameters
Request
POST /api/server/start
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/server/start" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/server/stop
Shuts the server down over RCON. If RCON isn’t connected, use kill.
server · manage
Shuts the server down over RCON. If RCON isn’t connected, use kill.
Parameters
No parameters
Request
POST /api/server/stop
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/server/stop" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/server/restart
Restarts the server after an in-game countdown.
server · manage
Restarts the server after an in-game countdown.
Parameters
| In | Description |
|---|---|
| body | countdown — seconds to warn players first (default 500) |
Request
POST /api/server/restart
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "countdown": 300 }
curl -X POST "$RSM_URL/api/server/restart" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"countdown":300}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/server/save
Saves the world now. Returns the console’s reply as response.
server · manage
Saves the world now. Returns the console’s reply as response.
Parameters
No parameters
Request
POST /api/server/save
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/server/save" \
-H "Authorization: Bearer $RSM_KEY"
POST
/api/server/kill
Ends the server process immediately, without saving. Use only when stop does not work.
server · manage
Ends the server process immediately, without saving. Use only when stop does not work.
Parameters
No parameters
Request
POST /api/server/kill
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/server/kill" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/server/command
Runs a console command over RCON and returns its reply as response.
server · manage
Runs a console command over RCON and returns its reply as response.
Parameters
| In | Description |
|---|---|
| body | command — the command line, e.g. "status" |
Request
POST /api/server/command
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "command": "server.hostname" }
curl -X POST "$RSM_URL/api/server/command" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"command":"server.hostname"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/server/rendermap
Renders a fresh map image for the live map. Takes up to 45 seconds; 409 while a render is already running.
livemap · manage
Renders a fresh map image for the live map. Takes up to 45 seconds; 409 while a render is already running.
Parameters
No parameters
Request
POST /api/server/rendermap
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/server/rendermap" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Installer and settingsInstalling and updating the Rust server files, and the paths and keys RSM Web uses.
GET
/api/installer/status
Progress of the current or last install or update.
installer · view
Progress of the current or last install or update.
Parameters
No parameters
Request
GET /api/installer/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/installer/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | status is idle, running, done, error or stopped; phase is idle, downloading-tool, cleaning or installing. |
GET
/api/installer/version
The installed Rust build and the latest one available.
installer · view
The installed Rust build and the latest one available.
Parameters
| In | Description |
|---|---|
| query | branch — main (default) or staging |
Request
GET /api/installer/version?branch=main
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/installer/version?branch=main" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/installer/start
Installs or updates the server files with SteamCMD.
installer · manage
Installs or updates the server files with SteamCMD.
Parameters
| In | Description |
|---|---|
| body | branch — main or staging; clean — true to validate every file |
Request
POST /api/installer/start
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "branch": "main", "clean": false }
curl -X POST "$RSM_URL/api/installer/start" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"branch":"main","clean":false}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/installer/stop
Stops a running install.
installer · manage
Stops a running install.
Parameters
No parameters
Request
POST /api/installer/stop
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/installer/stop" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/installer/reset
Clears a finished or failed install so a new one can start.
installer · manage
Clears a finished or failed install so a new one can start.
Parameters
No parameters
Request
POST /api/installer/reset
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/installer/reset" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/installer/settings
Server folder, refresh interval, CPU affinity and start-up options. The Steam and RustMaps API keys are only included for keys with settings manage.
settings · 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.
Parameters
No parameters
Request
GET /api/installer/settings
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/installer/settings" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | The two API keys are blank here because this key only has settings view. |
PUT
/api/installer/settings
Saves those settings.
settings · manage
Saves those settings.
Parameters
| In | Description |
|---|---|
| body | serverPath (required), refreshInterval, steamApiKey, rustMapsApiKey, cpuAffinity (array of core numbers), startWithSystem, autoStartServer |
Request
PUT /api/installer/settings
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"serverPath": "/srv/rust",
"cpuAffinity": [2, 3, 4, 5],
"autoStartServer": true
}
curl -X PUT "$RSM_URL/api/installer/settings" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"serverPath":"/srv/rust","cpuAffinity":[2,3,4,5],"autoStartServer":true}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
Server configurationThe server.cfg-style settings RSM Web launches the server with.
GET
/api/config
Hostname, description, map, seed, world size, ports, max players and the rest. The RCON password is blank unless the key has config manage.
config · view
Hostname, description, map, seed, world size, ports, max players and the rest. The RCON password is blank unless the key has config manage.
Parameters
No parameters
Request
GET /api/config
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/config" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | rconpassword is blank because this key only has config view. |
PUT
/api/config
Changes any of those fields; send only the ones you want to change. Most take effect on the next restart.
config · manage
Changes any of those fields; send only the ones you want to change. Most take effect on the next restart.
Parameters
No parameters
Request
PUT /api/config
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "hostname": "My Rust Server | Weekly", "maxplayers": 150 }
curl -X PUT "$RSM_URL/api/config" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"hostname":"My Rust Server | Weekly","maxplayers":150}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/rustmaps/preview
A RustMaps preview for a procedural map. Needs a RustMaps API key in settings.
config · view
A RustMaps preview for a procedural map. Needs a RustMaps API key in settings.
Parameters
| In | Description |
|---|---|
| query | seed, size |
PlayersActions that reach the game need RCON to be connected; they return 503 or 400 when it is not.
GET
/api/players/online
Everyone connected right now.
players · view
Everyone connected right now.
Parameters
No parameters
Request
GET /api/players/online
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/online" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/players
Every player the server has seen, most recent first. Returns { total, players }.
players · view
Every player the server has seen, most recent first. Returns { total, players }.
Parameters
| In | Description |
|---|---|
| query | search (name or Steam ID), online (true/false), limit (1–100, default 50), offset |
Request
GET /api/players?search=rook&limit=2
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players?search=rook&limit=2" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/players/events
Joins, leaves, deaths, kills, wounds, respawns, chat, mutes, staff changes and admin commands, newest first. Each event’s data depends on its type, and id is only unique within one type. A kick is a player_leave with kicked set.
players · view
Joins, leaves, deaths, kills, wounds, respawns, chat, mutes, staff changes and admin commands, newest first. Each event’s data depends on its type, and id is only unique within one type. A kick is a player_leave with kicked set.
Parameters
| In | Description |
|---|---|
| query | from, to (ISO dates), steamId, types (comma-separated: player_join, player_leave, player_death, player_wounded, player_respawn, player_chat, pve_kill, player_muted, player_unmuted, player_authlevel, admin_command), limit (1–500, default 200) |
Request
GET /api/players/events?steamId=76561198000000001&limit=3
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/events?steamId=76561198000000001&limit=3" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | player_leave carries sessionDurationSeconds, reason, kicked and kickedBy; player_respawn carries nothing. |
GET
/api/players/states
Who is banned, muted, or a moderator or owner right now, in one call.
players · view
Who is banned, muted, or a moderator or owner right now, in one call.
Parameters
No parameters
Request
GET /api/players/states
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/states" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | muted gives when each mute ends, or null for one that lasts until unmuted. levels is 1 for a moderator and 2 for an owner. |
GET
/api/players/{steamId}/profile
One player’s record and their moderation history, newest first: bans and unbans, kicks, mutes and unmutes, and staff level changes.
players · view
One player’s record and their moderation history, newest first: bans and unbans, kicks, mutes and unmutes, and staff level changes.
Parameters
No parameters
Request
GET /api/players/76561198000000001/profile
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/76561198000000001/profile" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | history holds up to 100 entries of type ban, unban, kick, mute, unmute and level. player is null for a Steam ID the server has never seen. |
GET
/api/players/{steamId}/combat-stats
Kills, deaths and headshot counts for one player.
players · view
Kills, deaths and headshot counts for one player.
Parameters
No parameters
Request
GET /api/players/76561198000000001/combat-stats
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/76561198000000001/combat-stats" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/players/{steamId}/refresh-steam
Fetches the player’s Steam profile and ban record again.
players · manage
Fetches the player’s Steam profile and ban record again.
Parameters
No parameters
Request
POST /api/players/76561198000000001/refresh-steam
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/players/76561198000000001/refresh-steam" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/players/{steamId}/kick
Kicks the player.
players · manage
Kicks the player.
Parameters
| In | Description |
|---|---|
| body | reason (optional) |
Request
POST /api/players/76561198000000001/kick
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "reason": "AFK" }
curl -X POST "$RSM_URL/api/players/76561198000000001/kick" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"AFK"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/players/{steamId}/ban
Bans the player and records it in the ban history.
players · manage
Bans the player and records it in the ban history.
Parameters
| In | Description |
|---|---|
| body | reason (optional), duration — minutes; 0 or omitted for permanent |
Request
POST /api/players/76561198000000001/ban
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "reason": "Cheating", "duration": 1440 }
curl -X POST "$RSM_URL/api/players/76561198000000001/ban" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"Cheating","duration":1440}'
Responses
| Code | Example |
|---|---|
| 200 OK | duration is in minutes: 1440 is one day. |
POST
/api/players/{steamId}/unban
Lifts the ban.
players · manage
Lifts the ban.
Parameters
No parameters
Request
POST /api/players/76561198000000001/unban
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/players/76561198000000001/unban" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/players/{steamId}/mute
Mutes an online player in chat, for a set time or until unmuted. 404 if they aren’t online.
players · manage
Mutes an online player in chat, for a set time or until unmuted. 404 if they aren’t online.
Parameters
| In | Description |
|---|---|
| body | duration — minutes; 0 or omitted to mute until unmuted |
Request
POST /api/players/76561198000000001/mute
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "duration": 60 }
curl -X POST "$RSM_URL/api/players/76561198000000001/mute" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"duration":60}'
Responses
| Code | Example |
|---|---|
| 200 OK | duration is in minutes: this mute lifts itself after an hour. |
POST
/api/players/{steamId}/unmute
Unmutes an online player. 404 if they aren’t online.
players · manage
Unmutes an online player. 404 if they aren’t online.
Parameters
No parameters
Request
POST /api/players/76561198000000001/unmute
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/players/76561198000000001/unmute" \
-H "Authorization: Bearer $RSM_KEY"
POST
/api/players/{steamId}/skipqueue
Moves a queued player to the front of the queue.
players · manage
Moves a queued player to the front of the queue.
Parameters
No parameters
Request
POST /api/players/76561198000000001/skipqueue
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/players/76561198000000001/skipqueue" \
-H "Authorization: Bearer $RSM_KEY"
POST
/api/players/{steamId}/teleport
Teleports the player to another player. Both must be online and alive.
players · manage
Teleports the player to another player. Both must be online and alive.
Parameters
| In | Description |
|---|---|
| body | toSteamId |
Request
POST /api/players/76561198000000001/teleport
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "toSteamId": "76561198000000002" }
curl -X POST "$RSM_URL/api/players/76561198000000001/teleport" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"toSteamId":"76561198000000002"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/players/{steamId}/authlevel
Sets the player’s in-game auth level.
players · manage
Sets the player’s in-game auth level.
Parameters
| In | Description |
|---|---|
| body | level — 0 (none), 1 (moderator) or 2 (owner) |
Request
POST /api/players/76561198000000001/authlevel
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "level": 1 }
curl -X POST "$RSM_URL/api/players/76561198000000001/authlevel" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"level":1}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/players/bans
The ban history.
players · view
The ban history.
Parameters
| In | Description |
|---|---|
| query | active — true for bans still in force |
Request
GET /api/players/bans?active=true
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/bans?active=true" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | durationMinutes 0 and expiresAt null mean a permanent ban. |
GET
/api/players/bans/live
The server’s own ban list, read over RCON. While RCON is down, RSM Web’s ban records instead.
players · view
The server’s own ban list, read over RCON. While RCON is down, RSM Web’s ban records instead.
Parameters
No parameters
Request
GET /api/players/bans/live
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/bans/live" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | source is rcon, or db or cfg when RCON is down. |
GET
/api/players/kicks
The last 500 kicks, newest first, with the reason and who did it — an RSM Web user, or the console, RCON or the server itself.
players · view
The last 500 kicks, newest first, with the reason and who did it — an RSM Web user, or the console, RCON or the server itself.
Parameters
No parameters
Request
GET /api/players/kicks
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/kicks" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/players/mutes
The last 500 mutes, newest first: who set each one, when it ends, and how it ended.
players · view
The last 500 mutes, newest first: who set each one, when it ends, and how it ended.
Parameters
No parameters
Request
GET /api/players/mutes
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/mutes" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | A mute still in force has unmutedAt null. Once it ends, unmuteReason is unmuted or expired. |
GET
/api/players/auth-changes
The last 500 owner and moderator grants and removals, newest first, with who made each one.
players · view
The last 500 owner and moderator grants and removals, newest first, with who made each one.
Parameters
No parameters
Request
GET /api/players/auth-changes
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/auth-changes" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | Levels are 0 (none), 1 (moderator) and 2 (owner). |
GET
/api/players/admin-commands
The last 500 admin-only commands staff ran from their in-game console, newest first.
players · view
The last 500 admin-only commands staff ran from their in-game console, newest first.
Parameters
No parameters
Request
GET /api/players/admin-commands
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/players/admin-commands" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Items and loadoutsUses the players permission.
GET
/api/inventory/items
Searches the Rust item list.
players · view
Searches the Rust item list.
Parameters
| In | Description |
|---|---|
| query | search, limit (default 50) |
Request
GET /api/inventory/items?search=rifle.ak&limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/inventory/items?search=rifle.ak&limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/inventory/give/{steamId}
Gives an item to an online player.
players · manage
Gives an item to an online player.
Parameters
| In | Description |
|---|---|
| body | item — shortname such as rifle.ak; amount (default 1); skinId (default 0) |
Request
POST /api/inventory/give/76561198000000001
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "item": "rifle.ak", "amount": 1, "skinId": 0 }
curl -X POST "$RSM_URL/api/inventory/give/76561198000000001" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"item":"rifle.ak","amount":1,"skinId":0}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/inventory/loadouts
Saved loadouts.
players · view
Saved loadouts.
Parameters
No parameters
Request
GET /api/inventory/loadouts
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/inventory/loadouts" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/inventory/loadouts
Saves a loadout.
players · manage
Saves a loadout.
Parameters
| In | Description |
|---|---|
| body | name, items — array of { shortname, name, amount, skinId } |
Request
POST /api/inventory/loadouts
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"name": "Starter kit",
"items": [
{ "shortname": "pickaxe", "name": "Pickaxe", "amount": 1, "skinId": 0 },
{ "shortname": "wood", "name": "Wood", "amount": 1000, "skinId": 0 }
]
}
curl -X POST "$RSM_URL/api/inventory/loadouts" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Starter kit","items":[{"shortname":"pickaxe","name":"Pickaxe","amount":1,"skinId":0},{"shortname":"wood","name":"Wood","amount":1000,"skinId":0}]}'
Responses
| Code | Example |
|---|---|
| 201 Created | |
PUT
/api/inventory/loadouts/{id}
Renames a loadout or replaces its items.
players · manage
Renames a loadout or replaces its items.
Parameters
No parameters
DELETE
/api/inventory/loadouts/{id}
Deletes a loadout.
players · manage
Deletes a loadout.
Parameters
No parameters
Request
DELETE /api/inventory/loadouts/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/inventory/loadouts/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/inventory/loadouts/{id}/give/{steamId}
Gives every item in a loadout to an online player.
players · manage
Gives every item in a loadout to an online player.
Parameters
No parameters
Request
POST /api/inventory/loadouts/7/give/76561198000000001
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/inventory/loadouts/7/give/76561198000000001" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
DemosRecordings of what one player’s game saw, made by the RSM Harmony mod and played back in Rust. Demos have their own demos permission, separate from players. Recording needs RCON: 503 while it is down, and 409 when the mod on the server is too old to record.
GET
/api/demos
Finished demos, newest first. Returns { demos, total, totalBytes }.
demos · view
Finished demos, newest first. Returns { demos, total, totalBytes }.
Parameters
| In | Description |
|---|---|
| query | steamId, limit (1–500, default 100), offset |
Request
GET /api/demos?steamId=76561198000000003&limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/demos?steamId=76561198000000003&limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | reason is manual, timed, auto, plugin or found (a file RSM Web came across on disk). endReason is stopped, disconnect, expired, split, shutdown, interrupted or failed. status is saved or failed. |
GET
/api/demos/status
Who is being recorded right now, who is on the auto-record list, and how much disk space is left.
demos · view
Who is being recorded right now, who is on the auto-record list, and how much disk space is left.
Parameters
No parameters
Request
GET /api/demos/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/demos/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | state is ok, offline (RCON is down), outdated (the mod is too old to record) or missing; anything but ok carries only state and error. A recording is split into a new file once it passes splitMinutes or splitMegabytes. |
POST
/api/demos/start
Starts recording an online player. 400 if they aren’t online.
demos · manage
Starts recording an online player. 400 if they aren’t online.
Parameters
| In | Description |
|---|---|
| body | steamId; minutes — 1 to 1440, or 0 or omitted to record until they leave |
Request
POST /api/demos/start
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "steamId": "76561198000000003", "minutes": 30 }
curl -X POST "$RSM_URL/api/demos/start" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"steamId":"76561198000000003","minutes":30}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/demos/stop
Stops a recording and saves it. 400 if the player isn’t being recorded.
demos · manage
Stops a recording and saves it. 400 if the player isn’t being recorded.
Parameters
| In | Description |
|---|---|
| body | steamId |
Request
POST /api/demos/stop
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "steamId": "76561198000000003" }
curl -X POST "$RSM_URL/api/demos/stop" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"steamId":"76561198000000003"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/demos/auto/{steamId}
Puts a player on the auto-record list, or takes them off. Everyone on it is recorded each time they join; they don’t have to be online when you add them.
demos · manage
Puts a player on the auto-record list, or takes them off. Everyone on it is recorded each time they join; they don’t have to be online when you add them.
Parameters
| In | Description |
|---|---|
| body | enabled — true or false |
Request
PUT /api/demos/auto/76561198000000001
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "enabled": true }
curl -X PUT "$RSM_URL/api/demos/auto/76561198000000001" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":true}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/demos/download-ticket
Prepares a download and returns a ticket. Fetch GET /api/files/download?ticket=… within a minute to get the demo, or a zip when you asked for several. Each ticket works once.
demos · view
Prepares a download and returns a ticket. Fetch GET /api/files/download?ticket=… within a minute to get the demo, or a zip when you asked for several. Each ticket works once.
Parameters
| In | Description |
|---|---|
| body | ids — array of 1 to 100 demo ids |
Request
POST /api/demos/download-ticket
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "ids": [7] }
curl -X POST "$RSM_URL/api/demos/download-ticket" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"ids":[7]}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
PATCH
/api/demos/{id}
Pins or unpins a demo, or changes its note.
demos · manage
Pins or unpins a demo, or changes its note.
Parameters
| In | Description |
|---|---|
| body | pinned — true or false; note — up to 500 characters |
Request
PATCH /api/demos/7
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "pinned": true, "note": "Tracks Rook through the wall at 12:40." }
curl -X PATCH "$RSM_URL/api/demos/7" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"pinned":true,"note":"Tracks Rook through the wall at 12:40."}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
DELETE
/api/demos/{id}
Deletes a demo and its file. 409 while it is still recording.
demos · manage
Deletes a demo and its file. 409 while it is still recording.
Parameters
No parameters
Request
DELETE /api/demos/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/demos/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Teams and clans
GET
/api/teams
Every in-game team with its leader and members.
teams · view
Every in-game team with its leader and members.
Parameters
No parameters
Request
GET /api/teams
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/teams" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/teams/{teamId}/kick
Removes a member from a team.
teams · manage
Removes a member from a team.
Parameters
| In | Description |
|---|---|
| body | steamId |
Request
POST /api/teams/4211/kick
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "steamId": "76561198000000002" }
curl -X POST "$RSM_URL/api/teams/4211/kick" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"steamId":"76561198000000002"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/teams/{teamId}/promote
Makes a member the team leader.
teams · manage
Makes a member the team leader.
Parameters
| In | Description |
|---|---|
| body | steamId |
POST
/api/teams/{teamId}/disband
Disbands the team.
teams · manage
Disbands the team.
Parameters
No parameters
Request
POST /api/teams/4211/disband
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/teams/4211/disband" \
-H "Authorization: Bearer $RSM_KEY"
GET
/api/clans
Every clan with its roles, members and pending invites.
clans · view
Every clan with its roles, members and pending invites.
Parameters
No parameters
Request
GET /api/clans
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/clans" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/clans/{clanId}/kick
Removes a member from a clan.
clans · manage
Removes a member from a clan.
Parameters
| In | Description |
|---|---|
| body | steamId |
POST
/api/clans/{clanId}/role
Puts a member in one of the clan’s roles.
clans · manage
Puts a member in one of the clan’s roles.
Parameters
| In | Description |
|---|---|
| body | steamId, roleId |
Request
POST /api/clans/1024/role
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "steamId": "76561198000000001", "roleId": 2 }
curl -X POST "$RSM_URL/api/clans/1024/role" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"steamId":"76561198000000001","roleId":2}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/clans/{clanId}/cancel-invite
Withdraws an invitation.
clans · manage
Withdraws an invitation.
Parameters
| In | Description |
|---|---|
| body | steamId |
POST
/api/clans/{clanId}/disband
Disbands the clan.
clans · manage
Disbands the clan.
Parameters
No parameters
Request
POST /api/clans/1024/disband
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/clans/1024/disband" \
-H "Authorization: Bearer $RSM_KEY"
Chat logs and leaderboard
GET
/api/chat-logs
Chat messages, newest first.
chatlogs · view
Chat messages, newest first.
Parameters
| In | Description |
|---|---|
| query | steamId, search, channel (global, team, local, clan), from, to, limit (1–200, default 100), offset |
Request
GET /api/chat-logs?channel=global&limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/chat-logs?channel=global&limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/chat-logs/players
Everyone who has said something, with a message count.
chatlogs · view
Everyone who has said something, with a message count.
Parameters
No parameters
Request
GET /api/chat-logs/players
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/chat-logs/players" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/leaderboard
Kills, deaths, K/D and headshot percentage per player.
leaderboard · view
Kills, deaths, K/D and headshot percentage per player.
Parameters
| In | Description |
|---|---|
| query | from, to, sort (kd default, kills, deaths, headshotPct), limit (1–500, default 100) |
Request
GET /api/leaderboard?sort=kills&limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/leaderboard?sort=kills&limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
ReportsPlayer reports and feedback sent from inside the game.
GET
/api/reports
Reports, newest first. Returns { reports, total, open }.
reports · view
Reports, newest first. Returns { reports, total, open }.
Parameters
| In | Description |
|---|---|
| query | status (open, in_progress, resolved, dismissed), kind (player, feedback), type (general, bug, cheat, abuse, idea, offensive, rules), targetId, limit, offset |
Request
GET /api/reports?status=open&limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/reports?status=open&limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/reports/{id}
One report.
reports · view
One report.
Parameters
No parameters
Request
GET /api/reports/7
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/reports/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/reports/{id}/image
The screenshot attached to a report, if it has one.
reports · view
The screenshot attached to a report, if it has one.
Parameters
No parameters
Request
GET /api/reports/7/image
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/reports/7/image" \
-H "Authorization: Bearer $RSM_KEY"
PATCH
/api/reports/{id}
Changes a report’s status or note.
reports · manage
Changes a report’s status or note.
Parameters
| In | Description |
|---|---|
| body | status, note |
Request
PATCH /api/reports/7
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "status": "resolved", "note": "Banned Hatch." }
curl -X PATCH "$RSM_URL/api/reports/7" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"resolved","note":"Banned Hatch."}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
DELETE
/api/reports/{id}
Deletes a report.
reports · manage
Deletes a report.
Parameters
No parameters
Request
DELETE /api/reports/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/reports/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Mods and pluginsOxide and Carbon, and the plugins installed on top of them. Endpoints that take framework expect oxide or carbon.
GET
/api/mods/status
Which framework is installed and the state of any install in progress.
mods · view
Which framework is installed and the state of any install in progress.
Parameters
No parameters
Request
GET /api/mods/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/mods/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/mods/switch
Installs a framework, or removes it.
mods · manage
Installs a framework, or removes it.
Parameters
| In | Description |
|---|---|
| body | framework — oxide, carbon or none; branch |
Request
POST /api/mods/switch
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "framework": "carbon", "branch": "main" }
curl -X POST "$RSM_URL/api/mods/switch" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"framework":"carbon","branch":"main"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/mods/stop
Stops a running framework install.
mods · manage
Stops a running framework install.
Parameters
No parameters
Request
POST /api/mods/stop
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/mods/stop" \
-H "Authorization: Bearer $RSM_KEY"
POST
/api/mods/reset
Clears a finished or failed framework install.
mods · manage
Clears a finished or failed framework install.
Parameters
No parameters
Request
POST /api/mods/reset
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/mods/reset" \
-H "Authorization: Bearer $RSM_KEY"
GET
/api/mods/oxide/version
The installed Oxide build and the latest release.
mods · view
The installed Oxide build and the latest release.
Parameters
No parameters
Request
GET /api/mods/oxide/version
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/mods/oxide/version" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/mods/oxide/config
oxide.config.json.
mods · view
oxide.config.json.
Parameters
No parameters
Request
GET /api/mods/oxide/config
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/mods/oxide/config" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 404 Not Found | The reply until the server has started once with Oxide. Carbon’s modules answer the same way. |
PUT
/api/mods/oxide/config
Replaces oxide.config.json with the body.
mods · manage
Replaces oxide.config.json with the body.
Parameters
No parameters
Request
PUT /api/mods/oxide/config
Authorization: Bearer rsm_your_key_here
curl -X PUT "$RSM_URL/api/mods/oxide/config" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/mods/carbon/modules
Carbon’s built-in modules.
mods · view
Carbon’s built-in modules.
Parameters
No parameters
Request
GET /api/mods/carbon/modules
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/mods/carbon/modules" \
-H "Authorization: Bearer $RSM_KEY"
GET
/api/mods/carbon/modules/{name}/config
One Carbon module’s config.
mods · view
One Carbon module’s config.
Parameters
No parameters
Request
GET /api/mods/carbon/modules/Kits/config
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/mods/carbon/modules/Kits/config" \
-H "Authorization: Bearer $RSM_KEY"
PUT
/api/mods/carbon/modules/{name}/config
Replaces that config with the body.
mods · manage
Replaces that config with the body.
Parameters
No parameters
GET
/api/plugins/installed
Installed plugins.
mods · view
Installed plugins.
Parameters
| In | Description |
|---|---|
| query | framework |
Request
GET /api/plugins/installed?framework=oxide
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/installed?framework=oxide" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/plugins/check-updates
Which installed plugins have a newer version.
mods · view
Which installed plugins have a newer version.
Parameters
| In | Description |
|---|---|
| query | framework |
Request
GET /api/plugins/check-updates?framework=oxide
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/check-updates?framework=oxide" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/plugins/umod/search
Searches uMod.
mods · view
Searches uMod.
Parameters
| In | Description |
|---|---|
| query | q, page, sort, tag |
Request
GET /api/plugins/umod/search?q=kits
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/umod/search?q=kits" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | building is true while RSM Web is still fetching the full uMod catalogue on first start. |
GET
/api/plugins/umod/tags
The most common uMod tags.
mods · view
The most common uMod tags.
Parameters
No parameters
Request
GET /api/plugins/umod/tags
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/umod/tags" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/plugins/umod/info/{id}
One uMod plugin’s details.
mods · view
One uMod plugin’s details.
Parameters
No parameters
Request
GET /api/plugins/umod/info/7
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/umod/info/7" \
-H "Authorization: Bearer $RSM_KEY"
GET
/api/plugins/codefling/search
Searches Codefling.
mods · view
Searches Codefling.
Parameters
| In | Description |
|---|---|
| query | q, sortBy |
Request
GET /api/plugins/codefling/search?q=kits
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/codefling/search?q=kits" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/plugins/codefling/purchased
Codefling plugins the connected account owns.
mods · view
Codefling plugins the connected account owns.
Parameters
| In | Description |
|---|---|
| query | q, sortBy |
GET
/api/plugins/codefling/status
Whether a Codefling account is connected.
mods · view
Whether a Codefling account is connected.
Parameters
No parameters
Request
GET /api/plugins/codefling/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/codefling/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/plugins/install
Installs a plugin from uMod or Codefling.
mods · manage
Installs a plugin from uMod or Codefling.
Parameters
| In | Description |
|---|---|
| body | framework, source (umod or codefling), id, filename, version, and downloadUrl for uMod |
Request
POST /api/plugins/install
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"framework": "oxide",
"source": "umod",
"id": "rust-kits",
"filename": "Kits.cs",
"version": "4.4.9",
"downloadUrl": "https://umod.org/plugins/Kits.cs"
}
curl -X POST "$RSM_URL/api/plugins/install" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"framework":"oxide","source":"umod","id":"rust-kits","filename":"Kits.cs","version":"4.4.9","downloadUrl":"https://umod.org/plugins/Kits.cs"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/plugins/update
Updates an installed plugin to its latest version.
mods · manage
Updates an installed plugin to its latest version.
Parameters
| In | Description |
|---|---|
| body | framework, filename |
Request
POST /api/plugins/update
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "framework": "oxide", "filename": "Kits.cs" }
curl -X POST "$RSM_URL/api/plugins/update" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"framework":"oxide","filename":"Kits.cs"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/plugins/upload
Uploads a .cs plugin (multipart form, 10 MB max).
mods · manage
Uploads a .cs plugin (multipart form, 10 MB max).
Parameters
| In | Description |
|---|---|
| form | file, framework, source (umod, codefling or manual) |
Request
POST /api/plugins/upload
Authorization: Bearer rsm_your_key_here
Content-Type: multipart/form-data; boundary=…
file=@Kits.cs
framework=oxide
source=manual
curl -X POST "$RSM_URL/api/plugins/upload" \
-H "Authorization: Bearer $RSM_KEY" \
-F "[email protected]" \
-F "framework=oxide" \
-F "source=manual"
Responses
| Code | Example |
|---|---|
| 200 OK | |
DELETE
/api/plugins/{filename}
Removes a plugin.
mods · manage
Removes a plugin.
Parameters
| In | Description |
|---|---|
| query | framework |
Request
DELETE /api/plugins/Kits.cs?framework=oxide
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/plugins/Kits.cs?framework=oxide" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/plugins/{name}/config
A plugin’s config file.
mods · view
A plugin’s config file.
Parameters
| In | Description |
|---|---|
| query | framework |
Request
GET /api/plugins/Kits/config?framework=oxide
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/plugins/Kits/config?framework=oxide" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/plugins/{name}/config
Replaces a plugin’s config with the body.
mods · manage
Replaces a plugin’s config with the body.
Parameters
| In | Description |
|---|---|
| query | framework |
Request
PUT /api/plugins/Kits/config?framework=oxide
Authorization: Bearer rsm_your_key_here
curl -X PUT "$RSM_URL/api/plugins/Kits/config?framework=oxide" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Wipes and map lists
GET
/api/wipes/schedule
The scheduled wipe: when it runs and what it wipes.
wipes · view
The scheduled wipe: when it runs and what it wipes.
Parameters
No parameters
Request
GET /api/wipes/schedule
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/wipes/schedule" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | dayOfWeek counts from Sunday (0). An empty backupPath means defaultBackupPath. |
PUT
/api/wipes/schedule
Changes the schedule; send only the fields you want to change.
wipes · manage
Changes the schedule; send only the fields you want to change.
Parameters
No parameters
Request
PUT /api/wipes/schedule
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "enabled": true, "dayOfWeek": 4, "timeOfDay": "19:00" }
curl -X PUT "$RSM_URL/api/wipes/schedule" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"dayOfWeek":4,"timeOfDay":"19:00"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/wipes/schedule/test-backup-path
Checks that a backup folder can be written to.
wipes · manage
Checks that a backup folder can be written to.
Parameters
| In | Description |
|---|---|
| body | path |
Request
POST /api/wipes/schedule/test-backup-path
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "path": "/mnt/backups/rust" }
curl -X POST "$RSM_URL/api/wipes/schedule/test-backup-path" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"path":"/mnt/backups/rust"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/wipes/run
Runs the scheduled wipe now. Returns the automation run id.
wipes · manage
Runs the scheduled wipe now. Returns the automation run id.
Parameters
No parameters
Request
POST /api/wipes/run
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/wipes/run" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/wipes/history
Past wipes.
wipes · view
Past wipes.
Parameters
No parameters
Request
GET /api/wipes/history
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/wipes/history" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/wipes/scheduled
Every automation that includes a wipe.
wipes · view
Every automation that includes a wipe.
Parameters
No parameters
Request
GET /api/wipes/scheduled
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/wipes/scheduled" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/wipes/forced-schedule
What happens on Facepunch’s monthly forced wipe.
wipes · view
What happens on Facepunch’s monthly forced wipe.
Parameters
No parameters
Request
GET /api/wipes/forced-schedule
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/wipes/forced-schedule" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/wipes/forced-schedule
Changes the forced-wipe options.
wipes · manage
Changes the forced-wipe options.
Parameters
No parameters
GET
/api/map-lists
Map lists that wipes can pick the next map from.
wipes · view
Map lists that wipes can pick the next map from.
Parameters
No parameters
Request
GET /api/map-lists
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/map-lists" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/map-lists
Creates a map list.
wipes · manage
Creates a map list.
Parameters
| In | Description |
|---|---|
| body | name, mode (random or rotate), entries |
Request
POST /api/map-lists
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"name": "Monthly maps",
"mode": "rotate",
"entries": [
{
"kind": "procedural",
"label": "4000 · 1337",
"seed": 1337,
"worldSize": 4000
},
{
"kind": "custom",
"label": "Hapis",
"url": "https://maps.example.com/hapis.map"
}
]
}
curl -X POST "$RSM_URL/api/map-lists" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Monthly maps","mode":"rotate","entries":[{"kind":"procedural","label":"4000 · 1337","seed":1337,"worldSize":4000},{"kind":"custom","label":"Hapis","url":"https://maps.example.com/hapis.map"}]}'
Responses
| Code | Example |
|---|---|
| 201 Created | |
PUT
/api/map-lists/{id}
Replaces a map list.
wipes · manage
Replaces a map list.
Parameters
No parameters
DELETE
/api/map-lists/{id}
Deletes a map list. 409 while an automation still uses it.
wipes · manage
Deletes a map list. 409 while an automation still uses it.
Parameters
No parameters
Request
DELETE /api/map-lists/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/map-lists/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
AutomationsSaving, 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/automations
Every automation, with its next run.
automation · view
Every automation, with its next run.
Parameters
No parameters
Request
GET /api/automations
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automations/{id}
One automation.
automation · view
One automation.
Parameters
No parameters
Request
GET /api/automations/7
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automations/{id}/runs
That automation’s recent runs.
automation · view
That automation’s recent runs.
Parameters
No parameters
Request
GET /api/automations/7/runs
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/7/runs" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automations/next-runs
Upcoming scheduled runs across all automations that are switched on.
automation · view
Upcoming scheduled runs across all automations that are switched on.
Parameters
No parameters
Request
GET /api/automations/next-runs
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/next-runs" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automations/catalog
The triggers, conditions and actions available, and which actions this key may use.
automation · view
The triggers, conditions and actions available, and which actions this key may use.
Parameters
No parameters
Request
GET /api/automations/catalog
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/catalog" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | Shortened. allowed is false for actions this key can’t use. |
GET
/api/automations/templates
Ready-made automations.
automation · view
Ready-made automations.
Parameters
No parameters
Request
GET /api/automations/templates
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/templates" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/automations
Creates an automation.
automation · manage
Creates an automation.
Parameters
| In | Description |
|---|---|
| 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 |
Request
POST /api/automations
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"name": "Daily restart",
"description": "",
"enabled": true,
"definition": "(a template’s definition)"
}
curl -X POST "$RSM_URL/api/automations" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Daily restart","description":"","enabled":true,"definition":"(a template’s definition)"}'
Responses
| Code | Example |
|---|---|
| 201 Created | |
PUT
/api/automations/{id}
Changes an automation. Send back the version you read; 409 if someone changed it since.
automation · manage
Changes an automation. Send back the version you read; 409 if someone changed it since.
Parameters
No parameters
Request
PUT /api/automations/7
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"version": 3,
"name": "!pop command",
"enabled": true,
"definition": {
"mode": "parallel",
"max": 10,
"triggers": [
{
"kind": "chat_command",
"command": "pop",
"channels": ["global", "team"],
"allow": "everyone",
"cooldownSeconds": 30
}
],
"conditions": [],
"actions": [
{ "kind": "reply", "text": "{players}/{maxPlayers} players online." }
]
}
}
curl -X PUT "$RSM_URL/api/automations/7" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"version":3,"name":"!pop command","enabled":true,"definition":{"mode":"parallel","max":10,"triggers":[{"kind":"chat_command","command":"pop","channels":["global","team"],"allow":"everyone","cooldownSeconds":30}],"conditions":[],"actions":[{"kind":"reply","text":"{players}/{maxPlayers} players online."}]}}'
Responses
| Code | Example |
|---|---|
| 200 OK | A stale version gets 409 and nothing is saved. |
POST
/api/automations/{id}/enabled
Switches an automation on or off.
automation · manage
Switches an automation on or off.
Parameters
| In | Description |
|---|---|
| body | enabled — true or false |
Request
POST /api/automations/7/enabled
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "enabled": false }
curl -X POST "$RSM_URL/api/automations/7/enabled" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":false}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/automations/{id}/run
Runs it now.
automation · manage
Runs it now.
Parameters
No parameters
Request
POST /api/automations/7/run
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/automations/7/run" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/automations/{id}/reset
Puts a built-in automation back to its defaults.
automation · manage
Puts a built-in automation back to its defaults.
Parameters
No parameters
Request
POST /api/automations/7/reset
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/automations/7/reset" \
-H "Authorization: Bearer $RSM_KEY"
DELETE
/api/automations/{id}
Deletes an automation you made. Built-ins can only be switched off or reset.
automation · manage
Deletes an automation you made. Built-ins can only be switched off or reset.
Parameters
No parameters
Request
DELETE /api/automations/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/automations/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automations/settings
The chat-command prefix and the tag in front of every Say.
automation · view
The chat-command prefix and the tag in front of every Say.
Parameters
No parameters
Request
GET /api/automations/settings
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automations/settings" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/automations/settings
Changes them.
automation · manage
Changes them.
Parameters
| In | Description |
|---|---|
| body | chatPrefix, sayPrefix |
Request
PUT /api/automations/settings
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "chatPrefix": "/", "sayPrefix": "[Server]" }
curl -X PUT "$RSM_URL/api/automations/settings" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"chatPrefix":"/","sayPrefix":"[Server]"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automation-runs
Recent runs across every automation.
automation · view
Recent runs across every automation.
Parameters
No parameters
Request
GET /api/automation-runs
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automation-runs" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automation-runs/{id}
One run, step by step.
automation · view
One run, step by step.
Parameters
No parameters
Request
GET /api/automation-runs/7
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automation-runs/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/automation-runs/{id}/cancel
Cancels a run in progress.
automation · manage
Cancels a run in progress.
Parameters
No parameters
Request
POST /api/automation-runs/7/cancel
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/automation-runs/7/cancel" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/automation/config
Auto-update and auto-restart settings.
automation · view
Auto-update and auto-restart settings.
Parameters
No parameters
Request
GET /api/automation/config
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automation/config" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/automation/config
Changes them; send only the fields you want to change.
automation · manage
Changes them; send only the fields you want to change.
Parameters
No parameters
GET
/api/automation/log
Everything automation has done to the server.
automation · view
Everything automation has done to the server.
Parameters
| In | Description |
|---|---|
| query | limit |
Request
GET /api/automation/log?limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/automation/log?limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
Discord
GET
/api/discord/status
Whether the bot is connected, and to which server.
discord · view
Whether the bot is connected, and to which server.
Parameters
No parameters
Request
GET /api/discord/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/discord/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/discord/config
The bot’s settings. The bot token is blank unless the key has discord manage.
discord · view
The bot’s settings. The bot token is blank unless the key has discord manage.
Parameters
No parameters
Request
GET /api/discord/config
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/discord/config" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | botToken is blank because this key only has discord view. |
PUT
/api/discord/config
Changes the bot’s settings; send only the fields you want to change.
discord · manage
Changes the bot’s settings; send only the fields you want to change.
Parameters
No parameters
POST
/api/discord/test-connection
Checks the bot token and connection.
discord · manage
Checks the bot token and connection.
Parameters
No parameters
Request
POST /api/discord/test-connection
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/discord/test-connection" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/discord/avatar
Sets the bot’s avatar (multipart form: PNG, JPEG, GIF or WEBP).
discord · manage
Sets the bot’s avatar (multipart form: PNG, JPEG, GIF or WEBP).
Parameters
No parameters
GET
/api/discord/channels
Channels on the connected Discord server.
discord · manage
Channels on the connected Discord server.
Parameters
No parameters
Request
GET /api/discord/channels
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/discord/channels" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/discord/members
Members of the Discord server and the RSM group each one is in.
discord · manage
Members of the Discord server and the RSM group each one is in.
Parameters
No parameters
Request
GET /api/discord/members
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/discord/members" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/discord/groups
RSM groups a member can be put in.
discord · manage
RSM groups a member can be put in.
Parameters
No parameters
Request
GET /api/discord/groups
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/discord/groups" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
PUT
/api/discord/members/{discordId}/group
Puts a Discord member in an RSM group, or takes them out. 403 for a group that holds access the key doesn’t.
discord · manage
Puts a Discord member in an RSM group, or takes them out. 403 for a group that holds access the key doesn’t.
Parameters
| In | Description |
|---|---|
| body | groupId — a group id, or null |
Request
PUT /api/discord/members/310000000000000001/group
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "groupId": 3 }
curl -X PUT "$RSM_URL/api/discord/members/310000000000000001/group" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"groupId":3}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
FilesTwo 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/roots
The two locations and whether each is available.
files · view
The two locations and whether each is available.
Parameters
No parameters
Request
GET /api/files/roots
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/files/roots" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/files/list
A folder’s contents.
files · view
A folder’s contents.
Parameters
| In | Description |
|---|---|
| query | root, path |
Request
GET /api/files/list?root=server&path=server/rsm/cfg
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/files/list?root=server&path=server/rsm/cfg" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/files/read
A text file’s content, with modifiedAt and lineEnding. Refuses binary and very large files.
files · view
A text file’s content, with modifiedAt and lineEnding. Refuses binary and very large files.
Parameters
| In | Description |
|---|---|
| query | root, path |
Request
GET /api/files/read?root=server&path=server/rsm/cfg/server.cfg
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/files/read?root=server&path=server/rsm/cfg/server.cfg" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/files/tail
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.
files · 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.
Parameters
| In | Description |
|---|---|
| query | root, path |
Request
GET /api/files/tail?root=server&path=oxide/logs/oxide_2026-09-26.txt
Authorization: Bearer rsm_your_key_here
curl -N "$RSM_URL/api/files/tail?root=server&path=oxide/logs/oxide_2026-09-26.txt" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/files/download-ticket
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.
files · 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.
Parameters
| In | Description |
|---|---|
| body | root, paths — array of paths |
Request
POST /api/files/download-ticket
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "root": "server", "paths": ["server/rsm/cfg/server.cfg"] }
curl -X POST "$RSM_URL/api/files/download-ticket" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"root":"server","paths":["server/rsm/cfg/server.cfg"]}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/files/write
Saves a text file.
files · manage
Saves a text file.
Parameters
| In | Description |
|---|---|
| body | root, path, content, and optionally expectedModifiedAt (the modifiedAt you read — 409 if the file changed since) and lineEnding (lf or crlf) |
Request
POST /api/files/write
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"root": "server",
"path": "server/rsm/cfg/server.cfg",
"content": "server.hostname \"My Rust Server\"\n",
"expectedModifiedAt": 1790412000312.2
}
curl -X POST "$RSM_URL/api/files/write" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"root":"server","path":"server/rsm/cfg/server.cfg","content":"server.hostname \"My Rust Server\"\n","expectedModifiedAt":1790412000312.2}'
Responses
| Code | Example |
|---|---|
| 200 OK | applied is applied when RSM Web told the running server to reload the file, offline when it will be read at the next start, and null when nothing needs reloading. |
POST
/api/files/upload
Uploads files into a folder (multipart form). An existing file is only replaced with overwrite=1.
files · manage
Uploads files into a folder (multipart form). An existing file is only replaced with overwrite=1.
Parameters
| In | Description |
|---|---|
| query | root, path, overwrite |
Request
POST /api/files/upload?root=server&path=oxide/plugins
Authorization: Bearer rsm_your_key_here
Content-Type: multipart/form-data; boundary=…
file=@Kits.cs
file=@NTeleportation.cs
curl -X POST "$RSM_URL/api/files/upload?root=server&path=oxide/plugins" \
-H "Authorization: Bearer $RSM_KEY" \
-F "[email protected]" \
-F "[email protected]"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/files/create
Creates an empty file.
files · manage
Creates an empty file.
Parameters
| In | Description |
|---|---|
| body | root, path (the folder), name |
POST
/api/files/mkdir
Creates a folder.
files · manage
Creates a folder.
Parameters
| In | Description |
|---|---|
| body | root, path, name |
POST
/api/files/rename
Renames a file or folder.
files · manage
Renames a file or folder.
Parameters
| In | Description |
|---|---|
| body | root, path, name (the new name) |
POST
/api/files/paste
Copies or moves items into a folder, in either location.
files · manage
Copies or moves items into a folder, in either location.
Parameters
| In | Description |
|---|---|
| body | sourceRoot, paths, destRoot, destPath, mode (copy or move), overwrite |
Request
POST /api/files/paste
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"sourceRoot": "server",
"paths": ["oxide/config/Kits.json"],
"destRoot": "server",
"destPath": "backups",
"mode": "copy",
"overwrite": false
}
curl -X POST "$RSM_URL/api/files/paste" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"sourceRoot":"server","paths":["oxide/config/Kits.json"],"destRoot":"server","destPath":"backups","mode":"copy","overwrite":false}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/files/extract
Extracts a .zip into a folder named after it.
files · manage
Extracts a .zip into a folder named after it.
Parameters
| In | Description |
|---|---|
| body | root, path, overwrite |
Request
POST /api/files/extract
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "root": "server", "path": "maps.zip" }
curl -X POST "$RSM_URL/api/files/extract" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"root":"server","path":"maps.zip"}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/files/delete
Deletes files and folders.
files · manage
Deletes files and folders.
Parameters
| In | Description |
|---|---|
| body | root, paths |
Request
POST /api/files/delete
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "root": "server", "paths": ["oxide/logs/old.txt"] }
curl -X POST "$RSM_URL/api/files/delete" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"root":"server","paths":["oxide/logs/old.txt"]}'
Responses
| Code | Example |
|---|---|
| 200 OK | |
Notes and dashboards
GET
/api/notes
Every note page.
notes · view
Every note page.
Parameters
No parameters
Request
GET /api/notes
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/notes" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/notes
Creates a note.
notes · manage
Creates a note.
Parameters
| In | Description |
|---|---|
| body | title, category, content (Markdown) |
Request
POST /api/notes
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{
"title": "Rules",
"category": "Server",
"content": "# Rules\n\n1. No cheating.\n2. Max group size 4."
}
curl -X POST "$RSM_URL/api/notes" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Rules","category":"Server","content":"# Rules\n\n1. No cheating.\n2. Max group size 4."}'
Responses
| Code | Example |
|---|---|
| 201 Created | |
PUT
/api/notes/{slug}
Changes a note; send only the fields you want to change.
notes · manage
Changes a note; send only the fields you want to change.
Parameters
No parameters
DELETE
/api/notes/{slug}
Deletes a note.
notes · manage
Deletes a note.
Parameters
No parameters
Request
DELETE /api/notes/rules
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/notes/rules" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/dashboards
Dashboard views: the key creator’s own, plus public ones.
dashboard · view
Dashboard views: the key creator’s own, plus public ones.
Parameters
No parameters
Request
GET /api/dashboards
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/dashboards" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/dashboards/{id}
One view and its layout.
dashboard · view
One view and its layout.
Parameters
No parameters
Request
GET /api/dashboards/7
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/dashboards/7" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | cardType is console, controls, quickcmds, notes, status, serverinfo, metric, metrics, health, livemap, players or activity. |
POST
/api/dashboards
Creates a view owned by the key’s creator.
dashboard · manage
Creates a view owned by the key’s creator.
Parameters
| In | Description |
|---|---|
| body | name, visibility (private or public), and optionally layout — the easiest way to get a valid layout is to arrange a view in RSM Web and read it back with GET |
Request
POST /api/dashboards
Authorization: Bearer rsm_your_key_here
Content-Type: application/json
{ "name": "Wipe day", "visibility": "public" }
curl -X POST "$RSM_URL/api/dashboards" \
-H "Authorization: Bearer $RSM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Wipe day","visibility":"public"}'
Responses
| Code | Example |
|---|---|
| 201 Created | |
PUT
/api/dashboards/{id}
Changes a view.
dashboard · manage
Changes a view.
Parameters
| In | Description |
|---|---|
| body | name, visibility, layout, sortOrder |
DELETE
/api/dashboards/{id}
Deletes a view.
dashboard · manage
Deletes a view.
Parameters
No parameters
Request
DELETE /api/dashboards/7
Authorization: Bearer rsm_your_key_here
curl -X DELETE "$RSM_URL/api/dashboards/7" \
-H "Authorization: Bearer $RSM_KEY"
RSM Web updates
GET
/api/app-update/status
The installed RSM Web version, the latest release, the state of any update in progress, and whether the Rust server is running.
appupdate · view
The installed RSM Web version, the latest release, the state of any update in progress, and whether the Rust server is running.
Parameters
No parameters
Request
GET /api/app-update/status
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/app-update/status" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
GET
/api/app-update/log
The last lines of the most recent update’s log.
appupdate · view
The last lines of the most recent update’s log.
Parameters
| In | Description |
|---|---|
| query | limit (1–50, default 20) |
Request
GET /api/app-update/log?limit=1
Authorization: Bearer rsm_your_key_here
curl "$RSM_URL/api/app-update/log?limit=1" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/app-update/check
Checks for an update now.
appupdate · manage
Checks for an update now.
Parameters
No parameters
Request
POST /api/app-update/check
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/app-update/check" \
-H "Authorization: Bearer $RSM_KEY"
POST
/api/app-update/start
Installs the update and restarts RSM Web. The Rust server must be stopped first (409 SERVER_RUNNING).
appupdate · manage
Installs the update and restarts RSM Web. The Rust server must be stopped first (409 SERVER_RUNNING).
Parameters
No parameters
Request
POST /api/app-update/start
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/app-update/start" \
-H "Authorization: Bearer $RSM_KEY"
Responses
| Code | Example |
|---|---|
| 200 OK | |
POST
/api/app-update/restore
Goes back to the version before the last update.
appupdate · manage
Goes back to the version before the last update.
Parameters
No parameters
Request
POST /api/app-update/restore
Authorization: Bearer rsm_your_key_here
curl -X POST "$RSM_URL/api/app-update/restore" \
-H "Authorization: Bearer $RSM_KEY"