Managing users & activity
This page covers the day-to-day administration surfaces in the admin console: administrators, realm users, changing a user's email address, erasing personal data on request, the audit trails (Activity, Events, Emails), and your own session management.
Administrators
The Users page (/users) lists the administrators of your organization — the people
who can sign in to the admin console. Columns include Email, Verified, Passkey, Active Sessions, Last Login, and
Created.
To add one, use the Add Admin User form (a single Email field). The account is created unverified and passwordless: the new admin proves ownership of the address by completing their first magic-link sign-in, exactly like any other SemAuth user. There is no password to set or send.
Each administrator can be deactivated, reactivated, or erased from this page. SemAuth refuses to deactivate or erase your own account or the last active administrator, so your organization can never be left without one.
Realm users
Open a realm's Users page (/realms/{issuer_id}/users) to see its end users —
Email, Verified, Passkey, Linked IDPs, Active Sessions, Last Login, Created, and Status. Most end users are created
automatically the first time they sign in (via magic link or federation); you generally don't pre-create them.
Deactivate / reactivate
- Deactivate immediately revokes the user's sessions and tokens — they're signed out everywhere at once. Use this to off-board someone fast.
- Reactivate restores access; the user signs in again normally.
Deactivation is the administrator's kill switch. It takes effect everywhere at once: there is no delay before the user's existing sessions stop working.
Change a user's email address
Use Change email on a user's row to move the account to a new address — to fix a typo made at
first sign-in, or because the person's address changed. The account itself stays the same: its user ID
(sub), passkeys, linked external identities and history are all kept, so your applications keep
recognizing the user.
- The new address starts out unverified. The user verifies it the next time they sign in with a magic link.
- An address that already belongs to another user in the realm is refused.
- The new address appears in tokens issued from the user's next sign-in. Existing sessions are not ended — to sign the user out everywhere, deactivate them.
- Administrators' addresses are not changed here.
Erasing personal data
When a person asks you to delete their data — for example under the GDPR's right to erasure — erase them. Erasure removes their account, their sign-in methods (passkeys and linked external identities) and their sessions, and makes every record of them in your audit trails permanently unreadable. The records themselves stay, so your history still shows what happened and when; where the person's details were, the console shows erased.
Erasure is permanent. It cannot be undone, and the data cannot be restored afterwards — by you or by Kovilo. The console asks you to type the person's email address (or the realm's issuer ID) to confirm.
| To erase… | Go to | Notes |
|---|---|---|
| A realm user | Realm → Users → Erase on the row | The person and everything they did in that realm. |
| An address with no account | Realm → Users → Erase an address | For someone who started a sign-in and never completed it: the realm holds their address but no account. An address that does have an account is erased exactly as from its row. |
| An administrator | /users → Erase on the row | Not your own account, and not the last active administrator. |
| A whole realm | Realm → Settings → Erase realm | The realm must be disabled first. See Erasing a realm. |
Each erasure returns a dated receipt: the account that was removed (if any) and how many audit records mentioned the person. The same actions are available from the Admin API, so you can answer data-subject requests from your own tooling.
Audit trails
SemAuth records every meaningful action in a permanent, append-only history. Three views expose it:
| View | Path | Shows |
|---|---|---|
| Activity | /activity | Organization-level events: realm/app/client config changes, signups, admin logins. Includes actor, IP, user agent, and correlation IDs. |
| Events | /realms/{issuer_id}/events | Per-realm user activity: sign-ins, sessions, grants, refresh-token families, magic links, passkeys. Filterable to a single user. |
| Emails | /emails | Every email SemAuth sent for your org (To, From, Subject, Provider, timestamp). Useful to confirm a magic link actually went out. The message itself is not kept, so a sign-in link can never be read back from here. |
The split is deliberate: Activity answers "what changed in my configuration and who changed it", while a realm's Events answers "what did my users do". Sensitive values (like the live magic-link token) are never stored.
Personal data in these views — email addresses, the network address and the browser a person used — is protected per person, which is what makes erasure possible without rewriting your history. Activity that belongs to nobody in particular keeps only a shortened network address.
Your own sessions
The Account → Sessions page (/account/sessions) lets you, the signed-in
administrator, review your active admin-console sessions (device, IP, created, last seen) and revoke any that aren't
the current one. A "Recent activity" section lists sessions ended in the last 30 days with the reason (logged out,
revoked, expired). To end your current session, use logout. You can also manage your own passkeys from
/account/passkeys.
Where each task lives
| I want to… | Go to |
|---|---|
| Add another administrator | /users → Add Admin User |
| Off-board an end user immediately | Realm → Users → Deactivate |
| Fix a user's email address | Realm → Users → Change email |
| Answer a right-to-erasure request | Realm → Users → Erase (or Erase an address) |
| See who changed a client's config | /activity |
| Investigate a user's sign-ins | Realm → Events (filter by user) |
| Confirm an email was delivered | /emails |
| Sign out a lost laptop | /account/sessions → Revoke |