Privy enables developers to set up wallet infrastructure with flexible approval flows — from fully automated server-side execution to human-in-the-loop approvals requiring multiple parties. This recipe walks through setting up a complete wallet infrastructure with:Documentation Index
Fetch the complete documentation index at: https://docs.privy.io/llms.txt
Use this file to discover all available pages before exploring further.
- Key quorums to require multiple authorizations for sensitive actions
- Policies to restrict what transactions a wallet can execute automatically
- Wallets configured with both human-approved and server-approved transaction paths
- Transaction execution across both approval flows
For a simpler setup without dual approval paths, see the business wallets
recipe. For execution-focused setups with EIP-7702, see the
execution wallets recipe.
Prerequisites
Before starting, ensure your Privy app is configured with at least one Dashboard admin and that you are familiar with authorization keys and key quorums.Manual approvals is an Enterprise feature. Reach out to [email protected] to
request access for your app.
How it works
A wallet in Privy can support multiple approval flows simultaneously:- The owner (typically an admin, or a quorum of admins) can execute transactions subject to a set of policies. Since the owner is a human quorum, these transactions require human-in-the-loop approvals.
- Additional signers (server held authorization key) can also execute transactions subject to their own set of policies. Since the additional signer is a server-controlled key, these transactions can be executed programmatically without human approvals.
Setup
Create an admin key quorum
Key quorums require multiple authorization signatures before taking critical actions — such as updating wallet configurations, changing policies, or executing high-value transactions.For each approver group in your organization:
- Create a key quorum using Dashboard admin users of all members.
- Set the
authorization_thresholdto the number of signatures required (e.g., 2-of-3).
Key quorums quickstart
Create a key quorum in the Privy Dashboard.
Manual approvals
Learn how to manually approve transactions.
Create authorization keys
Authorization keys allow your server to sign requests to Privy’s API automatically for permissioned actions. Create an authorization key in the Privy Dashboard and securely store the corresponding private key.
Create authorization keys
Generate authorization keys in the Privy Dashboard.
Create policies
Policies restrict what actions a signer can take. Create separate policies for your human-approved and server-approved transaction paths.For each policy:
- Set the
owner_idto the admin key quorum that should be able to update the policy. - Define the
rulesfor the policy (e.g., transfer limits, allowlists, calldata restrictions). - Set a human-readable
nameto identify the policy.
Policies overview
Learn how to construct policies with Privy’s policy language.
Policies quickstart
Create a policy.
Create wallets
Create wallets with the following configuration to support both human and server approval flows:
- Set
owner_idto the key quorum that should control the wallet. The owner can update the wallet’s configuration, execute transactions (subject to the key quorum threshold). - Set
policy_idsto the policies that apply when the owner executes transactions. These are the human-approval policies. - In the
additional_signersarray, add an entry with:signerset to the authorization key your server uses for automated transactions.override_policy_idsset to the policies that apply for server-approved transactions.
Wallets quickstart
Create a wallet.
The
policy_ids on the wallet restrict what the owner can do. The override_policy_ids on an additional signer restrict what that specific signer can do. This allows the same wallet to have different constraints depending on who authorizes the transaction.Execute transactions
Your wallet now supports two transaction flows:Server-approved transactions (automated, no human approval required):Sign the request with your authorization key and include the signature in the
privy-authorization-signature header. Privy verifies the signature, evaluates the additional signer’s override policies, and executes the transaction.Human-approved transactions (requires key quorum approval):Propose an intent to execute a transaction and Privy queues the approval for the Dashboard admin key quorum corresponding to the wallet’s owner. Once a sufficient number of approvals are collected, Privy executes the transaction and emits a webhook with the result.For human-approved transactions, Privy emits webhooks when intents are created, authorized, executed, or failed. Use intent webhooks to track approval progress and retrieve transaction results asynchronously.
Send an EVM transaction
Learn how to send an EVM transaction.
Send a Solana transaction
Learn how to send a Solana transaction.
Authorization signatures
Sign requests to the Privy API.

