Skip to content

User Model

Field Type Description
id UUID string Unique user identifier — used as the sub claim in tokens
username string Login name; must be unique; length controlled by validation settings
password string bcrypt hash of the password; never stored in plaintext
email string Optional email address; required if validation_email_required is true
role string user or admin
created_at timestamp When the account was created
failed_login_attempts integer Number of consecutive failed login attempts; resets on success
locked_until timestamp (nullable) If set, the account is locked until this time
totp_secret string TOTP shared secret (base32); empty until enrolled
totp_verified boolean Whether the user has completed TOTP enrollment
is_email_verified boolean Whether the email address has been verified
deactivated_at timestamp (nullable) If set, the account is deactivated and cannot log in

All standard OIDC profile claims are stored on the user record. Visibility on the signup form and account portal is controlled per-field via profile field settings. All fields default to empty string and are omitted from API responses when blank.

Field OIDC claim Description
given_name given_name First (given) name
family_name family_name Last (family) name
middle_name middle_name Middle name
nickname nickname Casual name the user prefers (alias or shortened first name)
phone_number phone_number Phone number in E.164 format
phone_number_verified phone_number_verified Whether the phone number has been verified
picture picture URL to an avatar image
website website URL to the user’s personal or professional website
profile profile URL to the user’s profile page
gender gender Free-form gender string
birthdate birthdate Date of birth in ISO 8601 format (YYYY-MM-DD)
locale locale Preferred locale (e.g. en-US)
zoneinfo zoneinfo IANA time zone identifier (e.g. America/Los_Angeles)
address_street address.street_address Street address
address_locality address.locality City
address_region address.region State or region
address_postal_code address.postal_code Postal / ZIP code
address_country address.country Country

The admin API returns users in a safe representation that excludes the password hash and TOTP secret:

{
"id": "a3f4e5b6-1234-5678-abcd-ef1234567890",
"username": "alice",
"email": "[email protected]",
"role": "user",
"created_at": "2024-01-15T10:30:00Z",
"failed_login_attempts": 0,
"locked_until": null,
"totp_verified": true,
"is_email_verified": true
}

The user id is the sub claim in access tokens and ID tokens. The username maps to name, and email maps to email (when the email scope is requested).