---
title: "Create key quorum update intent"
method: PATCH
path: "/v1/intents/key_quorums/{key_quorum_id}"
tags: ["Intents"]
---

# Create key quorum update intent

`PATCH /v1/intents/key_quorums/{key_quorum_id}`

## Request

- Base URL: `https://api.privy.io`
- URL: `https://api.privy.io/v1/intents/key_quorums/{key_quorum_id}`
- Auth: HTTP basic

Create an intent to update a key quorum. The intent must be authorized by the key quorum members before it can be executed.

## Path parameters

- `key_quorum_id` string, required: ID of the key quorum.

## Headers

- `privy-app-id` string, required: ID of your Privy app.
- `privy-request-expiry` string: Request expiry. Value is a Unix timestamp in milliseconds representing the deadline by which the request must be processed.

## Request body

- KeyQuorumUpdateRequestBody: Request input for updating an existing key quorum. At least one field must be provided.
  - `public_keys` string[]: List of P-256 public keys of the keys that should be authorized to sign on the key quorum, in base64-encoded DER format.
  - `authorization_threshold` number: The number of keys that must sign for an action to be valid. Must be less than or equal to total number of key quorum members.
  - `display_name` string
  - `user_ids` string[]: List of user IDs of the users that should be authorized to sign on the key quorum.
  - `key_quorum_ids` string[]: List of key quorum IDs that should be members of this key quorum. Key quorums can only be nested 1 level deep.

## Response `200`

Created key quorum update intent.

- KeyQuorumUpdateIntentResponse: Response for a key quorum update intent
  - `intent_id` string, required: Unique ID for the intent
  - `created_by_display_name` string, required: Display name of the user who created the intent
  - `created_by_id` string: ID of the user who created the intent. If undefined, the intent was created using the app secret
  - `created_at` number, required: Unix timestamp when the intent was created
  - `resource_id` string, required: ID of the resource being modified (wallet_id, policy_id, etc)
  - `authorization_details` IntentAuthorization[], required: Detailed authorization information including key quorum members, thresholds, and signature status
    - `members` IntentAuthorizationMember[], required: Members in this authorization quorum
      - union: A member of an intent authorization quorum. Can be a user, key, or nested key quorum.
        - object: A user member of an intent authorization quorum.
          - `type` 'user', required
          - `user_id` string, required: User ID of the key quorum member
          - `signed_at` number, nullable, required: Unix timestamp when this member signed, or null if not yet signed.
        - object: A key member of an intent authorization quorum.
          - `type` 'key', required
          - `public_key` string, required: Public key of the key quorum member
          - `signed_at` number, nullable, required: Unix timestamp when this member signed, or null if not yet signed.
        - object: A nested key quorum member of an intent authorization quorum.
          - `type` 'key_quorum', required
          - `key_quorum_id` string, required: ID of the child key quorum member
          - `display_name` string: Display name for the child key quorum (if any)
          - `threshold_met` boolean, required: Whether this child key quorum has met its signature threshold
          - `threshold` number, required: Number of signatures required from this child quorum
          - `members` IntentAuthorizationKeyQuorumMember[], required: Members of this child quorum
            - union: A leaf member (user or key) of a nested key quorum in an intent authorization.
              - …
    - `threshold` number, required: Number of signatures required to satisfy this quorum
    - `display_name` string: Display name of the key quorum
  - `status` 'pending' | 'processing' | 'executed' | 'failed' | 'expired' | 'rejected' | 'dismissed', required: Current status of an intent.
  - `custom_expiry` boolean, required: Whether this intent has a custom expiry time set by the client. If false, the intent expires after a default duration.
  - `expires_at` number, required: Unix timestamp when the intent expires
  - `rejected_at` number: Unix timestamp when the intent was rejected, present when status is 'rejected'
  - `dismissed_at` number: Unix timestamp when the intent was dismissed, present when status is 'dismissed'
  - `dismissal_reason` string: Human-readable reason for dismissal, present when status is 'dismissed'
  - `intent_type` 'KEY_QUORUM', required
  - `current_resource_data` object: Current state of the key quorum before any changes. If undefined, the resource was deleted and no longer exists
    - `id` string, cuid2, required
    - `display_name` string, nullable, required
    - `authorization_threshold` number, nullable, required
    - `authorization_keys` AuthorizationKey[], required
      - `public_key` string, required
      - `display_name` string, nullable, required
    - `user_ids` string[], nullable, required
    - `key_quorum_ids` string[]: List of nested key quorum IDs that are members of this key quorum.
  - `request_details` object, required: The original key quorum update request that would be sent to the key quorum endpoint
    - `method` 'PATCH', required
    - `url` string, required
    - `body` object, required: Request input for updating an existing key quorum. At least one field must be provided.
      - `public_keys` string[]: List of P-256 public keys of the keys that should be authorized to sign on the key quorum, in base64-encoded DER format.
      - `authorization_threshold` number: The number of keys that must sign for an action to be valid. Must be less than or equal to total number of key quorum members.
      - `display_name` string
      - `user_ids` string[]: List of user IDs of the users that should be authorized to sign on the key quorum.
      - `key_quorum_ids` string[]: List of key quorum IDs that should be members of this key quorum. Key quorums can only be nested 1 level deep.
  - `action_result` object: Result of key quorum update execution (only present if status is 'executed' or 'failed')
    - `status_code` number, required: HTTP status code from the action execution
    - `executed_at` number, required: Unix timestamp when the action was executed
    - `authorized_by_display_name` string: Display name of the key quorum that authorized execution
    - `authorized_by_id` string: ID of the key quorum that authorized execution
    - `response_body` KeyQuorum, required: A key quorum for authorizing wallet operations.
      - `id` string, cuid2, required
      - `display_name` string, nullable, required
      - `authorization_threshold` number, nullable, required
      - `authorization_keys` AuthorizationKey[], required
        - `public_key` string, required
        - `display_name` string, nullable, required
      - `user_ids` string[], nullable, required
      - `key_quorum_ids` string[]: List of nested key quorum IDs that are members of this key quorum.
    - `prior_state` object, required: State of the key quorum immediately before execution
      - `id` string, cuid2, required
      - `display_name` string, nullable, required
      - `authorization_threshold` number, nullable, required
      - `authorization_keys` AuthorizationKey[], required
        - `public_key` string, required
        - `display_name` string, nullable, required
      - `user_ids` string[], nullable, required
      - `key_quorum_ids` string[]: List of nested key quorum IDs that are members of this key quorum.

## Changes

- **2026-10-20** `527110c2c2f4`: 4 breaking, 1 info
  - the `allOf[subschema #2]/request_details` response's property type changed from `object` to no type for status `200`
  - removed the required property `allOf[subschema #2]/request_details/body` from the response with the `200` status
  - removed the required property `allOf[subschema #2]/request_details/method` from the response with the `200` status
  - removed the required property `allOf[subschema #2]/request_details/url` from the response with the `200` status
  - …1 more
- **2026-06-12** `a8d27de9e15d`: 1 breaking, 2 info
  - added `#/components/schemas/IntentAuthorizationUserMember, #/components/schemas/IntentAuthorizationKeyMember, #/components/schemas/IntentAuthorizationKeyQuorum` to the `allOf[subschema #1: BaseIntentResponse]/authorization_details/items/members/items/` response property `oneOf` list for the response status `200`
  - added discriminator to `allOf[subschema #1: BaseIntentResponse]/authorization_details/items/members/items/` response property for the response status `200`
  - removed `subschema #1: User member, subschema #2: Key member, subschema #3: Key quorum member` from the `allOf[subschema #1: BaseIntentResponse]/authorization_details/items/members/items/` response property `oneOf` list for the response status `200`
- **2026-06-02** `d7dbcaf077ee`: 1 info
  - api operation id `updateKeyQuorum` removed and replaced with `createKeyQuorumUpdateIntent`
- …earlier changes not shown

[Operation history](https://skmtc.dev/privy-io/apis/privy-api/changes/v1/intents/key_quorums/:key_quorum_id/patch.md)

---

[API](https://skmtc.dev/privy-io/apis/privy-api.md) - [All operations](https://skmtc.dev/privy-io/apis/privy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/privy-io/apis/privy-api/revisions/3a2288470053?raw)
