> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Multisig

> Require a threshold of session-owner signatures.

A session-key multisig uses an ECDSA or passkey owner set with more than one account. Set `threshold` to the number of signatures required:

Examples on this page use `@rhinestone/sdk`, where `rhinestone` is the `RhinestoneSDK` instance from [Create a session with a custom setup](/wallets/session-keys/custom-setup/create-a-session).

```ts theme={null}
import { base } from "viem/chains";

const session = await rhinestone.createSession({
  chain: base,
  owners: {
    type: "ecdsa",
    accounts: [sessionOwnerA, sessionOwnerB, sessionOwnerC],
    threshold: 2,
  },
});
```

`threshold` defaults to `1`. Keep it between `1` and the number of configured accounts.

The SDK's standard session-key flow invokes the configured accounts while signing the transaction. It does not support collecting independent session-key owner signatures with `assembleTransaction`, so a distributed approval service must expose the configured viem account signing methods to the signing process.

## Use weighted quorum

Use a deployed Quorum Signer validator when owners need different voting weights:

```ts theme={null}
const session = await rhinestone.createSession({
  chain: base,
  owners: {
    type: "quorum",
    owners: [
      { account: sessionOwnerA, weight: 2n },
      { account: sessionOwnerB, weight: 1n },
    ],
    thresholdWeight: 2n,
    module: quorumValidatorAddress,
  },
});
```

`module` must be the deployed Quorum Signer validator shared by the account's session chains. `thresholdWeight` is the minimum combined weight required.

## Combine different validator types

Use a multi-factor session owner when approval must span ECDSA and passkey validators:

```ts theme={null}
const session = await rhinestone.createSession({
  chain: base,
  owners: {
    type: "multi-factor",
    validators: [
      { type: "ecdsa", accounts: [sessionOwnerAccount] },
      { type: "passkey", accounts: [passkeyAccount] },
    ],
    threshold: 2,
  },
});
```

The outer threshold counts validator factors. Each factor can also have its own account threshold. Quorum validators cannot be nested as multi-factor factors, and ENS owners are not supported for session keys.

<Warning>
  A validator threshold limits who can use the session. It does not limit what
  the session can do. Add permissions and policies for least privilege.
</Warning>
