Business Accounts are in early access. See Business Accounts for the model.
- Account changes, such as adding or removing a member, transferring ownership, changing signers, and linking or removing a wallet. An approval requirement on an account change is called a governance requirement.
- Wallet signing, such as messages and transactions. An approval requirement on signing is called a quorum policy, a rule inside Dynamic’s policy composition model described in Policies & Rules.
How approvals work
- A member initiates an action that a requirement covers, such as adding a member, transferring ownership, or signing a transaction. A requirement sets how many approvals an action needs, who may give them, and how long the proposal has to complete, as described in Requirements and roles. Covered actions are listed in Approvals for account changes and Approvals for signing.
- The initiator signs an intent for the exact action. An intent is a signed description of that action. The SDK builds and signs the intent locally when it can. If it cannot, such as when a member is added by email before the server has resolved that identifier to a user, the SDK throws
BusinessAccountIntentRequiredErrorwith the intent attached. The initiator signs that intent without changing it, usingsignBusinessAccountIntent, and retries the same call with the signed result. - The signed action becomes a proposal once it still needs approvals. If the action needs no approval, the call returns the completed account change instead of a proposal.
- Each eligible approver signs one approval. The initiator cannot approve their own proposal, and each member can approve once.
- Once every requirement is satisfied, the proposal executes automatically by default. How the step finishes depends on the action:
- Held proposals. To hold an action, pass
autoExecute: falseto the SDK call that starts it, for exampleaddBusinessAccountMember({ autoExecute: false, businessAccountId, targetIdentity, role: 'viewer' }). The calls come from@dynamic-labs-sdk/client/waas. Once the approvals are complete, any member of the account can run the held proposal withexecuteBusinessAccountProposal. - Key-ceremony actions. These change a wallet’s key shares through a reshare, so they always wait for a separate step to finish, whatever
autoExecuteis set to. Adding a signer to a wallet is the only one today, and it is a different action from adding a member to the account. - Signing. The initiator resumes the proposal to produce the signature, described in Approvals for signing.
- Held proposals. To hold an action, pass
Requirements and roles
A requirement names how many approvals an action needs, who may give them, and how long the proposal has to complete. Omitting a role list falls back to the account’s default approvers,owner and admin. An empty role list does not mean anyone can approve: a requirement with no eligible approver is rejected as unsatisfiable.
On an account change, a requirement can also name which roles may initiate the action, replacing the action’s default capability. When several requirements on the same action each name initiator roles, the initiator must satisfy every one of them.
One approver capability narrows eligibility further: it can require that an approver already be a signer on the wallet the change affects, rather than any member holding an eligible role.
A requirement can also name a role that must be represented among the approvers, independent of which roles are otherwise eligible. This lets an account require, for example, that at least one approval come from a specific role even when other roles can also approve.
Every requirement has a completion window: the time from the initiator’s signature until the proposal must be approved and, where applicable, executed. The default and maximum is 30 days. After the window closes, approving or executing the proposal fails, and its status changes to expired at the next background check. See Set completion windows and execution.
Approver and initiator roles can be a built-in role (owner, admin, viewer) or a custom role the account has defined.
Approvals for account changes
A governance requirement can apply to every instance of an action, or be scoped to matching changes only, for example a requirement that only applies to a specific wallet, a specific target member, or a specific role being granted or held. An account can combine several requirements on the same action, each scoped differently, to express different approval rules for different situations. The actions a governance requirement can cover:Set governance is itself governed. By default, only the owner can change governance, and a requirement on Set governance can widen or narrow who else may initiate that change.
For implementation, see Governance in the JavaScript SDK reference.
Approvals for signing
A quorum policy requires approvals before a Business Account wallet can sign. It applies to signing operations such as messages and transactions, not just transfers. Signing quorum currently covers message signing on all supported chains and transaction signing on EVM and Solana. Bitcoin transactions are not covered. Rules and approvals act as two gates in order. The wallet’s other policy rules are checked first, so a transaction that breaks a rule, such as a transfer to a denied address or one above a value limit, is rejected and never becomes a proposal. A transaction that passes the rules then waits for the approvals its quorum rules require before the wallet signs. A quorum policy is a rule inside the policy composition model, so it composes with an account’s other policy rules and lives at the same Account-Layer, Wallet-Layer, or Signer-Layer scope as those rules, described in Policies. A quorum rule names how many approvals a signing request needs and which Business Account roles, built-in or custom, may give them: the eligible approver roles accept a list, and a member holding any listed role can approve. A rule can also name mandatory approver roles that must each be represented among the approvals, independent of the eligible roles. Set eligible approver roles explicitly: leaving them unset lets any verified approver role satisfy the requirement, which is rarely what you want. The initiator never counts toward the required approvals. A rule can be scoped to apply only at or above a given transaction value, on a given asset or the chain’s native token. A rule with no such condition applies to every transaction that otherwise matches its scope. A signing operation that matches a quorum rule moves through three stages instead of completing in one step:- The initiator attempts to sign. The operation’s intent is prepared and signed automatically, and a proposal opens instead of a completed signature.
- Other eligible Business Account members review and approve the proposal from their own sessions.
- Once every requirement is satisfied, the initiator resumes the proposal, which produces the signature. For an EVM transaction, resuming returns a signed transaction that is not broadcast: broadcasting it is a separate, final step.
Example: a payment end to end
Setup: an ops wallet’s rules allow USDC only to allowlisted vendors, and a quorum rule requires 2 approvals from finance approvers for any payment over $5,000.- A signer requests a $6,000 USDC payment to an allowlisted vendor.
- The wallet’s policy rules run first: USDC to an allowlisted address passes. A payment to a non-allowlisted address would be rejected here and never reach approval.
- The amount is over $5,000, so the request opens a proposal and waits for approvals.
- Two finance approvers approve from their own sessions, satisfying the quorum.
- The signer resumes the proposal, which produces the signature, and the payment is broadcast as the final step.
- Proposal webhooks report each stage, so the app can show live status the whole way.
Next steps
Governance
Implement governed mutations, proposals, and approvals with the JavaScript SDK.
Quorum policies
Implement transaction quorum rules and the approve-and-resume flow with the JavaScript SDK.