Skip to main content
POST
Add a member to a business account

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

environmentId
string
required

ID of the environment

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

businessAccountId
string
required

ID of the business account

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Body

application/json

The user to add as a member and the role to grant them.

role
string
required

A role that can be directly assigned to a member: a built-in (admin, viewer) or a customer-defined role the account has defined. owner is excluded — ownership moves only via transferOwnership. Not an enum, because the set is per-account: a caller can grant any role from GET /roles. Whether the role exists is the enclave's to answer, not this schema's — the pattern only rejects names that could never be one. A role the account has not defined is refused with UNKNOWN_ROLE. A customer-defined role grants exactly what it inherits, so cfo inherits admin is an admin with a distinguishable name. Case-insensitive on input — CFO and cfo name the same role. The server normalizes to lowercase before comparing or storing, so the pattern accepts both cases here even though a held/stored role name (HeldBusinessAccountMemberRole) is always lowercase.

Pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,30}[a-zA-Z0-9])?$
Example:

"cfo"

userId
string<uuid> | null
identifier
string | null
type
enum<string>
Available options:
email,
id,
externalUserId,
phoneNumber,
socialUsername,
socialAccountId
smsCountryCode
object
socialProvider
enum<string>

The 'turnkey' value is deprecated and will be removed in a future version.

Available options:
emailOnly,
magicLink,
apple,
bitbucket,
coinbasesocial,
discord,
epicgames,
facebook,
farcaster,
github,
gitlab,
google,
instagram,
linkedin,
microsoft,
twitch,
twitter,
blocto,
banxa,
coinbaseOnramp,
cryptoDotCom,
moonPay,
dynamic,
alchemy,
zerodev,
telegram,
turnkey,
coinbaseWaas,
sms,
spotify,
tiktok,
line,
steam,
shopify,
zksync,
kraken,
blockaid,
passkey,
okta,
sendgrid,
resend,
trmWalletScreening,
chainalysisAddressScreening,
gemini

Response

Member added

Admin-reach membership in a business account

id
string
required
Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

businessAccountId
string
required
Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

userId
string
required
Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

role
string
required

The role a member actually holds: a built-in (owner, admin, viewer) or a customer-defined role the account has defined. Wider than AssignableBusinessAccountRoleName because a held role can be owner, which cannot be assigned directly.

Pattern: ^[a-z0-9](?:[a-z0-9_-]{0,30}[a-z0-9])?$
Example:

"cfo"

email
string | null

Member's verified email; null when they have none

customRole
object | null

The member's actual customer-defined role, when role names one; null for a built-in role

addedByUserId
string<uuid> | null
createdAt
string<date-time>
lastSeenAt
string<date-time> | null

Dashboard-only: this member's most recent session creation time. Null when they have never completed authentication (e.g. still mid-invite).

Last modified on October 8, 2026