GameGrid
API Scopes and Permissions - visual guide

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:write does not imply files:read. backups:write does not imply backups:create or backups: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:Read is not servers: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:

ResponseMeaningHow to fix it
403 insufficient_scopeThe key was never granted this scope.Create a new key with the scope included.
403 permission_revokedThe 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

ScopeWhat it grants
account:readRead your account, organization, entitlements, roles and legal status.
account:writeReserved. 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:readRead your billing summary and the plan list. Read-only; nothing in the API can charge you.
keys:readList your organization's API keys. Metadata only - a key secret is never returned.
keys:revokeLet a key revoke itself. It cannot revoke any other key.
audit:readRead a rolling 24-hour trail of API calls made with your keys, plus panel actions on your servers.

Servers and lifecycle

ScopeWhat it grants
servers:readList and read servers, status, real-time stats, capabilities and lifecycle history.
servers:writeRename a server; change auto-restart, restart schedule and resource limits.
servers:lifecycleStart, stop, restart and kill a server.
metrics:readRead current and historical metrics, resource limits and diagnostics.
maintenance:executeVerify, reinstall, wipe, delete savegames and update. Four of those five also require a typed confirmation.

Console, logs and files

ScopeWhat it grants
console:readRead console history and open a console stream.
console:writeSend console commands, and clear console history.
logs:readList, tail, download and stream log files.
files:readList, read and download files; read FTP and SFTP connection details.
files:writeWrite, upload, delete, rename, copy, move, create folders, archive and extract; reset the FTP password; turn SFTP on or off.

Settings, players, backups and mods

ScopeWhat it grants
settings:readRead the settings schema, current values, change history and drift; validate a proposed change.
settings:writeWrite settings, roll back a change, and switch worlds.
players:readRead the contents of a player list, and the catalogue of lists a game declares.
players:writeAdd and remove player-list entries - bans, whitelist, ops, and any other list your game defines.
backups:readList and download backups; read your quota, schedule and restore-job status.
backups:createCreate a backup, and upload one.
backups:writeDelete and re-label backups; set or remove the backup schedule.
backups:restoreRestore a backup over live data. Separate from backups:write because it destroys the current state.
mods:readList installed mods and search the marketplaces.
mods:writeInstall, uninstall, enable, disable and reorder mods.

Webhooks, bundles, tickets and Windrose Plus

ScopeWhat it grants
webhooks:readList webhooks and their delivery history.
webhooks:writeCreate and delete webhooks.
webhooks:manageUpdate, test and redeliver webhooks. Not covered by webhooks:write - see the note below.
bundles:readRead your server bundles, their slot usage and the servers assigned to them.
bundles:writeRename a bundle.
tickets:readList and read support tickets and their messages.
tickets:writeOpen a support ticket and reply to one.
windrose:adminManage 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

ScopeWhat it grants
economy:readRead wallets, the shop, transactions and Discord-to-player links.
economy:writeBuy shop items, start and confirm a Discord link, unlink, and send chat through the bridge.
economy:adminManage shop items, award currency, refund, manage links, configure auto-earn and manage linked-server groups.

Live map

ScopeWhat it grants
map:readRead 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

ScopeWhat it grants
config_events:readList and read config presets, scheduled events, event status and event logs.
config_events:writeCreate, update and delete presets; schedule, update and cancel events.
config_events:controlStart an event immediately, end an active one, or cancel a running one.

Command schedules

ScopeWhat it grants
command_schedules:readList and read command schedules, the command catalog, and execution logs.
command_schedules:writeCreate, update and delete command schedules; toggle enable/disable.
command_schedules:controlRun 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 /test and POST /redeliver all need webhooks:manage. A key that manages webhooks wants all three of webhooks:read, webhooks:write and webhooks: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/lists are servers:read. Reading a specific list's contents (GET /servers/{id}/players/lists/{listKey}) and the discovery route GET /servers/{id}/player-lists are players: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; the PUT is servers: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 expectedReality
keys:write, keys:create, keys:rotateDeliberately 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:writeLogs are read-only over the API.
jobs:read, jobs:writeThe job endpoints use servers:read and servers:write.
metrics:writeChanging limits is servers:write.
discovery:readDiscovery uses servers:read and players:read.
meta:readThe /meta/* endpoints need no key at all.
A per-player scopeNo 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.

JobScopes
A status page or wall displayservers:read
An uptime monitor that restarts on failureservers:read, servers:lifecycle
A nightly backup scriptservers:read, backups:create, backups:read
A log shipperservers:read, logs:read
A settings-management scriptservers:read, settings:read, settings:write
A moderation tool that manages bansservers:read, players:read, players:write
A webhook receiver you also manage over the APIwebhooks:read, webhooks:write, webhooks:manage
The GameGrid Discord Bot, fully featuredEvery 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, and backups:restore, which overwrites live data. windrose:admin belongs 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.