# 云手机本地 API

通过 MoreLogin 本地 API 管理云手机实例。基础URL: http://127.0.0.1:40000。本地 API 与 MoreLogin 桌面应用一起运行在您的计算机上。所有请求必须来自同一台计算机。

Version: 2026-09-05

## Servers

MoreLogin Local 端点
```
http://127.0.0.1:40000
```

## Security

## Download OpenAPI description

 - [云手机本地 API](https://guide.morelogin.com/_bundle/@l10n/zh/API%20Reference/Cloud%20Phone/local-api.yaml)

## Cloud Phone Management

 - [POST /api/cloudphone/setTags/batch](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/setcloudphonetagslocal.md): 覆盖所选资源的标签。需要标签管理权限及目标资源访问权限。按团队内的精确名称匹配标签：不存在则创建，已存在则复用并更新颜色；颜色变化也会影响使用同一标签的其他资源。请求中的标签名称不能重复。`tags` 传空数组仅清空标签关联，保留标签定义与分组。同步完成，`data` 为 null。超时后先查询目标资源及 `/api/envtag/all` 再决定是否重试；接口没有幂等键。 已记录的业务错误码：`
 - [POST /api/cloudphone/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/pageusingpost.md): 分页列出团队可见的云手机。 - **副作用**：无。只读。可带退避安全重试。 - **说明**：会返回所有设备类型的云手机。托管代理与动态代理的密码会从响应中移除。 - **用途**：本接口与 `/cloudphone/info` 是开关机、一键新机和开通这几个异步操作的完成信号。
 - [POST /api/cloudphone/create](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/createusingpost.md): 购买并开通一台或多台云手机。 - **前置条件**：套餐必须有剩余额度，且当日创建配额未用尽。`country`、`timezone`、`language` 会按所选机型支持的列表校验，不支持的组合会被拒绝而不是被静默调整。经度限 ±180、纬度限 ±90。所选 SKU 不支持手机号时，传入的手机号会被丢弃。包月 SKU 可通过 API 创建，但必须是 [`/api/cloudphone/mont
 - [POST /api/cloudphone/powerOn](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/poweronusingpost.md): 启动云手机。 - **前置条件**：云手机当前必须处于已关机状态。以下情况会被拒绝：SKU 已下架或处于维护、云手机被其他成员占用、代理仍在检测中、账户欠费或云手机已停用、包月已到期，以及免费时长、并发额度、正余额三者都不可用。部分机型还要求使用最新版 Windows 客户端。 - **副作用**：把云手机标记为启动中、占用给调用成员，并预留一个并发额度或开始消耗时长。响应会说明用的是哪一种。 -
 - [POST /api/cloudphone/restart](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/restartcloudphone.md): 重启整台云手机。终止正在执行的 AI 任务，并清理进行中的应用安装记录。 通过 `id` 操作单台云手机。调用方须有该手机的操作权限；手机须已激活、未释放、不在转移中、处于开机状态（`envStatus=4`），且未被其他成员占用。成功返回 `data: null`，不返回任务 ID，仅表示提交成功，不表示操作完成。限时轮询 `/api/cloudphone/info` 或 `/api/cloud
 - [POST /api/cloudphone/reset](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/resetcloudphone.md): **数据清理警告：** 重置会清理手机数据和应用安装记录，并终止正在执行的 AI 任务。请先备份所需数据；该操作不同于一键新机。 通过 `id` 操作单台云手机。调用方须有该手机的操作权限；手机须已激活、未释放、不在转移中、处于开机状态（`envStatus=4`），且未被其他成员占用。成功返回 `data: null`，不返回任务 ID，仅表示提交成功，不表示操作完成。限时轮询 `/api/cl
 - [POST /api/cloudphone/powerOff](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/poweroffusingpost.md): 关闭云手机。 - **前置条件**：云手机必须处于启动中或已开机。被其他成员占用时，或正在一键新机、重启、重置时，无法关机。 - **副作用**：停止计费、释放并发额度、结算用量，并让本次会话签发的连接凭据失效。对仍在启动中的云手机执行关机，会改为中断启动。 - **完成信号**：计费与本地状态在同步事务内结算完成；设备关机随后进行，请用 `/cloudphone/info` 确认。 - **重试
 - [POST /api/cloudphone/edit/batch](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/editbatchusingpost.md): 更新一台或多台云手机的配置。 - **前置条件**：云手机必须属于你的团队。地区、语言和坐标会按机型校验，规则与创建时一致。把云手机移入你没有权限的分组会被拒绝。 - **副作用**：覆盖云手机设置并刷新 GPS 配置；可能创建标签绑定。不扣费，不影响并发额度。 - **完成信号**：同步，相同请求体幂等。
 - [POST /api/cloudphone/setProxy](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/setproxy.md): 为一台或多台云手机绑定代理。 - **前置条件**：`ids` 与 `uniqueIds` 至少提供一个。云手机必须属于你的团队，**不需要**已开机。传入的 `proxyId` 必须存在，否则调用被拒绝。 - **副作用**：当 `proxyId` 省略或为 `0` 时，会复用连接信息完全相同的已有代理；**若没有匹配项，则在你的团队中新建一条代理记录**。代理检测状态会被重置，上一个代理会被记
 - [POST /api/cloudphone/delete/batch](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/deleteusingpost.md): 释放一台或多台云手机。 - **前置条件**：云手机不能处于转移中，且团队对它们没有未支付订单。云手机不需要先关机。 - **副作用**：云手机实例立即释放。从未激活的云手机会被直接删除；已激活的会保留为已停用记录，因此仍会出现在列表里并带有停用状态。 - **完成信号**：同步。 - **重试**：云手机逐台处理，遇到第一个失败即中止，因此批量可能部分生效。重试前请重新读取 `/cloudpho
 - [POST /api/cloudphone/newMachine](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/onenewusingpost.md): 原地更换云手机的设备标识（一键新机）。 - **前置条件**：云手机必须已开机且未被其他成员占用。传入的品牌与机型必须是该云手机 SKU 支持的。**本操作会消耗当日云手机创建配额**，与 `/cloudphone/create` 用的是同一个配额。 - **副作用**：向设备下发新的品牌与机型、清空该机的已安装应用记录、重置手机号、并中止正在运行的 AI 任务。具体重新生成的标识范围取决于设备类
 - [POST /api/cloudphone/info](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/infousingpost.md): 返回单台云手机的完整详情，含分组名与标签名。 - **副作用**：无。只读。可带退避安全重试。 - **用途**：异步操作的主要状态查询接口。`envStatus` 区分新建、创建失败、已关机、启动中、已开机、重置中、重启中、一键新机中；异步操作失败时，原因由 `errorCode` 与 `errorMsg` 给出。
 - [POST /api/cloudphone/queryByAndroidId](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/querybyandroidid.md): 通过设备上报的 Android ID 查找云手机。 - **副作用**：无。只读。可带退避安全重试。 云手机不需要已开机。 - **返回**：与 `/cloudphone/info` 相同的详情结构。 - **边界情况**：`androidId` 为空时返回成功但 `data` 为 null，而不是参数校验错误；若多台云手机共用同一个 Android ID，则任意返回其中一台。
 - [POST /api/cloudphone/enableRoot](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/enableroot.md): 打开或关闭云手机的全局 ROOT 开关。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持；不兼容机型调用成功但无效果。 - **副作用**：与 `/cloudphone/app/openRoot` 不同，这个设置**会被持久化**到云手机的设置记录，然后作为设备级开关下发给设备服务。 - **完成信号**：同步。MoreLogin 不会重启云手机；变更何时在设备上生效由设
 - [POST /api/cloudphone/screenCap](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/screencap.md): 截取云手机屏幕并返回下载地址。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持，不兼容机型会拒绝该调用。 - **副作用**：在部分机型上，截图文件在拍摄后会从设备中删除。 - **完成信号**：同步。响应包含临时图片下载地址。 - **注意**：在部分机型上返回的过期时间是响应时刻起固定一小时、`success` 恒为 true——它不是真实的签名有效期。请及时下载，不
 - [POST /api/cloudphone/screenCapBase64](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/screencapbase64.md): 截取云手机屏幕并以 base64 内联返回图片。 - **前置条件**：云手机必须已开机且未被其他成员占用。**仅兼容机型支持**——不兼容机型都会拒绝该调用。 - **完成信号**：同步。失败时响应携带错误信息而不是图片数据，所以解码前请先检查 `success`。 - **机型支持**：文档记载仅 Android 12 与 Android 15 镜像可用。 - **用途**：当你不想依赖设备服
 - [POST /api/cloudphone/brand/models](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/cloud-phone-management/listcloudphonebrandsandmodelslocal.md): 列出某个云手机 SKU 支持的设备品牌与机型。 - **副作用**：无。只读。可带退避安全重试。 不涉及具体云手机。 - **用途**：在调用 `/cloudphone/create` 或 `/cloudphone/newMachine` 之前选一个合法的 `brand` 与 `modelId`——这两个接口都会拒绝本接口未返回的组合。 - **说明**：未知的 `skuId` 返回空列表而不是报
## Live Streaming

 - [POST /api/cloudphone/live/start](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/live-streaming/startcloudphonelivestreaminglocal.md): 在云手机上开始直播一个已上传的 MP4 文件。 - **前置条件**：云手机必须已开机且未被其他成员占用，且机型必须支持直播。`fileId` 必须指向一个已完成上传的直播素材文件，其他情况会以无效或已失效被拒绝。 - **完成信号**：**已受理，未完成。** 响应仅表示设备服务已接受请求。请轮询 `/cloudphone/live/status` 直到 `liveStatus` 为 `1`。
 - [POST /api/cloudphone/live/status](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/live-streaming/getcloudphonelivestreamingstatuslocal.md): 查询云手机当前是否正在直播。 - **前置条件**：云手机必须属于你的团队，且机型必须支持直播。与开始和停止不同，本接口**不要求**云手机已开机或被你占用。 - **副作用**：无。只读。可带退避安全重试。 - **取值**：`liveStatus` 为 `0`（未直播）或 `1`（直播中）。**没有失败状态**——未生效的开始只会一直停在 `0`，所以轮询必须设超时上限。 已记录的业务错误码
 - [POST /api/cloudphone/live/end](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/live-streaming/stopcloudphonelivestreaminglocal.md): 停止云手机上的直播。 - **前置条件**：云手机必须已开机且未被其他成员占用，且机型必须支持直播。**不校验当前是否真的在直播**——无论如何都会下发停止命令。 - **完成信号**：已受理，未完成。请轮询 `/cloudphone/live/status` 直到 `liveStatus` 为 `0`。 - **重试**：效果幂等；重复调用只是再发一次停止命令。 已记录的业务错误码：`3330
## Account & Quotas

 - [GET /api/balance](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/account-and-quotas/getaccountandcloudphonequotaslocal.md): 返回团队钱包余额与云手机使用额度。 - **前置条件**：调用成员需要费用权限。钱包按团队查询，因此这些数字是团队级的，不是成员级的。 - **副作用**：无。只读。可带退避安全重试。 - **单位**：`balance` 是钱包余额，单位为**分**，不是元。`remainingDuration` 是云手机剩余分钟数，`remainingConcurrency` 是并发槽位数；两者都会被截断到
## ADB

 - [POST /api/cloudphone/updateAdb](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/adb/updateadbusingpost.md): 打开或关闭一台或多台云手机的 ADB 访问。 - **前置条件**：只考虑 SKU 支持 ADB 的云手机；若传入的云手机都不符合，调用被拒绝。从未分配过实例的云手机会被跳过。 - **副作用**：向设备服务设置 ADB 开关，并把设备服务接受的那些云手机持久化。 - **部分失败**：如果一部分成功、一部分失败，**接口仍然报错**。请把失败理解为「可能有些云手机已经被改动」，并重新读取状态。
 - [POST /api/cloudphone/batchAdbInfo](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/adb/batchadbinfo.md): 批量获取最多 200 台云手机的 ADB 连接信息。 - **前置条件**：云手机必须属于你的团队，**不需要**被你占用。只有已开机且 SKU 支持 ADB 的云手机才会去取连接信息。 - **副作用**：无。只读。可带退避安全重试。 - **部分结果**：结果与请求的 ID 一一对应，**整体永不失败**。取不到信息时 `remark` 会说明原因——云手机不存在、未开机、不支持 ADB，或设
 - [POST /api/cloudphone/exeCommand](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/adb/executeshellcommand.md): 在云手机上执行 shell 命令并返回输出。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：完全取决于命令本身。MoreLogin 不做任何存储，也**没有命令白名单、没有长度限制**；命令以什么权限运行由设备服务决定。如果命令需要 root，请单独开启全局 ROOT。 - **完成信号**：同步——`data` 就是命令输出，不是任务 ID。 - **重试**：
## Files

 - [POST /api/cloudphone/uploadFile](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/fileuploadusing.md): 把本地文件直接上传到云手机（旧版分片流程）。 - **前置条件**：云手机必须已开机且未被其他成员占用。从签名地址步骤取得的上传码是一次性的。 - **完成信号**：响应仅表示 Local API 已接受此次传输。**不暴露任务 ID，也没有轮询状态**，因此无法观察进度。 - **改用**：当你需要可观察的进度与重试处理时，请走 `/api/cloudphone/upload/file/sign
 - [POST /api/cloudphone/upload/file/signedUrl](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/getcloudphoneuploadsignedurllocal.md): 申请一个预签名 URL，用于上传将要发送给云手机的文件。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **完成信号**：同步。**预签名 URL 有效期为一小时。** 用 `PUT` 把文件内容上传到该地址，然后调用 `/api/cloudphone/upload/file` 登记。 - **说明**：临时对象会在 7 天后自动删除。 - **接口面说明**：与 Open AP
 - [POST /api/cloudphone/upload/file](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/uploadcloudphonefilebyurllocal.md): 登记一个已上传的文件，让云手机去下载它。 - **前置条件**：云手机必须已开机且未被其他成员占用，且**该对象必须已经存在于给定 URL**——服务会去探测它，读不到就拒绝请求。直播素材必须是 MP4，且目标机型需支持直播。 - **完成信号**：**已受理，未完成。** 响应返回 `fileId` 和一个进行中状态；请轮询 `/api/cloudphone/upload/file/result
 - [POST /api/cloudphone/upload/file/result](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/getcloudphoneuploadresultlocal.md): 轮询文件上传到云手机的状态。 - **取值**：`0` 上传中，`1` 成功，`2` 失败。 - **空结果**：找不到该 `fileId` 时调用仍然成功，但 `data` 为 null。请把它理解为「尚未可见或已不存在」，而不是失败。 - **开销**：该查询会扫描设备服务的文件列表；请以适度间隔轮询。 - **接口面说明**：与 Open API 的 `/cloudphone/uploadF
 - [POST /api/cloudphone/download](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/downloadcloudphonefilelocal.md): 从云手机下载文件。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：服务端先扫描父目录再启动传输，因此路径不存在会在**这一步**失败，而不是在状态轮询时。目标必须是普通文件，不能是目录。 - **完成信号**：**已受理，未完成。** 响应返回 `downId`；轮询 `/cloudphone/download/result` 直到状态为成功、失败或已取消。该状态
 - [POST /api/cloudphone/download/result](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/getcloudphonedownloadresultlocal.md): 轮询云手机文件导出任务的状态。 - **前置条件**：云手机必须已开机且未被其他成员占用。传入下载请求返回的 `downId`。 - **取值**：**与上传是另一套刻度**——`10` 进行中，`20` 成功，`30` 失败，`40` 已取消。只有成功后 `downUrl` 才有值。 - **说明**：「文件不存在」由下载请求本身报出（它会先扫描父目录），不是由本接口报出。
 - [POST /api/cloudphone/setKeyBox](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/files/setcloudphonekeyboxlocal.md): 在云手机上安装 keybox 证书。 - **前置条件**：`filePath` 必须指向一个 `.xml` 文件，且云手机必须已开机且未被其他成员占用。 - **副作用**：把证书路径交给设备服务。MoreLogin 不做存储，服务也没有定义生效步骤——设备是否需要重启才能让证书生效属于设备行为。 - **完成信号**：设备服务同步受理。没有接口能回报已安装的证书。
## Apps

 - [POST /api/cloudphone/app/install](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/installcloudphoneapplocal.md): 从团队应用库把应用安装到云手机。 - **前置条件**：云手机必须已开机且未被其他成员占用。应用必须已存在于团队应用库或公共应用市场——用 `appVersionId` 指定，或用 `packageName` 加 `versionCode`。该应用还必须已上传到这台云手机可访问的应用库，否则安装失败。 - **限流**：每台云手机每秒最多一次安装，更快的第二次调用会被拒绝。 - **完成信号**：
 - [POST /api/cloudphone/app/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/listcloudphoneappslocal.md): 列出可安装到云手机的应用。 - **副作用**：无。只读。可带退避安全重试。 不涉及具体云手机，因此不要求云手机处于运行状态。 - **返回内容**：公共应用市场——全局可用的应用，加上定向对你团队开放的应用。每条记录的版本在 `appVersionList` 中按新版在前排列；取 `appVersionList[].id` 作为 `/cloudphone/app/install` 的 `appV
 - [POST /api/cloudphone/team/app/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/listteamcloudphoneappslocal.md): 列出你团队自有的应用库，含预装应用。 - **副作用**：无。只读。可带退避安全重试。 - **返回内容**：与 `/cloudphone/app/page` 是不同的数据源——这些是你团队上传的应用，以扁平结构返回（一行一个应用版本），而不是按版本嵌套。每条记录带审核状态；当有更新在进行中时，状态字段描述的是**正在更新的那个版本**，不是当前生效的版本。 - **说明**：按无法识别的设备服务
 - [POST /api/cloudphone/team/app/delete](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/deleteteamcloudphoneapplocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 删除团队应用记录及安装范围，不会卸载手机上已安装的应用。超时后不要自动重试，应先查询团队应用列表。 **所需权限**: `EXTENSION_DELETE`. 已记录的业务错误码：`33354`。 各错误码的含义见 [Erro
 - [POST /api/cloudphone/team/app/updateGroup](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/updateteamcloudphoneappgrouplocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 更新有权限的安装范围。`isAll=false` 时必须提供非空 `groupIds`，分组须属于当前团队。保存范围不代表设备已完成安装。 **所需权限**: `EXTENSION_EDIT`. 已记录的业务错误码：`3335
 - [POST /api/cloudphone/team/app/enable](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/enableteamcloudphoneapplocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 保存是否在开机时预装应用。启用受团队应用数量限制；成功不代表安装完成。 **所需权限**: `EXTENSION_EDIT`. 已记录的业务错误码：`33354`, `33369`。 各错误码的含义见 [Error Codes
 - [POST /api/cloudphone/team/app/updateInstallSetting](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/updateteamcloudphoneappinstallsettinglocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 保存开机安装策略：`1` 覆盖安装，`2` 跳过已有安装。 **所需权限**: `EXTENSION_EDIT`. 已记录的业务错误码：`33354`。 各错误码的含义见 [Error Codes](/zh/api-refer
 - [POST /api/cloudphone/team/app/updateEnableRoot](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/updateteamcloudphoneappenablerootlocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 保存应用 ROOT 开关；服务端配置禁止 ROOT 的包不允许开启。 **所需权限**: `EXTENSION_EDIT`. 已记录的业务错误码：`33354`, `33370`。 各错误码的含义见 [Error Codes]
 - [POST /api/cloudphone/team/app/updateVersion](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/updateteamcloudphoneappversionlocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 选择同包名的其他可用市场版本，仅支持来源于应用市场的团队应用；不能重复选择当前版本。仅保存开机安装流程使用的目标版本，不会立即升级运行中的手机。 **所需权限**: `CLOUD_PHONE_APP_UPDATE_VERSIO
 - [POST /api/cloudphone/team/app/updateSetting](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/updateteamcloudphoneappsettinglocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 更新一项配置：`PERMISSION` 权限、`KEEP_ALIVE` 保活、`AUTO_START` 自启动或 `HIDE` 隐藏。团队最多允许 3 个保活应用。保活和隐藏还会异步下发至符合条件的运行手机；权限和自启动由开机
 - [POST /api/cloudphone/team/app/operate](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/operateteamcloudphoneapplocal.md): v2.70.0 新增。应用必须属于当前团队。使用 `/api/cloudphone/team/app/page` 返回的团队应用 ID，不是云手机 ID 或应用市场 ID。 对安装范围内已开机且当前成员有权访问的手机执行 `START`、`STOP`、`RESTART` 或 `UNINSTALL`。`onlyStartedByMe=true` 进一步按最后开机成员筛选。没有可操作目标时报错。即使个
 - [POST /api/cloudphone/app/installedList](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/listinstalledcloudphoneappslocal.md): 列出云手机当前已安装的应用。 - **前置条件**：云手机必须属于你的团队。与大多数云手机命令不同，这个接口**不要求**云手机被你占用；但它会实时查询设备服务，所以已关机的云手机通常在设备服务侧失败，而不是返回 MoreLogin 的错误。 - **副作用**：无。只读。可带退避安全重试。 - **用途**：`/cloudphone/app/install` 与 `/cloudphone/app
 - [POST /api/cloudphone/app/start](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/startcloudphoneapplocal.md): 启动云手机上已安装的应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **完成信号**：响应仅表示命令已到达设备服务，不代表应用已在前台。没有接口能报告应用是否在运行——请用截图或 shell 命令自行确认。 - **重试**：没有去重，重复调用会再次下发命令。 已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](/zh/a
 - [POST /api/cloudphone/app/restart](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/restartcloudphoneapplocal.md): 重启云手机上的某个应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。**不校验应用是否已安装**——包名不存在时该调用不产生任何效果。 - **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已重启。请通过 `/cloudphone/app/installedList` 或观察设备确认。
 - [POST /api/cloudphone/app/stop](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/stopcloudphoneapplocal.md): 停止云手机上正在运行的应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。不校验应用是否已安装或正在运行。 - **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已停止。
 - [POST /api/cloudphone/app/uninstall](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/uninstallcloudphoneapplocal.md): 从云手机卸载应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：下发卸载并更新该云手机的安装记录。 - **完成信号**：响应仅表示请求已受理。请通过 `/cloudphone/app/installedList` 核实。 已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](/zh/api-reference/
 - [POST /api/cloudphone/app/openRoot](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/appopenroot.md): 为云手机上指定的应用包授予 ROOT。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持；不兼容机型调用会成功但无实际效果。 - **副作用**：把包名白名单下发到设备，并顺带打开 ROOT 总开关。**MoreLogin 不做任何存储**，因此无法通过接口回读该授权。 - **完成信号**：设备服务同步受理。ROOT 何时在设备上生效由设备服务决定；MoreLogin 不
 - [POST /api/cloudphone/app/setHideAccessibilityApp](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/apps/setcloudphoneaccessibilityapphiddenlocal.md): 在一台或多台云手机上，把应用从 Android 无障碍服务列表中隐藏。 - **前置条件**：1 到 100 个云手机 ID，以及 1 到 100 个包名。云手机必须属于你的团队，但**不需要**已开机或被你占用。当所有 ID 都无法解析时，接口返回业务失败而不是抛错。 - **副作用**：名单下发到设备服务，**MoreLogin 不做存储**，因此无法回读。仅兼容机型 支持；不兼容机型调用成功
## Schedules

 - [POST /api/cloudphone/rpa/template/market/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/listmarketplacerpatemplateslocal.md): 列出公共模板市场中的 RPA 模板。 - **副作用**：无。只读。可带退避安全重试。 模板是全局的，不按团队隔离。 - **本地化**：标题和描述按请求语言返回。 - **用途**：`parameter` 是描述模板变量的 JSON 字符串，也是你创建计划时 `templateParameter` 必须遵循的结构。模板未声明变量时它为 null。
 - [POST /api/cloudphone/rpa/template/personal/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/listpersonalrpatemplateslocal.md): 列出你团队自建的 RPA 模板。 - **副作用**：无。只读。可带退避安全重试。 - **返回内容**：与模板市场是不同的库，按团队隔离，标题是单语言纯文本。 - **优先级**：同一个模板 ID 在两个库都存在时，创建计划会解析到你团队自己的模板。 - **用途**：`parameter` 描述模板变量，与市场模板一致。
 - [POST /api/cloudphone/rpa/task/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/listcloudphonerpataskslocal.md): 分页列出团队的 RPA 计划。 - **副作用**：无。只读。可带退避安全重试。 - **用途**：每个计划上的 `taskState` 是 `/cloudphone/rpa/task/cancel` 的完成信号。
 - [POST /api/cloudphone/rpa/task/save](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/savecloudphonerpatasklocal.md): 保存云手机计划任务。 templateParameter Parameter Specification 1. **Parameter Source** Parameter keys must be extracted from the `parameter` field returned by the following APIs: - Get market template pages -
 - [POST /api/cloudphone/rpa/onceTask/save](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/savecloudphonerpaonetimetasklocal.md): 保存云手机，任务已安排。 模板参数 参数规范 1. **参数来源** 参数键必须从以下 API 返回的 `parameter` 字段中提取： - 获取市场模板页面 - 获取个人模板页面 1. **数据结构** - 以 JSON 对象格式提交参数：`{"key1": "value1", "key2": "value2"}` - 最终参数值必须根据业务逻辑在使用前进行反序列化 1. **通用类
 - [POST /api/cloudphone/rpa/task/cancel](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/cancelcloudphonerpatasklocal.md): 取消一个 RPA 计划，以及它下面所有未完成的执行。 - **前置条件**：计划必须存在于你的团队。已完成的计划无法取消；已取消的返回成功但不做任何事。 - **副作用**：计划**同步**标记为已取消，并为每个处于待执行、待下发、执行中或待检查的执行入队一个取消请求。 - **完成信号**：混合。计划状态从 `/cloudphone/rpa/task/page` 读取，但单条执行要通过 `/cl
 - [POST /api/cloudphone/rpa/subTask/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/listcloudphonerpasubtaskslocal.md): 分页列出单次 RPA 执行记录。 - **副作用**：无。只读。可带退避安全重试。 - **状态取值**：`taskState` 为 `0` 等待执行、`1` 正在执行、`2` 排队中、`3` 成功、`4` 失败、`5` 已取消。等待执行与排队中的区别在于该执行是否仍处于其原定触发时间。 - **搜索注意**：按模板标题搜索会先用当前请求语言解析标题，因此与该语言不匹配的标题会返回空页，而不是返回
 - [POST /api/cloudphone/rpa/subTask/detail/{id}](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/getcloudphonerpasubtaskdetaillocal.md): 返回单条 RPA 执行记录的详情。 - **前置条件**：执行记录必须属于你的团队。若执行记录、其所属计划或其云手机已不存在，调用失败。 - **副作用**：无。只读。可带退避安全重试。 - **状态取值**：与 `/cloudphone/rpa/subTask/page` 同一套刻度。 - **说明**：即使代理此后已被删除，也会解析出代理详情，因此历史执行仍能看到它当时用的是什么。
 - [POST /api/cloudphone/rpa/subTask/cancel/{id}](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/schedules/cancelcloudphonerpasubtasklocal.md): 取消单次 RPA 执行，不影响它所属的计划。 - **前置条件**：执行记录必须属于你的团队。已完成的无法取消；已取消的返回成功但不做任何事。 - **副作用**：**只是把取消请求入队——本调用不写任何状态。** 计划继续运行，后续的执行不受影响。要停掉计划本身请用 `/cloudphone/rpa/task/cancel`。 - **完成信号**：异步。请轮询 `/cloudphone/rpa
## Touch

 - [POST /api/cloudphone/touch/click](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/touch/touchclick.md): 点按云手机屏幕上的一个坐标点。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。 - **坐标**：`pos` 必须恰好包含两个值 `[x, y]`。**不会校验是否超出屏幕分辨率**——越界坐标会原样传给设备服务。 - **完成信号**：同步。`data.status` 为 `finish` 表示手势已完成，`pending` 表示设备服务已排
 - [POST /api/cloudphone/touch/doubleClick](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/touch/touchdoubleclick.md): 双击云手机屏幕上的一个坐标点。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。 - **副作用**：在部分机型上由四个触摸事件模拟，间隔固定为 50/100/50 毫秒，因此点按节奏不可配置。`duration` 会被忽略。 - **完成信号**：同步。`data.status` 为 `finish` 或 `pending`，与单次点按一致。
 - [POST /api/cloudphone/touch/longClick](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/touch/touchlongclick.md): 长按云手机屏幕上的一个坐标点。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。 - **取值**：`duration` 是按住时长（毫秒），上限 60000。**没有下限**，因此负值也能通过校验并被传给设备服务。在部分机型上省略 `duration` 时默认为 1000 毫秒。 - **完成信号**：同步。`data.status` 为 `f
 - [POST /api/cloudphone/touch/swipe](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/touch/touchswipe.md): 在云手机屏幕上从一点滑动到另一点。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。 - **取值**：`pos1` 是起点、`pos2` 是终点，各自恰好为 `[x, y]`。`duration` 是手势时长（毫秒），上限 60000；在部分机型上默认 300 毫秒，路径会被插值成五个中间移动事件。 - **完成信号**：同步。`data.st
 - [POST /api/cloudphone/touch/drag](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/touch/touchdrag.md): 在云手机屏幕上从一点拖拽到另一点。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。 - **说明**：**在部分机型上这与滑动是同一套实现**——服务端把拖拽直接转交给滑动逻辑，二者在该设备服务上无法区分。其他机型有独立的拖拽动作。 - **完成信号**：同步。`data.status` 为 `finish` 或 `pending`。 - **
## Monthly Billing

 - [GET /api/cloudphone/monthly/skus](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/monthly-billing/listmonthlycloudphoneskus.md): 返回当前可供调用团队购买的包月云手机商品。 - **副作用**：无。该调用不会占用容量，也不会扣除团队余额。只读，可带退避安全重试。 - **用途**：将返回的 `skuId` 传给 [`/api/cloudphone/create`](/zh/api-reference/cloud-phone/local-api#operation/createUsingPOST)。价格单位为美分，当前包月周期
 - [POST /api/cloudphone/monthly/activate](https://guide.morelogin.com/zh/api-reference/cloud-phone/local-api/monthly-billing/activatemonthlycloudphones.md): 购买并激活 1 至 10 台包月云手机，使用期为 30 天。 - **扣费提醒**：**该操作会真实扣除团队余额。** - **权限**：调用成员必须具有**费用/支付管理**权限，否则返回 `99012`。 - **先创建**：请先通过 [`/api/cloudphone/create`](/zh/api-reference/cloud-phone/local-api#operation/cre
