Skip to main content
GET
List app installs
Reports the backend’s view of background app-install attempts on this device — one entry per (platform, appId) pair that has an install-app attempt in progress or recently finished.
status reflects the install attempt, not device ground truth. It is running from the moment install-app returns 202, then flips to succeeded or failed once the background download + install finishes. list-apps remains authoritative for what is actually installed — a succeeded entry here is a strong signal, not a guarantee, and a device that goes offline mid-install can leave an entry running indefinitely until it is evicted. On iOS MDM devices specifically, succeeded only means the MDM InstallApplication command was accepted by the device’s MDM channel — the device may still be downloading or installing, or may yet fail on-device — so list-apps remains the authoritative check there too.
Unlike most Tools/Apps endpoints, this one is not gated on device readiness — it answers from an in-memory job table, not from the device, so it also works while the device is offline, crashed, or otherwise unreachable. That’s the situation this endpoint exists to surface: an install that fails because the device dropped mid-download has no other way to be observed by a caller. On failure, errorClass narrows down what went wrong from a small closed set:
  • download_failed — fetching the app asset failed
  • adb_install_failed — the download succeeded but adb install-multiple failed
  • timeout — the attempt exceeded its background time budget
  • panic — the install goroutine panicked
  • failed — anything else
Records are held in memory only and are lost on a service restart. Terminal (succeeded/failed) records are kept for roughly 15 minutes after their last update, then evicted; a running record is evicted after roughly 6 minutes without an update (longer than the install’s own background time budget, so this only ever drops genuine leaks, not slow-but-live installs).
Records are scoped to the tenant that owned the device when the install attempt started: after an ownership transfer (e.g. reassignment or a BYOD re-pair), the new owner cannot see the previous tenant’s install attempts, even while those records are still within their retention window above.

Authorizations

Authorization
string
header
required

Bearer token via Authorization header

Headers

X-Device-Display-ID
integer<int64>
default:0
Required range: x >= 0

Path Parameters

deviceId
string
required

Response

OK

installs
object[] | null
required
$schema
string<uri>
read-only

A URL to the JSON Schema for this object.

Example:

"https://example.com/schemas/ListAppInstallsOutputBody.json"