csrf_token field — obtain one from GET /api/security/csrf-token.
PropOps supports five account types:
| ID | Type |
|---|---|
| 1 | Staff |
| 2 | Agent |
| 3 | Landlord |
| 4 | Tenant |
| 5 | Contractor |
Fields containing personal data (
first_name, last_name, email) are encrypted at rest using XSalsa20-Poly1305. They are transparently decrypted in API responses.Profile
Get profile
GET /api/users/profile
Returns the authenticated user’s profile. To retrieve another user’s profile (staff only), pass user_uuid as a query parameter.
Required permission: api.users.users.manage
Update profile
PUT /api/users/profile
Update profile fields for a user. You can update your own profile; updating another user’s profile requires staff privileges.
Required permission: api.users.users.manage
UUID of the user to update.
Updated first name.
Updated last name.
Updated phone number.
Branch assignment (staff-only field).
Role assignment. Subject to privilege-level hierarchy — you cannot assign a role above your own level.
CSRF token.
Permissions
The permissions endpoint returns the calling user’s own permission map. It does not accept a user UUID or action parameter.
List permissions
GET /api/users/permissions
Returns the authenticated user’s permission map, role, and account type. No additional query parameters are required — the endpoint always returns the calling user’s own permissions.
Update permissions
PUT /api/users/permissions
Grant, revoke, or completely sync the permissions for a user.
Required permission: api.users.permissions.manage
grant, revoke, or sync. The sync action replaces the user’s full permission set with the provided list.UUID of the user.
Array of permission key strings to grant or revoke.
CSRF token.
Notification Preferences
Get notification preferences
GET /api/users/notification-settings
Returns the notification channel preferences for the specified user.
Required permission: api.users.notification_settings.manage
UUID of the user whose preferences to retrieve.
Update notification preferences
POST /api/users/notification-settings
Required permission: api.users.notification_settings.manage
UUID of the user whose preferences to update.
Enable or disable email notifications.
Enable or disable desktop notifications.
CSRF token.
Avatar
Get avatar
GET /api/users/avatar
Serves the avatar image for a user. Returns the image binary (SVG fallback if no avatar is set).
Required permission: Authenticated session (staff may view other users’ avatars).
UUID of the user whose avatar to retrieve (legacy parameter name).
UUID of the user whose avatar to retrieve. Omit to serve the authenticated user’s own avatar.
Thumbnail size:
small (48 px), medium (96 px), large (200 px), or original. Defaults to original.Email Verification
Manage email verification
POST /api/users/email-verification
Perform staff-initiated email verification actions on a user account. Requires authentication (staff only).
Required permission: api.users.email_verification.view
Action to perform:
send_activation sends a verification code email; unverify_email marks the email as unverified; change_email_and_send_verification updates the email address and sends a verification code.UUID of the user to act on.
Required only when
action is change_email_and_send_verification. The new email address to set.CSRF token.
Sessions
List active sessions
GET /api/users/sessions
Returns all active sessions for the authenticated user, including the current session.
Required permission: Authenticated session (no additional permission required for own sessions).
Revoke a session
DELETE /api/users/sessions
Terminates a specific session. The session is immediately added to the blacklist and cannot be resumed.
To revoke sessions for another user you need the
api.security.sessions.terminate permission. This is a staff-only operation.Must be
terminate.ID of the session to revoke.
CSRF token.
Admin User Management
The following endpoints are available to staff accounts with theapi.admin.users.manage permission. They allow administrators to create, update, and deactivate accounts across all account types.
| Method | Endpoint | Description |
|---|---|---|
GET | /api/admin/users | List all accounts with filters (account type, status, branch) |
POST | /api/admin/users | Create a new account |
PUT | /api/admin/users | Update account details, status, or branch assignment |
DELETE | /api/admin/users | Deactivate or delete an account |
Admin roles management
| Method | Endpoint | Description |
|---|---|---|
GET | /api/admin/roles | List all roles and their assigned permissions |
POST | /api/admin/roles | Create a new role |
PUT | /api/admin/roles | Update a role’s name or permission set |
DELETE | /api/admin/roles | Remove a role |
System settings
| Method | Endpoint | Description |
|---|---|---|
GET | /api/admin/settings | Read current system settings |
PUT | /api/admin/settings | Update system settings (VAT rate, notification toggles, branding, etc.) |
Admin endpoints require staff-level access. The privilege-level hierarchy applies — you cannot modify accounts or roles at a higher privilege level than your own.
Appearance Settings
Get appearance settings
GET /api/users/appearance
Returns the authenticated user’s appearance preferences — dashboard greeting style and KPI band background theme.
Required permission: api.users.appearance.manage
User UUID. Omit to retrieve your own preferences.
Update appearance settings
POST /api/users/appearance
Updates the appearance preferences for the authenticated user.
Required permission: api.users.appearance.manageRequires CSRF token.
User UUID. Omit to update your own preferences.
Dashboard greeting style:
formal, casual, or none.KPI band background theme key (e.g.
gradient_blue, solid_dark, minimal).CSRF token from
GET /api/security/csrf-token.Dashboard Widget Preferences
Get widget preferences
GET /api/users/dashboard-widget-preferences
Returns the saved widget visibility and ordering preferences for the authenticated staff user’s dashboard.
Required permission: Authenticated staff user (no additional permission required)
Save widget preferences
POST /api/users/dashboard-widget-preferences
Saves the widget visibility and ordering for the authenticated staff user.
Required permission: Authenticated staff userRequires CSRF token.
Array of widget configuration objects, each with
id (string), visible (boolean), and order (integer).CSRF token from
GET /api/security/csrf-token.User Status & Presence
Get online users
GET /api/users/user-status
Returns all users who have been active within the last 30 minutes. Used by the online-users widget and presence indicators throughout the platform.
Required permission: api.users.user_status.view
Set user status
POST /api/users/user-status
Manually sets the authenticated user’s presence status.
Required permission: api.users.user_status.viewRequires CSRF token.
Must be
set.Presence status:
online, away, or offline.CSRF token from
GET /api/security/csrf-token.User Profile Popover
Get user profile card
GET /api/users/user-profile-popover?uuid=<uuid>
Returns a compact profile card for a user — name, account type, branch, avatar, and recent activity. Used by inline popovers when hovering over user names throughout the platform.
Required permission: Authenticated staff user (no additional permission)
UUID of the user to retrieve.
Force Logout
Force-logout a user
POST /api/users/logout-user
Administratively terminates all sessions for a specified user and prevents them from logging back in until the force-logout is cleared. Creates an audit log entry with the reason.
Required permission: api.users.logout_user.manageAccount types: Staff only
Requires CSRF token.
UUID of the user to force-logout.
Optional reason for the forced logout (stored in the audit log).
CSRF token from
GET /api/security/csrf-token.