Skip to main content
A multisig account requires signatures from multiple owners to authorize a transaction. It distributes control so no single party can act unilaterally — useful for treasuries and shared accounts — and can also improve UX (e.g. a passkey per device, so a user can sign from any of them). Both the ECDSA signer (Ownable Validator) and the passkey signer (WebAuthn Validator) support multisig. The validator verifies each signature against the stored owner set, and the account enforces the threshold (e.g. 2-of-3).

Setup

Create a multisig by passing multiple owners and a threshold — the number of signatures required to authorize a transaction.
By default, threshold is 1 (any single owner can sign). Managing owners after creation — adding or removing signers, changing the threshold, reading the current set — is covered on the signer pages: ECDSA and passkeys.
To combine different signer types (e.g. require both an EOA and a passkey), use multi-factor authentication instead.

1-of-n: sign from any owner

With a 1-of-n threshold, any single owner can authorize a transaction on their own. Pick which owner signs with signers. A common use is a passkey per device, so the user can sign from any device without migrating keys.
ECDSA works the same way — set threshold: 1 and pass a single account under signers.

m-of-n: collect multiple signatures

When the threshold is greater than one, you need signatures from several owners. There are two ways to collect them.

Co-located signing

If every key is available in the same environment, sign with a subset of owners in a single call. List the signing owners under signers and call signTransaction once — the SDK requests a signature from each account in the list in parallel and packs them into the account’s multisig signature. Every listed key must be reachable in this environment; if the owners sign from separate devices, use independent signing instead.

Independent signing

When owners are separate parties on different devices, each signs the same prepared transaction independently, and a coordinator merges the results. Prepare the transaction once and share it with each owner:
Passkey owners follow the same flow — pass the passkey account as owner. The signature returned by signTransaction({ owner }) is JSON-serializable, so each owner can return it over the wire:
Signatures can be collected in any order — assembleTransaction deduplicates them and orders them to match the account’s owner set. Provide enough to meet the threshold, or assembly throws InsufficientOwnerSignaturesError. Every owner must sign the same prepared transaction, otherwise assembly throws MismatchedOwnerSignaturesError.
Independent signing is supported for ECDSA, passkey, and multi-factor owners. For multi-factor accounts, also pass the validatorId of the factor the owner belongs to: signTransaction(prepared, { owner, validatorId }).