---
title: "Get unified list of iOS apps (IPAs and Webclips) for a tenant"
method: GET
path: "/v2/apps"
tags: ["apps_management_App List"]
---

# Get unified list of iOS apps (IPAs and Webclips) for a tenant

`GET /v2/apps`

⚠️ Apple devices and Windows only. This endpoint returns Window or iOS app records only. Android apps use the Application V1 API (https://api.esper.io/openapi/esper_cloud_api_application-v1).Retrieves a unified, paginated list of all iOS and Windows apps in the tenant library, spanning MSI, IPA-based tenant apps, and webclips, in a single normalized view.

**About List Windows or iOS Apps (Unified)**

This endpoint provides a single list across iOS and Windows app types — TENANT_IOS, WEBCLIP, and TENANT_WINDOWS entries — surfaced as AppInfo records. Unlike the type-specific endpoints (GET /api/v2/tenant-apps and GET /api/v2/webclips), this unified view is useful when you need a single inventory sweep of all deployable iOS app entries regardless of type. The app_type filter can be used to scope results to a specific type. The AppInfo schema covers both IPA and webclip-specific fields — fields like url, is_full_screen, and is_removable are relevant for webclips, while file_size_in_kb, build_number/version_code, and min_sdk_version apply to IPA-based apps. The legacy_format parameter controls whether the response uses build_number (default) or version_code.

**Key Query Parameters**

app_type — Filter by app type (e.g., TENANT_IOS, WEBCLIP, TENANT_WINDOWS)

search — Search by app name or label

ordering — Sort by name, created_at, or updated_at

legacy_format — true (default): build_number; false: version_code

**Common Use Cases**

Generating a complete inventory of all deployable iOS apps and webclips in the tenant

Searching by name across both app types in a single call before blueprint configuration

Auditing app library contents by type using the app_type filter

**Best Practices**

Use app_type to filter when only IPAs or only webclips are needed — the combined list can be large for tenants with many apps

Use legacy_format=false in new integrations to consume version_code

For type-specific detail (e.g., presigned download URL or webclip icon), follow up with the appropriate scoped endpoint

## Query parameters

- `limit` number
- `offset` number
- `search` string
- `ordering` 'name' | 'created_at' | 'updated_at'
- `app_type` string
- `legacy_format` boolean

## Response `200`

Success

- object
  - `content` object
    - `count` integer — number of results returned
    - `prev` string — URL for previous page of results
    - `next` string — URL for next page of results
    - `results` AppsManagementAppInfo[]
      - `app_id` string — Unique identifier for the app.
      - `app_version_id` string — Unique identifier for the app version.
      - `app_type` string — Type of the app.
      - `tenant_id` string — Identifier for the tenant.
      - `name` string — Name of the app to show on console.
      - `label` string — Label for the app to show on device.
      - `icon_url` string, uri — URL to the app icon.
      - `package_name` string — Unique identifier for the app bundle.
      - `is_removable` boolean — Indicates if the app can be removed.
      - `is_full_screen` boolean — Indicates if the app runs in full-screen mode.
      - `url` string, uri — URL to access the app.
      - `file_size_in_kb` integer — Size of the app in kilobytes.
      - `release_notes` string — Release notes for the app version.
      - `description` string — Description of the app.
      - `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.
      - `version_name` string — Version name of the app.
      - `min_sdk_version` string — Minimum SDK version required to run the app.
      - `created_at` string, date-time — Timestamp when the app was created.
      - `created_by` string — User who created the app entry.
      - `updated_at` string, date-time — Timestamp when the app was last updated.
      - `updated_by` string — User who last updated the app entry.

## Other responses

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