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

# Delete tenant app version by ID

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

Permanently deletes a single version of a tenant-uploaded iOS or Windows app.

Removes the specified versionId from the app identified by appId. This deletes only that version's record, not the parent app or its other versions.

**About Delete Tenant App Version**

⚠️ iOS and Windows only. Tenant Apps are enterprise apps uploaded directly for iOS or Windows devices, distinct from Android enterprise apps, which are managed through the separate Application V1 API. Deleting a version removes it from the catalog, so it can no longer be installed on new devices, though devices that already have it installed are not automatically affected.

**Common Use Cases**

Removing an outdated or broken app version from the catalog

Cleaning up test or pre-release versions after a stable version has been published

**Best Practices**

Confirm no active blueprints or pending install commands reference the version before deleting it

Delete older versions only after confirming devices have moved to a newer version, if version continuity matters for your fleet

**Workflow**

Call GET /v2/tenant-apps/{appId}/versions to confirm the versionId you intend to delete

DELETE the version using its appId and versionId

Confirm the deletion with a follow-up GET on the versions list

## Path parameters

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

## 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)
