AdvancedMulti-Party Approval

Multi-Party Approval

For the highest-risk actions, SilentAuth can require N-of-M approvals before issuing a receipt. This prevents a single compromised account from authorizing a catastrophic action.

Configuring M-of-N

Set minApprovals in your intent or policy rule:

const intent = await sa.createIntent({
  action: 'drop_production_database',
  params: { database: 'users_prod' },
  approvers: ['cto@acme.io', 'vp-eng@acme.io', 'infra-lead@acme.io'],
  minApprovals: 2,  // Require 2 out of 3 approvers
  expiresIn: 3600,
});

Via Policy

{
  "rules": [
    {
      "match": { "action": "drop_*" },
      "require_approval": true,
      "approvers": ["cto@acme.io", "vp-eng@acme.io", "infra-lead@acme.io"],
      "min_approvals": 2,
      "timeout": 3600
    }
  ]
}

How It Works

01
All approvers are notified simultaneously

Each approver receives their own independent notification with the intent details.

02
Each approver authenticates independently

Approvers cannot see each other's responses. Each signs with their own passkey or MFA.

03
Receipt issued when threshold is met

Once the minimum number of approvals is received, SilentAuth issues the receipt and notifies remaining approvers that approval is complete.

04
Any denial immediately blocks

If any approver denies the intent, it is immediately rejected regardless of other approvals.

Receipt Includes All Approvers

The issued receipt should list every approver who signed:

// Decoded receipt payload
{
  "act": "drop_production_database",
  "prms": { "database": "users_prod" },
  "apv": ["cto@acme.io", "vp-eng@acme.io"],  // array for multi-party
  "min_approvals": 2,
  "exp": 1705312200,
  "iat": 1705308600
}