Skip to main content

Client Profiles & Sharing

What is a PublicUserProfile?

A PublicUserProfile is a user's shareable data card, distinct from their private account profile (UserProfile). It contains the personal information that organizations need during underwriting.

Fields:

FieldTypeNotes
firstNameString (required)Max 100 chars
lastNameString (required)Max 100 chars
dateOfBirthOffsetDateTimeOptional
phoneNumberStringOptional, max 50 chars
emailStringOptional
bioStringOptional, max 1000 chars
profilePictureUrlStringOptional
preferredLanguageStringOptional
timeZoneStringOptional
addressesList<PublicUserProfileAddress>Has isDefault flag, ordered DESC

Multiple profiles per user

A user can have multiple PublicUserProfile records. This allows:

  • Different profiles for different organizations (e.g. personal vs business)
  • Keeping separate profiles for different application contexts

Sharing with an organization

Sharing is consent-based — the client controls which profile is shared with which org.

Flow:

  1. Client creates a profile (or staff creates one on their behalf)
  2. Client shares it with an organization via sharePublicUserProfile(publicProfileId, orgId)
  3. A UserProfileSharing record is created linking the profile to the org
  4. Org staff can now view and edit the profile
  5. Client can revoke sharing via unsharePublicUserProfile(publicProfileId, orgId)

Sharing is idempotent — sharing twice returns the existing record without error.

Staff creating profiles on behalf of clients

Staff with any org role can create a profile on behalf of a client:

Mutation: createClientPublicUserProfile(clientId, orgId, input)

This creates the profile and automatically shares it with the org — no separate sharing step needed. Useful when onboarding clients who haven't set up their own profile yet.

GraphQL API

Queries:

  • myPublicUserProfiles() — client's own profiles
  • publicUserProfilesByOrg(orgId) — all profiles shared with an org (requires org role)
  • publicUserProfile(id) — single profile by ID
  • publicUserProfileSharings(publicProfileId) — all sharings for a profile

Mutations:

  • createPublicUserProfile(input) — owner creates their profile
  • updatePublicUserProfile(id, input) — update (owner or org member)
  • deletePublicUserProfile(id) — delete (owner only)
  • sharePublicUserProfile(publicProfileId, orgId) — share (owner only)
  • unsharePublicUserProfile(publicProfileId, orgId) — revoke (owner only)
  • createClientPublicUserProfile(clientId, orgId, input) — staff creates for client

When adding an Applicant to an application, the applicant optionally links to a PublicUserProfile via profileId. This is how applicant data (name, DOB, address) flows into the application context.

Staff can inline-edit applicant profiles directly from the application's Applicants tab — this updates the PublicUserProfile in place.

See Applicants for the full applicant model.


See also