Skip to main content
A quorum signer approves a wallet action only when threshold of its members sign. This guide uses the REST API to create a wallet with a 2-of-3 recovery quorum, add a 2-of-3 operational quorum, sign a transaction with it, and rotate quorum members. For the concept, see Quorum Signers. The examples use an EVM wallet on base-sepolia with two quorums: a recovery quorum of email and phone members, and an operational quorum of three external wallets that signs the transaction. The same requests work on Solana and Stellar, with the Solana difference shown in Sign a Transaction with a Quorum.

Prerequisites

Enterprise feature. Contact us for access.
  • API key: A server API key with the wallets.create, wallets:transactions.create, and wallets:transactions.sign scopes. In staging, all scopes are included by default.
  • Members: The signers that will form the quorum, from 2 to 10. Each member must be able to sign its own approval message. See Rules and Limits for the member types on each chain.

Create a Wallet with a Quorum Recovery Method

Add an entry with type: "quorum" to recoveryMethods. Set threshold to the number of members that must sign, and list the members in members. Here, any 2 of the 3 members can recover the wallet and change its signers.
The response lists the quorum under config.recoveryMethods with the locator that Crossmint assigned to it. Each member also has its own locator:
A quorum can also sit next to other recovery methods in the same list. Each other method then acts alone, and the quorum is a second path that needs threshold members.

Add a Quorum as an Operational Signer

To require several approvals for day-to-day transactions, register the quorum as an operational signer with the register delegated key endpoint. The signer field takes the same quorum object:
A recovery method of the wallet approves the registration, as for any other signer — see Add Signers. If that recovery method is a quorum, threshold of its members approve, as in the next section. The quorum can act only after its registration succeeds. Its locator, for example quorum:9d41a7c2-5e3b-4c8f-a1d6-2b7e0f3c8a51, is listed with the wallet’s signers.

Sign a Transaction with a Quorum

These steps use the operational quorum from the previous section. Its members are external wallets, which sign approvals with their own keys.
1

Create the transaction

Call the create transaction endpoint and set params.signer to the quorum’s locator. A member’s locator does not act for the quorum: members approve, they never create the transaction.
On Solana, also set approvingMembers to exactly threshold member locators. Only those members can approve:
On EVM and Stellar, signature requests work the same way: set signer to the quorum’s locator.
2

Sign each member's message

The response has one pending approval entry for the quorum. Its quorumApprovals object lists each member that can approve, with the message that member must sign. On EVM and Stellar, all members are listed. On Solana, only the members in approvingMembers are listed.
Each member signs its own message with its own key. Members sign independently and in any order. The messages can be different for each member type, so always sign the message from that member’s entry.
3

Submit the member approvals

Call the approve transaction endpoint. Set approvals[].signer to the member’s own locator, never to the quorum’s locator. You can submit the members together, as below, or in separate requests as each member signs.
After each approval, quorumApprovals.remaining goes down by 1. If a member submits the same approval again, the request succeeds and changes nothing.
4

Check the result

When remaining reaches 0, the quorum entry moves to approvals.submitted and Crossmint broadcasts the transaction. Poll the get transaction endpoint until status is success or failed.

Rotate a Quorum

You cannot change the members or the threshold of a quorum. To rotate them, add a new quorum and then remove the old one. The new quorum gets a new locator, and it can keep some of the old quorum’s members.

Recovery Quorum

  1. Add the new quorum with the add recovery method endpoint.
  2. Remove the old quorum by its locator with the remove recovery method endpoint.
Add the new quorum first: a wallet must always keep at least one recovery method. See Manage Recovery Methods for the full request shapes.

Operational Quorum

  1. Register the new quorum with the register delegated key endpoint.
  2. Remove the old quorum by its locator with the remove signer endpoint. See Remove a Signer.
When the old quorum is removed, its transactions that are waiting for approval fail. Submit or cancel them before you rotate, or create them again with the new quorum.

Next Steps

Quorum Signers

Understand how m-of-n approval works on each chain

Manage Recovery Methods

Add or remove recovery methods on an existing wallet

Approve Transaction

Submit member approvals in the API playground