
API Scopes and Permissions
The full scope vocabulary for the Customer API - all 44 scopes, what each one grants, and how to choose least-privilege scopes for each key.
How scopes work
Every API key carries a list of scopes. A scope is permission to call a particular kind of endpoint, and the key can call nothing it was not granted. You choose the list when you create the key in the panel, and it cannot be widened afterwards - to change what a key can do, create a new one.
Three rules decide everything else:
- There is no hierarchy.
files:writedoes not implyfiles:read.backups:writedoes not implybackups:createorbackups:restore. If a key needs to both read and write something, grant both scopes. - There is no wildcard. There is no
*scope and no "all access" option. Selecting everything in the panel writes all 44 scope names out explicitly, so what a key can do is always visible in its own record. - Scopes are matched exactly, and they are case-sensitive.
Servers:Readis notservers:read.
A scope on its own is not enough. The key also has an owner, and the owner must still hold the underlying account permission. If someone loses a role, every key they created stops being able to do the thing that role allowed, within about a minute - even though the scope is still written on the key. The two failures look different on purpose:
| Response | Meaning | How to fix it |
|---|---|---|
403 insufficient_scope | The key was never granted this scope. | Create a new key with the scope included. |
403 permission_revoked | The key has the scope, but its owner no longer holds the account permission behind it. | Restore the owner's role. |
You never have to guess what a key holds. GET /account/keys/current returns the calling key's own scopes and needs no scope of its own, so even a key with a mistyped scope list can still ask what it can do.
The 44 scopes
This is the complete vocabulary. GET /api/public/v1/meta/scopes returns the same list as JSON and needs no API key, so a client can always check it against a live server.
Account, billing and keys
| Scope | What it grants |
|---|---|
account:read | Read your account, organization, entitlements, roles and legal status. |
account:write | Reserved. Grants nothing today - the endpoint it was made for was withdrawn. It stays in the catalogue so existing keys that hold it are not reported as holding an unknown scope. |
billing:read | Read your billing summary and the plan list. Read-only; nothing in the API can charge you. |
keys:read | List your organization's API keys. Metadata only - a key secret is never returned. |
keys:revoke | Let a key revoke itself. It cannot revoke any other key. |
audit:read | Read a rolling 24-hour trail of API calls made with your keys, plus panel actions on your servers. |
Servers and lifecycle
| Scope | What it grants |
|---|---|
servers:read | List and read servers, status, real-time stats, capabilities and lifecycle history. |
servers:write | Rename a server; change auto-restart, restart schedule and resource limits. |
servers:lifecycle | Start, stop, restart and kill a server. |
metrics:read | Read current and historical metrics, resource limits and diagnostics. |
maintenance:execute | Verify, reinstall, wipe, delete savegames and update. Four of those five also require a typed confirmation. |
Console, logs and files
| Scope | What it grants |
|---|---|
console:read | Read console history and open a console stream. |
console:write | Send console commands, and clear console history. |
logs:read | List, tail, download and stream log files. |
files:read | List, read and download files; read FTP and SFTP connection details. |
files:write | Write, upload, delete, rename, copy, move, create folders, archive and extract; reset the FTP password; turn SFTP on or off. |
Settings, players, backups and mods
| Scope | What it grants |
|---|---|
settings:read | Read the settings schema, current values, change history and drift; validate a proposed change. |
settings:write | Write settings, roll back a change, and switch worlds. |
players:read | Read the contents of a player list, and the catalogue of lists a game declares. |
players:write | Add and remove player-list entries - bans, whitelist, ops, and any other list your game defines. |
backups:read | List and download backups; read your quota, schedule and restore-job status. |
backups:create | Create a backup, and upload one. |
backups:write | Delete and re-label backups; set or remove the backup schedule. |
backups:restore | Restore a backup over live data. Separate from backups:write because it destroys the current state. |
mods:read | List installed mods and search the marketplaces. |
mods:write | Install, uninstall, enable, disable and reorder mods. |
Webhooks, bundles, tickets and Windrose Plus
| Scope | What it grants |
|---|---|
webhooks:read | List webhooks and their delivery history. |
webhooks:write | Create and delete webhooks. |
webhooks:manage | Update, test and redeliver webhooks. Not covered by webhooks:write - see the note below. |
bundles:read | Read your server bundles, their slot usage and the servers assigned to them. |
bundles:write | Rename a bundle. |
tickets:read | List and read support tickets and their messages. |
tickets:write | Open a support ticket and reply to one. |
windrose:admin | Manage Windrose Plus: enable, disable, change config, and read the RCON password in clear text. Treat any key holding this scope as a credential in its own right. |
Economy and scheduled events
| Scope | What it grants |
|---|---|
economy:read | Read wallets, the shop, transactions and Discord-to-player links. |
economy:write | Buy shop items, start and confirm a Discord link, unlink, and send chat through the bridge. |
economy:admin | Manage shop items, award currency, refund, manage links, configure auto-earn and manage linked-server groups. |
Live map
| Scope | What it grants |
|---|---|
map:read | Read map tiles, player positions, entities, regions, land claims, fog, history and the leaderboard — for the layers the game actually has. |
The live map is read-only over the API, so there is no map write scope. One that appeared in this list and granted nothing would be worse than an absent one — you would tick it, expect to act on the map, and get nothing back. It goes in when the write routes do.
There is no scope for resetting a region, and there will not be one. Resetting destroys everything players built in a 512 x 512 block area. It stays in the panel, where it is gated on a backup that has to finish first, an owner-only permission, and a dialog naming who has a land claim there. None of that survives being reduced to a key in a script.
Read `map/capabilities` before calling anything else. Games differ: 7 Days to Die has regions, land claims and cell actions; Valheim has fog, history and a leaderboard. The flag set is the same everywhere and only the values change, so a flag that is false is a layer the game does not have, not one we have not built.
Event configuration
| Scope | What it grants |
|---|---|
config_events:read | List and read config presets, scheduled events, event status and event logs. |
config_events:write | Create, update and delete presets; schedule, update and cancel events. |
config_events:control | Start an event immediately, end an active one, or cancel a running one. |
Command schedules
| Scope | What it grants |
|---|---|
command_schedules:read | List and read command schedules, the command catalog, and execution logs. |
command_schedules:write | Create, update and delete command schedules; toggle enable/disable. |
command_schedules:control | Run a scheduled command immediately (the "Run Now" button). |
Five splits that surprise people
Most scopes do what their name says. These five do not divide where you would expect, and each one has produced a confusing 403 for somebody:
- `webhooks:write` cannot update, test or redeliver a webhook. It covers create and delete only;
PATCH,POST /testandPOST /redeliverall needwebhooks:manage. A key that manages webhooks wants all three ofwebhooks:read,webhooks:writeandwebhooks:manage. - `servers:read` and `players:read` split the player endpoints between them. Reading the current player count (
GET /servers/{id}/players) and the list catalogue under/players/listsareservers:read. Reading a specific list's contents (GET /servers/{id}/players/lists/{listKey}) and the discovery routeGET /servers/{id}/player-listsareplayers:read. Anything that inspects player lists should hold both. - `servers:write` does not cover player-list writes. Adding or removing a ban, whitelist or op entry needs
players:write. - `metrics:read` does not cover changing resource limits. Reading them is
metrics:read; thePUTisservers:write. - `console:read` does not cover clearing history. Clearing is a write - it needs
console:write.
Scopes that do not exist
If you went looking for one of these, here is what to use instead.
| You expected | Reality |
|---|---|
keys:write, keys:create, keys:rotate | Deliberately absent. Creating, rotating and revoking keys happens in the panel, signed in as you. That way a leaked key cannot mint itself a broader or longer-lived successor. The single exception is keys:revoke, which lets a key switch itself off. |
* or "all scopes" | No wildcard exists. Selecting everything writes all 44 names explicitly. |
logs:write | Logs are read-only over the API. |
jobs:read, jobs:write | The job endpoints use servers:read and servers:write. |
metrics:write | Changing limits is servers:write. |
discovery:read | Discovery uses servers:read and players:read. |
meta:read | The /meta/* endpoints need no key at all. |
| A per-player scope | No player-level permission exists anywhere on the platform. |
Choosing scopes for a key
Grant the smallest set that lets the job finish, and give each job its own key. A key that only reads status cannot be turned into one that wipes a server, and when something goes wrong you can revoke one integration without breaking the rest.
| Job | Scopes |
|---|---|
| A status page or wall display | servers:read |
| An uptime monitor that restarts on failure | servers:read, servers:lifecycle |
| A nightly backup script | servers:read, backups:create, backups:read |
| A log shipper | servers:read, logs:read |
| A settings-management script | servers:read, settings:read, settings:write |
| A moderation tool that manages bans | servers:read, players:read, players:write |
| A webhook receiver you also manage over the API | webhooks:read, webhooks:write, webhooks:manage |
| The GameGrid Discord Bot, fully featured | Every scope its commands use - see Discord Bot Setup Guide for the exact list |
Two scopes deserve their own key with nothing else on it:
maintenance:execute, which can wipe and reinstall, andbackups:restore, which overwrites live data.windrose:adminbelongs in the same category, because it can read an RCON password in clear text.
If you are unsure what a running integration actually uses, call GET /account/keys/current with its key and compare the scopes it holds against what it needs. GET /account/audit shows what it has been calling for the last 24 hours, including calls that were rejected.
