Profile Settings
Manage your profile, password, TOTP, connected accounts, and account deletion
Profile settings are a dialog, not a page: open them from the avatar menu in the top-right corner via Profile, and you get a Settings dialog with Profile and Account tabs. There is no /settings or /profile route; timezones, an active-session list, data export, and privacy toggles are not implemented (Roadmap).
Profile Tab
This tab maintains your avatar, username, and email.
| Field | Description |
|---|---|
| Avatar | Click to upload; 200x200 pixels recommended; JPG / PNG / GIF |
| Username | Globally unique, max 50 characters; a duplicate returns 5002 (user_with_username_exists) |
Globally unique; a duplicate returns 5003 (user_with_email_exists) |
Changing your email: verification of the new address is required only when the site enables email_verification and the address actually changes.
- Edit the email field; a verification area appears below it.
- Click Send code and a 6-digit code arrives at the new address (purpose
profile_email). - Enter the 6-digit code, then click Save changes.
- Resending has a
60-second cooldown; during it the button shows the remaining seconds. - A wrong or expired code returns
5005(verification_code_invalid) and the save is rejected. - On success the new address is immediately marked verified and the change is written to the audit log.
- Changing only the username or avatar needs no code; clicking save with nothing changed reports "no changes to save".
Account Tab
Top to bottom the tab contains: Connected Accounts (only when SSO connections exist) → Two-Factor Authentication → password → Danger Zone.
Connected Accounts (SSO)
The card lists linked SSO providers with their icon, display name, and last login time.
- Click Disconnect and confirm in the dialog to unlink that provider.
- Anti-lockout protection: if the account has no local password and only one SSO link remains, the backend refuses to disconnect (
cannot_disconnect_only_auth_method). - There is no user-side connect button — connections are created automatically during login by email matching; see SSO Configuration.
Two-Factor Authentication (TOTP)
While disabled: the card shows Two-factor authentication disabled; click Enable two-factor authentication to open the wizard:
- The first step explains what 2FA adds.
- The second shows a QR code (issuer
Clouisle) to scan with an authenticator app or a secret to enter manually. - The third asks for the current 6-digit code to confirm.
- The fourth shows one-time backup codes — 10 per batch in
XXXX-XXXXformat, downloadable or copyable in one click. - The last step confirms completion.
The wizard calls POST /api/v1/totp/setup to generate the secret and backup codes, at which point 2FA is not yet enabled — only POST /api/v1/totp/enable verifying a code turns it on.
While enabled: the card shows Two-factor authentication enabled, the enabled at timestamp, and the remaining backup code count (the UI string is {count} backup codes remaining), plus two actions:
- Regenerate backup codes: enter the current 6-digit code to issue a new batch of 10; all previous codes stop working immediately, and the new ones can be downloaded or copied from the dialog.
- Disable two-factor authentication: the confirmation dialog needs both the account password and a current code (you can switch to entering a backup code instead). A wrong password returns
2003, a wrong code5311. On success the secret and backup codes are cleared and the card returns to the disabled state.
For wrong codes, rate limiting, and lost-access recovery, see Login & Account Security.
Password
The card title depends on the account type:
- Change Password (the account has a local password): fill in Current Password, New Password, and Confirm New Password, then click Update password.
- Set Password (an SSO-created account with no local password yet): only the new password and confirmation are required.
The password status block loads only for local accounts (auth_source === "local"):
- An expired password shows a red alert, fewer than 7 days remaining shows a yellow warning, and the password expiration date is always shown.
- Users marked as exempt from the expiration policy see no status block.
Common responses:
| Case | Result |
|---|---|
| Wrong current password | 2003 (current_password_incorrect) |
| Password policy violation or reused password | 1001, with per-item reasons in the field errors |
| Minimum password age not yet met | 5306 (password_min_age_not_met) with the remaining days |
Success refreshes the password timestamps, recalculates expiration, clears the forced-change flag, and sends a security.password_changed notification.
Known limitation: “Set Password” does not take effect for SSO accounts
The Set Password branch submits the new password to PUT /api/v1/users/me, but that endpoint only accepts username, email, email_verification_code, avatar_url, and locale — a password in the request is silently ignored, so the UI reports success while no password is stored (Roadmap). To set a first local password for an SSO account, have an administrator set it in User Management.
Deleting Your Account
Permanent deletion
Deleting your account cannot be undone, and there is no temporary deactivation or reactivation flow. Back up or transfer anything important first.
The entry point appears only when the site enables allow_account_deletion (when disabled the backend returns account_deletion_disabled).
- Click Delete Account in the Danger Zone card.
- Read the warning in the confirmation dialog.
- Enter your current password.
- Click Delete Account.
Limits and effects:
- Super Admins cannot delete themselves (
cannot_delete_superuser_account). - Verification uses the local password, so SSO accounts without a local password cannot self-delete (the check fails). Those need an administrator to handle it (note that the admin delete endpoint likewise refuses to delete Super Admins).
- Cascading deletions: conversations and messages, Agent runs, personal memories, API keys, password history, SSO connections, team memberships (including
owner), user notifications, and role assignments. - Not deleted: uploaded files and resources such as Agents, workflows, knowledge bases, tools, and skills — their creator field is nulled (
SET_NULL) and the resource stays with the team. The team itself also survives, merely losing its owner (the ownership field is nulled); nothing blocks an owner from deleting their account and nothing transfers ownership automatically, so transfer it manually first.
Once deleted, the local token is cleared and you are redirected to the login page.
Appearance & Language
Appearance and language live in the Appearance settings panel (Settings Drawer) in the navigation bar rather than in the profile dialog, and changes take effect immediately:
| Section | Options |
|---|---|
| Theme | System / Light / Dark |
| Sidebar | Default / Inset / Floating |
| Layout | Default / Compact / Full |
| Header layout | Default / Centered / Minimal |
| Direction | Left to right / Right to left |
| Language | English / 中文 |
- Theme, sidebar, layout, header layout, and direction are stored in browser
localStorageand affect only the current browser. - Language writes a
localecookie (valid for one year) and, while signed in, syncs the account'slocalefield, so it survives a browser change. - The Reset button at the bottom restores default appearance (it does not change the language or account data).
- The login and sign-up pages have their own language switcher in the corner, usable without signing in.
API Keys
API keys are managed on their own page, not in profile settings:
- Open the avatar menu and select API Keys (shown only when the account has the
apikey:readpermission). - Or navigate directly to
/app/api-keys.
For creation, bindings, deactivation, and limits, see API Keys.
My Memories
My Memories in the avatar menu (/app/memories) opens your personal memory graph, titled My Memories with the subtitle "Explore what AI knows about you". There you can:
- Search memory entities by keyword or filter by entity type.
- Switch the graph across Grid / Hierarchical / Radial layouts, with zoom in, zoom out, and fit view.
- Inspect an entity's properties, outgoing and incoming relations, access count, and last-accessed time.
- Use Select Mode to batch-select entities and Delete selected, or edit a single entity's description and delete individual entities/relations.
- With no memories yet, the No memories yet empty state invites you to Start conversation.
Extraction rules, entity and relation types, retrieval, and time decay are covered in Memory and Context.
Notification Center
The notification center (/app/notifications) aggregates site-wide, team, and personal notifications with search, unread filtering, and mark-as-read; the bell in the avatar menu shows the unread count (99+ above 99).
Automatic notifications cover document processing, workflow runs, Agent publishing, API keys expiring (reminders at 7 / 3 / 1 days remaining) and expired, password expiration, account lockouts, and new-device sign-ins.
This version has no user-facing per-type toggles, email digests, quiet hours, or push preferences — notification channels and global switches are managed by administrators in site settings. Browser desktop notification permission is granted locally by the user.
See Notifications & External Channels for details.
Troubleshooting
Cannot Save Profile
- Check your connection and make sure required fields are filled in.
- Read the field errors (
5002username taken,5003email taken). - When changing your email, make sure you requested and entered the 6-digit code (
5005means the code is invalid or expired). - Refresh the page and try again.
Email Verification Code Not Received
- After clicking Send code, check the inbox and the spam folder.
- Mind the 60-second resend cooldown and retry after it lapses.
- Make sure you entered the new address — the code only goes there.
- If the site has no SMTP configured, sending returns
5007and an administrator must configure mail first.
TOTP Cannot Be Enabled or Access Is Lost
- Ensure the device clock is synced automatically (±30-second window).
- Try logging in with a one-time backup code.
- If the backup codes are exhausted, ask an administrator to unbind TOTP so you can re-enrol.
- Disabling TOTP requires both the password and a code — one alone will not work.
Cannot Delete the Account
- If the button is missing, the site has
allow_account_deletionturned off. - Super Admin accounts cannot delete themselves.
- SSO-created accounts with no local password cannot self-delete; contact an administrator.
Interface Language Did Not Change
- Wait for the page refresh the switch triggers.
- Clear the site cookie and sign in again so
localere-syncs. - Check that a browser translation extension is not overriding the copy.
Best Practices
Do
- Use a strong, unique password with TOTP enabled, and store backup codes offline.
- Keep your email address current — it is the only channel for password recovery and notifications.
- Review connected SSO accounts and recent login notifications periodically.
- Transfer team ownership and export what you need before deleting an account.
Don't
- Disable TOTP on shared devices.
- Ignore security notifications.
- Rely on the profile dialog's "Set Password" to create the first password for an SSO account (see the limitation above).
See Also
- Login & Account Security — password policy, login protection, TOTP rate limits, and account recovery
- SSO Configuration — provider setup and user lifecycle
- User Management — approval, deactivation, forced changes, and expiration management
- API Keys — creating, binding, and revoking keys
- Notifications & External Channels — the notification center and automatic notification rules
How is this guide?