---
title: "Get provisioning profile by ID"
method: GET
path: "/v2/provisioning-profiles/{id}"
tags: ["apps_management_Provisioning Profiles"]
---

# Get provisioning profile by ID

`GET /v2/provisioning-profiles/{id}`

⚠️ Apple devices only.

Retrieve a single iOS provisioning profile record by its Esper-assigned UUID, including a signed download URL for the profile file.
Returns the full metadata for the profile — App ID, team identifier, profile type, expiration date, and audit fields — along with a download_url for downloading the .mobileprovision file. Use this endpoint to confirm profile details before attaching to a blueprint or to retrieve the download link for the current profile file.

**About Get Provisioning Profile by ID**

Each provisioning profile in Esper is identified by a UUID assigned at upload time. The profile record represents the app identity (App ID) level of the hierarchy; individual uploads of the same App ID are tracked as versions under the profile and accessible via the /versions sub-resource. This endpoint returns the profile-level record, not a specific version.

**Key Fields / Path Parameters**

id (required) — Esper UUID of the provisioning profile (returned from upload or list endpoint)

download_url (response) — Signed S3 URL for downloading the .mobileprovision file; time-limited

app_identifier (response) — Bundle ID of the associated app

profile_type (response) — One of development, ad-hoc, app-store, or enterprise

expiration_date (response) — When the profile authorization expires

**Common Use Cases**

Confirming profile details (type, expiration, App ID) before associating with a blueprint
Generating a fresh signed download URL for the profile file
Validating that a specific profile ID exists and is accessible before referencing it in blueprint configuration

**Best Practices**

Use the list endpoint (GET /v2/provisioning-profiles) to find the id if it isn't already known

The download_url is a time-limited signed URL; retrieve it fresh when an actual download is needed rather than caching it

## Path parameters

- `id` string, uuid, required — Unique identifier for the provisioning profile

## Response `200`

Success

- object
  - `content` AppsManagementProvisioningProfileWithDownloadResponse
    - `id` string, uuid — Unique identifier for the provisioning profile
    - `version_id` string, uuid — Unique identifier for this specific version of the profile
    - `name` string — Display name of the provisioning profile
    - `team_identifier` string — Apple Developer Team identifier
    - `app_identifier` string — Bundle identifier of the associated app
    - `profile_type` 'development' | 'ad-hoc' | 'app-store' | 'enterprise' — Type of profile (development, distribution, etc.)
    - `expiration_date` string, date-time — When the provisioning profile expires
    - `tenant_id` string, uuid — Tenant that owns this provisioning profile
    - `created_at` string, date-time — When the provisioning profile was first created
    - `updated_at` string, date-time — When this version was last updated
    - `created_by` string — User who created the provisioning profile
    - `updated_by` string — User who created this version
    - `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)
