---
title: "Update App Installation"
method: PATCH
path: "/app_installations/{id}"
tags: ["App Installations"]
---

# Update App Installation

`PATCH /app_installations/{id}`

## Request

- Base URL: `https://api.whop.com/api/v1`
- URL: `https://api.whop.com/api/v1/app_installations/{id}`
- Auth: HTTP bearer

Updates the `metadata` and `external_id` your app keeps on an installation. Only the metadata keys you send change, so separate jobs can each keep their own keys.

## Request body

- object
  - `external_id` string, nullable: Your app's own identifier for this installation, such as the ID of the linked account in another system, or `null` when none is set. At most 255 characters and unique across your app's installations, so you can find an installation with `GET /app_installations?external_id=`; setting one another installation already has returns a `409`. Only the app and its developer see it; for the account the app is installed on it is always `null`.
  - `metadata` object: Metadata keys to set, as string values. A key set to `null` is removed and keys you leave out don't change; an empty object clears every key. At most 50 keys; keys are at most 100 characters and values at most 500.

## Response `200`

app installation updated

- AppInstallation
  - `account` AccountSummary, required
    - `id` string, required: Account ID, prefixed `biz_`.
    - `title` string, required: Account display name.
  - `app` AppSummary, required
    - `developer` AccountSummary, required
      - `id` string, required: Account ID, prefixed `biz_`.
      - `title` string, required: Account display name.
    - `icon` AppIcon, required
      - `url` string, required: Icon image URL. Always present — the default app icon when none is uploaded.
    - `id` string, required: App ID, prefixed `app_`.
    - `name` string, required: App display name.
  - `created_at` string, required: When the app was first installed on the account, as an ISO 8601 timestamp. Installing the app again later keeps the original time.
  - `external_id` string, nullable, required: Your app's own identifier for this installation, such as the ID of the linked account in another system, or `null` when none is set. At most 255 characters and unique across your app's installations, so you can find an installation with `GET /app_installations?external_id=`; setting one another installation already has returns a `409`. Only the app and its developer see it; for the account the app is installed on it is always `null`.
  - `id` string, required: App installation ID, prefixed `aag_`.
  - `metadata` object, nullable, required: String keys and values your app stores about this installation, such as a sync cursor or the ID of the linked account in another system. Empty until your app sets a key, and kept if the account removes the app and installs it again. At most 50 keys; keys are at most 100 characters and values at most 500. Only the app can change it. Only the app and its developer see it; for the account the app is installed on it is always `null`.
  - `requesting_reauthorization` boolean, required: Whether the app now asks for permissions the account hasn't approved yet.
  - `updated_at` string, required: When the installation last changed, such as a `metadata` update or the account changing the app's permissions, as an ISO 8601 timestamp.

## Other responses

- `400`: Invalid Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Resource not found
- `409`: Conflict

## Changes

> 201 revisions in range; 1 not diffed.

- **2026-10-22** `a1168edffb6d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/whop/apis/whop-api/changes/app_installations/:id/patch.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) - [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/2af1a3aa41c9?raw)
