This page lists common error codes returned by the MoreLogin API.
All API responses follow this standard format:
{
"code": 0,
"msg": null,
"data": {},
"requestId": "unique-request-id"
}| Field | Type | Description |
|---|---|---|
code | integer | 0 = success, >0 = error |
msg | string | Error message (null when successful) |
data | object | Response data |
requestId | string | Unique request identifier for troubleshooting |
Codes are not allocated from one flat list. Each product area owns a range, so the first two or three digits tell you which subsystem rejected the request:
| Range | Area |
|---|---|
14xxx | Proxies |
15xxx | Groups and tags |
19xxx | Browser profiles |
20xxx | Wallet, orders, and billing |
21001 | Client version too low |
33xxx | Cloud Phone |
35xxx | API authentication and rate limiting |
39xxx | Cloud Storage |
40xxx | Cloud Browser runtimes |
41xxx | Webhook configuration |
99xxx | Gateway and request validation |
Individual operations list the codes they are known to return. See the per-product matrices linked from the Endpoint Retry and Completion Matrix.
Returned by any operation, because they come from request validation, permission checks, and the gateway rather than from business logic.
| Code | Description | Solution |
|---|---|---|
0 | Success | — |
21001 | Client version too low | Upgrade the MoreLogin desktop client |
35000 | API requests are too frequent | Retry eligible operations with backoff and jitter; see Rate Limits |
99000 | Unknown system error | Retry later and provide requestId to support |
99001 | Invalid parameters | Check request body format and required fields |
99002 | Permission denied | Check your account permissions |
99003 | Request exception | Make the necessary business adjustment based on msg |
99004 | Request body too large | Reduce the request body |
99005 | Request already in progress | Wait for the in-flight request to finish before retrying |
99006 | Bad request | Check the HTTP method, headers, and body |
99007 | Request IP is not allow-listed | Add the caller IP to the allow list |
99008 | IP or device request quota exceeded | Reduce request volume from this IP or device |
99009 | Too many requests | Back off with jitter and retry |
99011 | Request timestamp expired | Resend with a current timestamp |
99012 | Cost permission is required | Use the team owner account, or grant cost permission |
| Code | Description | Solution |
|---|---|---|
20002 | The original monthly order was cancelled | Create a new monthly purchase for eligible Cloud Phones |
20003 | The original monthly order was refunded | Create a new monthly purchase for eligible Cloud Phones |
20004 | The original monthly order does not exist | Verify the Cloud Phone purchase state and contact support with requestId if it persists |
20008 | The original monthly order is not completed or its status cannot be confirmed | Check the order and Cloud Phone state before retrying |
20055 | A Cloud Phone does not exist, was deleted, or does not belong to the team | Verify every Cloud Phone ID and team ownership |
20068 | A pending monthly payment order already exists | Complete or cancel the pending order before using the activation API |
20070 | A concurrent Cloud Phone purchase is already in progress | Wait for the in-flight purchase to settle, then read state before retrying |
20071 | A selected monthly SKU is unavailable or has no active 30-day price | Query the monthly SKU endpoint again and choose an available product |
33420 | Paid and unpaid Cloud Phones cannot be activated in the same batch | Separate Cloud Phones by purchase state and submit compatible batches |
33421 | Paid Cloud Phones from different purchase orders cannot be mixed | Submit one activation batch per original purchase order |
33422 | Payment succeeded but activation is incomplete or cannot yet be confirmed | Inspect data.results and each Cloud Phone's expiry state; do not pay again blindly |
33300 | Cloud Phone does not exist | Verify the Cloud Phone ID and that it belongs to your team |
33301 | Cloud Phone is not powered on | Power it on and wait for a runnable state |
33308 | Another member is using it, cannot power off | Retry once the other member releases it |
33309 | Another member is using it, cannot connect | Retry once the other member releases it |
33315 | Account in arrears, Cloud Phone frozen | Top up the wallet |
33316 | Not enough available profiles | Upgrade the plan |
33317 | Profile permission was revoked | Ask an administrator to grant access |
33318 | Insufficient balance to power on | Top up the wallet |
33321 | Profile is unavailable | Check the profile state before retrying |
33322 | Proxy check in progress | Poll until the check finishes |
33323 | Profile is starting | Wait for the start to finish; do not resend |
33324 | Profile is already running | No action needed |
33325 | Profile is deactivated | Reactivate it before use |
33331 | One-click new device in progress, cannot power off | Wait for it to finish |
33332 | Restart in progress, cannot power off | Wait for it to finish |
33333 | Reset in progress, cannot power off | Wait for it to finish |
33338–33345 | Country, time zone, language, longitude, or latitude missing or invalid | See Country Time Zone Table |
33346 | SKU is no longer on sale | Choose another skuId |
33347 | Model requires the latest Windows client | Upgrade the MoreLogin desktop client |
33367 | Under maintenance, cannot power on | Check system notices for the recovery window |
33376 | Monthly billing expired | Renew the subscription |
33398–33400 | Longitude, latitude, or altitude out of range | Longitude −180…180, latitude −90…90, altitude −50000…100000 |
33401 | Cloud Phone does not support this operation | Use a supported model |
33407 | Concurrency package quota exceeded | Wait for a slot or raise the quota |
33408 | Phone number format is invalid | Start with +, 1–3 digit country code excluding 86, 8–14 digits total |
33418 | Live-streaming file does not exist or is invalid | Upload with uploadType=2 and use the returned fileId |
33419 | Live-streaming file format is unsupported | Upload an MP4 through /cloudphone/uploadFile |
33005 | App installation failed | Retry; check storage space on the device |
33014 | Operation too frequent | Back off and retry |
33714 | App does not exist or was delisted | Refresh the app library |
33814 | RPA template does not exist | List templates again and use a current templateId |
33818 | RPA template parameter format is invalid | Send templateParameter as an escaped JSON string |
33303 | Creating the Cloud Phone failed | Query /cloudphone/page before retrying; do not resend blindly |
33320 | The proxy bound to this Cloud Phone was deleted | Rebind a proxy with /cloudphone/setProxy |
33326 | Another member is using it, cannot replace the device | Retry once the other member releases it |
33350 | ADB could not be enabled on some Cloud Phones | Those phones are not running or do not support ADB; re-read state and retry only those |
33507 | File does not exist on the device | Check the path; the download request scans the parent directory before transferring |
Installation and power operations can additionally surface a provider-mapped code from the 33001–33033, 33500–33520, 33700–33724, or 33900–33910 ranges. Which of those is reachable depends on the provider serving the device, so operations do not list them individually.
| Code | Description | Solution |
|---|---|---|
19001 | Profile name already exists | Choose a unique name, or omit envName to get a generated one |
19002 | Profile creation failed downstream | Confirm with /env/page before retrying |
19004 | User agent format is invalid | Send a parseable advancedSetting.ua |
19005 | Cookie format is invalid | Send cookies as an escaped JSON array string |
19039 | Profile not found | Verify envId / uniqueId and that it belongs to your team |
19063 | Profile count limit reached | Delete profiles or upgrade the plan |
19064 | No permission for this group | Ask an administrator for group access |
19065 | No permission for this profile | Ask an administrator for profile access |
19099 | Not enough available profiles, profile use is restricted | Upgrade the plan |
19100 | Platform ID is invalid | Use a platformId returned by /system/platform/list |
19101 | Site ID is invalid | Use a siteId returned by /system/platform/list |
19102 | Custom platform URL must not be empty | Send platformUrl when platformId is 9999 |
19103 | Auto-open URL format is invalid | Send valid absolute URLs in afterStartupConfig |
19104 | Group ID is invalid | Use a group that exists in your team |
19105 | Tag ID is invalid | Use tags that exist in your team |
19106 | Proxy ID is invalid | Use a proxy that exists in your team, or omit proxyId |
19107 | Browser kernel version is invalid | Pick a version from /env/advanced/ua/versions |
19108 | User agent version is invalid | Pick a version from /env/advanced/ua/versions |
19109 | User agent version does not match the user agent | Make uaVersion agree with advancedSetting.ua, or send only one |
19110 | Custom URL format is invalid | Send a valid absolute URL |
19111 | Firefox supports only Windows and macOS | Choose Windows or macOS, or switch to Chrome |
19112 | Encryption key is not set, profile encryption cannot be enabled | Configure a team encryption key, or send isEncrypt=0 |
19141 | Limited to 100 characters, digits, letters and spaces only | Shorten accountInfo.otpSecret and remove other characters |
19142 | End-to-end encrypted profiles cannot be modified | Use the MoreLogin client for encrypted profiles |
19143 | Client version is too low to match the kernel | Upgrade the MoreLogin desktop client |
19147 | Daily creation limit exceeded | Upgrade the plan to raise the limit |
19149 | No cache type was selected | Set at least one cache class to clear |
19159 | Operating system does not match the advanced settings | The OS cannot be changed on update; keep advancedSetting.os as stored |
19160 | Browser type does not match the advanced settings | The browser cannot be changed on update; keep advancedSetting.vendor as stored |
19175 | Coordinates outside the service area | Choose coordinates within the supported area |
19193 | The sharer disabled editing for this profile | Ask the owner to allow editing |
| Code | Description | Solution |
|---|---|---|
39001 | Cloud drive information not found | Check that Cloud Storage is provisioned for the team |
39011 | File not found | Verify the file ID |
39014 | File access URL is empty | Re-register the upload |
39037 | File extension parameter is invalid | Send a supported extension |
39041 | Storage quota reached | Delete files to free space |
39044 | Duplicate file name | Rename the file |
39045 | Too many pending pre-signed uploads | Complete or abandon pending uploads first |
39046 | File was not uploaded successfully | Upload to the pre-signed URL before calling complete |
39047 | Cloud drive expired | Renew Cloud Storage |
39048 | Cloud Storage tag not found | Use a tag returned by /cloudstorage/tag/all |
39049 | Tag IDs must not be empty | Send at least one tag; an empty list is rejected |
39050 | File name longer than 60 characters | Shorten the name |
39051 | File size must be greater than 0 B and smaller than 2 GB | Split or compress the file |
| Code | Description | Solution |
|---|---|---|
14003 | Proxy update failed, or the proxy does not exist | Verify the proxy ID |
14017 | Proxy cannot be deleted | An unexpired cloud-platform proxy cannot be removed; wait for expiry |
14023 | Proxy provider does not exist | Use a supported provider value |
14024 | Proxy does not exist | Verify the proxy IDs |
14519 | Dynamic proxies cannot be modified | Manage dynamic proxies outside the proxy endpoints |
20018 | Could not read the product price | Retry later and provide requestId to support |
20029 | Wallet account is unavailable | Verify the team wallet |
20032 | Balance query failed | Retry later and provide requestId to support |
20041 | Insufficient balance | Top up the wallet |
These are returned by /cloudbrowser/start, /cloudbrowser/stop and /cloudbrowser/connect. Codes raised after the start request is dispatched surface through /cloudbrowser/page, not in the start response.
| Code | Description | Solution |
|---|---|---|
40001 | Cloud browser is already running | No action needed; connect to the existing run |
40002 | Cloud browser cannot be stopped in its current state | Re-read /cloudbrowser/page and retry |
40003 | Proxy check failed | Verify the bound proxy is reachable |
40006 | Cloud browser operation failed | Retry; if archiving failed, see cloudBrowserArchiveStatus |
40008 | No running cloud browser was found | Start one first, or re-read /cloudbrowser/page |
40009 | Cannot connect to a run started by another member | Ask that member to release it |
40010 | Connecting to the cloud browser failed | Retry; the desktop access token could not be minted |
40015 | The profile has no proxy bound | Bind a proxy with /env/setProxy/batch first |
40016 | The start request could not be dispatched | Retry |
40020 | Cloud browser is stopping | Wait for the stop to finish |
40021 | Cloud browser is already starting | Do not resend; poll /cloudbrowser/page |
40023 | The profile is in use | Close the other session first |
40024 | The cloud browser did not start in time | Start it again |
40025 | The bound proxy no longer exists | Rebind a proxy |
40026 | The bound proxy expired | Renew or replace the proxy |
40027 | The bound proxy is still being allocated | Retry once allocation finishes |
40028 | Local proxies are not supported | Use a non-local proxy |
40029 | This proxy type is not supported | Use a supported proxy type |
40037 | End-to-end encrypted profiles cannot use the cloud browser | Use an unencrypted profile |
Returned by the webhook configuration endpoints when the callback URL is rejected.
| Code | Description | Solution |
|---|---|---|
41001 | Callback URL must be a valid HTTPS address | Send an HTTPS URL of at most 1024 characters with no user info, no fragment and a valid port, and make sure every address it resolves to is publicly routable |
| Code | Description | Solution |
|---|---|---|
12002 | Team does not exist | The member's team was removed; contact support |
35002 | API authentication failed | Check client_id (API ID) and client_secret (API key) |
35005 | The request has no operation permission | The member is disabled, or the caller IP fails the Open API allow and deny lists |
| Status | Description |
|---|---|
200 | Request processed (check code field for business result) |
401 | Unauthorized — invalid or expired access token |
403 | Forbidden — insufficient permissions |
429 | Too Many Requests — rate limit exceeded |
500 | Internal Server Error — contact support |
The current application gateway represents its own rate-limit rejection with business code 35000 and does not explicitly set HTTP 429. An edge proxy or future gateway version may still return 429, so clients should handle both forms.
| Failure category | Retry? | Required client behavior |
|---|---|---|
| Validation, permission, balance, or unsupported-feature error | No | Correct the request, permission, balance, or selected resource before retrying |
Rate limit (35000) | Yes, conditionally | Back off with jitter; inspect body code even when HTTP status is 200 |
| Temporary server/provider failure | Yes, conditionally | Retry reads; for writes, query resource/task state first |
| Asynchronous operation accepted | Do not resend immediately | Poll the documented status endpoint until success, failure, or timeout |
| Unknown result after a network timeout | State check first | Do not blindly repeat create, purchase, upload registration, or schedule creation |
The public API does not currently document a general idempotency-key header. Endpoint-specific state queries are therefore part of safe recovery for state-changing requests.
For asynchronous operations, an API response with code: 0 can mean “accepted,” not “completed.” Follow the operation documentation for its status field and terminal states.
See the Endpoint Retry and Completion Matrix for every operation and Asynchronous Operations for polling workflows and terminal states.
Tip: Always include the
requestIdfrom the response when contacting support for faster troubleshooting.