Skip to content

Create Role

Create a new role in the organisation.

Endpoint

POST /v1/admin/roles

Authentication

  • Required: Yes
  • Type: Session-based authentication
  • Required Permission: roles:create

Request

Headers

HeaderRequiredDescription
CookieYesSession cookie
X-CSRF-TokenYesCSRF token
Content-TypeYesapplication/json

Body

json
{
  "name": "Developer",
  "slug": "developer",
  "description": "Developer role with code access",
  "isDefault": false,
  "permissionIds": ["prm_01h2xz9k3m4n5p6q7r8s9t0v1z"]
}
FieldTypeRequiredDescription
namestringYesRole display name (min 1 char)
slugstringYesURL-friendly identifier (lowercase, alphanumeric, hyphens)
descriptionstringNoRole description
isDefaultbooleanNoWhether this is the default role for new users
permissionIdsarrayNoPermission IDs to assign

Response (201 Created)

json
{
  "id": "rol_01h2xz9k3m4n5p6q7r8s9t0v2y",
  "name": "Developer",
  "slug": "developer",
  "description": "Developer role with code access",
  "isDefault": false,
  "permissions": [
    {
      "id": "prm_01h2xz9k3m4n5p6q7r8s9t0v1z",
      "slug": "users:read",
      "name": "Read Users"
    }
  ],
  "createdAt": "2025-10-26T12:00:00.000Z",
  "updatedAt": "2025-10-26T12:00:00.000Z"
}

Errors

  • 409 Conflict: Role slug already exists in the organisation

Example

bash
curl -X POST https://api.cerberus-iam.dev/v1/admin/roles \
  -H "Cookie: cerberus_session=abc123..." \
  -H "X-CSRF-Token: xyz789..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Developer","slug":"developer"}'

Released under the MIT License.