The following functionality exists for wallets reconstituted server-side. More on Privy architecture here

Privy enables you to update the policies and authorization keys for a wallet that is provisioned for server-side access.

Prior to updating a wallet, the wallet must be provisioned for server-side access.

To update an existing wallet, make a PATCH request to:

https://api.privy.io/v1/wallets/<wallet_id>

Wallets with owner_id present must provide an authorization signature as a request header.

Body

In the request body, include the following fields:

policy_ids
string[]

New policy IDs to enforce on the wallet. Currently, only one policy is supported per wallet.

owner
{public_key: string} | null

The P-256 public key of the owner of the wallet. If you provide this, do not specify an owner_id as it will be generated automatically.

owner_id
string | null

The key quorum ID of the owner of the wallet. If you provide this, do not specify an owner.

additional_signers
{signer_id: string}[]

The key quorum IDs to add as additional signers for the wallet.

Any fields not included in the PATCH request body will remain unchanged from the original wallet.

Response

If the wallet is updated successfully, the response will include the updated wallet.

id
string

Unique ID for the wallet.

address
string

Address of the wallet.

chain_type
'ethereum'

Chain type for the wallet.

policy_ids
MethodRule

Updated policy IDs to enforce on the wallet.

owner_id
string | null

The key quorum ID of the owner of the wallet.

additional_signers
{signer_id: string}[]

The key quorum IDs of the additional signers for the wallet.

Example

A sample request might look like the following:

$ curl --request PATCH https://api.privy.io/v1/wallets/rbokq6mmq5f8j1cgyr6a5g4n \
-u "<your-privy-app-id>:<your-privy-app-secret>" \
-H "privy-app-id: <your-privy-app-id>" \
-H "privy-authorization-signature: <authorization-signature-for-request>" \
-H 'Content-Type: application/json' \
--data '{
    "policy_ids": ["fmfdj6yqly31huorjqzq38zc"],
    "owner_id": "yhu8t1fjns9rtc2o702ub3vt",
    "additional_signers": [{"signer_id": "trt9syg5k19jvxwbnt6t8rd0"}]
}'

A successful response will look like the following:

{
  "id": "rbokq6mmq5f8j1cgyr6a5g4n",
  "address": "0xE315ce0854CcbdB0E33e71af1190F48Eb5d4f5a4",
  "chain_type": "ethereum",
  "policy_ids": ["fmfdj6yqly31huorjqzq38zc"],
  "owner_id": "yhu8t1fjns9rtc2o702ub3vt",
  "additional_signers": [
    {
      "signer_id": "trt9syg5k19jvxwbnt6t8rd0"
    }
  ],
  "created_at": 1737492220389
}