---
title: "Delete provisioning profile version by ID"
method: DELETE
path: "/v2/provisioning-profiles/{id}/versions/{versionId}"
tags: ["apps_management_Provisioning Profiles"]
---

# Delete provisioning profile version by ID

`DELETE /v2/provisioning-profiles/{id}/versions/{versionId}`

⚠️ Apple devices only.

Delete a specific version of an iOS provisioning profile by profile UUID and version UUID, removing it from the tenant's profile inventory.
On success, returns the deleted version record. A version that is currently referenced by a published blueprint cannot be deleted — remove the profile from the blueprint first before deleting the version. Deletion removes the version from Esper's records; the .mobileprovision file will no longer be accessible via Esper.

**About Delete Provisioning Profile Version**

Esper stores provisioning profiles as parent records with one or more versioned uploads underneath. Deletion operates at the version level, not the profile level — deleting all versions of a profile does not automatically remove the parent profile record. This granular control allows teams to retire expired versions while keeping the profile record intact for future uploads. The Console enforces a guard against deleting versions attached to published blueprints; the API similarly returns an error in that case.

**Key Fields / Path Parameters**

id (required) — Esper UUID of the parent provisioning profile

versionId (required) — Esper UUID of the specific version to delete

Response body contains the deleted version's full record (same schema as the GET version endpoint)

**Common Use Cases**

Removing an expired profile version to keep the tenant's profile inventory clean

Deleting a version uploaded by mistake before it is attached to any blueprint

Cycling out old versions after uploading a renewed profile and updating blueprints to reference the new version

**Best Practices**

Confirm the version is not referenced by any published blueprint before calling this endpoint; the API will reject the deletion if it is

Use the versions list endpoint (GET /v2/provisioning-profiles/{id}/versions) to audit versions before deleting

When rotating expired profiles, follow this order: upload renewal → update blueprint → delete expired version

**Workflow**

Use GET /v2/provisioning-profiles/{id}/versions to identify the versionId to remove

Confirm the version is not attached to any published blueprint (detach it first if so)

Call DELETE /v2/provisioning-profiles/{id}/versions/{versionId}

Verify deletion by confirming the version no longer appears in the versions list

## Path parameters

- `id` string, uuid, required — Unique identifier for the provisioning profile
- `versionId` string, uuid, required — Unique identifier for the specific version of the provisioning profile to delete

## Response `200`

Success

- object
  - `content` AppsManagementProvisioningProfileVersionWithDownloadResponse
    - `id` string, uuid — Primary key and unique identifier for this version
    - `profile_id` string, uuid — Foreign key reference to the parent ProvisioningProfile
    - `uuid` string — Apple's UUID for this specific provisioning profile version
    - `name` string — Display name of the provisioning profile version
    - `sha256_hash` string — SHA256 hash of the provisioning profile file for duplicate detection
    - `creation_date` string, date-time — When Apple created this provisioning profile (from .mobileprovision file)
    - `expiration_date` string, date-time — When this provisioning profile expires (from Apple)
    - `time_to_live` integer — Days until expiration from creation date
    - `provisions_all_devices` boolean — Whether this profile provisions all devices (enterprise profiles)
    - `is_xcode_managed` boolean — Whether this profile is managed by Xcode automatically
    - `platforms` string — JSON array of supported platforms (iOS, macOS, etc.)
    - `entitlements` string — JSON object of app entitlements and capabilities
    - `developer_certificates` string — JSON array of developer certificates included in this profile
    - `tenant_id` string, uuid — Tenant that owns this provisioning profile version
    - `created_by` string — User identifier who uploaded this version
    - `updated_by` string — User identifier who last modified this version record
    - `created_at` string, date-time — Timestamp when this version record was created in the database
    - `updated_at` string, date-time — Timestamp when this version record was last modified
    - `download_url` string, uri — Signed URL for downloading the provisioning profile file

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `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)
