---
updatedAt: 2025-06-09T22:53:50.000Z
agentTools:
  projectIndex: https://docs.metakeep.xyz/llms.txt
---

# Update App

> 📘 This API requires [API Signature](https://docs.metakeep.xyz/reference/api-signature)

Using this API, developers can update data for existing apps.

# App chain

The chain of the app is `immutable` and `cannot be changed` after the app is created.

# App policy

MetaKeep supports setting up an `app policy` to restrict the `management and usage` of certain app features. This allows you to set up a `quorum of members` who need to approve certain actions. Please check out the [App Policy](https://docs.metakeep.xyz/reference/v2appupdate-app-policy) doc for more details.

> 🚧 Api Error Status
>
> You can find error status returned by the api [here](https://docs.metakeep.xyz/reference/api-error-status#v2appupdate).

© Copyright 2024, Passbird Research Inc.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "production-admin-apis",
    "version": "3.4"
  },
  "servers": [
    {
      "url": "https://api.metakeep.xyz/"
    }
  ],
  "components": {
    "securitySchemes": {
      "sec0": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Account-Key"
      },
      "sec1": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Signature"
      },
      "sec2": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Timestamp"
      }
    }
  },
  "security": [
    {
      "sec0": [],
      "sec1": [],
      "sec2": []
    }
  ],
  "paths": {
    "/v2/app/update": {
      "post": {
        "summary": "Update App",
        "description": "",
        "operationId": "v2appupdate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "appId"
                ],
                "properties": {
                  "appId": {
                    "type": "string",
                    "description": "The ID of the app to update. This is obtained from a previous `/v2/app/create` API call or `/v2/app/list` API call."
                  },
                  "name": {
                    "type": "string",
                    "description": "The name of the app."
                  },
                  "state": {
                    "type": "string",
                    "description": "The state of the app. This can be `ENABLED` or `DISABLED`. Use this to enable or disable the app. All operations on a disabled app will fail.",
                    "enum": [
                      "ENABLED",
                      "DISABLED"
                    ]
                  },
                  "userWallet": {
                    "type": "object",
                    "description": "The user wallet configuration.",
                    "properties": {
                      "displayName": {
                        "type": "string",
                        "description": "The display name of the user wallet which the users will see. If the display name is not provided, the app name will be used instead."
                      },
                      "logoUrl": {
                        "type": "string",
                        "description": "The logo URL of the user wallet. We recommend using a rectangular image with dimensions 1000px x 180px."
                      },
                      "button": {
                        "type": "object",
                        "description": "The button configuration",
                        "properties": {
                          "backgroundColor": {
                            "type": "string",
                            "description": "The background color of the button. This should be a valid RGB color code in hex format (e.g. #FA2323)."
                          }
                        }
                      },
                      "theme": {
                        "type": "object",
                        "description": "The theme configuration.",
                        "properties": {
                          "style": {
                            "type": "string",
                            "description": "The style of the theme. This can be `LIGHT` or `DARK`.",
                            "enum": [
                              "LIGHT",
                              "DARK"
                            ]
                          }
                        }
                      },
                      "whitelistedOrigins": {
                        "type": "array",
                        "description": "The whitelisted origin URLs for the user wallet. Only whitelisted origins can use your app ID for user wallet operations. The origin must start with `https` or `http` and can include an optional port e.g. `https://www.example.com`, `http://example.com`,  `http://localhost:3000`.  If no origin is provided, the user wallet will work on all origins.",
                        "items": {
                          "type": "string"
                        }
                      },
                      "customCss": {
                        "type": "string",
                        "description": "Pixel-perfect the UI by providing a custom CSS for the UI elements. `This is a restricted feature only available to selected partners. Please contact us if you are interested in using this feature.`"
                      },
                      "processingLoader": {
                        "type": "string",
                        "description": "The state of the processing loader which is shown for a few seconds before the request is processed allowing users to undo the action if needed. This is enabled by default for all `mutating actions`(e.g. NFT transfer, lambda invocation, or any action that will create and broadcast a transaction).",
                        "enum": [
                          "ENABLED",
                          "DISABLED"
                        ]
                      }
                    }
                  },
                  "apiKeys": {
                    "type": "object",
                    "description": "The API keys to be `added, deleted, or updated`. Please get in touch with us before using this field to ensure that the API keys are managed correctly.",
                    "properties": {
                      "addApiKeys": {
                        "type": "array",
                        "description": "The list of API keys to add.",
                        "items": {
                          "properties": {
                            "name": {
                              "type": "string",
                              "description": "The name of the API key."
                            },
                            "apiKey": {
                              "type": "string",
                              "description": "The API key. It should be a compressed public key on P-256 curve encoded in base64."
                            },
                            "signedHelloMessage": {
                              "type": "string",
                              "description": "The message \"Hello\" signed with the private key corresponding to the public key to prove ownership of the API secret."
                            }
                          },
                          "required": [
                            "name",
                            "apiKey",
                            "signedHelloMessage"
                          ],
                          "type": "object"
                        }
                      },
                      "deleteApiKeys": {
                        "type": "array",
                        "description": "The list of API keys to delete.",
                        "items": {
                          "properties": {
                            "apiKey": {
                              "type": "string",
                              "description": "The API key to delete. It should be truncated API key retrieved from the `/v2/app/list` API."
                            }
                          },
                          "required": [
                            "apiKey"
                          ],
                          "type": "object"
                        }
                      }
                    }
                  },
                  "apiSignatureRequired": {
                    "type": "boolean",
                    "description": "If enabled, the API operations on the app will only accept requests with a valid API signature. Please take a look at the [API Signature docs](https://docs.metakeep.xyz/reference/api-signature) for more details."
                  },
                  "policy": {
                    "type": "object",
                    "description": "The policy of the app.",
                    "properties": {
                      "apiKeysOwnership": {
                        "type": "object",
                        "description": "The `ownership policy` to restrict the `management/usage` of the API keys. Please see documentation for more details on setting up the policy.",
                        "properties": {
                          "quorum": {
                            "type": "object",
                            "description": "The quorum for policy. It's an array of members that need to be part of the quorum.",
                            "properties": {
                              "members": {
                                "type": "array",
                                "description": "The members of the quorum. It's an array of members that need to be part of the quorum. Currently, max supported `quorum size is 2` and `all quorum members need to approve` the action.",
                                "items": {
                                  "properties": {
                                    "type": {
                                      "type": "string",
                                      "description": "The type of the quorum member. It can be `ACCOUNT_ADMIN` or `SOL_ADDRESS`.",
                                      "enum": [
                                        "ACCOUNT_ADMIN",
                                        "SOL_ADDRESS"
                                      ]
                                    },
                                    "publicKey": {
                                      "type": "string",
                                      "description": "The public key of the quorum member. It's required when the member type is `SOL_ADDRESS`."
                                    }
                                  },
                                  "required": [
                                    "type"
                                  ],
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"status\": \"SUCCESS\"\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "SUCCESS"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"status\": \"INVALID_NAME\"\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "INVALID_NAME"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "403",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"status\": \"FORBIDDEN\"\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "FORBIDDEN"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      }
    }
  },
  "x-readme": {
    "headers": [],
    "explorer-enabled": true,
    "proxy-enabled": true
  },
  "x-readme-fauxas": true
}
```