Skip to main content
GET
JavaScript
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. If a running attempt passes its background deadline without a terminal update, this endpoint reports it as failed with errorClass: "timeout". list-apps remains authoritative for what is actually installed — a succeeded entry here is a strong signal, not a guarantee. 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 durable install records, 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
Terminal (succeeded/failed) records are returned for roughly 15 minutes after their last update. A running record that passes its background deadline is projected as failed with errorClass: "timeout" and remains visible for roughly 15 minutes after that deadline. Older records are omitted from this endpoint’s response.
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"