{
  "openapi": "3.1.0",
  "info": {
    "title": "Open API",
    "description": "The MoreLogin Open API provides a powerful, remote RESTful interface exclusively for managing **Cloud Phones** at scale. This cloud-hosted API empowers developers to programmatically create phone instances, install apps, manage files, and orchestrate RPA schedules from anywhere, without needing a local client running.",
    "version": "2026-09-05"
  },
  "tags": [
    {
      "name": "Authorization",
      "description": "APIs for Authorization."
    },
    {
      "name": "Cloud Phone Management",
      "description": "APIs for Cloud Phone Management."
    },
    {
      "name": "Live Streaming",
      "description": "Start, inspect, and stop Cloud Phone live streaming."
    },
    {
      "name": "Account & Quotas",
      "description": "Query wallet balance and Cloud Phone usage quotas."
    },
    {
      "name": "Monthly Billing",
      "description": "Query purchasable monthly plans and activate monthly Cloud Phones."
    },
    {
      "name": "ADB",
      "description": "APIs for ADB."
    },
    {
      "name": "Files",
      "description": "APIs for Files."
    },
    {
      "name": "Apps",
      "description": "APIs for Apps."
    },
    {
      "name": "Schedules",
      "description": "APIs for Schedules."
    },
    {
      "name": "Touch",
      "description": "APIs for Touch."
    }
  ],
  "x-tagGroups": [
    {
      "name": "",
      "tags": [
        "Authorization",
        "Cloud Phone Management",
        "Live Streaming",
        "Account & Quotas",
        "Monthly Billing",
        "ADB",
        "Files",
        "Apps",
        "Schedules",
        "Touch"
      ]
    }
  ],
  "paths": {
    "/balance": {
      "get": {
        "operationId": "getAccountAndCloudPhoneQuotas",
        "summary": "Get Account Balance and Cloud Phone Quotas",
        "description": "Return the team's wallet balance and Cloud Phone usage allowances.\n\n- **Preconditions**: the calling member needs the cost permission. The wallet is looked up by team, so the figures are team-wide rather than per member.\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Units**: `balance` is the wallet balance **in cents**, not in currency units. `remainingDuration` is Cloud Phone minutes and `remainingConcurrency` a slot count; both are clamped at 0 rather than going negative.\n- **Contents**: exactly these three figures. Frozen wallet amounts, used-versus-granted minute splits and expiry dates exist upstream but are deliberately not exposed here.\n- **Note**: the call fails as a whole if either the wallet or the quota lookup fails; it never returns partial figures.",
        "tags": [
          "Account & Quotas"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BalanceResponse"
          }
        }
      }
    },
    "/cloudphone/monthly/skus": {
      "get": {
        "operationId": "listMonthlyCloudPhoneSkus",
        "summary": "List Purchasable Monthly Cloud Phone Plans",
        "description": "Return the monthly Cloud Phone products currently available to the calling team.\n\n- **Effect**: none. The call does not reserve capacity or charge the wallet. Read-only. Safe to retry with bounded backoff.\n- **Use**: pass the returned `skuId` to [`/cloudphone/create`](./open-api.yaml#operation/createUsingPOST). The price is in US cents and the current monthly term is 30 days.\n- **Empty result**: an empty `data` array means no monthly product is currently available.\n\nSee [Error Codes](../Getting%20Started/error-codes.md) for common business errors.",
        "tags": [
          "Monthly Billing"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneSkusResponse"
          }
        }
      }
    },
    "/cloudphone/monthly/activate": {
      "post": {
        "operationId": "activateMonthlyCloudPhones",
        "summary": "Purchase and Activate Monthly Cloud Phones",
        "description": "Purchase and activate one to ten monthly Cloud Phones for 30 days.\n\n- **Billing warning**: **this operation charges the team wallet.**\n- **Permission**: the calling member must have **Fees / Payment Management** permission; otherwise the request returns `99012`.\n- **Create first**: create the phones with [`/cloudphone/create`](./open-api.yaml#operation/createUsingPOST). Creation only provisions inactive records and does not charge.\n- **Selection rules**: IDs must be distinct, belong to the team, use active 30-day monthly products and have compatible purchase states. Different monthly SKUs may be purchased together. Mixing paid and unpaid phones, phones from different paid orders, pending client orders or concurrent purchases rejects the entire request.\n- **Charging and restoration**: validation and charging are all-or-nothing, so there is no partial charge. If every phone belongs to the same paid order, the server restores the existing paid entitlement and does not charge again. The Local API, Open API and desktop client share the same order state.\n- **Completion**: success means every phone was confirmed active for 30 days. It does not power the phones on and does not enable automatic renewal.\n- **Unconfirmed activation**: when the service returns `33422`, `data.results` is still complete and preserves request order. Inspect each `status`, `expireTime` and `errorCode`; do not treat the whole result as missing.\n- **Retry**: there is no caller-supplied idempotency key. After a timeout, query [`/cloudphone/info`](./open-api.yaml#operation/infoUsingPOST) or [`/cloudphone/page`](./open-api.yaml#operation/pageUsingPOST) and inspect billing and expiry state before deciding whether to retry.\n\nDocumented business errors: `20002`, `20003`, `20004`, `20008`, `20041`, `20055`, `20068`, `20070`, `20071`, `33420`, `33421`, `33422`, `99001`, `99002`, `99012`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Monthly Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonthlyCloudPhoneActivateRequest"
              },
              "example": {
                "ids": [
                  "1724032706822188",
                  "1724032729890861"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneActivateResponse"
          }
        }
      }
    },
    "/cloudphone/live/start": {
      "post": {
        "operationId": "startCloudPhoneLiveStreaming",
        "summary": "Start Live Streaming",
        "description": "Start live streaming an uploaded MP4 on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member, and the device must support live streaming. The `fileId` must refer to a file uploaded as live-stream media that finished uploading; anything else is rejected as invalid or expired.\n- **Completion**: **accepted, not complete.** The response only confirms the service took the request. Poll `/cloudphone/live/status` until `liveStatus` is `1`.\n- **Note**: the MP4-only restriction is enforced when you upload the file, not here.\n- **Retry**: no deduplication; a repeat call re-issues the start command.\n\nDocumented business errors: `33300`, `33301`, `33401`, `33418`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLiveStartRequest"
              },
              "example": {
                "phoneId": "190000000000000001",
                "fileId": "820000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/cloudphone/live/status": {
      "post": {
        "operationId": "getCloudPhoneLiveStreamingStatus",
        "summary": "Get Live Streaming Status",
        "description": "Report whether a Cloud Phone is currently live streaming.\n\n- **Preconditions**: the phone must belong to your team and the device must support live streaming. Unlike start and stop, this does **not** require the phone to be powered on or claimed by you.\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Values**: `liveStatus` is `0` (not streaming) or `1` (streaming). **There is no failure state** — a start that never took effect simply stays at `0`, so bound your polling with a timeout.\n\nDocumented business errors: `33300`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveStatusResponse"
          }
        }
      }
    },
    "/cloudphone/live/end": {
      "post": {
        "operationId": "stopCloudPhoneLiveStreaming",
        "summary": "Stop Live Streaming",
        "description": "Stop live streaming on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member, and the device must support live streaming. **Whether a stream is actually running is not checked** — the stop command is sent regardless.\n- **Completion**: accepted, not complete. Poll `/cloudphone/live/status` until `liveStatus` is `0`.\n- **Retry**: idempotent in effect; a repeat call simply re-sends the stop command.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/oauth2/token": {
      "post": {
        "operationId": "oauth2TokenPost",
        "summary": "Access Token",
        "deprecated": false,
        "description": "Exchange an API ID and API key for an OAuth2 bearer token.\n\n- **Preconditions**: `client_id` is the API ID and `client_secret` the API key. The member must be active, and the caller's IP must satisfy the Open API IP allow and deny lists.\n- **Effect**: none — the token is self-signed and nothing is stored server side.\n- **Lifetime**: `expires_in` seconds, 3600 by default. **There is no refresh token and no refresh endpoint**; request a new token instead.\n- **Concurrency**: because tokens are stateless, issuing a new one does **not** invalidate earlier tokens — several can be valid at once. A token stops working only when it expires or when the API key is rotated.\n- **Retry**: safe to retry.\n\nDocumented business errors: `12002`, `35002`, `35005`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "example": "application/json",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "client_id": {
                    "description": "A API ID identifies an member",
                    "type": "string"
                  },
                  "client_secret": {
                    "description": "A API Key authenticates a client ID. To call MoreLogin APIs, you'll\nexchange your API ID and API Key for an access token. Keep this\nsecret safe.\n",
                    "type": "string"
                  },
                  "grant_type": {
                    "description": "Package name — required only if appVersionId is not provided",
                    "type": "string",
                    "example": "client_credentials"
                  }
                },
                "required": [
                  "client_id",
                  "client_secret",
                  "grant_type"
                ]
              },
              "example": {
                "client_id": "1661515884160372",
                "client_secret": "string",
                "grant_type": "client_credentials"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `scope`, `access_token`, `token_type`, `expires_in` and `client_metadata`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "scope": {
                          "type": "string"
                        },
                        "access_token": {
                          "type": "string"
                        },
                        "token_type": {
                          "type": "string"
                        },
                        "expires_in": {
                          "type": "integer"
                        },
                        "client_metadata": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "x-apidog-orders": [
                            "name"
                          ],
                          "x-apidog-ignore-properties": []
                        }
                      },
                      "required": [
                        "scope",
                        "access_token",
                        "token_type",
                        "expires_in",
                        "client_metadata"
                      ],
                      "x-apidog-orders": [
                        "scope",
                        "access_token",
                        "token_type",
                        "expires_in",
                        "client_metadata"
                      ],
                      "x-apidog-ignore-properties": []
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "x-apidog-orders": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "x-apidog-ignore-properties": []
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "scope": "cloudphone",
                    "access_token": "example-access-token\n",
                    "token_type": "Bearer",
                    "expires_in": 3600,
                    "client_metadata": {
                      "name": "team name"
                    }
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {},
            "x-apidog-name": "成功",
            "x-apidog-ordering": 0
          }
        },
        "security": []
      }
    },
    "/oauth2/userinfo": {
      "get": {
        "operationId": "oauth2UserinfoGet",
        "summary": "Get Current User Profile",
        "deprecated": false,
        "description": "Return the member and team the current access token belongs to.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Use**: the cheapest way to check that a token is still valid and to discover the team it is scoped to.",
        "tags": [
          "Authorization"
        ],
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `teamId`, `teamName`, `memberId`, `memberNickName` and `memberEmail`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "teamId": {
                          "type": "string"
                        },
                        "teamName": {
                          "type": "string"
                        },
                        "memberId": {
                          "type": "string"
                        },
                        "memberNickName": {
                          "type": "string"
                        },
                        "memberEmail": {
                          "type": "string"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "teamId": "1673823102599682",
                    "teamName": "example-name",
                    "memberId": "1673823102599682",
                    "memberNickName": "example-name",
                    "memberEmail": "string"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadUrl": {
      "post": {
        "summary": "Request File Upload URL",
        "deprecated": false,
        "description": "Request a pre-signed URL for uploading a file that a Cloud Phone will receive.\n\n- **Preconditions**: the phone must be powered on and not held by another member.\n- **Effect**: none is persisted — the URL is generated on the fly.\n- **Completion**: synchronous. **The pre-signed URL is valid for one hour.** `PUT` the file content to it, then register the upload with the upload endpoint; registering before the object exists is rejected.\n- **Note**: uploading the same file name again overwrites the previous object. Temporary objects are removed automatically after 7 days.",
        "operationId": "get",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "Upload file name"
                  }
                },
                "required": [
                  "id",
                  "fileName"
                ]
              },
              "example": {
                "fileName": "live-video.mp4",
                "id": "1661515884160372"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `presignedUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "error message\n"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "presignedUrl": {
                          "type": "string",
                          "description": "File upload URL use https PUT uploading files to cloud storage"
                        }
                      },
                      "required": [
                        "presignedUrl"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "presignedUrl": "https://example.com/resource"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadFile": {
      "post": {
        "summary": "Upload File",
        "deprecated": false,
        "description": "Register an uploaded file so the Cloud Phone downloads it.\n\n- **Preconditions**: the phone must be powered on and not held by another member, and **the object must already exist at the URL** — the service inspects it and rejects the request when it cannot be read. Live-stream uploads must be MP4 and target a device that supports streaming.\n- **Completion**: **accepted, not complete.** The response returns `fileId` with an in-progress status. Poll the upload result endpoint until the status is success or failure.\n- **Retry**: no deduplication; each call creates another `fileId`.\n- **Surface note**: on the Local API this path is a different, older multipart flow. The equivalent of this endpoint on the Local API is `/api/cloudphone/upload/file`.\n\nDocumented business errors: `33401`, `33419`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "fileUploadUsing",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "example": "1661515884160372"
                  },
                  "url": {
                    "type": "string",
                    "description": "Object URL obtained from `presignedUrl` after the file bytes have been uploaded, or another publicly accessible download URL",
                    "example": "https://storage.example.com/cloudphone/test.jpg"
                  },
                  "uploadDest": {
                    "description": "Upload destination directory",
                    "type": "string",
                    "example": "/Download"
                  },
                  "uploadType": {
                    "type": "integer",
                    "enum": [
                      1,
                      2
                    ],
                    "default": 1,
                    "description": "File type (`1` = regular file, `2` = MP4 live-streaming file)"
                  }
                },
                "required": [
                  "id",
                  "url",
                  "uploadDest"
                ]
              },
              "example": {
                "id": "1661515884160372",
                "url": "https://storage.example.com/cloudphone/live-video.mp4",
                "uploadDest": "/Download",
                "uploadType": 2
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `fileId`, `id` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fileId": {
                          "type": "string",
                          "description": "Uploaded file ID"
                        },
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status 0:uploading 1:success 2:failed"
                        }
                      },
                      "required": [
                        "fileId",
                        "id",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "fileId": "1661515884160111",
                    "id": "1661515884160372",
                    "status": 1
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadFileResult": {
      "post": {
        "summary": "Get File Upload Result",
        "deprecated": false,
        "description": "Poll the status of a file upload to a Cloud Phone.\n\n- **Preconditions**: the phone must belong to your team. This is the least restricted file endpoint — it does not require the phone to be powered on or claimed by you.\n- **Values**: `0` uploading, `1` succeeded, `2` failed.\n- **Empty result**: when the `fileId` cannot be found the call still succeeds but `data` is null. Treat that as “not visible yet or no longer present”, not as a failure.\n- **Cost**: the lookup scans the device file list, so it is not cheap. Poll at a modest interval rather than in a tight loop.",
        "operationId": "fileUploadResult",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "example": "1661515884160372"
                  },
                  "fileId": {
                    "type": "string",
                    "description": "Uploaded file ID"
                  }
                },
                "required": [
                  "id",
                  "fileId"
                ]
              },
              "example": {
                "id": "1661515884160372",
                "fileId": "1661515884160372"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `fileId`, `id` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Uploaded file ID"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status 0:uploading 1:success 2:failed"
                        }
                      },
                      "required": [
                        "fileId",
                        "id",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1661515884160372",
                    "fileId": "1661515884160111",
                    "status": 1
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/download": {
      "post": {
        "operationId": "cloudphoneDownloadPost",
        "summary": "Request File Download URL",
        "deprecated": false,
        "description": "Download a file from a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member.\n- **Effect**: the service scans the parent directory first and only then starts the transfer, so a missing path fails **here** rather than on the status poll. It must match a regular file, not a directory.\n- **Completion**: **accepted, not complete.** The response returns `downId`; poll `/cloudphone/download/result` until the status is succeeded, failed or cancelled. The status endpoint re-checks that the phone is still powered on and still yours.\n- **Retry**: not idempotent — each call rescans and issues a new `downId`.\n\nDocumented business errors: `33300`, `33301`, `33507`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone id"
                  },
                  "filePath": {
                    "type": "string",
                    "description": "file path: /sdcard/Download/a.txt\n"
                  }
                },
                "required": [
                  "filePath",
                  "id"
                ]
              },
              "example": {
                "filePath": "/sdcard/Download/report.csv",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id` and `downId`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download id "
                        }
                      },
                      "required": [
                        "id",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": "",
                  "data": {
                    "id": "1661515884160372",
                    "downId": "1661515884160999"
                  },
                  "requestId": "7dcf166a597842139af5ce12d25fe0f8"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/download/result": {
      "post": {
        "operationId": "cloudphoneDownloadResultPost",
        "summary": "Get File Download Result",
        "deprecated": false,
        "description": "Poll the status of a file download from a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Pass the `downId` returned by the download request.\n- **Values**: **a different scale from uploads** — `10` running, `20` succeeded, `30` failed, `40` cancelled. `downUrl` is only populated once the download has succeeded.\n- **Note**: “file does not exist” is reported by the download request itself, which scans the parent directory first, not by this endpoint.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone id"
                  },
                  "downId": {
                    "type": "string",
                    "description": "file download id"
                  }
                },
                "required": [
                  "downId",
                  "id"
                ]
              },
              "example": {
                "downId": "1661515884160999",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `status`, `downId` and `downUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "integer",
                          "description": "Download file status;10:Running, 20:Successful, 30:Failed, 40:Cancelled"
                        },
                        "downUrl": {
                          "type": "string",
                          "description": "File download URL; use it only when status is 20"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download task ID"
                        }
                      },
                      "required": [
                        "status",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "status": 20,
                    "downId": "1661515884160999",
                    "downUrl": "https://get.morelogin.com/..."
                  },
                  "requestId": "17d9dbfd958e4f40a51897520138d3ff"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/setKeyBox": {
      "post": {
        "operationId": "cloudphoneSetKeyBoxPost",
        "summary": "Configure Keybox",
        "deprecated": false,
        "description": "Install a keybox certificate on a Cloud Phone.\n\n- **Preconditions**: `filePath` must point to an `.xml` file, and the phone must be powered on and not held by another member.\n- **Effect**: hands the certificate path to the device service. MoreLogin stores nothing, and the service defines no activation step — whether the device needs a restart for the certificate to take effect is device-specific behaviour.\n- **Completion**: synchronous acceptance by the service. There is no endpoint that reports the installed certificate.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "filePath": {
                    "type": "string",
                    "description": "File path, e.g., /sdcard/Download/xxx.xml"
                  },
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  }
                }
              },
              "example": {
                "filePath": "",
                "id": "0"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/install": {
      "post": {
        "operationId": "cloudphoneAppInstallPost",
        "summary": "Install App on Cloud Phone",
        "deprecated": false,
        "description": "Install an app from the team app library onto a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. The app must already exist in the team library or the public catalogue — identify it either by `appVersionId`, or by `packageName` plus `versionCode`. The app must also be available for installation on this phone, otherwise installation fails.\n- **Rate limit**: at most one install per phone per second; a faster second call is rejected.\n- **Completion**: **accepted, not complete.** The response only confirms the request was queued. Poll `/cloudphone/app/installedList` to see whether the app arrived.\n- **Retry**: safe to retry after checking the installed list, subject to the one-per-second limit.\n\nDocumented business errors: `33005`, `33014`, `33714`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appVersionId": {
                    "description": "App version ID",
                    "type": "string"
                  },
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "Package name — required only if appVersionId is not provided",
                    "type": "string"
                  },
                  "versionCode": {
                    "description": "Version code — required only if appVersionId is not provided",
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "appVersionId": "1672940217990530",
                "id": "1673823102599682"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/page": {
      "post": {
        "operationId": "cloudphoneAppPagePost",
        "summary": "List Available Apps",
        "deprecated": false,
        "description": "List apps that can be installed on a Cloud Phone.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff. No Cloud Phone is involved, so the phone does not need to be running.\n- **Contents**: the public app catalogue — globally available apps plus apps published to your team. Each entry carries its versions in `appVersionList`, newest first; take `appVersionList[].id` as the `appVersionId` for `/cloudphone/app/install`.\n- **Paging caveat**: results are re-sorted after the page is fetched, so ordering is stable only within a page and `total` reflects the current page rather than the whole catalogue. Use `pages` for navigation.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "App name (partial match)",
                    "type": "string"
                  },
                  "pageNum": {
                    "description": "Page number; Default:1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Items per page; Default:10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "de",
                "pageNum": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the apps available to your team for the requested page; each app carries its versions in `appVersionList`, newest first. `data.total` is the number of records on this page, not the overall count — use `data.pages` for paging.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "string",
                          "description": "Number of records on the current page"
                        },
                        "current": {
                          "type": "string",
                          "description": "Current page number"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Total number of pages"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "App ID. This is not the value `/cloudphone/app/install` expects."
                              },
                              "appName": {
                                "type": "string",
                                "description": "App name"
                              },
                              "appIcon": {
                                "type": "string",
                                "description": "App icon URL"
                              },
                              "packageName": {
                                "type": "string",
                                "description": "Android package name"
                              },
                              "categoryValue": {
                                "type": "integer",
                                "description": "Category ID"
                              },
                              "sortNo": {
                                "type": "integer",
                                "description": "Sort order used by the app library"
                              },
                              "appVersionList": {
                                "type": "array",
                                "description": "Versions of this app, ordered by `versionCode` descending (newest first)",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "description": "App version ID. Pass this as `appVersionId` to `/cloudphone/app/install`."
                                    },
                                    "versionCode": {
                                      "type": "string",
                                      "description": "Version code"
                                    },
                                    "versionName": {
                                      "type": "string",
                                      "description": "Version display name"
                                    },
                                    "installStatus": {
                                      "type": [
                                        "integer",
                                        "null"
                                      ],
                                      "description": "Always null for this operation. Query installation state with `/cloudphone/app/installedList`."
                                    },
                                    "packageName": {
                                      "type": [
                                        "string",
                                        "null"
                                      ],
                                      "description": "Always null for this operation; read `packageName` from the app instead."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1672940217990529",
                        "appName": "Depop",
                        "appIcon": "https://cdn.morelogin.com/app/depop.png",
                        "packageName": "com.depop",
                        "categoryValue": 1,
                        "sortNo": 0,
                        "appVersionList": [
                          {
                            "id": "1672940217990530",
                            "versionCode": "450000000",
                            "versionName": "4.50.0",
                            "installStatus": null,
                            "packageName": null
                          }
                        ]
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/team/app/page": {
      "post": {
        "operationId": "cloudphoneTeamAppPagePost",
        "summary": "List Team Apps",
        "deprecated": false,
        "description": "List your team's own app library, including pre-installed apps.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Contents**: a different source from `/cloudphone/app/page` — these are apps your team uploaded, returned flat (one row per app version) rather than nested by version. Entries carry a review status; while an update is in progress the status fields describe **the version being updated**, not the live one.\n- **Note**: filtering by an unrecognised proxy type returns an empty page rather than an error.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "App name (partial match)",
                    "type": "string"
                  },
                  "pageNo": {
                    "description": "Current page; default 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Items per page; default 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "TikTok",
                "pageNo": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the records for the requested page and is an empty array when there are no matches; `data.total`, `data.current` and `data.pages` describe the paging.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataPageResultCloudPhoneAppDto"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "15",
                    "current": "1",
                    "pages": "2",
                    "dataList": [
                      {
                        "id": "123456",
                        "appName": "Facebook",
                        "packageName": "com.facebook.katana",
                        "versionName": "450.0.0.1",
                        "versionCode": "450000000",
                        "enabled": true,
                        "desc": "Social media application",
                        "enableRoot": false
                      }
                    ]
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/installedList": {
      "post": {
        "operationId": "cloudphoneAppInstalledListPost",
        "summary": "List Installed Apps",
        "deprecated": false,
        "description": "List the apps currently installed on a Cloud Phone.\n\n- **Preconditions**: the phone must belong to your team. Unlike most Cloud Phone commands this does **not** require the phone to be claimed by you, but the service is queried live, so a powered-off phone typically fails at the service rather than with a MoreLogin error.\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Use**: the completion signal for `/cloudphone/app/install` and `/cloudphone/app/uninstall`. App names and icons are filled in from the catalogue; packages that are not catalogued are returned as-is.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1674550360293464"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an array of objects with the fields `appName`, `appIcon`, `packageName`, `versionCode` and `versionName`, and an empty array when there is nothing to return.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "appName": {
                            "type": "string"
                          },
                          "appIcon": {
                            "type": "string"
                          },
                          "packageName": {
                            "type": "string"
                          },
                          "versionCode": {
                            "type": "string"
                          },
                          "versionName": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "appName": "example-name",
                      "appIcon": "string",
                      "packageName": "example-name",
                      "versionCode": "string",
                      "versionName": "example-name"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/start": {
      "post": {
        "operationId": "cloudphoneAppStartPost",
        "summary": "Launch App",
        "deprecated": false,
        "description": "Launch an installed app on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member.\n- **Completion**: the response confirms the command reached the service, not that the app is in the foreground. There is no endpoint that reports a running app — verify with a screen capture or a shell command.\n- **Retry**: no deduplication; a repeat call dispatches the command again.\n\nDocumented business errors: `33300`, `33301`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "App package name",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "packageName"
                ]
              },
              "example": {
                "id": "1674550360293464",
                "packageName": "com.depop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is always null for this operation; the outcome is carried by `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/restart": {
      "post": {
        "operationId": "cloudphoneAppRestartPost",
        "summary": "Restart App",
        "deprecated": false,
        "description": "Restart an app on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. **Whether the app is installed is not checked** — a package that is absent simply does nothing.\n- **Completion**: the response confirms the command was dispatched to the service, not that the app restarted. Confirm with `/cloudphone/app/installedList` or by observing the device.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "App package name"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code:0 = success, >0 = error"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Response msg, Error message returned if code > 0"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  },
                  "required": [
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/stop": {
      "post": {
        "operationId": "cloudphoneAppStopPost",
        "summary": "Stop App",
        "deprecated": false,
        "description": "Stop a running app on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. The app is not checked for being installed or running.\n- **Completion**: the response confirms the command was dispatched to the service, not that the app stopped.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "App package name"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/uninstall": {
      "post": {
        "operationId": "cloudphoneAppUninstallPost",
        "summary": "Uninstall App",
        "deprecated": false,
        "description": "Uninstall an app from a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member.\n- **Effect**: dispatches the uninstall and updates the installation record for the phone.\n- **Completion**: the response confirms the request was accepted. Verify with `/cloudphone/app/installedList`.\n\nDocumented business errors: `33300`, `33301`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "App package name"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/openRoot": {
      "post": {
        "operationId": "cloudphoneAppOpenRootPost",
        "tags": [
          "Apps"
        ],
        "summary": "Enable app ROOT",
        "description": "Grant ROOT to specific app packages on a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models; on incompatible models the call succeeds but has no effect.\n- **Effect**: pushes the package allow-list to the device and, as a side effect, turns the ROOT switch on. **Nothing is stored by MoreLogin**, so the grant cannot be read back through the API.\n- **Completion**: synchronous acceptance by the service. When ROOT takes effect on the device is device-specific behaviour; MoreLogin does not restart the phone.\n- **Note**: there is currently no endpoint to revoke ROOT for individual packages. Use `/cloudphone/enableRoot` to turn the global switch off.\n\nDocumented business errors: `33300`, `33301`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiAppRootOperateDto"
              },
              "example": {
                "id": "12345678",
                "packageNames": [
                  "com.test"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/app/setHideAccessibilityApp": {
      "post": {
        "operationId": "cloudphoneAppSetHideAccessibilityAppPost",
        "summary": "Configure App Accessibility Hiding",
        "deprecated": false,
        "description": "Hide apps from the Android accessibility service list on one or more Cloud Phones.\n\n- **Preconditions**: 1 to 100 phone ids and 1 to 100 package names. The phones must belong to your team, but they do **not** need to be powered on or claimed by you. When none of the ids resolves, the call returns a business failure rather than an error.\n- **Effect**: the list is pushed to the service and **not stored by MoreLogin**, so it cannot be read back. Supported on some models and Some device models; on other device models the call succeeds with no effect.\n- **Completion**: synchronous. On some models each package is sent as a separate service call, so a long list takes proportionally longer and a failure part-way through leaves the earlier packages applied.\n- **Note**: MoreLogin applies no Android version check — the documented model restriction comes from service capability, and package names are passed through verbatim.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Cloud phone IDs"
                  },
                  "packageName": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "App package name, An empty string is equivalent to clearing, while * or ALL hides all applications."
                  }
                }
              },
              "example": {
                "ids": [
                  "0"
                ],
                "packageName": [
                  "*"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single boolean value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/page": {
      "post": {
        "summary": "List Cloud Phone Profiles",
        "description": "List the Cloud Phones visible to the authenticated team, page by page.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Note**: phones of all device types are returned. Passwords of managed and dynamic proxies are removed from the response.\n- **Use**: this and `/cloudphone/info` are the completion signals for the asynchronous power, one-click-new-device and provisioning operations.",
        "operationId": "pageUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bindIp": {
                    "type": "boolean",
                    "description": "Whether IP is bound: true = bound, false = not",
                    "example": false
                  },
                  "keyword": {
                    "type": "string",
                    "description": "Keyword to filter: proxy info, group name, tag name, environment name",
                    "example": "CP-424"
                  },
                  "pageNo": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Current page",
                    "example": 1
                  },
                  "pageSize": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Items per page",
                    "example": 100
                  },
                  "sort": {
                    "type": "array",
                    "description": "Dynamic sort fields. Currently only \"envName\" is supported for cloud phones.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "sortDirection": {
                          "type": "string",
                          "enum": [
                            "asc",
                            "desc"
                          ],
                          "description": "Sort direction",
                          "example": "asc"
                        },
                        "sortField": {
                          "type": "string",
                          "description": "Field to sort by (only \"envName\" is currently supported)",
                          "example": "envName"
                        }
                      },
                      "required": [
                        "sortDirection",
                        "sortField"
                      ]
                    },
                    "example": [
                      {
                        "sortDirection": "asc",
                        "sortField": "envName"
                      }
                    ]
                  }
                },
                "example": {
                  "bindIp": false,
                  "keyword": "CP-424",
                  "pageNo": 1,
                  "pageSize": 100,
                  "sort": [
                    {
                      "sortDirection": "asc",
                      "sortField": "envName"
                    }
                  ]
                }
              },
              "example": {
                "bindIp": false,
                "keyword": "CP-424",
                "pageNo": 1,
                "pageSize": 100,
                "sort": [
                  {
                    "sortDirection": "asc",
                    "sortField": "envName"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "error message"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "current": {
                          "type": "string"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/CloudPhoneProfile"
                          }
                        },
                        "pages": {
                          "type": "string"
                        },
                        "total": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "current": "1",
                    "dataList": [
                      {
                        "abnormalStatus": 1,
                        "adbInfo": {
                          "adbIp": "string",
                          "adbPassword": "string",
                          "adbPort": "9222",
                          "command": "string",
                          "expireTime": "2026-09-01 12:00:00",
                          "remark": "example remark",
                          "success": 1
                        },
                        "billingType": 1,
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": 1,
                        "createMemberName": "example-name",
                        "enableAdb": true,
                        "envName": "example-name",
                        "envRemark": "example remark",
                        "envStatus": 1,
                        "expireTime": "2026-09-01 12:00:00",
                        "groupId": "1673823102599682",
                        "groupName": "example-name",
                        "id": "1673823102599682",
                        "androidId": "1673823102599682",
                        "gaid": "1673823102599682",
                        "lastConnectDate": "2026-09-01 12:00:00",
                        "lastConnectMemberId": "1673823102599682",
                        "lastConnectMemberName": "example-name",
                        "lastStartDate": "2026-09-01 12:00:00",
                        "lastStartMemberId": "1673823102599682",
                        "lastStartMemberName": "example-name",
                        "proxy": {
                          "country": "string",
                          "countryCode": "string",
                          "createDate": "2026-09-01 12:00:00",
                          "delFlag": 1,
                          "expiryTime": "2026-09-01 12:00:00",
                          "exportIp": "9222",
                          "groupId": "1673823102599682",
                          "id": "1673823102599682",
                          "providerCode": "string",
                          "proxyAreaCode": "string",
                          "proxyCatagoryType": 1,
                          "proxyCheckStatus": 1,
                          "proxyInfo": "string",
                          "proxyIp": "string",
                          "proxyName": "example-name",
                          "proxyPort": 1,
                          "proxyRegionCode": "string",
                          "proxyStatus": 1,
                          "proxySub": {
                            "activeRecordId": "1673823102599682",
                            "businessId": "1673823102599682",
                            "createMember": 1,
                            "endTime": "2026-09-01 12:00:00",
                            "id": "1673823102599682",
                            "nextBillingTime": "2026-09-01 12:00:00",
                            "startTime": "2026-09-01 12:00:00",
                            "subPayMethod": "string",
                            "subStatus": 1,
                            "subType": 1,
                            "teamId": "1673823102599682"
                          },
                          "proxyType": 1,
                          "proxyTypeCode": "string",
                          "regionKey": "string",
                          "releaseTime": "2026-09-01 12:00:00",
                          "uniqueId": 1
                        },
                        "proxyStatus": 1,
                        "supportAdb": true,
                        "tagInfos": [
                          {
                            "id": "1673823102599682",
                            "tagName": "example-name"
                          }
                        ],
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": 1
                      }
                    ],
                    "pages": "1",
                    "total": "1"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/link": {
      "post": {
        "summary": "Create Cloud Phone Remote Connection Link",
        "description": "Create a temporary browser access link for a Cloud Phone (Open API only).\n\n- **Preconditions**: the phone must belong to your team, be accessible to the calling member, be powered on, and not be held by another member. This operation does not power it on.\n- **Effect**: creates a new link on each call without requesting connection credentials or changing the current connection. Open `data.url` in a browser, or encode that complete URL as a QR code.\n- **Validity**: fixed at 5 minutes from creation. Repeated visits neither consume nor extend it. After expiry, call this API again. No `expiredTime` field is returned; this lifetime does not describe connection credentials.\n- **Connection**: each successful visit requests fresh connection credentials and redirects to the remote-control page; it may affect an earlier connection. A failed visit may be retried within the remaining validity period. Link creation success does not guarantee that a later connection will succeed.\n- **Handling**: keep the complete URL confidential. The API response uses `Cache-Control: no-store`. Use the returned URL as-is; the host and connection parameters are selected by the server.\n\nDocumented business errors: `33300`, `33301`, `99002`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "createCloudPhoneRemoteLink",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "MoreLogin Cloud Phone ID."
                  },
                  "lang": {
                    "type": "string",
                    "description": "Page language, for example `zh-CN` or `en-US`. Omitted or blank values use the request language; unsupported values fall back to the configured default. The selected language is embedded in the URL; its `lang` query parameter can be changed to switch page language."
                  }
                }
              },
              "example": {
                "id": "1710784536928649",
                "lang": "en-US"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data.url` is the temporary browser access link, valid for 5 minutes.",
            "headers": {
              "Cache-Control": {
                "description": "Do not cache this response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "type": "object",
                      "required": [
                        "url"
                      ],
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Temporary browser access URL. Treat the complete URL as a sensitive credential.",
                          "example": "https://gateway.example.com/app/cloudphone/qrcodeUrl?token=0123456789abcdef0123456789abcdef&lang=en-US"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "url": "https://gateway.example.com/app/cloudphone/qrcodeUrl?token=0123456789abcdef0123456789abcdef&lang=en-US"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "Shell",
            "source": "curl --request POST 'https://api.morelogin.com/cloudphone/link' \\\n  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\"id\":\"1710784536928649\",\"lang\":\"en-US\"}'"
          }
        ]
      }
    },
    "/cloudphone/create": {
      "post": {
        "summary": "Create Cloud Phone",
        "description": "Purchase and provision one or more Cloud Phones.\n\n- **Preconditions**: the plan must have remaining capacity and the daily creation quota must not be exhausted. `country`, `timezone` and `language` are validated against the list the selected device model supports, so an unsupported combination is rejected rather than silently adjusted. Coordinates are bounded to ±180 longitude, ±90 latitude. A phone number is discarded when the chosen SKU does not support one. Monthly SKUs are supported when returned by [`/cloudphone/monthly/skus`](./open-api.yaml#operation/listMonthlyCloudPhoneSkus); they currently use a 30-day term.\n- **Effect**: creates the Cloud Phone records. Pay-per-minute SKUs become usable after provisioning; monthly SKUs are created inactive. Creation never charges the wallet. Monthly phones are charged only by [`/cloudphone/monthly/activate`](./open-api.yaml#operation/activateMonthlyCloudPhones); pay-per-minute phones begin consuming balance or quota when powered on.\n- **Completion**: **accepted, not complete.** The Cloud Phone instance is not ready yet, and powering on too early is rejected. Poll [`/cloudphone/info`](./open-api.yaml#operation/infoUsingPOST) or [`/cloudphone/page`](./open-api.yaml#operation/pageUsingPOST) until `envStatus` reports the phone as powered off. For a monthly SKU, also complete [`/cloudphone/monthly/activate`](./open-api.yaml#operation/activateMonthlyCloudPhones) before powering it on.\n- **Retry**: not idempotent and not serialized. There is no idempotency key. Do not retry blindly after a timeout — query state first.\n\nDocumented business errors: `19064`, `20018`, `33338`, `33339`, `33340`, `33341`, `33342`, `33343`, `33344`, `33345`, `33398`, `33399`, `33400`, `33408`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "createUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Cloud Phone model\nskuId:10002 model:Android 12\nskuId:10013 model:Android 13\nskuId:10005 model:Android 14\nskuId:10004 model:Android 15\nskuId:10014 model:Android 15A\nskuId:10015 model:Android 16\nSee [Country Time Zone Table](/api-reference/appendix/country-time-zone) for supported regions and timezone mappings\n"
                  },
                  "quantity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "description": "Number of cloud phone created. Range of values:[1-10]"
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Profile Remarks (Length limit 1500 characters)"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "Group ID. Use `\"0\"` for ungrouped."
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Existing group name, or a new group name to create when no matching group exists."
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Whether to automatically match the geographic location. Default:true"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Whether to automatically match the language. Default:true"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Whether to auto-match location (time zone, country). Default:true"
                  },
                  "country": {
                    "type": "string",
                    "description": "Country code (e.g. `us`). See [Country Time Zone Table](/api-reference/appendix/country-time-zone) for the full list"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Time zone, e.g. America/New_York"
                  },
                  "language": {
                    "type": "string",
                    "description": "Language, e.g. en-US"
                  },
                  "altitude": {
                    "type": "number",
                    "description": "Altitude"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Latitude. Example:22.309182"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Longitude. Example:114.176817"
                  },
                  "speed": {
                    "type": "number",
                    "maximum": 400,
                    "description": "Movement speed"
                  },
                  "bearing": {
                    "type": "number",
                    "maximum": 360,
                    "description": "Direction of movement"
                  },
                  "accuracy": {
                    "type": "number",
                    "maximum": 100,
                    "description": "Horizontal accuracy"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Customize your phone number. Format requirements:Must begin with a + sign, country code must be 1-3 digits (excluding 86), total length 8-14 digits, and contain only + and numbers."
                  },
                  "brand": {
                    "type": "string",
                    "description": "device brand,You can query via the https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post interface."
                  },
                  "modelId": {
                    "type": "number",
                    "description": "device model id,You can query via the https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post interface."
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "Proxy ID"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Tag names. Blank values are ignored."
                  }
                },
                "required": [
                  "skuId",
                  "quantity"
                ]
              },
              "example": {
                "skuId": "1661515884160372",
                "quantity": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "This is Cloud phone IDS"
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "error": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "string"
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "error": {}
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/powerOn": {
      "post": {
        "summary": "Start Cloud Phone",
        "description": "Start a Cloud Phone.\n\n- **Preconditions**: the phone must currently be powered off. It is rejected when the SKU is delisted or under maintenance, when the phone is held by another member, while its proxy is still being checked, when the account is in arrears or the phone is deactivated, when a monthly term has expired, and when neither free minutes, a concurrency slot nor a positive balance is available. Some models additionally require the latest Windows client.\n- **Effect**: marks the phone as booting, claims it for the calling member, and reserves a concurrency slot or starts consuming time. The response reports which of the two was used.\n- **Completion**: **accepted, not complete.** Poll `/cloudphone/info` until `envStatus` is powered on; a failure surfaces there as `errorCode` and `errorMsg`. Members with a callback host configured also receive a webhook.\n- **Retry**: a concurrent second call is rejected outright rather than queued. After a timeout, read `/cloudphone/info` — do not resend.\n\nDocumented business errors: `33300`, `33309`, `33315`, `33316`, `33317`, `33318`, `33321`, `33322`, `33323`, `33324`, `33325`, `33346`, `33347`, `33367`, `33376`, `33407`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "powerOnUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "disableMoneySavingMode": {
                    "type": "boolean",
                    "description": "Disable power saving mode, default:false"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1637226321190925"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error message"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/powerOff": {
      "post": {
        "summary": "Stop Cloud Phone",
        "description": "Stop a Cloud Phone.\n\n- **Preconditions**: the phone must be booting or powered on. It cannot be stopped while held by another member, or while a one-click new device, restart or reset is in progress.\n- **Effect**: stops billing, releases the concurrency slot, settles usage, and invalidates the connection credentials issued for the session. Stopping a phone that was still booting interrupts the start instead.\n- **Completion**: billing and local state are settled synchronously; device shutdown continues afterwards, so confirm with `/cloudphone/info`.\n- **Retry**: a second call reports the phone as not running. Batches abort on the first failure, so re-read state before retrying.\n\nDocumented business errors: `33300`, `33301`, `33308`, `33331`, `33332`, `33333`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "powerOffUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1596527092376632"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error message"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/edit/batch": {
      "post": {
        "summary": "Update Cloud Phone Profile",
        "description": "Update the configuration of one or more Cloud Phones.\n\n- **Preconditions**: the phones must belong to the team. Region, language and coordinate values are validated for each device model, exactly as on create. Moving a phone into a group you are not authorized for is rejected.\n- **Effect**: overwrites the phone settings and refreshes the GPS configuration; may create tag bindings. Nothing is charged and concurrency is unaffected.\n- **Completion**: synchronous, and idempotent for the same body.",
        "operationId": "editBatchUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Cloud phone IDs"
                  },
                  "envName": {
                    "type": "string",
                    "maxLength": 64,
                    "minLength": 1,
                    "description": "Cloud phone name (≤64 chars)"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Customize your phone number. Format requirements:Must begin with a + sign, country code must be 1-3 digits (excluding 86), total length 8-14 digits, and contain only + and numbers."
                  },
                  "powerOnBillingStrategy": {
                    "type": "integer",
                    "enum": [
                      0,
                      1
                    ],
                    "description": "Non-Monthly cloud phone billing method (0:default, 1:parallel pack only)"
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "Proxy ID"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "Environment group ID"
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Existing group name, or a new group name to create when no matching group exists."
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Replacement tag names. Blank values are ignored."
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Environment remark (≤1500 chars, line breaks supported)"
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Auto geolocation"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Auto language"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Auto location (timezone & country)"
                  },
                  "country": {
                    "type": "string",
                    "description": "Country"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Timezone"
                  },
                  "language": {
                    "type": "string",
                    "description": "Language"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Latitude"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Longitude"
                  },
                  "enableRoot": {
                    "type": "boolean",
                    "description": "Enable global ROOT"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": [
                  "1637238770951311"
                ],
                "proxyId": "0",
                "automaticGeo": false,
                "automaticLanguage": false,
                "automaticLocation": false,
                "country": "bo",
                "timezone": "America/La_Paz",
                "language": "de-CH",
                "latitude": 0,
                "longitude": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code:0,Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error message"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/setProxy": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Set cloud phone proxy",
        "description": "Bind a proxy to one or more Cloud Phones.\n\n- **Preconditions**: provide at least one of `ids` or `uniqueIds`. The phones must belong to your team; they do **not** need to be powered on. A supplied `proxyId` must exist, otherwise the call is rejected.\n- **Effect**: when `proxyId` is omitted or `0`, an existing proxy with identical connection details is reused and **a new proxy record is created in your team if none matches**. The proxy check state is reset and the previous proxy is remembered.\n- **Completion**: synchronous. **Phones that are powered on receive the new proxy immediately — no restart is needed**; powered-off phones pick it up on next start.\n- **Retry**: rebinding an existing `proxyId` is idempotent, but repeating a call that carries raw connection details can create another proxy record each time deduplication misses.\n\nDocumented business errors: `33300`, `33303`, `33320`, `14023`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "setProxy",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneSetProxyApiDto"
              },
              "example": {
                "ids": [
                  "1558968155668507"
                ],
                "uniqueIds": [
                  1001
                ],
                "proxy": {
                  "proxyIp": "192.168.1.100",
                  "proxyPort": 8080,
                  "proxyProvider": 2
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is always null for this operation; the outcome is carried by `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/delete/batch": {
      "post": {
        "summary": "Delete Cloud Phone",
        "description": "Release one or more Cloud Phones.\n\n- **Preconditions**: the phones must not be mid-transfer and the team must have no unpaid order for them. The phone does not have to be powered off.\n- **Effect**: the Cloud Phone instance is released immediately. A phone that was never activated is deleted outright; an activated phone is retained as a deactivated record, so it keeps appearing in listings with a deactivated status.\n- **Completion**: synchronous.\n- **Retry**: phones are processed one by one and the call aborts on the first failure, so a partially applied batch is possible. Re-read `/cloudphone/page` before retrying, and retry only the phones that are still active.",
        "operationId": "deleteUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "ids"
                ]
              },
              "example": {
                "ids": [
                  "1595755686723985"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error message"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/newMachine": {
      "post": {
        "summary": "One-click new machine",
        "description": "Replace a Cloud Phone's device identity in place (one-click new device).\n\n- **Preconditions**: the phone must be powered on and not held by another member. A supplied brand and model must be one the phone's SKU supports. **This consumes the daily Cloud Phone creation quota**, the same quota `/cloudphone/create` uses.\n- **Effect**: pushes a new brand and model to the device, clears the installed-app records for that phone, resets its phone number, and aborts any running AI task. The exact set of identifiers the service regenerates is not defined by MoreLogin.\n- **Completion**: **accepted, not complete.** The phone sits in a one-click-new-device state; poll `/cloudphone/info` until it leaves that state.\n- **Concurrency**: while it runs, power on, power off and every command that needs a running phone are rejected. A concurrent second call is rejected rather than queued.\n\nDocumented business errors: `33300`, `33301`, `33326`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "oneNewUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "brand": {
                    "type": "string",
                    "description": "Brand"
                  },
                  "modelId": {
                    "type": "integer",
                    "description": "Model ID"
                  }
                }
              },
              "example": {
                "id": "1595372958075305"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code:0 indicates success, >0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  },
                  "required": [
                    "code",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/info": {
      "post": {
        "summary": "Get Cloud Phone Details",
        "description": "Return the full detail of a single Cloud Phone, including group and tag names.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Use**: the primary status endpoint for asynchronous operations. `envStatus` distinguishes new, creation failed, powered off, booting, powered on, resetting, restarting and one-click-new-device in progress; `errorCode` and `errorMsg` carry the reason when an asynchronous operation failed.",
        "operationId": "infoUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1672532391231745"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/queryByAndroidId": {
      "post": {
        "summary": "Get Cloud Phone Details By AndroidId",
        "description": "Look up a Cloud Phone by the Android ID reported by the device.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff. The phone does not need to be powered on.\n- **Returns**: the same detail structure as `/cloudphone/info`.\n- **Edge cases**: an empty `androidId` returns success with `data` set to null rather than a validation error, and if several phones share an Android ID one of them is returned arbitrarily.",
        "operationId": "queryByAndroidId",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "androidId": {
                    "type": "string",
                    "description": "The androidId of the cloud phone",
                    "example": "8f7e6d5c4b3a2f1e"
                  }
                },
                "required": [
                  "androidId"
                ]
              },
              "example": {
                "androidId": "8f7e6d5c4b3a2f1e"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/enableRoot": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Enable or disable global ROOT",
        "description": "Turn the global ROOT switch on or off for a Cloud Phone.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models; on incompatible models the call succeeds but has no effect.\n- **Effect**: unlike `/cloudphone/app/openRoot`, the setting **is persisted** on the phone's settings record and then pushed to the service as a device-wide switch.\n- **Completion**: synchronous. MoreLogin does not restart the phone; when the change takes effect on the device is device-specific behaviour.\n- **Retry**: idempotent.\n\nDocumented business errors: `33300`, `33301`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "enableRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneEnableRootApiDTO"
              },
              "example": {
                "id": "1558968155668507",
                "enableRoot": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is always null for this operation; the outcome is carried by `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/screenCap": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Cloud phone screen capture",
        "description": "Capture the Cloud Phone screen and return a download URL.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Effect**: on some models the screenshot file is removed from the device after it is captured.\n- **Completion**: synchronous. The response includes a temporary image download URL.\n- **Caveat**: on some models the reported expiry is a fixed one hour from the response and `success` is always true — it is not the real signature lifetime. Download promptly rather than storing the URL.\n- **Retry**: no side effect beyond the capture itself, so it is safe to repeat.",
        "operationId": "screenCap",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone ID",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `url`, `status`, `expireAt` and `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "description": "The screenshot access URL",
                          "example": "http://oss.morelogin.com/test.png"
                        },
                        "status": {
                          "type": "string",
                          "description": "Status representing immediate completion or pending status",
                          "example": "finish"
                        },
                        "expireAt": {
                          "type": "string",
                          "description": "URL expiration timestamp in milliseconds (returned only by some device models)",
                          "example": "1756024767163"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Was successfully generated",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "url": "http://oss.morelogin.com/test.png",
                    "status": "finish",
                    "expireAt": "1756024767163",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/screenCapBase64": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Cloud phone screen capture (response base64)",
        "description": "Capture the Cloud Phone screen and return the image inline as base64.\n\n- **Preconditions**: the phone must be powered on and not held by another member. **Supported on compatible device models only** — incompatible models reject the call.\n- **Completion**: synchronous. On failure the response carries an error message instead of image data, so check `success` before decoding.\n- **Model support**: documented as available on Android 12 and Android 15 images only.\n- **Use**: prefer this over `/cloudphone/screenCap` when you do not want to depend on a temporary download URL.",
        "operationId": "screenCapBase64",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone ID",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `captureBase64`, `errorMessage` and `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 = success, >0 = error"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "captureBase64": {
                          "type": "string",
                          "description": "Base64-encoded image",
                          "example": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA....."
                        },
                        "errorMessage": {
                          "type": "string",
                          "description": "error message",
                          "example": "success"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Was successfully generated",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Message; populated if code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "captureBase64": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA.....",
                    "errorMessage": "success",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/brand/models": {
      "post": {
        "operationId": "cloudphoneBrandModelsPost",
        "summary": "List Device Brands & Models",
        "description": "List the device brands and models a Cloud Phone SKU supports.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff. No Cloud Phone is involved.\n- **Use**: pick a valid `brand` and `modelId` before calling `/cloudphone/create` or `/cloudphone/newMachine`, both of which reject a combination this endpoint does not return.\n- **Note**: an unknown `skuId` yields an empty list rather than an error.",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Cloud phone product ID"
                  }
                },
                "required": [
                  "skuId"
                ]
              },
              "example": {
                "skuId": "10002"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "brand": {
                            "type": "string"
                          },
                          "model": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "timestamp": 1,
                  "data": [
                    {
                      "brand": "string",
                      "model": "string"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/updateAdb": {
      "post": {
        "summary": "Update ADB Connection Status",
        "description": "Turn ADB access on or off for one or more Cloud Phones.\n\n- **Preconditions**: only phones whose SKU supports ADB are considered; if none of the supplied phones qualifies, the call is rejected. Phones that never had an instance allocated are skipped.\n- **Effect**: sets the ADB switch with the service and persists it for the phones the service accepted.\n- **Partial failure**: if some phones succeed and others do not, **the call still reports an error**. Treat a failure as “some phones may have been changed” and re-read state.\n- **Completion**: synchronous. Read the connection details with `/cloudphone/batchAdbInfo`, which only returns data for phones that are powered on and ADB-capable.\n\nDocumented business errors: `33350`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "updateAdbUsingPOST",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enableAdb": {
                    "type": "boolean"
                  },
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enableAdb",
                  "ids"
                ]
              },
              "example": {
                "enableAdb": true,
                "ids": [
                  "1633612946805630"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error message"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Operation Request ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/batchAdbInfo": {
      "post": {
        "tags": [
          "ADB"
        ],
        "summary": "Batch Query ADB Info",
        "description": "Fetch ADB connection details for up to 200 Cloud Phones.\n\n- **Preconditions**: the phones must belong to your team. They do **not** need to be claimed by you. Details are only fetched for phones that are powered on and whose SKU supports ADB.\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Partial results**: results align with the requested ids and **never fail as a whole**. When details are unavailable, `remark` says why — the phone does not exist, is not powered on, does not support ADB, or the service lookup failed. Read `remark` before treating an empty entry as an error.\n- **Batch scope**: one request may include different device models; results are returned together.\n- **Note**: turn ADB on with `/cloudphone/updateAdb` first.",
        "operationId": "batchAdbInfoOpenApi",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiBatchAdbInfoDto"
              },
              "example": {
                "envIds": [
                  "1674380838117474",
                  "1675787900043353"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataListApiBatchAdbInfoResultDto"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": [
                    {
                      "id": "1674380838117474",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "192.168.1.100",
                      "adbPassword": "abc12345",
                      "adbPort": "5555",
                      "command": null,
                      "expireTime": null,
                      "remark": null
                    },
                    {
                      "id": "1675787900043353",
                      "supportAdb": true,
                      "envStatus": 2,
                      "adbIp": null,
                      "adbPassword": null,
                      "adbPort": null,
                      "command": null,
                      "expireTime": null,
                      "remark": "Environment is not powered on, unable to query ADB info"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/exeCommand": {
      "post": {
        "summary": "Execute ADB Shell Command",
        "description": "Run a shell command on a Cloud Phone and return its output.\n\n- **Preconditions**: the phone must be powered on and not held by another member.\n- **Effect**: entirely determined by the command. MoreLogin stores nothing and applies **no command allow-list and no length limit**; the privileges the command runs with are set by the device service. Enable global root separately if a command needs it.\n- **Completion**: synchronous — `data` is the command output, not a task id.\n- **Retry**: there is no execution record to consult, so a timeout leaves the outcome unknown. Only retry commands you know are safe to run twice.\n\nDocumented business errors: `33300`, `33301`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "executeShellCommand",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "command": {
                    "type": "string",
                    "description": "Shell command to execute"
                  }
                },
                "required": [
                  "id",
                  "command"
                ]
              },
              "example": {
                "command": "am start -n com.android.chrome/com.google.android.apps.chrome.Main",
                "id": "1674153897828425"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code: 0 indicates success, >0 indicates failure"
                    },
                    "data": {
                      "type": "string",
                      "description": "Response Information"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Response message:An error message will be returned when code is greater than 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Unique request identifier; include it when contacting support"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "data": "string",
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/rpa/template/market/page": {
      "post": {
        "operationId": "cloudphoneRpaTemplateMarketPagePost",
        "summary": "List Market Templates",
        "deprecated": false,
        "description": "List RPA templates from the public marketplace.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff. Templates are global, not team-scoped.\n- **Localization**: titles and descriptions are returned in the request language.\n- **Use**: `parameter` is a JSON string describing the template's variables and is what `templateParameter` must conform to when you create a schedule. It is null for templates that declare no variables.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template Name"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "pageNo": null,
                "pageSize": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the records for the requested page and is an empty array when there are no matches; `data.total`, `data.current` and `data.pages` describe the paging.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Market template title"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Template parameter JSON string"
                              },
                              "description": {
                                "type": "string",
                                "description": "Market template Description"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "sort"
                              },
                              "author": {
                                "type": "string",
                                "description": "author"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Last update time"
                              }
                            },
                            "required": [
                              "parameter"
                            ]
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Current page number"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Total pages"
                        },
                        "total": {
                          "type": "string",
                          "description": "Total count"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "author": "example-author",
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/template/personal/page": {
      "post": {
        "operationId": "cloudphoneRpaTemplatePersonalPagePost",
        "summary": "List Personal Templates",
        "deprecated": false,
        "description": "List the RPA templates your team created.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Contents**: a different store from the marketplace, scoped to your team, with plain single-language titles.\n- **Precedence**: when a template id exists in both stores, schedule creation resolves it to your team's template.\n- **Use**: `parameter` describes the template's variables, exactly as for marketplace templates.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template name"
                  },
                  "desc": {
                    "type": "string",
                    "description": "Template description"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "desc": "string",
                "pageNo": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the records for the requested page and is an empty array when there are no matches; `data.total`, `data.current` and `data.pages` describe the paging.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Market template title"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Template parameter JSON string"
                              },
                              "description": {
                                "type": "string",
                                "description": "Market template Description"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "sort"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Last update time"
                              }
                            }
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Current page number"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Total pages"
                        },
                        "total": {
                          "type": "string",
                          "description": "Total count"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/page": {
      "post": {
        "operationId": "cloudphoneRpaTaskPagePost",
        "summary": "List RPA Schedules",
        "deprecated": false,
        "description": "List RPA schedules for the team, page by page.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Use**: `taskState` on each schedule is the completion signal for `/cloudphone/rpa/task/cancel`.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "Is the plan enabled"
                  },
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Fuzzy search across schedule name, description, and template title"
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Schedule status; 0:awaiting execution; 1:Executing; 2:Execution completed 3:Cancel\n"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "default:1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "default:10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "taskState": 0,
                "searchKey": "daily login",
                "enabled": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the records for the requested page and is an empty array when there are no matches; `data.total`, `data.current` and `data.pages` describe the paging.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Schedule id"
                              },
                              "taskName": {
                                "type": "string",
                                "description": "Schedule Task name"
                              },
                              "createMember": {
                                "type": "string",
                                "description": "Member name"
                              },
                              "enabled": {
                                "type": "boolean",
                                "description": "Whether enabled"
                              },
                              "endTime": {
                                "type": "string",
                                "description": "Task end time"
                              },
                              "failCount": {
                                "type": "integer",
                                "description": "Number of failed executions"
                              },
                              "handleTime": {
                                "type": "string",
                                "description": "Execution start time"
                              },
                              "notes": {
                                "type": "string",
                                "description": "schedule notes"
                              },
                              "scheduleConfig": {
                                "type": "string",
                                "description": "Task schedule configuration"
                              },
                              "successCount": {
                                "type": "integer",
                                "description": "Number of successful executions"
                              },
                              "taskPreviewTimeTable": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "cloudPhoneId": {
                                      "type": "string",
                                      "description": "Cloud phone ID"
                                    },
                                    "cloudPhoneName": {
                                      "type": "string",
                                      "description": "Cloud phone name"
                                    },
                                    "times": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "description": "List of execution times"
                                    }
                                  }
                                }
                              },
                              "taskState": {
                                "type": "integer",
                                "description": "Schedule Task state. 0:waiting; 1:running; 2:completed 3:Cancel"
                              },
                              "templateId": {
                                "type": "string",
                                "description": "Template id"
                              },
                              "templateTitle": {
                                "type": "string",
                                "description": "Template title"
                              }
                            },
                            "required": [
                              "createMember"
                            ]
                          },
                          "description": "Plan list"
                        },
                        "current": {
                          "type": "string",
                          "description": "Current page number"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Total pages"
                        },
                        "total": {
                          "type": "string",
                          "description": "Total count"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "createMember": "string",
                        "enabled": true,
                        "endTime": "2026-09-01 12:00:00",
                        "failCount": 1,
                        "handleTime": "2026-09-01 12:00:00",
                        "notes": "string",
                        "scheduleConfig": "string",
                        "successCount": 1,
                        "taskPreviewTimeTable": [
                          {
                            "cloudPhoneId": "1673823102599682",
                            "cloudPhoneName": "example-name",
                            "times": [
                              "2026-09-01 12:00:00"
                            ]
                          }
                        ],
                        "taskState": 1,
                        "templateId": "1673823102599682",
                        "templateTitle": "example-title"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/save": {
      "post": {
        "operationId": "cloudphoneRpaTaskSavePost",
        "summary": "Creating a schedule",
        "deprecated": false,
        "description": "Save cloud phone scheduled task.\n\ntemplateParameter Parameter Specification\n 1. __Parameter Source__\nParameter keys must be extracted from the `parameter` field returned by the following APIs:\n- Get market template pages\n- Get Personal template pages\n2.  __Data Structure__\n- Submit parameters in JSON object format: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Final parameter values must be deserialized according to business logic before use\n3. __Common Type Parameters__\nFor the following parameter types, pass values directly in the corresponding format:\n- string: `{\"name\": \"John\"}`\n- decimal / number: `{\"amount\": 100.50}`\n- boolean: `{\"enabled\": true}`\n4. __Media Type Parameters__\nFor media parameters such as image (pic) or video (video), in addition to basic information, a fixed key `\"__Extra__\"` must be included. Example format:\n```json\n{\n    \"__Extra__\": {\n        \"pic\": {\n            \"name\": \"pic_name\",\n            \"size\": 204800\n        },\n        \"video\": {\n            \"name\": \"video_name\",\n            \"size\": 204800000\n        }\n    },\n    \"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n    \"video\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n5. __Parameter Configuration Example__\nThe following example demonstrates how to configure the `templateParameter` parameter when saving a plan using a market template:\n- __Step 1: Retrieve Template Parameters__\nCall the Market Template API:\n`GET /api/cloudphone/rpa/template/market/page`\nExtract the `parameter` field from the response, for example:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Video\\\",\\\"type\\\":\\\"video\\\",\\\"required\\\":true,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":1,\\\"sizeLimit\\\":{\\\"value\\\":200,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"mp4\\\",\\\"mov\\\"]}},\\\"videoDescription\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Video Caption\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":1000},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":2}},\\\"coverUrl\\\":{\\\"type\\\":\\\"image\\\",\\\"extra\\\":{\\\"name\\\":\\\"Cover Image\\\",\\\"type\\\":\\\"image\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":3,\\\"sizeLimit\\\":{\\\"value\\\":5,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}},\\\"enableAIGC\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"AI Label\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":4}},\\\"productId\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Product ID only supports digits, with a maximum of 50 characters.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product Title\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Get Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Step 2: Build the Parameter JSON__\nConstruct the JSON object according to the parameter requirements:\n```json\n{\n  \"__Extra__\": {\n    \"videoDownloadUrl\": {\n      \"name\": \"video_name.mp4\",\n      \"size\": 204800000\n    }\n  },\n  \"videoDownloadUrl\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n- __Step 3: Escape the JSON String__\nConvert the JSON object into an escaped string format:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\\\"}\"\n```\n- __Step 4: API Call__\nPass the escaped string as the value of the `templateParameter` parameter to the target API.\n",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskName": {
                    "type": "string",
                    "description": "Task name"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "Template ID"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "Template type. PERSONAL:personal; MARKET:marketplace"
                  },
                  "taskType": {
                    "type": "string",
                    "description": "Task type. TEMPORARY or SCHEDULED"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Plan notes"
                  },
                  "cloudPhoneConfigs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "Cloud phone ID"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Task execution time, UTC+0 time zone"
                        },
                        "templateParameter": {
                          "type": "string",
                          "description": "Template parameters are defined in personal templates or market templates. The parameters in the template are defined as:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} When requesting parameters, the parameter passed is:{\"Test\":\"xxxx\"}"
                        }
                      },
                      "required": [
                        "cloudPhoneId",
                        "triggerTime",
                        "templateParameter"
                      ]
                    },
                    "description": "Collection of cloud phone schedule configurations"
                  },
                  "scheduleConfig": {
                    "type": "object",
                    "properties": {
                      "endTime": {
                        "type": "string",
                        "description": "date-time"
                      },
                      "scheduleType": {
                        "type": "string",
                        "description": "Schedule type. ONCE:one-time; DAILY:daily"
                      }
                    },
                    "required": [
                      "endTime",
                      "scheduleType"
                    ],
                    "description": "Task schedule configuration"
                  }
                },
                "required": [
                  "cloudPhoneConfigs",
                  "scheduleConfig",
                  "taskName",
                  "taskType",
                  "templateId",
                  "templateType"
                ]
              },
              "example": {
                "cloudPhoneConfigs": [
                  {
                    "cloudPhoneId": "1661515884160372",
                    "triggerTime": "string",
                    "templateParameter": "string"
                  }
                ],
                "scheduleConfig": {
                  "endTime": "string",
                  "scheduleType": "string"
                },
                "taskName": "example-name",
                "taskType": "string",
                "templateId": "1661515884160372",
                "templateType": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single integer value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "integer",
                      "description": "Schedules id"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/onceTask/save": {
      "post": {
        "operationId": "cloudphoneRpaOnceTaskSavePost",
        "summary": "Create One-Time RPA Schedule",
        "deprecated": false,
        "description": "Save cloud phone once scheduled task\n\ntemplateParameter Parameter Specification\n 1. __Parameter Source__\nParameter keys must be extracted from the `parameter` field returned by the following APIs:\n- Get market template pages\n- Get Personal template pages\n2.  __Data Structure__\n- Submit parameters in JSON object format: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Final parameter values must be deserialized according to business logic before use\n3. __Common Type Parameters__\nFor the following parameter types, pass values directly in the corresponding format:\n- string: `{\"name\": \"John\"}`\n- decimal / number: `{\"amount\": 100.50}`\n- boolean: `{\"enabled\": true}`\n4. __Media Type Parameters__\nFor media parameters such as image (pic) or video (video), in addition to basic information, a fixed key `\"__Extra__\"` must be included. Example format:\n```json\n{\n    \"__Extra__\": {\n        \"pic\": {\n            \"name\": \"pic_name\",\n            \"size\": 204800\n        },\n        \"video\": {\n            \"name\": \"video_name\",\n            \"size\": 204800000\n        }\n    },\n    \"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n    \"video\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\nFor files already uploaded to MoreLogin Cloud Storage, use the cloud file protocol as the media or file parameter value: `morelogin://cloudfile?ids=1,2`. The `ids` value is a comma-separated list of Cloud Storage file IDs.\n5. __Parameter Configuration Example__\nThe following example demonstrates how to configure the `templateParameter` parameter when saving a plan using a market template:\n- __Step 1: Retrieve Template Parameters__\nCall the Market Template API:\n`POST /cloudphone/rpa/template/market/page`\nExtract the `parameter` field from the response, for example:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Video\\\",\\\"type\\\":\\\"video\\\",\\\"required\\\":true,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":1,\\\"sizeLimit\\\":{\\\"value\\\":200,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"mp4\\\",\\\"mov\\\"]}},\\\"videoDescription\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Video Caption\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":1000},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":2}},\\\"coverUrl\\\":{\\\"type\\\":\\\"image\\\",\\\"extra\\\":{\\\"name\\\":\\\"Cover Image\\\",\\\"type\\\":\\\"image\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":3,\\\"sizeLimit\\\":{\\\"value\\\":5,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}},\\\"enableAIGC\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"AI Label\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":4}},\\\"productId\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Product ID only supports digits, with a maximum of 50 characters.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product Title\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Get Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Step 2: Build the Parameter JSON__\nConstruct the JSON object according to the parameter requirements:\n```json\n{\n  \"__Extra__\": {\n    \"videoDownloadUrl\": {\n      \"name\": \"video_name.mp4\",\n      \"size\": 204800000\n    }\n  },\n  \"videoDownloadUrl\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\n- __Step 3: Escape the JSON String__\nConvert the JSON object into an escaped string format:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"morelogin://cloudfile?ids=1,2\\\"}\"\n```\n- __Step 4: API Call__\nPass the escaped string as the value of the `templateParameter` parameter to the target API.\n\nDocumented business errors: `33814`, `33818`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cloudPhoneId": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "scheduleName": {
                    "type": "string",
                    "description": "Schedule name"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "Template ID,  Personal template or market template ID"
                  },
                  "templateParameter": {
                    "type": "string",
                    "description": "Template parameters are defined in personal templates or market templates. The parameters in the template are defined as:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} When requesting parameters, the parameter passed is:{\"Test\":\"xxxx\"}"
                  },
                  "description": {
                    "type": "string",
                    "description": "Schedule description"
                  }
                },
                "required": [
                  "cloudPhoneId",
                  "scheduleName",
                  "templateId"
                ]
              },
              "example": {
                "cloudPhoneId": "16783319661123",
                "scheduleName": "test",
                "templateId": "1678347487160256",
                "templateParameter": "{\"keyword\": \"abc\"}",
                "description": "schedule description"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is a single integer value.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "integer",
                      "description": "Schedules id"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/cancel": {
      "post": {
        "operationId": "cloudphoneRpaTaskCancelPost",
        "summary": "Cancel RPA Schedule",
        "deprecated": false,
        "description": "Cancel an RPA schedule and every execution of it that has not finished.\n\n- **Preconditions**: the schedule must exist in the team. A finished schedule cannot be cancelled; an already cancelled one returns success without doing anything.\n- **Effect**: the schedule is marked cancelled **synchronously**, and a cancel request is queued for each pending, waiting, executing or checking execution.\n- **Completion**: mixed. Read the schedule state from `/cloudphone/rpa/task/page`, but confirm individual executions through `/cloudphone/rpa/subTask/page` — an execution already running stops asynchronously, not at once.\n- **Retry**: idempotent.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Plan id"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is always null for this operation; the outcome is carried by `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/page": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskPagePost",
        "summary": "List Task Execution Records",
        "deprecated": false,
        "description": "List individual RPA executions, page by page.\n\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Status values**: `taskState` is `0` waiting, `1` running, `2` queued, `3` succeeded, `4` failed, `5` cancelled. Waiting and queued are distinguished by whether the execution is still on its original trigger time.\n- **Search caveat**: template-title search resolves titles in the current request language first, so a title that does not match that language returns an empty page rather than all executions.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task id"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task name",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Plan status; 0:awaiting execution; 1:Executing; 2:Execution completed 3:Cancel",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template id",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template title",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "cloud phone id",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Cloud phone name",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task start time UTC+0 time zone",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task end time UTC+0 time zone\n",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data.dataList` holds the records for the requested page and is an empty array when there are no matches; `data.total`, `data.current` and `data.pages` describe the paging.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ExecutionDTO"
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Current page number"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Total pages"
                        },
                        "total": {
                          "type": "string",
                          "description": "Total count"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "taskState": 1,
                        "cloudPhoneId": "1673823102599682",
                        "cloudPhoneName": "example-name",
                        "templateName": "example-name",
                        "handleFailCode": "string",
                        "handleFailReason": "string",
                        "handleResult": 1,
                        "handleResultAttachment": "string",
                        "handleTime": "2026-09-01 12:00:00",
                        "endTime": "2026-09-01 12:00:00",
                        "powerOnTime": "2026-09-01 12:00:00",
                        "triggerNextTime": "2026-09-01 12:00:00",
                        "triggerTime": "2026-09-01 12:00:00",
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": "string",
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/detail/{id}": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskDetailIdPost",
        "summary": "Get Task Execution Details",
        "deprecated": false,
        "description": "Return the detail of a single RPA execution.\n\n- **Preconditions**: the execution must belong to your team. The call fails if the execution, its schedule, or its Cloud Phone no longer exists.\n- **Effect**: none. Read-only. Safe to retry with bounded backoff.\n- **Status values**: same scale as `/cloudphone/rpa/subTask/page`.\n- **Note**: proxy details are resolved even for proxies that have since been deleted, so a historical run still shows what it used.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Execution task id",
            "required": true,
            "example": 1678919049331331,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task id"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task name",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Plan status; 0:awaiting execution; 1:Executing; 2:Execution completed 3:Cancel",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template id",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Template title",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "cloud phone id",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Cloud phone name",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task start time UTC+0 time zone",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Task end time UTC+0 time zone\n",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Default:10"
                  }
                }
              },
              "example": {
                "taskId": null,
                "taskName": null,
                "taskState": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id`, `taskName`, `taskState`, `cloudPhoneId`, `cloudPhoneName`, `templateName`, ….",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Execution record id"
                        },
                        "taskName": {
                          "type": "string",
                          "description": "Schedule Task name"
                        },
                        "taskState": {
                          "type": "integer",
                          "description": "Schedule status; 0:awaiting execution; 1:Executing; 2:Execution completed 3:Cancel"
                        },
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "Cloud phone ID"
                        },
                        "cloudPhoneName": {
                          "type": "string",
                          "description": "Cloud phone name"
                        },
                        "templateName": {
                          "type": "string",
                          "description": "Template title"
                        },
                        "handleFailCode": {
                          "type": "string",
                          "description": "Task failure code"
                        },
                        "handleFailReason": {
                          "type": "string",
                          "description": "Task failure reason"
                        },
                        "handleResult": {
                          "type": "integer",
                          "description": "Task result. 0:failed; 1:succeeded"
                        },
                        "handleResultAttachment": {
                          "type": "string",
                          "description": "Task execution result attachment"
                        },
                        "handleTime": {
                          "type": "string",
                          "description": "Execution time"
                        },
                        "endTime": {
                          "type": "string",
                          "description": "Task end time"
                        },
                        "powerOnTime": {
                          "type": "string",
                          "description": "Cloud phone power-on time"
                        },
                        "triggerNextTime": {
                          "type": "string",
                          "description": "Next scheduled trigger time"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Scheduled trigger time"
                        },
                        "createDate": {
                          "type": "string",
                          "description": "Creation time"
                        },
                        "createMember": {
                          "type": "string",
                          "description": "Creator"
                        },
                        "updateDate": {
                          "type": "string",
                          "description": "Last update time"
                        },
                        "updateMember": {
                          "type": "string",
                          "description": "Last updater"
                        }
                      }
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "id": "1673823102599682",
                    "taskName": "example-name",
                    "taskState": 1,
                    "cloudPhoneId": "1673823102599682",
                    "cloudPhoneName": "example-name",
                    "templateName": "example-name",
                    "handleFailCode": "string",
                    "handleFailReason": "string",
                    "handleResult": 1,
                    "handleResultAttachment": "string",
                    "handleTime": "2026-09-01 12:00:00",
                    "endTime": "2026-09-01 12:00:00",
                    "powerOnTime": "2026-09-01 12:00:00",
                    "triggerNextTime": "2026-09-01 12:00:00",
                    "triggerTime": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMember": "string",
                    "updateDate": "2026-09-01 12:00:00",
                    "updateMember": "2026-09-01 12:00:00"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/cancel/{id}": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskCancelIdPost",
        "summary": "Cancel Task Execution",
        "deprecated": false,
        "description": "Cancel a single RPA execution without touching its schedule.\n\n- **Preconditions**: the execution record must exist in the team. A finished one cannot be cancelled; an already cancelled one returns success without doing anything.\n- **Effect**: **queues a cancel request only — no state is written by this call.** The schedule keeps running and later executions are unaffected. Use `/cloudphone/rpa/task/cancel` to stop the schedule itself.\n- **Completion**: asynchronous. Poll `/cloudphone/rpa/subTask/page` or the execution detail until the state becomes cancelled. An execution that is already running is not stopped instantly.\n- **Retry**: idempotent; a repeat only re-queues the request.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Plan id"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is always null for this operation; the outcome is carried by `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Error msg"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Request trace id"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/touch/click": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Touch - Click",
        "description": "Tap a point on the Cloud Phone screen.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Coordinates**: `pos` must hold exactly two values, `[x, y]`. **They are not checked against the screen resolution** — an off-screen point is passed through to the service.\n- **Completion**: synchronous. `data.status` is `finish` when the gesture completed, or `pending` when the service queued it. Some models always report `finish`. There is no endpoint to poll a `pending` gesture.\n- **Retry**: no deduplication. Two calls are two taps, so a blind retry after a timeout can double-tap.\n- **Note**: `duration` is accepted but ignored here; only long press reads it.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "touchClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/doubleClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Touch - Double Click",
        "description": "Double-tap a point on the Cloud Phone screen.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Effect**: on some models this is emulated as four touch events with fixed 50/100/50 ms gaps, so the tap rhythm is not configurable. `duration` is ignored.\n- **Completion**: synchronous. `data.status` is `finish` or `pending`, as for a single tap.\n- **Retry**: no deduplication; a repeat call double-taps again.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "touchDoubleClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/longClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Touch - Long Press",
        "description": "Press and hold a point on the Cloud Phone screen.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Values**: `duration` is the hold time in milliseconds, capped at 60000. **There is no lower bound**, so a negative value passes validation and is handed to the service. On some models an omitted `duration` defaults to 1000 ms.\n- **Completion**: synchronous. `data.status` is `finish` or `pending`.\n- **Retry**: no deduplication; a repeat call presses again.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "touchLongClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ],
                "duration": 2000
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/swipe": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Touch - Swipe",
        "description": "Swipe between two points on the Cloud Phone screen.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Values**: `pos1` is the start point and `pos2` the end point, each exactly `[x, y]`. `duration` is the gesture time in milliseconds, capped at 60000; on some models it defaults to 300 ms and the path is interpolated into five intermediate move events.\n- **Completion**: synchronous. `data.status` is `finish` or `pending`.\n- **Retry**: no deduplication; a repeat call swipes again.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "touchSwipe",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  540,
                  1500
                ],
                "pos2": [
                  540,
                  500
                ],
                "duration": 300
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/drag": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Touch - Drag",
        "description": "Drag between two points on the Cloud Phone screen.\n\n- **Preconditions**: the phone must be powered on and not held by another member. Supported on compatible device models only; incompatible models reject the call.\n- **Note**: **on some models this is the same implementation as swipe** — the service delegates drag straight to the swipe routine, so the two are indistinguishable there. Other models have a separate drag action.\n- **Completion**: synchronous. `data.status` is `finish` or `pending`.\n- **Retry**: no deduplication; a repeat call drags again.\n\nDocumented business errors: `33300`, `33301`, `33401`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.",
        "operationId": "touchDrag",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  200,
                  500
                ],
                "pos2": [
                  800,
                  500
                ],
                "duration": 500
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {},
  "components": {
    "schemas": {
      "ResponseDataPageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Status code, 0 means success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description message",
            "example": "Success"
          },
          "data": {
            "description": "Response data",
            "$ref": "#/components/schemas/PageResultCloudPhoneAppDto"
          }
        }
      },
      "PageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "description": "Total number of records",
            "example": "15"
          },
          "current": {
            "type": "string",
            "description": "Current page number",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "description": "Total number of pages",
            "example": "2"
          },
          "dataList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CloudPhoneAppDto"
            },
            "description": "List of team applications"
          }
        }
      },
      "CloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Record ID",
            "example": "123456"
          },
          "appName": {
            "type": "string",
            "description": "Application name",
            "example": "Facebook"
          },
          "packageName": {
            "type": "string",
            "description": "Android package name",
            "example": "com.facebook.katana"
          },
          "versionName": {
            "type": "string",
            "description": "Version display name",
            "example": "450.0.0.1"
          },
          "versionCode": {
            "type": "string",
            "description": "Version code",
            "example": "450000000"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the application is enabled",
            "example": true
          },
          "desc": {
            "type": "string",
            "description": "Application description",
            "example": "Social media application"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Whether ROOT access is enabled for the application",
            "example": false
          }
        }
      },
      "ApiAppRootOperateDto": {
        "type": "object",
        "required": [
          "id",
          "packageNames"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID",
            "example": "12345678"
          },
          "packageNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of application package names to allow ROOT access",
            "example": [
              "com.test"
            ]
          }
        }
      },
      "CloudPhoneSetProxyApiDto": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of cloud phone environment IDs",
            "example": [
              "1558968155668507"
            ]
          },
          "uniqueIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "List of display sequence IDs of cloud phone environments (used as reference mapping if envIds are not provided)",
            "example": [
              1001
            ]
          },
          "proxy": {
            "description": "Proxy settings",
            "$ref": "#/components/schemas/CloudPhoneProxyDto"
          }
        }
      },
      "CloudPhoneProxyDto": {
        "type": "object",
        "required": [
          "proxyIp",
          "proxyPort",
          "proxyProvider"
        ],
        "properties": {
          "proxyId": {
            "type": "string",
            "description": "Proxy Configuration ID (If this value is greater than 0, it means reusing an existing proxy configuration; if empty or <=0, it represents using the subsequent detailed parameters to create/update proxy details)",
            "example": "10002"
          },
          "proxyIp": {
            "type": "string",
            "description": "Proxy server IP address",
            "example": "192.168.1.100"
          },
          "proxyPort": {
            "type": "integer",
            "description": "Proxy server port",
            "minimum": 1,
            "maximum": 65535,
            "example": 8080
          },
          "proxyName": {
            "type": "string",
            "maxLength": 600,
            "description": "Proxy configuration name/description",
            "example": "test_proxy_01"
          },
          "proxyProvider": {
            "type": "integer",
            "description": "Proxy type 0:http, 1:https, 2:socks5",
            "example": 2
          },
          "username": {
            "type": "string",
            "maxLength": 200,
            "description": "Proxy authentication username",
            "example": "admin"
          },
          "password": {
            "type": "string",
            "maxLength": 100,
            "description": "Proxy authentication password",
            "example": "pwd123"
          },
          "refreshUrl": {
            "type": "string",
            "description": "API URL to refresh dynamic proxy IP",
            "example": "http://api.proxy.com/refresh"
          },
          "country": {
            "type": "string",
            "description": "Country code of the proxy location (e.g. CN, US)",
            "example": "US"
          },
          "state": {
            "type": "string",
            "description": "State/Province of the proxy location",
            "example": "California"
          },
          "city": {
            "type": "string",
            "description": "City of the proxy location",
            "example": "Los Angeles"
          }
        }
      },
      "CloudPhoneEnableRootApiDTO": {
        "type": "object",
        "required": [
          "id",
          "enableRoot"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID",
            "example": "1558968155668507"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Whether to enable global system-level ROOT permission",
            "example": true
          }
        }
      },
      "CloudPhoneProfile": {
        "type": "object",
        "properties": {
          "abnormalStatus": {
            "type": "integer",
            "description": "Abnormal status 0-No abnormality 1-Unactivated 2-Out-of-contract 3-Oversold 4-Deactivated"
          },
          "adbInfo": {
            "description": "ADB connection information",
            "$ref": "#/components/schemas/AdbInfo"
          },
          "billingType": {
            "type": "integer",
            "description": "Billing type: 1 = Pay-per-minute (On-demand), 2 = Monthly"
          },
          "createDate": {
            "description": "Creation time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMember": {
            "description": "Creator member ID",
            "type": "integer"
          },
          "createMemberName": {
            "description": "Creator member name",
            "type": "string"
          },
          "enableAdb": {
            "description": "Whether to enable ADB",
            "type": "boolean"
          },
          "envName": {
            "type": "string",
            "description": "Cloud Phone Name"
          },
          "envRemark": {
            "type": "string",
            "description": "Profile Remarks"
          },
          "envStatus": {
            "type": "integer",
            "description": "Profile Status:\n- 0: New\n- 1: Creation failed\n- 2: Powered off\n- 3: Booting\n- 4: Powered on\n- 5: Resetting\n- 6: Restarting\n- 7: One-click new machine in progress\n"
          },
          "expireTime": {
            "type": "string",
            "description": "expiration time"
          },
          "groupId": {
            "description": "Group ID",
            "type": "string"
          },
          "groupName": {
            "description": "Group name. Null when the cloud phone is ungrouped",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "Cloud phone ID",
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "cloud phone android id"
          },
          "gaid": {
            "type": "string",
            "description": "cloud phone gaid"
          },
          "lastConnectDate": {
            "description": "Last connection time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "Last connected member ID",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "Last connected member name",
            "type": "string"
          },
          "lastStartDate": {
            "description": "Last boot time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastStartMemberId": {
            "description": "Last boot member ID",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "Last boot member name",
            "type": "string"
          },
          "proxy": {
            "description": "Proxy settings",
            "$ref": "#/components/schemas/ProxyInfo"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "Proxy Status:0-Not Detected 1-Detecting 2-Detecting Failed 3-Detecting Successful"
          },
          "supportAdb": {
            "description": "Whether ADB is supported: 0 = no, 1 = yes",
            "type": "boolean"
          },
          "tagInfos": {
            "description": "Tag details. Empty array when no tags are assigned",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Tag ID",
                  "type": "string"
                },
                "tagName": {
                  "description": "Tag name",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "updateDate": {
            "description": "Update time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "updateMember": {
            "description": "Updater member ID",
            "type": "integer"
          }
        }
      },
      "AdbInfo": {
        "type": "object",
        "properties": {
          "adbIp": {
            "type": "string",
            "description": "adb ip"
          },
          "adbPassword": {
            "type": "string",
            "description": "adb connection password"
          },
          "adbPort": {
            "type": "string",
            "description": "adb port"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB SSH tunnel connection command"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB connection expiration time"
          },
          "remark": {
            "type": "string",
            "description": "Failure Remarks Information"
          },
          "success": {
            "type": "integer",
            "description": "Successful acquisition 1=Yes 0=No"
          }
        },
        "required": [
          "adbIp",
          "adbPassword",
          "adbPort",
          "remark",
          "success"
        ]
      },
      "ProxyInfo": {
        "type": "object",
        "properties": {
          "country": {
            "description": "Country",
            "type": "string"
          },
          "countryCode": {
            "description": "Country code",
            "type": "string"
          },
          "createDate": {
            "description": "Creation time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "delFlag": {
            "type": "integer",
            "description": "1 - deleted 2 - not deleted"
          },
          "expiryTime": {
            "description": "Expiration time",
            "type": "string"
          },
          "exportIp": {
            "description": "Outgoing IP address",
            "type": "string"
          },
          "groupId": {
            "description": "Group ID",
            "type": "string"
          },
          "id": {
            "description": "ID",
            "type": "string"
          },
          "providerCode": {
            "description": "Device type code",
            "type": "string"
          },
          "proxyAreaCode": {
            "description": "Proxy location area code",
            "type": "string"
          },
          "proxyCatagoryType": {
            "type": "integer",
            "description": "Proxy type:0:site group 1:cloud platform 2:own IP 3:vps 4:virtual machine"
          },
          "proxyCheckStatus": {
            "type": "integer",
            "description": "Detection status:0:pending detection 1:successful detection 2:detection failure 3:unknown error"
          },
          "proxyInfo": {
            "description": "Proxy details string",
            "type": "string"
          },
          "proxyIp": {
            "description": "Proxy server IP address",
            "type": "string"
          },
          "proxyName": {
            "description": "Proxy configuration name",
            "type": "string"
          },
          "proxyPort": {
            "description": "Proxy server port",
            "type": "integer"
          },
          "proxyRegionCode": {
            "description": "Proxy location region code",
            "type": "string"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "0-Normal 1-Pending allocation 2-Upgrading 3-Expired"
          },
          "proxySub": {
            "description": "Proxy subscription information",
            "$ref": "#/components/schemas/ProxySubscription"
          },
          "proxyType": {
            "type": "integer",
            "description": "Proxy type:0-http 1-https 2-socks5 4-Oxylabs 5-Proxys.io 6-GeoSurf 9-Oxylabsauto 10-Trogan 11-Shadowsocks 12-vmess"
          },
          "proxyTypeCode": {
            "description": "Proxy protocol type code",
            "type": "string"
          },
          "regionKey": {
            "description": "Cloud platform region key",
            "type": "string"
          },
          "releaseTime": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "Release time:deletion time if deleted, expiration time if expired"
          },
          "uniqueId": {
            "description": "Display sort sequence ID",
            "type": "integer"
          }
        },
        "required": [
          "country",
          "countryCode",
          "createDate",
          "delFlag",
          "expiryTime",
          "exportIp",
          "groupId",
          "id",
          "providerCode",
          "proxyAreaCode",
          "proxyCatagoryType",
          "proxyCheckStatus",
          "proxyInfo",
          "proxyIp",
          "proxyName",
          "proxyPort",
          "proxyRegionCode",
          "proxyStatus",
          "proxySub",
          "proxyType",
          "proxyTypeCode",
          "regionKey",
          "releaseTime",
          "uniqueId"
        ]
      },
      "ProxySubscription": {
        "type": "object",
        "properties": {
          "activeRecordId": {
            "description": "Active subscription record ID",
            "type": "string"
          },
          "businessId": {
            "description": "Proxy service business ID",
            "type": "string"
          },
          "createMember": {
            "description": "Creator member ID",
            "type": "integer"
          },
          "endTime": {
            "description": "End time",
            "type": "string"
          },
          "id": {
            "description": "Subscription ID",
            "type": "string"
          },
          "nextBillingTime": {
            "description": "Next billing/payment time",
            "type": "string"
          },
          "startTime": {
            "description": "Start time of validity",
            "type": "string"
          },
          "subPayMethod": {
            "description": "Subscription payment method",
            "type": "string"
          },
          "subStatus": {
            "type": "integer",
            "description": "Subscription Status:0-Pending 1-Subscribed 2-Cancelled"
          },
          "subType": {
            "type": "integer",
            "description": "Subscription Type:1-Agent 2-Package"
          },
          "teamId": {
            "description": "Team ID",
            "type": "string"
          }
        },
        "required": [
          "activeRecordId",
          "businessId",
          "createMember",
          "endTime",
          "id",
          "nextBillingTime",
          "startTime",
          "subPayMethod",
          "subStatus",
          "subType",
          "teamId"
        ]
      },
      "CloudPhoneDetail": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Cloud phone ID",
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "cloud phone android id"
          },
          "gaid": {
            "type": "string",
            "description": "cloud phone gaid"
          },
          "envName": {
            "description": "Environment name",
            "type": "string"
          },
          "groupId": {
            "description": "Group ID",
            "type": "string"
          },
          "groupName": {
            "description": "Group name. Null when the cloud phone is ungrouped",
            "type": [
              "string",
              "null"
            ]
          },
          "skuId": {
            "description": "Product SKU ID",
            "type": "string"
          },
          "tagInfos": {
            "description": "Tag details. Empty array when no tags are assigned",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Tag ID",
                  "type": "string"
                },
                "tagName": {
                  "description": "Tag name",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "billingType": {
            "description": "Billing type: 1 = Pay-per-minute (On-demand), 2 = Monthly",
            "type": "integer"
          },
          "proxyStatus": {
            "description": "Proxy status: 0 = not detected, 1 = detecting, 2 = detection failed, 3 = detection successful",
            "type": "integer"
          },
          "settings": {
            "description": "Advanced fingerprint settings",
            "type": "object",
            "properties": {
              "automaticGeo": {
                "type": "boolean"
              },
              "automaticLocation": {
                "type": "boolean"
              },
              "automaticLanguage": {
                "type": "boolean"
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "automaticGeo",
              "automaticLocation",
              "automaticLanguage",
              "longitude",
              "latitude"
            ]
          },
          "device": {
            "description": "Device hardware information",
            "type": "object",
            "properties": {
              "server": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "countryName": {
                "type": "string"
              },
              "rom": {
                "type": "integer"
              },
              "wifiBssid": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "bluetoothMac": {
                "type": "string"
              }
            },
            "required": [
              "server",
              "countryName",
              "rom",
              "wifiBssid",
              "bluetoothMac"
            ]
          },
          "proxy": {
            "description": "Proxy settings",
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "proxyName": {
                "type": "string"
              },
              "proxyIp": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "proxyName",
              "proxyIp"
            ]
          },
          "lastStartMemberId": {
            "description": "Last boot member ID",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "Last boot member name",
            "type": [
              "string",
              "null"
            ]
          },
          "lastStartDate": {
            "description": "Last boot time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "Last connected member ID",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "Last connected member name",
            "type": [
              "string",
              "null"
            ]
          },
          "lastConnectDate": {
            "description": "Last connection time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "envStatus": {
            "description": "Environment status: 0 = new, 1 = creation failed, 2 = powered off, 3 = booting, 4 = powered on, 5 = resetting, 6 = restarting, 7 = one-click new machine in progress",
            "type": "integer"
          },
          "abnormalStatus": {
            "description": "Abnormal status: 0 = normal, 1 = unactivated, 2 = arrears, 3 = oversold, 4 = deactivated",
            "type": "integer"
          },
          "expireTime": {
            "description": "Expiration time",
            "type": "string"
          },
          "envRemark": {
            "description": "Environment remark",
            "type": "string"
          },
          "createMember": {
            "description": "Creator member ID",
            "type": "string"
          },
          "updateMember": {
            "description": "Updater member ID",
            "type": "string"
          },
          "updateDate": {
            "description": "Update time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createDate": {
            "description": "Creation time",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMemberName": {
            "description": "Creator member name",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "envName",
          "groupId",
          "skuId",
          "tagInfos",
          "billingType",
          "proxyStatus",
          "settings",
          "device",
          "proxy",
          "lastStartMemberId",
          "lastStartMemberName",
          "lastStartDate",
          "lastConnectMemberId",
          "lastConnectMemberName",
          "lastConnectDate",
          "envStatus",
          "abnormalStatus",
          "expireTime",
          "envRemark",
          "createMember",
          "updateMember",
          "updateDate",
          "createDate",
          "createMemberName"
        ]
      },
      "ApiBatchAdbInfoDto": {
        "type": "object",
        "required": [
          "envIds"
        ],
        "properties": {
          "envIds": {
            "type": "array",
            "description": "List of environment IDs, maximum 200",
            "maxItems": 200,
            "minItems": 1,
            "items": {
              "type": "string"
            },
            "example": [
              "1674380838117474",
              "1675787900043353"
            ]
          }
        }
      },
      "ApiBatchAdbInfoResultDto": {
        "type": "object",
        "description": "Batch ADB info query result",
        "properties": {
          "id": {
            "type": "string",
            "description": "Environment ID"
          },
          "supportAdb": {
            "type": "boolean",
            "description": "Whether ADB is supported"
          },
          "enableAdb": {
            "type": "boolean",
            "description": "Enable ADB 0 = Disabled, 1 = Enabled"
          },
          "envStatus": {
            "type": "integer",
            "description": "Environment status:\n- 0: New\n- 1: Creation failed\n- 2: Powered off\n- 3: Booting\n- 4: Powered on\n- 5: Resetting\n- 6: Restarting\n- 7: One-click new machine in progress\n"
          },
          "adbIp": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB connection IP address"
          },
          "adbPassword": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB connection password"
          },
          "adbPort": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB connection port"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB SSH tunnel connection command"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB connection expiration time"
          },
          "remark": {
            "type": [
              "string",
              "null"
            ],
            "description": "Remark info. When ADB info cannot be retrieved, the reason is provided:\n- Environment does not exist\n- Environment is not powered on, unable to query ADB info\n- This environment does not support ADB\n- Failed to retrieve ADB info\n"
          }
        }
      },
      "ResponseDataListApiBatchAdbInfoResultDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Response code, 0 indicates success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Response message",
            "example": "success"
          },
          "data": {
            "type": "array",
            "description": "ADB info list, in the same order as the requested envIds",
            "items": {
              "$ref": "#/components/schemas/ApiBatchAdbInfoResultDto"
            }
          }
        }
      },
      "ExecutionDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Execution record id"
          },
          "taskName": {
            "type": "string",
            "description": "Schedule Task name"
          },
          "taskState": {
            "type": "integer",
            "description": "Schedule status; 0:awaiting execution; 1:Executing; 2:Execution completed 3:Cancel"
          },
          "cloudPhoneId": {
            "type": "string",
            "description": "Cloud phone ID"
          },
          "cloudPhoneName": {
            "type": "string",
            "description": "Cloud phone name"
          },
          "templateName": {
            "type": "string",
            "description": "Template title"
          },
          "handleFailCode": {
            "type": "string",
            "description": "Task failure code"
          },
          "handleFailReason": {
            "type": "string",
            "description": "Task failure reason"
          },
          "handleResult": {
            "type": "integer",
            "description": "Task result. 0:failed; 1:succeeded"
          },
          "handleResultAttachment": {
            "type": "string",
            "description": "Task execution result attachment"
          },
          "handleTime": {
            "type": "string",
            "description": "Execution time"
          },
          "endTime": {
            "type": "string",
            "description": "Task end time"
          },
          "powerOnTime": {
            "type": "string",
            "description": "Cloud phone power-on time"
          },
          "triggerNextTime": {
            "type": "string",
            "description": "Next scheduled trigger time"
          },
          "triggerTime": {
            "type": "string",
            "description": "Scheduled trigger time"
          },
          "createDate": {
            "type": "string",
            "description": " Creation time"
          },
          "createMember": {
            "type": "string",
            "description": "Creator"
          },
          "updateDate": {
            "type": "string",
            "description": "Last update time"
          },
          "updateMember": {
            "type": "string",
            "description": "Last updater"
          }
        }
      },
      "TouchClickRequest": {
        "type": "object",
        "required": [
          "id",
          "pos"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID",
            "example": "1558968155668507"
          },
          "pos": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Tap coordinates [x, y]. The coordinate system uses the top-left corner as origin (0, 0).",
            "example": [
              540,
              960
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Press duration in milliseconds (used for long press). If omitted, the default duration is used.",
            "example": 2000
          }
        }
      },
      "TouchSwipeRequest": {
        "type": "object",
        "required": [
          "id",
          "pos1",
          "pos2"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID",
            "example": "1558968155668507"
          },
          "pos1": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Start coordinates [x, y]",
            "example": [
              540,
              1500
            ]
          },
          "pos2": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "End coordinates [x, y]",
            "example": [
              540,
              500
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Swipe/drag duration in milliseconds. A larger value results in a slower action.",
            "example": 300
          }
        }
      },
      "TouchResultResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Status code, 0 means success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Response message",
            "example": "success"
          },
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "description": "Execution status",
                "example": "finish"
              }
            }
          }
        }
      },
      "ResponseEnvelopeBase": {
        "type": "object",
        "required": [
          "code",
          "msg",
          "requestId"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Business result code; `0` indicates success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message; null when successful",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Request ID for troubleshooting",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        }
      },
      "MonthlyCloudPhoneSkuPrice": {
        "type": "object",
        "required": [
          "price",
          "period",
          "periodUnit"
        ],
        "properties": {
          "price": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured price in US cents"
          },
          "period": {
            "type": "integer",
            "description": "Billing-period count returned by the product service"
          },
          "periodUnit": {
            "type": "string",
            "description": "Localized billing-period unit returned by the product service"
          },
          "priceDesc": {
            "type": [
              "string",
              "null"
            ],
            "description": "Localized display price, when configured"
          }
        }
      },
      "MonthlyCloudPhoneSku": {
        "type": "object",
        "required": [
          "skuId",
          "skuName",
          "prices"
        ],
        "properties": {
          "skuId": {
            "type": "string",
            "description": "Monthly Cloud Phone product ID"
          },
          "skuName": {
            "type": "string",
            "description": "Product name returned in the product-service language"
          },
          "cloudPhoneAndroidVersion": {
            "type": [
              "string",
              "null"
            ],
            "description": "Android version, or null when the product has no configured value"
          },
          "cloudPhoneStorage": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Storage capacity in GB, or null when the product has no configured value"
          },
          "prices": {
            "type": "array",
            "minItems": 1,
            "description": "Active monthly price configurations",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneSkuPrice"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "description": "One to ten distinct positive Cloud Phone IDs, encoded as strings to preserve 64-bit precision",
            "items": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivationResult": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVATED",
              "FAILED",
              "UNKNOWN"
            ],
            "description": "Activation result"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$",
            "description": "Unix time in milliseconds; present for a successful activation"
          },
          "errorCode": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Business error code for a failed item"
          }
        }
      },
      "MonthlyCloudPhoneActivationData": {
        "type": "object",
        "required": [
          "orderId",
          "orderStatus",
          "results"
        ],
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Paid balance-order ID"
          },
          "orderStatus": {
            "type": "integer",
            "enum": [
              1
            ],
            "description": "Order status; 1 means completed"
          },
          "results": {
            "type": "array",
            "description": "One result per requested ID, in request order",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneActivationResult"
            }
          }
        }
      },
      "CloudPhoneLiveStartRequest": {
        "type": "object",
        "required": [
          "phoneId",
          "fileId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          },
          "fileId": {
            "type": "string",
            "description": "ID of an uploaded MP4 live-streaming file (`uploadType=2`)",
            "example": "820000000000000001"
          }
        }
      },
      "CloudPhoneLivePhoneRequest": {
        "type": "object",
        "required": [
          "phoneId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          }
        }
      }
    },
    "securitySchemes": {
      "Authorization": {
        "type": "http",
        "description": "Token for request access token interface response access_token field",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "responses": {
      "BalanceResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "balance",
                        "remainingDuration",
                        "remainingConcurrency"
                      ],
                      "properties": {
                        "balance": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Available wallet balance in cents"
                        },
                        "remainingDuration": {
                          "type": "string",
                          "pattern": "^[0-9]+$",
                          "description": "Remaining cloud phone duration in minutes, serialized as a numeric string"
                        },
                        "remainingConcurrency": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Remaining team-level cloud phone concurrency"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "balance": 12500,
                "remainingDuration": "120",
                "remainingConcurrency": 3
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "MonthlyCloudPhoneSkusResponse": {
        "description": "Request processed; `data` is an empty array when no monthly product is available",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonthlyCloudPhoneSku"
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": [
                {
                  "skuId": "10015",
                  "skuName": "Android 14",
                  "cloudPhoneAndroidVersion": "Android 14",
                  "cloudPhoneStorage": 64,
                  "prices": [
                    {
                      "price": 2500,
                      "period": 30,
                      "periodUnit": "days",
                      "priceDesc": "$25/30 days"
                    }
                  ]
                }
              ],
              "requestId": "36d574df5b9e41b5b3c796133ff5a079"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateResponse": {
        "description": "Request processed; inspect `code`, and inspect `data.results` when returned",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MonthlyCloudPhoneActivationData"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "orderId": "1724032801202461",
                "orderStatus": 1,
                "results": [
                  {
                    "id": "1724032706822188",
                    "status": "ACTIVATED",
                    "expireTime": "1791103955843",
                    "errorCode": null
                  }
                ]
              },
              "requestId": "db5e04c2eb804cdfb96b1469c7379bbc"
            }
          }
        }
      },
      "CloudPhoneLiveBooleanResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "boolean",
                      "description": "Whether the live-streaming operation succeeded"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": true,
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "CloudPhoneLiveStatusResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "liveStatus": {
                          "type": "integer",
                          "enum": [
                            0,
                            1
                          ],
                          "description": "Live status (`0` = stopped, `1` = running)"
                        },
                        "writeFileId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file ID, when available"
                        },
                        "liveFilePath": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file path or URL, when available"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "liveStatus": 1,
                "writeFileId": "820000000000000001",
                "liveFilePath": null
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.morelogin.com",
      "description": "MoreLogin open api endpoint"
    }
  ],
  "security": [
    {
      "Authorization": []
    }
  ]
}