The admin users of the platform — invited by email, activated by the user, governed by exactly one role.
Invite-based admin users, each governed by exactly one role.
Organization accounts are the people who sign into the admin UI and manage roles, spaces, agents and the other org resources. Each account carries a globally unique email, optional first/last name (set by the user themselves when they register), exactly one role, and a status. What an account can see and do is entirely determined by its role — KeenAgents refuses to attach an account to a role that does not exist, so permissions always trace back to a real, current role. Passwords are stored irreversibly hashed and are never returned by any read.
Accounts are invite-based: an administrator creates one with just an email and a role, KeenAgents emails a confirmation link, and the invited user finishes registration themselves — setting their own name and password on the confirmation page. Every rule on this page is enforced by the platform itself; the admin UI mirrors the same rules early for a better experience, but they cannot be bypassed by calling the API directly.
confirmed and blocked. The credential is never included in any response, and the account list also omits blocked — only the single-account detail includes it.No such role!. Renaming a role follows through to every account holding it automatically. Deleting a role moves its accounts to the default role and force-logs-out any session still carrying the deleted role, so no session ever keeps permissions from a role that is gone.Not allowed!). Your organization has exactly one owner, created at initial setup — even the owner cannot change the owner account's role, so the top of the hierarchy can never be accidentally demoted.24 hours (48 hours for the initial owner invitation) and are single-use: redeeming one invalidates it, and a newer invite or reset supersedes any older link. All failures answer the general 406 Action forbidden! so a failed attempt never reveals whether an email exists.From invite to Active — and what a password reset really does.
Action forbidden!.How signing in works day to day, and why a password prompt sometimes reappears.
You sign in with your email and password. For security your session is time-limited — after a stretch of inactivity a password prompt appears in place, right where you were working. Re-enter your password and you continue exactly where you left off: nothing you had open or in progress is lost.
This account is already created!. The admin UI caps length at 254 characters.No such role!. The protected targets are owner and admin; owner is never offered in any role select.1 (0 is treated as 1); page size defaults to 20 and the items parameter overrides it with no enforced upper cap. Past-the-end pages clamp to the real last page, and the reply always reports the page you actually landed on — sync your pager off that, not off the page you asked for.10 filter rows per request; operators are equal | not | greater | less | like | not like | in | not in; values must be non-empty strings and in/not in take a comma-separated list. Anything off-vocabulary answers 406 Invalid filter!.name | mail | status | role | id | created at, directions asc | desc; off-vocabulary answers 406 Invalid sort!. Default order is email descending; name sorts by first name then last name with not-yet-named (New) accounts always at the bottom, and ordering is fully deterministic so pages never shuffle between requests.| Filter type | Behavior |
|---|---|
name | Case-insensitive; matches either first or last name for positive operators, and requires neither part to match for negative ones — accounts that have no name yet (New) never match a negative name filter. |
mail / id / role | Case-insensitive string matches; role is matched by its slug. |
status | Only active and new; operators equal | not | in | not in. |
created at / created from | Day-granular UTC windows over the creation date; operators equal | not | greater | less. |
account list URL grammar
<type>[.<operator>]=<value> bare key = equal name=jame multi-word operators dot-join name.not.like=jame dated types use underscores created_at, created_from sort=<field>[.<direction>] direction defaults to asc sort=created_at.desc page=<n> pager position page=2
owner. Success toasts, notes that the confirmation email was sent, and redirects to the new account's detail page.protected — read only for the owner, protected — role locked for admin accounts (role change locked, password reset and delete remain available). Email and names are read-only; the role select has a dirty-gated Save; Reset Password appears only on confirmed, non-owner accounts; delete is a two-step control hidden entirely for the owner.blocked flag renders as a red badge on the detail page, but no admin action currently sets or clears it.Action forbidden!, Not allowed!, bare 406s — revealing the failure class, never details such as whether an email exists; this keeps probing attackers blind. Check the platform's audit log instead of expecting the API message to explain.Keen Agents 2026
Documentation
Release 15