Skip to main content

Progressive Profiling & User Traits

Two complementary tools build up user profiles over time: Progressive Profiling collects information incrementally during the login flow, and User Traits store arbitrary custom attributes against any user.


User Traits​

User traits are custom key-value attributes you can attach to any user in your organization. Use them to store application-specific data alongside the standard profile fields (name, email, etc.).

Supported Trait Types​

TypeExample
Stringplan: "enterprise"
Numbercredits: 500
Booleanemail_opt_in: true
JSONpreferences: { theme: "dark", locale: "en-US" }

Managing Traits in the Portal (Customer 360 View)​

Each user has a Customer 360 view in the portal (titled User 360 view) — a single page showing everything about that user.

  1. On the Users page, open the ⋯ menu of a user and choose Customer 360 view (or go to /orgs/{orgId}/portal/users/{userId}/360)
  2. Find the User traits card
  3. Click Add trait (or Add first trait when the user has none)
  4. In the Add user trait dialog, enter the Key, choose the Type (String (text), Number, Boolean (true/false) or JSON (advanced)), enter the Value and click Save trait
  5. Click the trash icon next to a trait to delete it

The Add user trait dialog with the Key, Type and Value fields

Existing traits are not edited in place, and adding a key that already exists is refused: to change a value, delete the trait and add it again, or use the API below. The user's edit page also lists the traits in a User traits card.

The 360 view also shows:

  • Linked identities (connected social or enterprise accounts)
  • Consents with their dates
  • Recent activity (last 20 audit entries)

The User 360 view of a user with the User traits card

Traits via API​

# Set a trait
curl -X PUT https://your-domain.com/orgs/{orgId}/api/v1/abac/users/{userId}/attributes/{slug} \
-H "Authorization: Bearer {admin_token}" \
-H "Content-Type: application/json" \
-d '{"value": "enterprise"}'

# Read all traits for the current user (available in the user's session)
curl https://your-domain.com/orgs/{orgId}/api/v1/abac/my-attributes \
-H "Authorization: Bearer {access_token}"

Using Traits in Authorization​

User traits integrate with ABAC (Attribute-Based Access Control). You can write policies that evaluate trait values at runtime:

user.traits.plan == "enterprise" AND user.traits.email_opt_in == true

See ABAC for details on writing trait-based policies.


Progressive Profiling​

Progressive profiling lets you collect user information gradually — asking for one or two fields at a time during the login or post-login flow — rather than presenting a long registration form upfront.

How It Works​

  1. A user authenticates normally
  2. LumoAuth evaluates whether any configured profile rules apply to this user
  3. If a rule matches (e.g., "user has not provided their job title"), the user is redirected to the profile completion step
  4. The user fills in the requested fields
  5. The profile data is saved and the user continues to your application

This approach improves registration conversion rates while still collecting the data you need over time.

Enabling Progressive Profiling​

  1. Go to Sign-in settings (/orgs/{orgId}/portal/settings/authentication) and open the Progressive profiling section
  2. Turn the Enabled switch in the section header on
  3. Click Create rule to define when and what to ask for
  4. Click Save changes at the bottom of the page

The Progressive profiling section of Sign-in settings with the Enabled switch, the Rule editor and JSON view tabs and the Create rule button

Configuring Profiling Rules​

Create rule opens the Configure profiling rule dialog:

  1. Choose the Rule trigger: Continuous enrollment (every qualifying login) or Milestone based (after X login sessions)
  2. Under Attributes to capture, fill in a Display label, an Internal key (ID) and a Data type (Short text, Long text, Number or Switch) for each field, and switch Required on for fields the user must fill in. Add field adds another one
  3. Click Save rule, then Save changes on the page

The Configure profiling rule dialog with the Rule trigger and the Attributes to capture

The same rules can be edited as JSON on the JSON view tab; the two views stay in sync. Each rule specifies:

FieldDescription
idIdentifier of the rule (generated by the rule editor)
triggerWhen to show the prompt: always, or a login-count condition such as login_count >= 3
fieldsThe fields to collect. Each one has a key (the trait it is saved as), a label shown to the user, a type (text, textarea, number or boolean) and required

Example rule:

[
{
"id": "rule_1",
"trigger": "login_count >= 3",
"fields": [
{ "key": "job_title", "label": "Job title", "type": "text", "required": true },
{ "key": "phone", "label": "Phone number", "type": "text", "required": false }
]
}
]

A rule is complete for a user once every one of its fields is stored in the user's traits; it is not shown again after that.

Profile Completion Flow​

When a rule triggers, the user lands on /account/complete-profile/. This page:

  • Shows only the fields configured in the matching rule
  • Labels fields that are not required as optional; they can be left empty
  • Saves responses as user traits
Incremental data collection

Use multiple rules with different conditions to gather data at the right moments — for example, ask for a job title at every sign-in until it is provided, and for a phone number from the third login.