Authio docs

Authio Lobby

User profiles

Identity at sign-in, profile in your app — and how to wire both.

Part of Authio Lobby

Lobby's job is to prove who signed in, not to run a full CRM signup form. That keeps conversion high and matches how most teams integrate Authio (and how WorkOS AuthKit is typically used).

What Authio stores by default

FieldWhen it is set
emailAlways — anchor for passkey, magic link, OAuth, and SSO.
email_verifiedAfter verify flow, SSO, or admin confirmation.
nameWhen OAuth returns a display name (Google/Microsoft), SSO attribute maps resolve one, or your app calls PATCH /v1/me.
avatar_urlOAuth picture URL or your app via PATCH /v1/me.
phone_e164Only after the user completes phone verify (optional MFA / phone-primary).
metadataSSO JIT mappings (job title, department, custom keys), imports, or your backend via Management API.
Authio does not split first_name / last_name on the core user row today. SSO maps those into name or metadata.first_name / metadata.last_name. Dashboard surfaces (Locate log, audit) resolve a display label from all of the above.

What WorkOS does (for comparison)

WorkOS User Management exposes first_name, last_name, profile_picture_url, metadata, and external_id on the user object. AuthKit sign-in still only proves identity — profile CRUD is a separate API pass. Authio follows the same split: Lobby sign-in is minimal; enrichment is deliberate.

Pattern 1 — Post-sign-in onboarding in your app (recommended)

After the Lobby callback sets session cookies, send new users to a one-screen “Complete your profile” step. Persist with:

PATCH /v1/me
Authorization: Bearer <session access token>
X-Authio-Project: proj_…
Content-Type: application/json

{ "name": "Tony Castiglione" }

From a Next.js BFF, proxy through your existing authioFetch helper (same as GET /v1/me). Read the result on the next GET /v1/me name is what Locate logs and your nav bar should show.

Pattern 2 — OAuth fills name automatically

Google / Microsoft sign-in already pass a display name on first login. Email-only passkey or magic-link users will have an empty name until Pattern 1 or SSO runs.

Pattern 3 — Enterprise SSO / SCIM

Map IdP attributes in the dashboard under your SSO connection (attribute mapping). Example:

{
  "user.email": "$assertion.email",
  "user.first_name": "$assertion.Attribute[givenName]",
  "user.last_name": "$assertion.Attribute[sn]",
  "user.name": "$assertion.Attribute[displayName]"
}

Extended fields land in users.metadata (job title, department, etc.). SCIM provisioning keeps rows in sync for large directories.

Pattern 4 — Webhooks (mirror to your CRM)

Subscribe to user.created and user.updated (event catalog). Your backend can upsert into Salesforce, HubSpot, or your own users table keyed by Authio user_id.

What Lobby itself does not do (by design)

  • No mandatory name/phone fields on the hosted sign-in card — add them in your app after auth succeeds.
  • No callback URL that returns PII beyond the session JWT — use GET /v1/me server-side instead of trusting query params.

Next steps