Roles
Admin-only endpoints to create scoped roles, attach permissions, and assign them to users. Higher weight values represent higher priority and are used when clients need to derive the most important visible role label for a user.
Auth
All routes require a valid API JWT and are currently restricted to the super-admin user.
Role scopes
Roles are scoped to one of:
globalnetworkserverserviceextension
When scope is not global, provide scopeId (for example a network or server id). Only one role can be marked as default per scope and scopeId combination.
List roles
GET /v1/admin/roles
Response:
{
"items": [
{
"id": "671f5b8a7a8a3e6f6e6d6e6d",
"name": "Global admin",
"slug": "global-admin",
"description": "Full access",
"weight": 100,
"scope": "global",
"scopeId": null,
"isDefault": false,
"permissions": ["admin:role:manage"],
"creatorId": "c959d9f9-dcbd-4054-8c4c-d5c305997bc0",
"createdAt": "2026-01-15T12:00:00Z",
"updatedAt": null
}
]
}Create role
POST /v1/admin/roles
Body:
{
"name": "Network admin",
"slug": "network-admin",
"description": "Manage a specific network",
"weight": 50,
"scope": "network",
"scopeId": "net-123",
"isDefault": false,
"permissions": ["connect:server:manage"]
}Response:
{
"role": {
"id": "671f5b8a7a8a3e6f6e6d6e6f",
"name": "Network admin",
"slug": "network-admin",
"description": "Manage a specific network",
"weight": 50,
"scope": "network",
"scopeId": "net-123",
"isDefault": false,
"permissions": ["connect:server:manage"],
"creatorId": "c959d9f9-dcbd-4054-8c4c-d5c305997bc0",
"createdAt": "2026-01-15T12:00:00Z",
"updatedAt": null
}
}Update role
PATCH /v1/admin/roles/{roleId}
Body:
{
"name": "Network admin",
"weight": 75,
"permissions": ["connect:server:manage", "connect:member:manage"],
"isDefault": true
}Response:
{
"role": {
"id": "671f5b8a7a8a3e6f6e6d6e6f",
"name": "Network admin",
"slug": "network-admin",
"description": "Manage a specific network",
"weight": 75,
"scope": "network",
"scopeId": "net-123",
"isDefault": true,
"permissions": ["connect:server:manage", "connect:member:manage"],
"creatorId": "c959d9f9-dcbd-4054-8c4c-d5c305997bc0",
"createdAt": "2026-01-15T12:00:00Z",
"updatedAt": "2026-01-15T12:30:00Z"
}
}Delete role
DELETE /v1/admin/roles/{roleId}
Response:
{ "removed": 1 }List user roles
GET /v1/admin/users/{userId}/roles
Response:
{
"userId": "c959d9f9-dcbd-4054-8c4c-d5c305997bc0",
"items": [
{
"roleId": "671f5b8a7a8a3e6f6e6d6e6f",
"name": "Network admin",
"slug": "network-admin",
"weight": 75,
"scope": "network",
"scopeId": "net-123",
"permissions": ["connect:server:manage"],
"expiresAt": "2026-02-01T12:00:00Z"
}
]
}Assign user role
POST /v1/admin/users/{userId}/roles
Body:
{
"roleId": "671f5b8a7a8a3e6f6e6d6e6f",
"expiresAt": "2026-02-01T12:00:00Z"
}Response:
{
"userId": "c959d9f9-dcbd-4054-8c4c-d5c305997bc0",
"roleId": "671f5b8a7a8a3e6f6e6d6e6f",
"expiresAt": "2026-02-01T12:00:00Z"
}expiresAt is optional. When omitted, the role does not expire.
Remove user role
DELETE /v1/admin/users/{userId}/roles/{roleId}
Response:
{ "removed": 1 }