---
title: "Update tenant app version by ID"
method: PUT
path: "/v2/tenant-apps/{appId}/versions/{versionId}"
tags: ["apps_management_Tenant Apps"]
---

# Update tenant app version by ID

`PUT /v2/tenant-apps/{appId}/versions/{versionId}`

Updates the description field on a specific tenant app version.

This is a narrow update endpoint; the only writable field is description, so it's used for annotating a version rather than changing its binary or platform.

**About Update Tenant App Version**

⚠️ iOS and Windows only. Because the app binary itself is immutable once uploaded, this endpoint only supports updating the version's description. To change the actual app content, upload a new version through POST /v2/tenant-apps instead.

**Key Fields / Request Body**

description — the only writable field on this endpoint

**Common Use Cases**

Adding release notes or context to an already-uploaded version

Correcting a typo in a version's description after upload

**Best Practices**

Do not expect this endpoint to change anything beyond description, including platform or the app binary

**Workflow**

Obtain the appId and versionId for the version you want to annotate

PUT the updated description to this endpoint

Confirm the change with a follow-up GET on the version detail

## Path parameters

- `appId` string, required
- `versionId` string, uuid, required

## Request body

- object — At least one field must be provided. All fields are optional (omitted = leave unchanged). `version_name` and `exe_config` are only accepted for EXE app versions; rejected with 400 otherwise.
  - `description` string
  - `version_name` string — Version name. Only valid for EXE app versions.
  - `exe_config` AppsManagementWindowsExeConfigRequest — EXE configuration. All fields are optional; omitted fields leave existing values unchanged.
    - `install_script` string — PowerShell install script body. Maximum 64 KB.
    - `uninstall_script` string — PowerShell uninstall script body. Maximum 64 KB.
    - `success_criteria` AppsManagementWindowsExeSuccessCriteria
      - `type` 'REGISTRY_VALIDATION' | 'FILE_VALIDATION', required — Discriminator for the validation check performed after install/uninstall. REGISTRY_VALIDATION checks a registry key/value; FILE_VALIDATION checks file existence.
      - `validation_args` union, required
        - AppsManagementWindowsExeRegistryValidationArgs
          - `registry_path` string, required — Registry path. e.g. HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp
          - `registry_key` string, required — Registry value name within the path.
          - `registry_value` string, required — Expected value.
        - AppsManagementWindowsExeFileValidationArgs
          - `file_path` string, required — File path to check.

## Response `200`

Success

- object
  - `content` AppsManagementTenantAppVersionResponse
    - `id` string
    - `app_id` string
    - `app_type` 'TENANT_IOS' | 'TENANT_WINDOWS' | 'TENANT_WINDOWS_EXE' | 'TENANT_WINDOWS_UWP'
    - `tenant_id` string
    - `app_name` string
    - `app_icon_url` string
    - `release_notes` string
    - `description` string
    - `file_size_in_kb` integer
    - `device_family` string[]
    - `version_name` string
    - `build_number` string — Build number of the app. Omitted when legacy_format is false.
    - `version_code` string — Version code of the app (same as build_number). Only present when legacy_format is false.
    - `min_sdk_version` string
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `created_by` string
    - `updated_by` string
    - `is_active` boolean, nullable — Present only when app_type is TENANT_WINDOWS_EXE. True only when install_script, uninstall_script, and success_criteria are all set. Gates downstream install commands — a version with is_active=false cannot be deployed.
    - `success_criteria_type` 'REGISTRY_VALIDATION' | 'FILE_VALIDATION', nullable — Present only when app_type is TENANT_WINDOWS_EXE. Discriminator for the validation check performed after install/uninstall.
    - `success_criteria` union — Present only when app_type is TENANT_WINDOWS_EXE. Contains the validation args. Shape depends on success_criteria_type.
      - AppsManagementWindowsExeRegistryValidationArgs
        - `registry_path` string, required — Registry path. e.g. HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp
        - `registry_key` string, required — Registry value name within the path.
        - `registry_value` string, required — Expected value.
      - AppsManagementWindowsExeFileValidationArgs
        - `file_path` string, required — File path to check.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error

---

[API](https://skmtc.net/esper/apis/esper-api-reference.md) · [All operations](https://skmtc.net/esper/apis/esper-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/esper/esper-api-reference/revisions/e1f64cbb488e/schema)
