Documentation

Users

Manage users

Find, create and edit VitNode member accounts in the AdminCP, the rules that protect staff accounts, and the admin user API routes with their permissions.

The AdminCP user screens let staff find accounts, create one by hand, and change everything a member can change in their own settings, plus a few things only staff can. They live at AdminCP → Core → Users → User List (/admin/core/users).

The user list

The table shows User, Email, Roles and Created At. Search by email or username, or filter by role. Each row has an Edit profile button that opens the user, and accounts with an unconfirmed email also get Verify Email.

Add User opens a dialog that creates an account from a Username (3 to 32 characters), an Email and a Password (at least 8 characters). It needs users:can_create.

There is no ban or delete action for accounts.

Edit a user

Open a user at /admin/core/users/[id]. Everything the member can change in their own /settings is editable here too:

AreaWhat staff can change
Profile cardDisplay name, name code, email, avatar and cover, and Mark email as verified
Personal informationFirst name, last name, headline, phone, birthday, Show real name
PreferencesLanguage, time zone (or automatic), newsletter
RolesPrimary role and secondary roles
Connected accountsDisconnect an SSO account, choose where the avatar and name come from, turn Sync on sign-in on or off
DevicesSign out one device, or every device at once
PresenceRead-only: online status, last activity and whether the member browses anonymously
Activity tabThe account's timeline (read-only)
Notifications tabIn-app, push and email (with frequency) per notification type
Password & passkeys tabSet a new password, rename or delete passkeys

A few rules differ from the member's own settings:

  • Staff can edit locked fields. The role's Allow editing personal information and the install's users.personalInformation switches (Profile fields) limit members, not staff.
  • Notification locks still apply. Mandatory types, and types the notification settings stop members from changing, are read-only here too, because delivery ignores stored choices for them.
  • The last sign-in method can't be removed. Disconnecting the only SSO account or deleting the only passkey answers 409.
  • Setting a password signs the member out everywhere, AdminCP sessions included.
  • Sync now isn't offered. It needs the member to sign in with the provider themselves.

Who may do it

Reads need users:can_view, creating an account needs users:can_create, and every write needs users:can_edit, plus users:can_edit_admin when the target is staff. A staff target must also sit within your own access. You need every admin and moderator permission they hold, and only a root administrator can edit a root or unrestricted account. So nobody can reset the password of, or demote, someone above them. Permissions shows how admins grant these.

API

All routes are under /api/@vitnode/core/admin/users and need an AdminCP session.

MethodPathPermissionDoes
GET/listcan_viewThe user list, with search and role filter
POST/createcan_createCreates an account from { email, name, password }
GET/{id}can_viewOne user
PATCH/{id}can_editAccount, personal information and preferences
GET/{id}/timelinecan_viewThe activity timeline
POST/{id}/verify-emailcan_editMarks the email as verified
PUT/{id}/passwordcan_editSets a new password and revokes every session
GET/{id}/devicescan_viewDevices with an active session
DELETE/{id}/devices/{publicId}can_editSigns one device out
DELETE/{id}/devicescan_editSigns every device out
GET/{id}/passkeyscan_viewPasskeys
PATCH/{id}/passkeys/{passkeyId}can_editRenames a passkey
DELETE/{id}/passkeys/{passkeyId}can_editDeletes a passkey
GET/{id}/ssocan_viewConnected accounts, sign-in summary, profile sources
DELETE/{id}/sso/{providerId}can_editDisconnects an account
PUT/{id}/sso/preferencescan_editProfile sources and sync on sign-in
GET/{id}/notification-preferencescan_viewNotification preferences per type
PUT/{id}/notification-preferencescan_editChanges notification preferences
POST/{id}/images/{kind}can_editUploads an avatar or cover
DELETE/{id}/images/{kind}can_editRemoves an avatar or cover

Every can_edit route also checks can_edit_admin and the access rule above when the target is staff.

The PATCH /{id} body takes any of email, name, nameCode, roleId, secondaryRoleIds, firstName, lastName, headline, phone, showRealName, birthday (YYYY-MM-DD or null), language, timeZone (null for automatic) and newsletter. At least one field is required.

  • Roles explains what the primary and secondary roles do.
  • Email verification explains what Mark email as verified unlocks.