BuildBaseBuildBase

Overview

Three separate identity concepts - workspace members, app users, and audience contacts - and when each applies.

BuildBase keeps three different ideas of "a person", and most confusion here comes from treating them as one. They live in separate collections and are managed by separate APIs.

ConceptWhat it isManaged from
Workspace memberA user's membership of one workspace, carrying a roleManaging members
UserThe account itself — credentials, profile, devices, sessionsThe console, and bb.users server-side
Audience contactA marketing record. May have no account at allAudience and lists

A person can be all three, and the records stay distinct. Deleting an audience contact does not delete the user account, and removing someone from a workspace does not delete either.

// Server-side: the user's membership of a workspace
await bb.users.invite(workspaceId, '[email protected]', 'editor');
await bb.users.updateRole(workspaceId, userId, 'admin');
await bb.users.remove(workspaceId, userId);

// The signed-in user's own profile
const me = await bb.users.getProfile();
await bb.users.updateProfile({ name: 'Alice Chen' });

Before you start

bb.users.invite() respects seat limits. Check useSeatStatus() before offering an invite in your UI, or handle the rejection.

Which API to reach for

You want toUse
Invite or remove a teammatebb.users.*, or useSaaSWorkspaces() client-side
Read or edit the signed-in profilebb.users.getProfile() / updateProfile()
Store custom fields on a userUser attributes
Segment people for a campaignAudience and lists
Administer any user in the orgThe console, or /api/users — see below

bb.users is deliberately narrow: it covers the operations an application performs on its own behalf. Org-wide administration is a console job, exposed over the admin API rather than the SDK.

Administering users over the API

/api/users is the console's own surface. It is broader than the SDK and correspondingly more dangerous, so treat it as an admin tool.

MethodPathPurpose
GET/api/usersList users, paginated
GET/api/users/:idOne user
PATCH/api/users/:idUpdate a user
PATCH/api/users/:id/blockBlock — the user cannot sign in
PATCH/api/users/:id/unblockRestore access
PATCH/api/users/:id/change-roleChange the org-level role
PATCH/api/users/:id/tagsReplace the user's tags
GET/api/users/:id/workspacesWorkspaces this user belongs to
GET/api/users/:id/devicesKnown devices
GET/api/users/:id/sessionsActive sessions
GET/api/users/:id/activitiesActivity history
GET/api/users/:id/featuresResolved user feature flags
GET/api/users/:id/emailsEmail sent to this user
DELETE/api/users/:idDelete the user

Sessions and devices can be revoked individually with DELETE /api/users/:id/sessions/:sessionRef and DELETE /api/users/:id/devices/:deviceId — useful for a support flow that signs one device out without ending every session.

Blocking is the reversible option and deletion is not. Prefer PATCH /:id/block for abuse handling.

Next Steps