# 开放 API

MoreLogin 开放 API 提供了一个全面且对开发者友好的 RESTful 接口，使您能够以编程方式管理浏览器、云手机及相关资源，从而实现无缝自动化、可扩展性和控制。MoreLogin 开放 API 运行在您的计算机上，可通过以下网址访问：https://api.morelogin.com

Version: 2026-09-05

## Servers

MoreLogin Open API endpoint
```
https://api.morelogin.com
```

## Security

### Authorization

[object Object]

Type: http
Scheme: bearer
Bearer Format: JWT

## Download OpenAPI description

 - [开放 API](https://guide.morelogin.com/_bundle/@l10n/zh/API%20Reference/Cloud%20Phone/open-api.yaml)

## Authorization

 - [POST /oauth2/token](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/authorization/oauth2tokenpost.md): 用 API ID 与 API Key 换取 OAuth2 Bearer 令牌。 - **前置条件**：`client_id` 是 API ID，`client_secret` 是 API Key。成员必须处于正常状态，且调用方 IP 必须通过 Open API 的 IP 白名单与黑名单校验。 - **副作用**：无——令牌是自签的，服务端不存储任何东西。 - **有效期**：`expires_in
 - [GET /oauth2/userinfo](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/authorization/oauth2userinfoget.md): 返回当前访问令牌所属的成员与团队。 - **副作用**：无。只读。可带退避安全重试。 - **用途**：检查令牌是否仍然有效、并确认它所属团队的最省成本的方式。
## Cloud Phone Management

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

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

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

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

 - [POST /cloudphone/uploadUrl](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/get.md): 申请一个预签名 URL，用于上传将要发送给云手机的文件。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：不持久化任何东西——URL 是即时生成的。 - **完成信号**：同步。**预签名 URL 有效期为一小时。** 用 `PUT` 把文件内容上传到该地址，然后调用上传登记接口；对象还不存在就去登记会被拒绝。 - **说明**：用同一个文件名再次上传会覆盖上一个对
 - [POST /cloudphone/uploadFile](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/fileuploadusing.md): 登记一个已上传的文件，让云手机去下载它。 - **前置条件**：云手机必须已开机且未被其他成员占用，且**该对象必须已经存在于给定 URL**——服务会去探测它，读不到就拒绝请求。直播素材必须是 MP4，且目标机型需支持直播。 - **完成信号**：**已受理，未完成。** 响应返回 `fileId` 和一个进行中状态；请轮询上传结果接口直到状态为成功或失败。 - **重试**：没有去重；每次调用
 - [POST /cloudphone/uploadFileResult](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/fileuploadresult.md): 轮询文件上传到云手机的状态。 - **前置条件**：云手机必须属于你的团队。这是限制最少的文件接口——不要求云手机已开机或被你占用。 - **取值**：`0` 上传中，`1` 成功，`2` 失败。 - **空结果**：找不到该 `fileId` 时调用仍然成功，但 `data` 为 null。请把它理解为「尚未可见或已不存在」，而不是失败。 - **开销**：该查询会扫描设备服务的文件列表，成本不
 - [POST /cloudphone/download](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/cloudphonedownloadpost.md): 从云手机下载文件。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：服务端先扫描父目录再启动传输，因此路径不存在会在**这一步**失败，而不是在状态轮询时。目标必须是普通文件，不能是目录。 - **完成信号**：**已受理，未完成。** 响应返回 `downId`；轮询 `/cloudphone/download/result` 直到状态为成功、失败或已取消。该状态
 - [POST /cloudphone/download/result](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/cloudphonedownloadresultpost.md): 轮询云手机文件导出任务的状态。 - **前置条件**：云手机必须已开机且未被其他成员占用。传入下载请求返回的 `downId`。 - **取值**：**与上传是另一套刻度**——`10` 进行中，`20` 成功，`30` 失败，`40` 已取消。只有成功后 `downUrl` 才有值。 - **说明**：「文件不存在」由下载请求本身报出（它会先扫描父目录），不是由本接口报出。
 - [POST /cloudphone/setKeyBox](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/files/cloudphonesetkeyboxpost.md): 在云手机上安装 keybox 证书。 - **前置条件**：`filePath` 必须指向一个 `.xml` 文件，且云手机必须已开机且未被其他成员占用。 - **副作用**：把证书路径交给设备服务。MoreLogin 不做存储，服务也没有定义生效步骤——设备是否需要重启才能让证书生效属于设备行为。 - **完成信号**：设备服务同步受理。没有接口能回报已安装的证书。
## Apps

 - [POST /cloudphone/app/install](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappinstallpost.md): 从团队应用库把应用安装到云手机。 - **前置条件**：云手机必须已开机且未被其他成员占用。应用必须已存在于团队应用库或公共应用市场——用 `appVersionId` 指定，或用 `packageName` 加 `versionCode`。该应用还必须已上传到这台云手机可访问的应用库，否则安装失败。 - **限流**：每台云手机每秒最多一次安装，更快的第二次调用会被拒绝。 - **完成信号**：
 - [POST /cloudphone/app/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneapppagepost.md): 列出可安装到云手机的应用。 - **副作用**：无。只读。可带退避安全重试。 不涉及具体云手机，因此不要求云手机处于运行状态。 - **返回内容**：公共应用市场——全局可用的应用，加上定向对你团队开放的应用。每条记录的版本在 `appVersionList` 中按新版在前排列；取 `appVersionList[].id` 作为 `/cloudphone/app/install` 的 `appV
 - [POST /cloudphone/team/app/page](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneteamapppagepost.md): 列出你团队自有的应用库，含预装应用。 - **副作用**：无。只读。可带退避安全重试。 - **返回内容**：与 `/cloudphone/app/page` 是不同的数据源——这些是你团队上传的应用，以扁平结构返回（一行一个应用版本），而不是按版本嵌套。每条记录带审核状态；当有更新在进行中时，状态字段描述的是**正在更新的那个版本**，不是当前生效的版本。 - **说明**：按无法识别的设备服务
 - [POST /cloudphone/app/installedList](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappinstalledlistpost.md): 列出云手机当前已安装的应用。 - **前置条件**：云手机必须属于你的团队。与大多数云手机命令不同，这个接口**不要求**云手机被你占用；但它会实时查询设备服务，所以已关机的云手机通常在设备服务侧失败，而不是返回 MoreLogin 的错误。 - **副作用**：无。只读。可带退避安全重试。 - **用途**：`/cloudphone/app/install` 与 `/cloudphone/app
 - [POST /cloudphone/app/start](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappstartpost.md): 启动云手机上已安装的应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **完成信号**：响应仅表示命令已到达设备服务，不代表应用已在前台。没有接口能报告应用是否在运行——请用截图或 shell 命令自行确认。 - **重试**：没有去重，重复调用会再次下发命令。 已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Ge
 - [POST /cloudphone/app/restart](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneapprestartpost.md): 重启云手机上的某个应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。**不校验应用是否已安装**——包名不存在时该调用不产生任何效果。 - **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已重启。请通过 `/cloudphone/app/installedList` 或观察设备确认。
 - [POST /cloudphone/app/stop](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappstoppost.md): 停止云手机上正在运行的应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。不校验应用是否已安装或正在运行。 - **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已停止。
 - [POST /cloudphone/app/uninstall](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappuninstallpost.md): 从云手机卸载应用。 - **前置条件**：云手机必须已开机且未被其他成员占用。 - **副作用**：下发卸载并更新该云手机的安装记录。 - **完成信号**：响应仅表示请求已受理。请通过 `/cloudphone/app/installedList` 核实。 已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Start
 - [POST /cloudphone/app/openRoot](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappopenrootpost.md): 为云手机上指定的应用包授予 ROOT。 - **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持；不兼容机型调用会成功但无实际效果。 - **副作用**：把包名白名单下发到设备，并顺带打开 ROOT 总开关。**MoreLogin 不做任何存储**，因此无法通过接口回读该授权。 - **完成信号**：设备服务同步受理。ROOT 何时在设备上生效由设备服务决定；MoreLogin 不
 - [POST /cloudphone/app/setHideAccessibilityApp](https://guide.morelogin.com/zh/api-reference/cloud-phone/open-api/apps/cloudphoneappsethideaccessibilityapppost.md): 在一台或多台云手机上，把应用从 Android 无障碍服务列表中隐藏。 - **前置条件**：1 到 100 个云手机 ID，以及 1 到 100 个包名。云手机必须属于你的团队，但**不需要**已开机或被你占用。当所有 ID 都无法解析时，接口返回业务失败而不是抛错。 - **副作用**：名单下发到设备服务，**MoreLogin 不做存储**，因此无法回读。仅兼容机型 支持；不兼容机型调用成功
## Schedules

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

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

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