SimpleLinks Docs

Permissions

Every API key carries an explicit allow-list of actions it can perform. Calls to actions outside that list are rejected with 403 PERMISSION_DENIED. Permissions are evaluated server-side and changes take effect immediately on the next request — no caching, no propagation delay.

Key types

TypeSourceAllowed actionsLifecycle
pluginAuto-minted when you create a Server in the dashboard. Lives in the plugin config.json.Locked to the 12 actions the Rust / Oxide plugin actually calls (see below). The set cannot be edited.Cannot be deleted directly — only removed when its Server is deleted. Regenerate rotates the key in place.
botAuto-minted for the official SimpleLinks bot the first time it hits a platform endpoint.* (full platform scope). Not callable from your code; documented for completeness.Managed by the platform. Not deletable or rotatable from the dashboard.
customCreated manually on the API Keys page. Standard / Pro plans only.Any subset of the five groups below, or specific individual actions via the Advanced picker.Freely regenerate (old key dies immediately) or delete.

Permission groups

Five logical bundles cover every action. Granting a group is equivalent to granting every action listed under it. Custom keys can mix groups and individual actions.

lookupRead-only resolution

Resolve Steam IDs, Discord IDs, names, Nitro status, group membership. Never mutates state. Safe for analytics dashboards and read-only integrations.

findBySteam, findByDiscord, discordCheck, isLinkedSteamBulk, steamChecks, nitroChecks, groupChecks, getSteam, getSteamBulk, getDiscord, count, listAllLinked, listNitro

updateWrite linked-user state

Mutate linked-user fields: Discord roles, Nitro flag, cached Steam name, Oxide / Carbon group lists. Grants the ability to change what your guild members see in-game.

update, updateNitro, updateNitroBulk, updateSteam, updateOxideGroups, updateOxideGroupsBulk

syncReconciliation loops

Power the nickname / role / Oxide-group sync loops. Read what is pending, write back what was applied. The plugin polls these endpoints on a timer.

pendingNicknames, confirmNicknameSync, listAllNicknames, pendingRoles, confirmRoleSync, setOxideGroupFromDiscord, getPendingOxideChanges, getPendingOxideChangesBulk

cleanupDestructive operations

Unlink users and clear queued sync work. Destructive — grant carefully. Combine with sync when running a full reconciliation loop end-to-end.

remove, clearPendingOxideChanges, clearPendingOxideChangesBulk

configBootstrap / feature detection

Read the resolved Org / Guild / Server configuration. Used by plugins on startup to learn role mappings, sync flags, and Steam group.

getConfig

Plugin key allow-list

The auto-minted Plugin key is locked to exactly the 12 actions the Rust / Oxide plugin needs. This is the minimum surface required for full Steam ↔ Discord ↔ Oxide sync. Any other action returns 403 PERMISSION_DENIED.

  • config: getConfig
  • lookup: steamChecks, isLinkedSteamBulk, nitroChecks, groupChecks
  • update: updateSteam, updateOxideGroups, updateOxideGroupsBulk
  • sync: getPendingOxideChanges, getPendingOxideChangesBulk
  • cleanup: clearPendingOxideChanges, clearPendingOxideChangesBulk
Why not just give the plugin full access? If the plugin's host machine is ever compromised, an attacker holds a key. Restricting it to read-only checks plus the Oxide sync loop limits the blast radius — no unlink, no role manipulation, no Nitro changes, no platform-wide enumeration.

Denied-call response

{
  "error": "PERMISSION_DENIED",
  "action": "remove"
}

HTTP status: 403. The body always names the exact action that was rejected so you can fix the picker or the calling code without guessing.

Changing a Custom key's permissions

Permissions are fixed at create time. To change them, Regenerate the key (the old key dies immediately) and pick the new groups in the modal. The new key is shown to you once.