businessAccount.proposal.* namespace.
For the shared event envelope, endpoint setup, retries, and signature verification, see Setting up webhooks and Event delivery & best practices. The current list of event types is always available from the event types endpoint.
Events
An account can require approvals before a change applies. A change that needs them does not take effect immediately: a proposal opens, collects approvals, and applies once its requirements are met. These six events cover that lifecycle.An approved change sends two events: the proposal event below, and the ordinary account event for the change itself. A governed member removal sends both
businessAccount.proposal.executed and businessAccount.member.removed. Subscribe to the family you need: the proposal events for approval workflow, the account events for keeping your own records in step.object
Occurs whenever a change needs approvals and a proposal opens. Carries who to ask, and how many people are needed.
object
Occurs whenever an approval is recorded. Carries the approver and the time they signed.
object
Occurs whenever an approver takes back an approval they had given. This is the
only proposal event that lowers the count, so a reader that tracks progress
must handle it: a proposal can fall back below its requirements after it had
met them.
object
Occurs whenever a proposal is refused. A veto is final, whatever approvals the proposal already holds.
object
Occurs whenever a proposal meets its requirements and the change applies.
object
Occurs whenever a proposal passes its
completeBy deadline without executing
or being vetoed. Carries expiredAt, the deadline the proposal missed. The
event has no actor: the clock, not a member, closed the proposal.Reading a proposal payload
evaluationSummary answers whether the change can go through. ruleEvaluations answers why, one entry per governance rule that applies.
changeSetholds only what the person asked for. Removing a member also revokes their key shares, and that extra rule shows up as its own entry inruleEvaluationswithgovernedAction: "removeSignerFromWallet", not as a second entry inchangeSet.ruleIdcombines the rule’s own name from the account’s governance configuration with the action it governs, plus a wallet id when the rule targets one. A rule’s name is unique only within one action, and a member’s key shares span every wallet they sign on, so a rule revoking those shares produces oneruleEvaluationsentry per wallet. Both parts ofruleIdkeep those entries apart.remainingEligiblePoolcan differ between rules. A rule limited to people who hold a key share on a particular wallet admits fewer people than a rule that does not. Send each person the rule they can act on.mandatoryApproversnames people, not roles: someone appears here when every way of satisfying the account’s rules needs their approval specifically.pendingEligibleApproversis the union of everyone still worth asking across every unsatisfied rule, andmandatoryApproversis the ones among them who cannot be skipped.
Once a proposal reaches
vetoed, expired, or executed, ruleEvaluations, pendingEligibleApprovers, and mandatoryApprovers all report empty. currentApprovals still holds the full record of who approved. evaluationSummary.isSatisfied reflects the final outcome (true only for executed) rather than the tally at the moment the account closed the proposal.