# Devices

Attached devices, their details and apps.

Attached devices, their details and apps.

## listDevices

`GET /v1/devices`

List devices this key may see

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `platform` | query | no | `ios`, `android` |  |
| `kind` | query | no | `physical`, `simulator`, `emulator`, `remote` |  |
| `label` | query | no | string |  |
| `state` | query | no | `ready`, `busy`, `leased`, `locked`, `needsSetup`, `connecting`, `disconnected` |  |

| Response | Means |
|---|---|
| 200 | Devices. |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`list_devices`](/reference/mcp/list-devices/).

## getDevice

`GET /v1/devices/{deviceId}`

One device with capabilities and health

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `deviceId` | path | yes | string | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |
| `Silan-Lease` | header | no | string | Lease token when the device is claimed. |

| Response | Means |
|---|---|
| 200 | Device. `DeviceDetail` |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`get_device`](/reference/mcp/get-device/).

## updateDevice

`PATCH /v1/devices/{deviceId}`

Rename or relabel a device

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `deviceId` | path | yes | string | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |

Request body: `application/json`.

| Field | Type | What it is |
|---|---|---|
| `name` | string |  |
| `labels` | array of string |  |

| Response | Means |
|---|---|
| 200 | Updated. `Device` |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

## listApps

`GET /v1/devices/{deviceId}/apps`

Installed apps

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `deviceId` | path | yes | string | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |
| `Silan-Lease` | header | no | string | Lease token when the device is claimed. |
| `includeSystem` | query | no | boolean |  |

| Response | Means |
|---|---|
| 200 | Apps. |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`list_apps`](/reference/mcp/list-apps/).

## installApp

`POST /v1/devices/{deviceId}/apps`

Install an app build (.ipa, .app, or .apk) from a path on this Mac

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `deviceId` | path | yes | string | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |
| `Silan-Lease` | header | no | string | Lease token when the device is claimed. |
| `Prefer` | header | no | `respond-async` | Send `respond-async` to get a job instead of waiting. |

Request body: `application/json`.

| Field | Type | What it is |
|---|---|---|
| `path` | string | Absolute path on this Mac. Refused over the relay. |
| `launch` | boolean |  |

| Response | Means |
|---|---|
| 200 | Installed. `InstalledApp` |
| 202 | Accepted as a job. `Job` |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`install_app`](/reference/mcp/install-app/).

## uninstallApp

`DELETE /v1/devices/{deviceId}/apps/{appId}`

Uninstall an app

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `deviceId` | path | yes | string | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |
| `appId` | path | yes | string | iOS bundle ID or Android package name. |
| `Silan-Lease` | header | no | string | Lease token when the device is claimed. |

| Response | Means |
|---|---|
| 204 | Removed. |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`uninstall_app`](/reference/mcp/uninstall-app/).