Permissions

HappyView uses a granular permission system to control access to the admin API. Each user has a set of permissions that determine which endpoints they can access. Permissions can be assigned individually, via templates, or both.

Permission list

HappyView defines 44 permissions organized by category:

Lexicons

PermissionDescription
lexicons:createUpload and register new lexicon schemas
lexicons:readView registered lexicon schemas
lexicons:deleteRemove lexicon schemas

Records

PermissionDescription
records:readBrowse indexed AT Protocol records
records:deleteDelete individual records from the index
records:delete-collectionBulk-delete all records in a collection

Scripts

PermissionDescription
scripts:readView trigger-keyed scripts
scripts:manageCreate, update, and delete trigger-keyed scripts

Script Variables

PermissionDescription
script-variables:createAdd or update environment variables for Lua scripts
script-variables:readView script environment variable keys and values
script-variables:deleteRemove script environment variables

Users

PermissionDescription
users:createAdd new dashboard users
users:readView the user list and their permissions
users:updateModify user permissions
users:deleteRemove dashboard users

API Keys

PermissionDescription
api-keys:createGenerate new API keys for admin access
api-keys:readView existing API keys
api-keys:deleteRevoke existing API keys

Backfill

PermissionDescription
backfill:createTrigger historical record backfill jobs
backfill:readView backfill job status and progress

Labelers

PermissionDescription
labelers:createSubscribe to external labeler services
labelers:readView subscribed labeler services
labelers:deleteUnsubscribe from labeler services

Settings

PermissionDescription
settings:manageModify instance settings, logo, and configuration

Plugins

PermissionDescription
plugins:readView installed plugins and their configuration
plugins:createInstall and configure new plugins
plugins:deleteUninstall plugins

API Clients

PermissionDescription
api-clients:viewView registered OAuth API clients
api-clients:createRegister new OAuth API clients
api-clients:editModify API client settings and credentials
api-clients:deleteRemove registered API clients

Dead Letters

PermissionDescription
dead-letters:readView failed hook executions
dead-letters:manageRetry, re-index, or dismiss dead letters

Spaces

PermissionDescription
spaces:createCreate new permissioned data spaces
spaces:readView space details and metadata
spaces:updateModify space settings
spaces:deleteRemove spaces and their data
spaces:manage-membersAdd or remove space members and roles
spaces:manage-invitesCreate and revoke space invitations
spaces:manage-recordsRead and write records within spaces
spaces:manage-credentialsIssue and revoke space access credentials

System

PermissionDescription
stats:readView collection statistics and record counts
events:readView the event log

Permission templates

Templates are predefined sets of permissions that simplify user creation. Pass a template value when creating a user via POST /admin/users.

Viewer

Read-only access. Can browse lexicons, records, scripts, stats, events, dead letters, and user lists but cannot modify anything.

Includes: lexicons:read, records:read, scripts:read, script-variables:read, users:read, api-keys:read, backfill:read, stats:read, events:read, dead-letters:read

Operator

Everything in Viewer, plus the ability to run backfill jobs, manage API keys, and manage dead letters.

Adds: backfill:create, api-keys:create, api-keys:delete, dead-letters:manage

Manager

Everything in Operator, plus the ability to manage lexicons, records, scripts, labelers, settings, plugins, API clients, and spaces.

Adds: lexicons:create, lexicons:delete, scripts:manage, script-variables:create, script-variables:delete, records:delete, labelers:create, labelers:read, labelers:delete, settings:manage, plugins:read, plugins:create, plugins:delete, api-clients:view, api-clients:create, api-clients:edit, api-clients:delete, spaces:create, spaces:read, spaces:update, spaces:delete, spaces:manage-members, spaces:manage-invites, spaces:manage-records, spaces:manage-credentials

Full Access

All 44 permissions. Equivalent to granting every permission individually (but still not a super user).

Super user

The super user is a special user created automatically when the first person logs in to a fresh HappyView instance. The super user:

  • Has unrestricted access to all endpoints, regardless of which permissions are assigned
  • Is the only user who can call POST /admin/users/transfer-super
  • Cannot be deleted
  • Cannot have their permissions modified by other users

There is always exactly one super user. Super status can be transferred to another user via the dashboard or transfer endpoint in the Admin API.

Escalation guards

HappyView prevents privilege escalation:

  • When creating a user or API key, you can only grant permissions that you yourself have. Attempting to grant a permission you lack returns 403 Forbidden.
  • When updating a user's permissions, the same rule applies — you cannot grant permissions beyond your own.

Self-modification guards

Users cannot modify their own account in destructive ways:

  • You cannot delete yourself
  • You cannot revoke your own permissions

These guards prevent accidental lockout.

API key permissions

API keys have their own set of permissions, specified at creation time. The effective permissions of an API key are the intersection of:

  1. The permissions assigned to the key
  2. The permissions of the user who owns the key

This means if a user's permissions are later reduced, any API keys they created are also effectively reduced — even though the key's own permission list doesn't change.

For example, if a user with lexicons:create and lexicons:read creates a key with both permissions, and the user later loses lexicons:create, the key can only use lexicons:read.

Managing permissions

Via the dashboard

Go to Settings > Users to view and manage user permissions. Click on a user to see their current permissions and modify them. You can also assign templates when creating new users.

Via the API

  • POST /admin/users — create a user with a template or explicit permissions
  • PATCH /admin/users/{id}/permissions — grant or revoke individual permissions
  • POST /admin/users/transfer-super — transfer super user status (super user only)

See the Admin API — Users for full details.

Next steps