Some MoreLogin operations accept work before the underlying browser, Cloud Phone, file, application, or RPA execution reaches its final state. A successful submission response means the request was accepted; it does not always mean the requested state has already been reached.
| State | Meaning | Client action |
|---|---|---|
| Submitted | The API accepted the command or created a task | Save returned IDs and requestId; do not immediately submit the same write again |
| Pending or running | The downstream operation is still progressing | Poll the documented status/result endpoint with increasing intervals |
| Succeeded | The target resource or task reached its successful terminal state | Stop polling and continue the workflow |
| Failed | The status/result endpoint reports failure or a terminal business error | Stop automatic retries; retain IDs, failure details, and requestId |
| Unknown outcome | The write timed out or the connection closed without a usable response | Query current resource/task state before deciding whether to retry |
- Start around 1 second, then increase the interval to 2, 4, 8 seconds, capped at 15–30 seconds.
- Apply jitter so concurrent clients do not poll at the same instant.
- Stop on a documented terminal state; do not poll indefinitely.
- Treat
data: nullas pending only when the endpoint explicitly documents that behavior. - A transport timeout on a write is not proof of failure.
| Workflow | Submit operation | Observation operation | Terminal state |
|---|---|---|---|
| Cloud browser start/stop | POST /cloudbrowser/start or /cloudbrowser/stop | POST /cloudbrowser/page | Runtime reaches the intended state or disappears after stop |
| Cloud Phone power | POST /cloudphone/powerOn or /cloudphone/powerOff | POST /cloudphone/page | envStatus=4 powered on or envStatus=2 powered off; 1 is creation failure |
| Cloud Phone file upload | Upload to the signed URL, then POST /cloudphone/uploadFile | POST /cloudphone/uploadFileResult | status=1 success or status=2 failure; data: null and status=0 are pending |
| Cloud Phone download | POST /cloudphone/download | POST /cloudphone/download/result | status=20 success, 30 failure, or 40 cancelled; 10 is running |
| Application installation | POST /cloudphone/app/install | POST /cloudphone/app/installedList | Requested package appears in the installed-app list |
| RPA schedule/execution | POST /cloudphone/rpa/task/save or /onceTask/save | POST /cloudphone/rpa/task/page, /subTask/page, and /subTask/detail/{id} | taskState=2 completed or 3 cancelled; inspect handleResult (0 failed, 1 succeeded) |
| Live streaming | POST /cloudphone/live/start or /live/end | POST /cloudphone/live/status | Status confirms streaming started or stopped |
| Cloud storage upload | POST /cloudstorage/upload/init, followed by object-store PUT | POST /cloudstorage/upload/complete after every required PUT succeeds | Completion response succeeds; never call complete before object upload succeeds |
Local API equivalents use the /api prefix where documented. See the Endpoint Retry and Completion Matrix for operation-by-operation guidance.
try:
submit_operation()
except TimeoutError:
# The write may already have succeeded.
current = query_current_state()
if current.is_terminal_success:
pass
elif current.is_pending:
poll_until_terminal()
else:
decide_whether_retry_is_safe(current)The public API does not currently define a general idempotency-key header. Resource IDs, task IDs, state queries, and requestId are therefore essential to safe recovery.