Business Accounts are in early access. See Business Accounts for the model.
Only an owner or admin can add signers, and the caller must already be an active signer on that wallet. This operation requires step-up authentication.
Add a signer
addBusinessAccountSigner grants signing access to a user and returns a shareSetId. Identify them by a known userId, or by an identifier + identifierType. For example, when you provide an email, the user is created if they do not exist yet. If adding the signer requires quorum approval, it returns a pending action instead. Narrow it with isBusinessAccountActionRequired.
- JavaScript
- React
WalletAccount
required
The wallet to add a signer to, from the caller’s
getWalletAccounts().{ userId } | { identifier, identifierType }
required
Who to add: a known
userId, or an identifier (e.g. email) plus its identifierType.'endUser' | 'server'
Whether the new signer is an end user or a server signer. Only
endUser is supported today; server is coming soon.string
Your password, when your key share is password-encrypted and you have not already unlocked it this session. It unlocks your own key share, and is never applied to the new signer’s share.
string
A separate developer-managed value that encrypts the new signer’s key share before backup. It is required when wallet passwords are required by your environment, and optional otherwise.
WaasPolicyRule[]
Rules that seed the new signer’s policy layer at creation time. Build each rule with
buildAllowPolicyRule or buildDenyPolicyRule.To change the new signer’s policy after creation, use the
shareSetId returned by addBusinessAccountSigner with createPolicy.Passwords when adding a signer
A password encrypts one person’s key share, not the wallet.password and targetSignerPassword protect different shares.
passwordunlocks your own key share so the reshare can run. If the share is already unlocked for this session, you can omit it.- The reshare mints a new key share for the signer you add. Your own share set is untouched.
- The SDK encrypts the new share locally with
targetSignerPassword, then sends only the encrypted share to Dynamic for backup. - Your application makes
targetSignerPasswordavailable to the target signer after authentication. They use it to recover their share, then replace it with the password they use for their other wallets by callingupdateWaasPasswordwith a wallet-specificpasswordOverridesentry.
targetSignerPassword. Derive it per signer, for example from a per-signer salt and a server-side secret held in your backend, and return it only over an authenticated request. Do not reuse the current signer’s password. Dynamic’s backup service does not receive the raw value. See Creating a wallet with a developer-provided salt for a derivation pattern you can reuse.
Move the new share to the signer’s existing password
When the target signer already has password-encrypted wallets,updateWaasPassword must decrypt all of the signer’s wallets before it can update them. Pass the signer’s existing password as currentPassword, and identify the newly added wallet with its temporary password in passwordOverrides:
verifiedCredentialId for walletId. The update applies to all wallets associated with the signer and leaves them synchronized under newPassword. Do not call setWaasWalletAccountPassword for the new share because it is already password-encrypted. Keep the temporary password available until the update succeeds, and never log or transmit it through an unsecured channel.
Remove a signer
removeBusinessAccountSigner revokes a signer’s access to a wallet. The wallet and every other signer are untouched.
- JavaScript
- React
Next steps
Members & roles
Administer who can manage the account.
Sign transactions
Use a signer’s share to sign.