---
title: "Upload an application to enterprise"
method: POST
path: "/enterprise/{enterprise_id}/application/upload/"
tags: ["esper_cloud_api_Application"]
---

# Upload an application to enterprise

`POST /enterprise/{enterprise_id}/application/upload/`

⚠️ Android only. This endpoint accepts APK files and applies exclusively to Android-managed devices. See iOS and Windows application endpoints for **Workflow**s.

Uploads an APK file to the enterprise application library, creating or updating an application and version record.
Accepts a multipart/form-data payload with a single required field (app_file), and returns the resulting Application object including the newly created version upon success. This is the primary mechanism for adding privately distributed APKs to the Esper platform for enterprise deployment.

About Upload Application

The upload endpoint ingests an APK binary and parses it to extract metadata such as package name, version code, and SDK requirements, automatically associating the upload with the correct application record (creating one if none exists for the package name). The returned Application object includes the new version in its versions array. 

Key Fields

app_file — required; the binary APK file to upload, sent as multipart/form-data

**Common Use Cases**

Add a new internal or privately distributed app to the enterprise library for managed deployment
Upload a new version of an existing app, updating the version catalog without creating a duplicate application record
Automate app updates as part of a CI/CD pipeline that pushes new APK builds to Esper. Use the Operations endpoint for large deployments.

**Best Practices**

Ensure the APK is valid and signed before uploading — malformed or unsigned APKs will result in a 400 Bad Request
Store the application_id and version_id from the response to use directly in install commands without a subsequent lookup

**Workflow**

Build and sign your APK
POST the APK binary as app_file in a multipart/form-data request to this endpoint
Retrieve the application_id and new version_id from the response, then proceed with install **Workflow**s

## Path parameters

- `enterprise_id` string, required

## Response `201`

successful operation

- object
  - `application` EsperCloudApiApplication
    - `id` string, uuid
    - `versions` EsperCloudApiApplicationVersion[]
      - `id` string, uuid
      - `version_code` string
      - `build_number` string, nullable
      - `hash_string` string
      - `min_sdk_version` string, nullable
      - `target_sdk_version` string, nullable
      - `download_url` string, url
      - `icon_url` string, url
      - `release_name` string
      - `release_comments` string
    - `application_name` string, required
    - `package_name` string, required
    - `developer` string, nullable
    - `category` string, nullable
    - `content_rating` string, decimal
    - `compatibility` string, nullable
    - `created_on` string, date-time
    - `updated_on` string, date-time
    - `is_active` boolean
    - `is_hidden` boolean
    - `enterprise` string, url, required

## Other responses

- `400` — Bad request
- `401` — Authorization information is missing or invalid.
- `403` — Forbidden, no permission to perform this action.
- `415` — Unsupported media type.
- `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/versions/e1f64cbb488e/schema)
