---
title: "Upload tenant app for a tenant"
method: POST
path: "/v2/tenant-apps"
tags: ["apps_management_Tenant Apps"]
---

# Upload tenant app for a tenant

`POST /v2/tenant-apps`

Uploads a new iOS or Windows app file to the tenant's app catalog.

Accepts a multipart file upload along with a platform value and returns the newly created app and version identifiers.

**About Upload Tenant App**

⚠️ iOS and Windows only. This is how enterprise apps for iOS and Windows devices get into Esper for later assignment to blueprints or installation via commands. If the appId already exists for a re-uploaded app, this call creates a new version under that app rather than a duplicate app record; confirm which behavior applies for your platform before assuming either outcome.

**Key Fields / Request Body**

platform — the target platform, APPLE or WINDOWS, required

file — the app binary to upload, required

**Common Use Cases**

Publishing a new iOS or Windows enterprise app for the first time

Uploading a new build of an already-published app as a new version

**Best Practices**

Capture both the id and version_id from the upload response immediately, since later calls may need either one

Confirm the platform value matches the actual file type before uploading, since this determines how the app is validated and distributed

**Workflow**

Prepare the app file and confirm its target platform

POST the file as multipart form data to this endpoint

Capture the returned id and version_id

Reference the app in a blueprint version or install command to distribute it to devices

## Response `200`

Success

- object
  - `content` AppsManagementTenantAppUploadResponse
    - `id` string
    - `version_id` string
    - `app_name` string
    - `platform` 'APPLE' | 'WINDOWS'
    - `tenant_id` string
    - `package_name` string
    - `created_at` string, date-time
    - `created_by` string
    - `updated_at` string, date-time
    - `updated_by` string

## Other responses

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