Rights matrix
This page is generated from the code. Every endpoint of the control plane is registered behind one guard, and a Go test walks those registrations and writes what it finds to internal/admin/rights.json. Change a guard without regenerating that file and the build fails - so what is written here is what the gateway does.
The capabilities stack: root has all of them. An infra admin holds the routing plane, an app admin the application's identity, a tenant admin the organisations they administer. A control-plane token acts with its owner's capabilities, read again on every request, and its perimeter only ever takes away.
234 endpoints.
acme
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/acme/authorities |
x | x | ||||||
POST /api/acme/authorities |
x | x | ||||||
DELETE /api/acme/authorities/{id} |
x | x | ||||||
PUT /api/acme/authorities/{id} |
x | x |
admin-tokens
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/admin-tokens |
x | x | x | |||||
POST /api/admin-tokens |
x | x | x | |||||
DELETE /api/admin-tokens/{id} |
x | x | x | |||||
PUT /api/admin-tokens/{id} |
x | x | x | |||||
POST /api/admin-tokens/{id}/renew |
x | x | x | |||||
POST /api/admin-tokens/{id}/toggle |
x | x | x |
apidocs
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
POST /api/apidocs/token |
x | x | x |
audit
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/audit |
x | x | x | x | x | x | x | the handler scopes what it answers |
GET /api/audit/export |
x | x | x | x | x | x | x | the handler scopes what it answers |
auth-providers
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/auth-providers |
x | x | ||||||
GET /api/auth-providers/callback-base |
x | x | ||||||
DELETE /api/auth-providers/{id} |
x | x | ||||||
PUT /api/auth-providers/{id} |
x | x | ||||||
POST /api/auth-providers/{id}/check |
x | x | ||||||
POST /api/auth-providers/{id}/lookup |
x | x | ||||||
GET /api/auth-providers/{id}/people |
x | x |
backup
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/backup |
x | |||||||
POST /api/backup/check |
x | |||||||
POST /api/backup/copy |
x | |||||||
GET /api/backup/info |
x | |||||||
DELETE /api/backup/last-copy |
x | |||||||
GET /api/backup/pause |
x | x | x | x | x | x | x | the handler scopes what it answers |
PUT /api/backup/pause |
x |
branding
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/branding |
x | x | ||||||
PUT /api/branding |
x | x |
catalog
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/catalog |
x | x |
certificates
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/certificates |
x | x | ||||||
POST /api/certificates/acme |
x | x | ||||||
GET /api/certificates/cert-manager |
x | x | ||||||
POST /api/certificates/cert-manager |
x | x | ||||||
POST /api/certificates/file |
x | x | ||||||
POST /api/certificates/import |
x | x | ||||||
GET /api/certificates/mounted |
x | x | ||||||
POST /api/certificates/self-signed |
x | x | ||||||
POST /api/certificates/signing-request |
x | x | ||||||
DELETE /api/certificates/{id} |
x | x | ||||||
POST /api/certificates/{id}/adopt |
x | x | ||||||
GET /api/certificates/{id}/pem |
x | x | ||||||
PUT /api/certificates/{id}/placement |
x | x | ||||||
POST /api/certificates/{id}/retry |
x | x | ||||||
GET /api/certificates/{id}/signing-request |
x | x |
config
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/config/document |
x | |||||||
GET /api/config/export |
x | |||||||
GET /api/config/history |
x | |||||||
GET /api/config/history/{id} |
x | |||||||
GET /api/config/history/{id}/plan |
x | |||||||
POST /api/config/history/{id}/restore |
x | |||||||
POST /api/config/history/{id}/save |
x | |||||||
POST /api/config/import |
x | |||||||
POST /api/config/preview |
x | |||||||
GET /api/config/report |
x |
config-remotes
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/config-remotes |
x | |||||||
POST /api/config-remotes |
x | |||||||
GET /api/config-remotes/forges |
x | |||||||
DELETE /api/config-remotes/{id} |
x | |||||||
PUT /api/config-remotes/{id} |
x | |||||||
POST /api/config-remotes/{id}/check |
x |
configurations
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/configurations |
x | |||||||
POST /api/configurations |
x | |||||||
GET /api/configurations/current |
x | |||||||
POST /api/configurations/import |
x | |||||||
POST /api/configurations/pull |
x | |||||||
DELETE /api/configurations/{id} |
x | |||||||
GET /api/configurations/{id} |
x | |||||||
PUT /api/configurations/{id} |
x | |||||||
POST /api/configurations/{id}/activate |
x | |||||||
POST /api/configurations/{id}/capture |
x | |||||||
GET /api/configurations/{id}/compare/{other} |
x | |||||||
GET /api/configurations/{id}/document |
x | |||||||
PUT /api/configurations/{id}/document |
x | |||||||
POST /api/configurations/{id}/duplicate |
x | |||||||
GET /api/configurations/{id}/export |
x | |||||||
GET /api/configurations/{id}/plan |
x | |||||||
POST /api/configurations/{id}/pull |
x | |||||||
POST /api/configurations/{id}/push |
x | |||||||
PUT /api/configurations/{id}/remote |
x |
data-tokens
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/data-tokens |
x | x | ||||||
DELETE /api/data-tokens/{id} |
x | x |
edition
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/edition |
x | x | x | x | x | x | x | the handler scopes what it answers |
identity
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
PUT /api/identity/issuer |
x | x | ||||||
POST /api/identity/preview |
x | x | ||||||
GET /api/identity/signing-keys |
x | x | ||||||
POST /api/identity/signing-keys/renew |
x | x |
issues
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/issues |
x | x | x | x | x | x | x | the handler scopes what it answers |
DELETE /api/issues/{id} |
x | x | x | x | x | x | x | the handler scopes what it answers |
GET /api/issues/{id} |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/issues/{id}/comments |
x | x | x | x | x | x | x | the handler scopes what it answers |
GET /api/issues/{id}/screenshot |
x | x | x | x | x | x | x | the handler scopes what it answers |
PUT /api/issues/{id}/status |
x | x | x | x | x | x | x | the handler scopes what it answers |
live
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/live |
x | x | x | x | x | x | x | the handler scopes what it answers |
locales
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/locales |
x | x | ||||||
DELETE /api/locales/{code} |
x | x | ||||||
GET /api/locales/{code} |
x | x | ||||||
PUT /api/locales/{code} |
x | x |
logs
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/logs |
x | x | ||||||
PUT /api/logs/level |
x | x |
mcp
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
/mcp |
x | x | x | x | x | x | x | when the agent is switched on; each tool checks again |
me
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/me |
x | x | x | x | x | x | x | the handler scopes what it answers |
GET /api/me/avatar |
x | x | x | x | x | x | x | the handler scopes what it answers |
metrics
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/metrics |
x | x |
model
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/model/user-fields |
x | x | x | x | x | x | x | the handler scopes what it answers |
PUT /api/model/user-fields |
x | x |
oidc
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/oidc/clients |
x | x | ||||||
POST /api/oidc/clients |
x | x | ||||||
DELETE /api/oidc/clients/{id} |
x | x | ||||||
PUT /api/oidc/clients/{id} |
x | x | ||||||
POST /api/oidc/clients/{id}/secret |
x | x | ||||||
POST /api/oidc/clients/{id}/try |
x | x |
plug
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/plug/developers |
x | x | ||||||
GET /api/plug/sessions |
x | x | ||||||
POST /api/plug/sessions/{id}/close |
x | x |
portal
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/portal/icons |
x | x | x | x | x | x | x | the handler scopes what it answers |
release-notes
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/release-notes |
x | x | x | x | x | x | x | the handler scopes what it answers |
roles
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/roles |
x | x | ||||||
POST /api/roles |
x | x | ||||||
DELETE /api/roles/{name} |
x | x | ||||||
PUT /api/roles/{name} |
x | x |
routes
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/routes |
x | x | ||||||
GET /api/routes/health |
x | x | ||||||
POST /api/routes/probe |
x | x | ||||||
POST /api/routes/reorder |
x | x | ||||||
POST /api/routes/respond-preview |
x | x | ||||||
POST /api/routes/version-preview |
x | x | ||||||
DELETE /api/routes/{id} |
x | x | ||||||
GET /api/routes/{id} |
x | x | ||||||
PUT /api/routes/{id} |
x | x | ||||||
PUT /api/routes/{id}/audit |
x | x | ||||||
GET /api/routes/{id}/files |
x | x | ||||||
DELETE /api/routes/{id}/files/{name...} |
x | x | ||||||
PATCH /api/routes/{id}/files/{name...} |
x | x | ||||||
PUT /api/routes/{id}/files/{name...} |
x | x | ||||||
GET /api/routes/{id}/operations |
x | x | ||||||
PUT /api/routes/{id}/role-map |
x | x | ||||||
PUT /api/routes/{id}/security |
x | x | ||||||
DELETE /api/routes/{id}/spec |
x | x | ||||||
PUT /api/routes/{id}/spec |
x | x |
schedules
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/schedules |
x | x | or a token scoped to schedules | |||||
POST /api/schedules |
a token scoped to schedules only, while its service moves to the internal plane (port 7070), which is this endpoint's home | |||||||
DELETE /api/schedules/{id} |
x | x | or a token scoped to schedules | |||||
GET /api/schedules/{id} |
x | x | or a token scoped to schedules | |||||
PUT /api/schedules/{id} |
a token scoped to schedules only, while its service moves to the internal plane (port 7070), which is this endpoint's home | |||||||
POST /api/schedules/{id}/pause |
x | x | or a token scoped to schedules | |||||
POST /api/schedules/{id}/resume |
x | x | or a token scoped to schedules | |||||
PATCH /api/schedules/{id}/run |
a token scoped to schedules only, while its service moves to the internal plane (port 7070), which is this endpoint's home | |||||||
POST /api/schedules/{id}/run |
x | x | or a token scoped to schedules | |||||
GET /api/schedules/{id}/runs |
x | x | or a token scoped to schedules |
services
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/services |
x | x |
sessions
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/sessions |
x | x | x | x | x | x | x | the handler scopes what it answers |
DELETE /api/sessions/{id} |
x | x | x | x | x | x | x | the handler scopes what it answers |
settings
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings |
x | x | x | x | x | x | x | the handler scopes what it answers |
PUT /api/settings |
x | x |
settings/agent
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/agent |
x | x | ||||||
PUT /api/settings/agent |
x | x |
settings/audit
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/audit |
x | |||||||
PUT /api/settings/audit |
x |
settings/issues
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/issues |
x | x | ||||||
PUT /api/settings/issues |
x | x |
settings/mail-relay
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/mail-relay |
x | x | ||||||
PUT /api/settings/mail-relay |
x | x | ||||||
POST /api/settings/mail-relay/test |
x | x |
settings/maintenance
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/maintenance |
x | x | ||||||
PUT /api/settings/maintenance |
x | x |
settings/plug
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/plug |
x | x | ||||||
PUT /api/settings/plug |
x | x |
settings/proxy
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/proxy |
x | x | ||||||
PUT /api/settings/proxy |
x | x |
settings/schedules
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/schedules |
x | |||||||
PUT /api/settings/schedules |
x |
settings/telemetry
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/telemetry |
x | x | ||||||
PUT /api/settings/telemetry |
x | x | ||||||
POST /api/settings/telemetry/test |
x | x |
settings/tenancy
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
PUT /api/settings/tenancy |
x | x |
settings/tls
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/settings/tls |
x | x | ||||||
PUT /api/settings/tls |
x | x | ||||||
PUT /api/settings/tls/doors/{plane} |
x | x | ||||||
PUT /api/settings/tls/ports/{plane} |
x | x |
tenants
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/tenants |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/tenants |
x | x | ||||||
DELETE /api/tenants/{id} |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id} |
x | x | for the organisation in the path | |||||
PUT /api/tenants/{id} |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/group-rules |
x | x | for the organisation in the path | |||||
POST /api/tenants/{id}/group-rules |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/group-rules/reported |
x | x | for the organisation in the path | |||||
DELETE /api/tenants/{id}/group-rules/{ruleId} |
x | x | for the organisation in the path | |||||
PUT /api/tenants/{id}/group-rules/{ruleId} |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/groups |
x | x | for the organisation in the path | |||||
POST /api/tenants/{id}/groups |
x | x | for the organisation in the path | |||||
DELETE /api/tenants/{id}/groups/{groupId} |
x | x | for the organisation in the path | |||||
PUT /api/tenants/{id}/groups/{groupId} |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/members |
x | x | for the organisation in the path | |||||
DELETE /api/tenants/{id}/members/{userId} |
x | x | for the organisation in the path | |||||
PUT /api/tenants/{id}/members/{userId} |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/members/{userId}/groups |
x | x | for the organisation in the path | |||||
PUT /api/tenants/{id}/members/{userId}/groups |
x | x | for the organisation in the path | |||||
GET /api/tenants/{id}/members/{userId}/logins |
x | x | for the organisation in the path | |||||
POST /api/tenants/{id}/members/{userId}/reset-password |
x | x | for the organisation in the path | |||||
POST /api/tenants/{id}/owner |
x | x | for the organisation in the path |
themes
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/themes |
x | x | ||||||
POST /api/themes |
x | x | ||||||
GET /api/themes/fonts |
x | x | ||||||
GET /api/themes/presets |
x | x | ||||||
GET /api/themes/templates |
x | x | ||||||
DELETE /api/themes/{id} |
x | x | ||||||
PUT /api/themes/{id} |
x | x | ||||||
POST /api/themes/{id}/activate |
x | x | ||||||
GET /api/themes/{id}/preview |
x | x |
trusted-authorities
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/trusted-authorities |
x | x | ||||||
POST /api/trusted-authorities |
x | x | ||||||
GET /api/trusted-authorities/https-switch |
x | x | ||||||
GET /api/trusted-authorities/platform |
x | x | ||||||
POST /api/trusted-authorities/platform |
x | x | ||||||
DELETE /api/trusted-authorities/{id} |
x | x | ||||||
PUT /api/trusted-authorities/{id} |
x | x |
users
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/users |
x | x | ||||||
POST /api/users |
x | x | ||||||
GET /api/users/lookup |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/users/must-change-password |
x | x | ||||||
DELETE /api/users/{id} |
x | x | ||||||
PUT /api/users/{id} |
x | x | ||||||
GET /api/users/{id}/identities |
x | x | ||||||
GET /api/users/{id}/logins |
x | x | ||||||
POST /api/users/{id}/must-change-password |
x | x | ||||||
POST /api/users/{id}/reset-password |
x | x |
vault
| Endpoint | Any account | Dev | Tenant admin | Tenant creator | App admin | Infra admin | Root | Note |
|---|---|---|---|---|---|---|---|---|
GET /api/vault |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/vault/export |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/vault/import |
x | x | x | x | x | x | x | the handler scopes what it answers |
POST /api/vault/stash |
x | x | x | x | x | x | x | the handler scopes what it answers |
DELETE /api/vault/{scope}/{name} |
x | x | x | x | x | x | x | the handler scopes what it answers |
PUT /api/vault/{scope}/{name} |
x | x | x | x | x | x | x | the handler scopes what it answers |