Setup
Create a multisig by passing multiple owners and athreshold — the number of signatures required to authorize a transaction.
- ECDSA
- Passkeys
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 withsigners. A common use is a passkey per device, so the user can sign from any device without migrating keys.
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 undersigners 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: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 }).