Skip to main content
For resources owned by a key quorum of team members, propose intents to make changes such as wallet updates, policy updates, signatures, or transactions. Once a team member submits an intent, it is queued for manual review by the team members in the assigned key quorum. Team members can then review the proposed change in the Dashboard and decide to approve or reject it. Once enough reviewers approve, the intent executes. Manual approvals flow chart There are two ways to propose intents:
  • Dashboard: From the Wallets and Policies pages, create an intent to update an existing wallet or policy owned by a key quorum of your team members.
  • REST API: Create an intent to update a wallet, update a policy, or execute a signature or transaction.
Intents expire 72 hours after creation. Reviewers must approve them within this window.
Learn more about proposing intents for the following flows.

Transfer funds

Propose an intent to transfer funds

Authorize transaction

Propose an RPC intent to send a transaction

Update policy

Propose a policy intent for review

Transfer funds

Propose an intent to transfer funds from a wallet to a destination address via the Dashboard or REST API.

Dashboard

Visit the Wallets page. Click Transfer, select a source wallet and destination address, choose a token and chain, enter an amount, and submit to propose an intent for review. Transfer Input

API

curl -X POST https://api.privy.io/v1/intents/wallets/<wallet_id>/transfer \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "asset": "usdc",
      "amount": "10.0",
      "chain": "base"
    },
    "destination": {
      "address": "0xB00F0759DbeeF5E543Cc3E3B07A6442F5f3928a2"
    }
  }'
From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting a transfer intent.

Authorize a transaction

Propose an intent to authorize and execute a signature or transaction via the REST API. The Dashboard does not currently support proposing RPC intents. This endpoint accepts the same request body as the synchronous RPC endpoint but does not require authorization signatures in the request. Instead, the intent is queued for manual review and executes once enough reviewers approve.
curl -X POST https://api.privy.io/v1/intents/wallets/<wallet_id>/rpc \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "eth_sendTransaction",
    "caip2": "eip155:8453",
    "sponsor": "true",
    "params": {
      "transaction": {
        "to": "0xE3070d3e4309afA3bC9a6b057685743CF42da77C",
        "value": "0x2386F26FC10000"
      }
    }
  }'
From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting an RPC intent.

Update wallet

Propose an intent to update a wallet via the Dashboard or REST API.

Dashboard

Visit the Wallets page and select the target wallet. Click Update wallet, make the desired changes, then select Propose changes to submit the intent for review.

API

This endpoint accepts the same request body as the synchronous Update wallet endpoint but does not require authorization signatures in the request. Instead, the intent is queued for manual review and executes once enough reviewers approve.
curl -X PATCH https://api.privy.io/v1/intents/wallets/<wallet_id> \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "policy_ids": ["new-policy-id"]
  }'
From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting a wallet intent.

Update policy

Propose an intent to update a policy via the Dashboard or REST API.

Dashboard

Visit the Policies page and select the target policy. Make the desired changes and click Propose changes to submit the intent for review.

API

This endpoint accepts the same request body as the synchronous Update policy endpoint but does not require authorization signatures in the request. Instead, the intent is queued for manual review and executes once enough reviewers approve.
curl -X PATCH https://api.privy.io/v1/intents/policies/<policy_id> \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated policy name"
  }'
From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting a policy intent.

Update policy rules

Propose an intent to add, edit, or remove rules for a policy via the Dashboard or REST API.

Dashboard

Visit the Policies page, select a policy, and navigate to its rules. Make the desired changes and click Propose changes to submit the intent for review.

API

The example below shows how to add a new rule. Each rule action uses a different HTTP method and endpoint:
ActionMethodEndpoint
Add a rulePOST/v1/intents/policies/{policy_id}/rules
Update a rulePATCH/v1/intents/policies/{policy_id}/rules/{rule_id}
Delete a ruleDELETE/v1/intents/policies/{policy_id}/rules/{rule_id}
curl -X POST https://api.privy.io/v1/intents/policies/<policy_id>/rules \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Restrict destination address",
    "method": "eth_sendTransaction",
    "action": "ALLOW",
    "conditions": [
      {
        "field": "to",
        "field_source": "ethereum_transaction",
        "operator": "eq",
        "value": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
      }
    ]
  }'
Each endpoint accepts the same request body as its synchronous counterpart (create, update, delete) but does not require authorization signatures in the request. Instead, the intent is queued for manual review and executes once enough reviewers approve. From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting a rule intent.

Update key quorum

Your app can also propose an update to the key quorum itself — changing its name, members, or authorization threshold. This intent must be approved by a sufficient number of members of the existing quorum in order to be executed.

Dashboard

Visit the Authorization page and select the target key quorum. Select Update key quorum, make the desired changes, and select Propose changes to submit the intent for review.

API

This endpoint accepts the same request body as the synchronous Update key quorum endpoint but does not require authorization signatures in the request. Instead, the intent is queued for manual review and executes once enough reviewers approve.
curl -X PATCH https://api.privy.io/v1/intents/key_quorums/<key_quorum_id> \
  -u "<your-privy-app-id>:<your-privy-app-secret>" \
  -H "privy-app-id: <your-privy-app-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "authorization_threshold": 2
  }'
From the response, note the returned intent_id. Use this ID to check approval progress and execution results. View API reference for submitting a key quorum intent.

Next steps

Review intents

Approve or reject intents in the Privy Dashboard.

Intent lifecycle

Learn more about the lifecycle of an intent.