# Коды ошибок

На этой странице перечислены основные коды ошибок, которые возвращает API MoreLogin.

## Формат ответа

Все ответы API имеют следующий стандартный вид:

```json
{
  "code": 0,
  "msg": null,
  "data": {},
  "requestId": "unique-request-id"
}
```

| Поле | Тип | Описание |
|  --- | --- | --- |
| `code` | integer | `0` = успех, `>0` = ошибка |
| `msg` | string | Сообщение об ошибке (null при успехе) |
| `data` | object | Данные ответа |
| `requestId` | string | Уникальный идентификатор запроса для диагностики |


## Как по коду определить область

Коды не выдаются из одного сплошного списка. У каждой продуктовой области свой диапазон, поэтому первые две или три цифры показывают, какая подсистема отклонила запрос:

| Диапазон | Область |
|  --- | --- |
| `14xxx` | Прокси |
| `15xxx` | Группы и метки |
| `19xxx` | Профили браузера |
| `20xxx` | Кошелёк, заказы и тарификация |
| `21001` | Слишком старая версия клиента |
| `33xxx` | Облачный телефон |
| `35xxx` | Аутентификация API и ограничение частоты |
| `39xxx` | Облачное хранилище |
| `40xxx` | Среды выполнения облачного браузера |
| `41xxx` | Настройка вебхуков |
| `99xxx` | Шлюз и проверка запроса |


Для каждой операции перечислены коды, которые она заведомо может вернуть. См. постпродуктовые матрицы по ссылкам из [матрицы повторов и завершения эндпоинтов](/ru/api-reference/getting-started/endpoint-behavior).

## Общие коды ошибок

Могут вернуться из любой операции, поскольку исходят из проверки запроса, проверки прав и шлюза, а не из бизнес-логики.

| Код | Описание | Что делать |
|  --- | --- | --- |
| `0` | Успех | — |
| `21001` | Слишком старая версия клиента | Обновите десктопный клиент MoreLogin |
| `35000` | Слишком частые запросы к API | Повторяйте подходящие операции с отступом и дрожанием; см. [Ограничение частоты](/ru/api-reference/getting-started/rate-limits) |
| `99000` | Неизвестная системная ошибка | Повторите позже и сообщите `requestId` в поддержку |
| `99001` | Недопустимые параметры запроса | Проверьте формат тела запроса и обязательные поля |
| `99002` | Нет прав на операцию | Проверьте права своей учётной записи |
| `99003` | Исключение в запросе | Внесите нужную бизнес-правку согласно `msg` |
| `99004` | Тело запроса слишком большое | Уменьшите тело запроса |
| `99005` | Такой запрос уже выполняется | Дождитесь завершения текущего запроса и повторите |
| `99006` | Некорректный запрос | Проверьте HTTP-метод, заголовки и тело |
| `99007` | IP запроса не в списке разрешённых | Добавьте IP вызывающей стороны в список разрешённых |
| `99008` | Превышена квота запросов для IP или устройства | Снизьте количество запросов с этого IP или устройства |
| `99009` | Слишком много запросов | Отступите с дрожанием и повторите |
| `99011` | Метка времени запроса истекла | Отправьте заново с текущей меткой времени |
| `99012` | Требуется право на расходы | Используйте аккаунт владельца команды или выдайте право на расходы |
| `15003` | Не удалось создать тег | Проверьте теги перед повтором; при повторной ошибке сохраните requestId |
| `15004` | Не удалось обновить тег или привязки | Проверьте теги перед повтором; при повторной ошибке сохраните requestId |


### Облачный телефон (`33xxx`)

| Код | Описание | Что делать |
|  --- | --- | --- |
| `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 |
| `33310` | Телефон занят другим участником; перезапуск невозможен | Дождитесь освобождения телефона другим участником и проверьте состояние. |
| `33311` | Телефон занят другим участником; сброс невозможен | Дождитесь освобождения телефона другим участником и проверьте состояние. |
| `33359` | Другая операция питания удерживает блокировку телефона | Проверьте состояние и дождитесь текущей операции перед повтором. |
| `33382` | Выполняется передача телефона | Дождитесь завершения передачи и проверьте права доступа перед повтором. |
| `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` | Облачный телефон не существует | Проверьте ID облачного телефона и что он принадлежит вашей команде |
| `33301` | Облачный телефон не включён | Включите его и дождитесь работоспособного состояния |
| `33308` | Используется другим участником, выключить нельзя | Повторите, когда другой участник освободит его |
| `33309` | Используется другим участником, подключиться нельзя | Повторите, когда другой участник освободит его |
| `33315` | Задолженность на счёте, облачный телефон заморожен | Пополните кошелёк |
| `33316` | Недостаточно доступных профилей | Обновите тариф |
| `33317` | Право на профиль было отозвано | Попросите администратора выдать доступ |
| `33318` | Недостаточно средств для запуска | Пополните кошелёк |
| `33321` | Профиль недоступен | Перед повтором проверьте состояние профиля |
| `33322` | Идёт проверка прокси | Опрашивайте, пока проверка не завершится |
| `33323` | Профиль запускается | Дождитесь окончания запуска, повторно не отправляйте |
| `33324` | Профиль уже запущен | Ничего делать не нужно |
| `33325` | Профиль деактивирован | Активируйте его перед использованием |
| `33331` | Идёт смена устройства в один клик, выключить нельзя | Дождитесь завершения |
| `33332` | Идёт перезагрузка, выключить нельзя | Дождитесь завершения |
| `33333` | Идёт сброс, выключить нельзя | Дождитесь завершения |
| `33338`–`33345` | Страна, часовой пояс, язык, долгота или широта отсутствуют либо недопустимы | См. [таблицу стран и часовых поясов](/ru/api-reference/appendix/country-time-zone) |
| `33346` | SKU снят с продажи | Выберите другой `skuId` |
| `33347` | Модель требует последнюю версию клиента для Windows | Обновите десктопный клиент MoreLogin |
| `33367` | Идёт обслуживание, включить нельзя | Сроки восстановления смотрите в системных уведомлениях |
| `33376` | Месячная тарификация истекла | Продлите подписку |
| `33398`–`33400` | Долгота, широта или высота вне диапазона | Долгота −180…180, широта −90…90, высота −50000…100000 |
| `33401` | Облачный телефон не поддерживает эту операцию | Используйте поддерживаемую модель |
| `33407` | Превышена квота пакета параллельных запусков | Дождитесь свободного слота или увеличьте квоту |
| `33408` | Недопустимый формат номера телефона | Начните с `+`, код страны 1–3 цифры без 86, всего 8–14 цифр |
| `33418` | Файл для трансляции не существует либо недопустим | Загрузите с `uploadType=2` и используйте возвращённый `fileId` |
| `33419` | Формат файла для трансляции не поддерживается | Загрузите MP4 через `/cloudphone/uploadFile` |
| `33005` | Не удалось установить приложение | Повторите и проверьте свободное место на устройстве |
| `33014` | Слишком частые операции | Отступите и повторите |
| `33714` | Приложение не существует или снято с публикации | Обновите библиотеку приложений |
| `33814` | Шаблон RPA не существует | Запросите список шаблонов заново и используйте актуальный `templateId` |
| `33818` | Недопустимый формат параметра шаблона RPA | Передавайте `templateParameter` как экранированную JSON-строку |
| `33303` | Не удалось создать облачный телефон | Перед повтором запросите `/cloudphone/page`; не отправляйте слепо |
| `33320` | Прокси, привязанный к этому облачному телефону, удалён | Привяжите прокси заново через `/cloudphone/setProxy` |
| `33326` | Используется другим участником, заменить устройство нельзя | Повторите, когда другой участник освободит его |
| `33350` | На части облачных телефонов не удалось включить ADB | Эти телефоны не запущены либо не поддерживают ADB; перечитайте состояние и повторите только для них |
| `33507` | Файл на устройстве не существует | Проверьте путь; запрос на скачивание сначала обходит родительский каталог |
| `33354` | Приложение команды не найдено | Проверьте ID в списке команды. |
| `33357` | Требуются разрешённые группы | При isAll=false укажите непустой список разрешённых групп. |
| `33368` | Версия недоступна или уже выбрана | Выберите другую доступную версию того же пакета. |
| `33369` | Достигнут лимит предустановленных приложений | Отключите другое предустановленное приложение. |
| `33370` | ROOT запрещён для этого пакета | Оставьте enableRoot=false. |
| `33423` | Нет подходящих включённых телефонов в области | Проверьте питание, область, права и onlyStartedByMe. |
| `33424` | Не более трёх приложений с поддержанием активности | Отключите поддержание активности другого приложения. |


Операции установки и управления питанием могут дополнительно вернуть код, сопоставленный Сервисом, из диапазонов `33001`–`33033`, `33500`–`33520`, `33700`–`33724` или `33900`–`33910`. Какой из них достижим, зависит от Сервиса, обслуживающего устройство, поэтому в операциях они не перечисляются по отдельности.

### Профили браузера (`19xxx`)

| Код | Описание | Что делать |
|  --- | --- | --- |
| `19001` | Профиль с таким именем уже существует | Выберите уникальное имя или опустите `envName`, чтобы имя сгенерировалось |
| `19002` | Создание профиля не удалось на стороне сервиса | Перед повтором подтвердите через `/env/page` |
| `19004` | Недопустимый формат user agent | Передайте разбираемый `advancedSetting.ua` |
| `19005` | Недопустимый формат cookie | Передавайте `cookies` как экранированную строку JSON-массива |
| `19039` | Профиль не найден | Проверьте `envId` / `uniqueId` и что профиль принадлежит вашей команде |
| `19063` | Достигнут лимит количества профилей | Удалите профили или обновите тариф |
| `19064` | Нет прав на эту группу | Попросите администратора выдать доступ к группе |
| `19065` | Нет прав на этот профиль | Попросите администратора выдать доступ к профилю |
| `19099` | Недостаточно доступных профилей, использование ограничено | Обновите тариф |
| `19100` | Недопустимый ID платформы | Используйте `platformId` из `/system/platform/list` |
| `19101` | Недопустимый ID сайта | Используйте `siteId` из `/system/platform/list` |
| `19102` | URL пользовательской платформы не может быть пустым | Передавайте `platformUrl`, когда `platformId` равен `9999` |
| `19103` | Недопустимый формат URL автозапуска | Передавайте корректные абсолютные URL в `afterStartupConfig` |
| `19104` | Недопустимый ID группы | Используйте группу, существующую в вашей команде |
| `19105` | Недопустимый ID метки | Используйте метки, существующие в вашей команде |
| `19106` | Недопустимый ID прокси | Используйте прокси, существующий в вашей команде, либо опустите `proxyId` |
| `19107` | Недопустимая версия ядра браузера | Выберите версию из `/env/advanced/ua/versions` |
| `19108` | Недопустимая версия user agent | Выберите версию из `/env/advanced/ua/versions` |
| `19109` | Версия user agent не совпадает с самим user agent | Согласуйте `uaVersion` с `advancedSetting.ua` либо передайте только одно из них |
| `19110` | Недопустимый формат пользовательского URL | Передайте корректный абсолютный URL |
| `19111` | Firefox поддерживает только Windows и macOS | Выберите Windows или macOS либо перейдите на Chrome |
| `19112` | Ключ шифрования не задан, включить шифрование профиля нельзя | Настройте ключ шифрования команды либо передайте `isEncrypt=0` |
| `19141` | Не более 100 символов, только цифры, буквы и пробелы | Сократите `accountInfo.otpSecret` и уберите прочие символы |
| `19142` | Профили со сквозным шифрованием изменить нельзя | Для зашифрованных профилей используйте клиент MoreLogin |
| `19143` | Версия клиента слишком старая для этого ядра | Обновите десктопный клиент MoreLogin |
| `19147` | Превышен суточный лимит создания | Обновите тариф, чтобы поднять лимит |
| `19149` | Не выбран тип кеша | Укажите хотя бы один класс кеша для очистки |
| `19159` | Операционная система не совпадает с расширенными настройками | При обновлении ОС менять нельзя; оставьте `advancedSetting.os` как сохранено |
| `19160` | Тип браузера не совпадает с расширенными настройками | При обновлении браузер менять нельзя; оставьте `advancedSetting.vendor` как сохранено |
| `19175` | Координаты вне зоны обслуживания | Выберите координаты в пределах поддерживаемой зоны |
| `19193` | Владелец общего доступа запретил редактирование этого профиля | Попросите владельца разрешить редактирование |
| `19173` | Укажите непустой envIds или uniqueIds | Укажите непустой envIds или uniqueIds |


### Облачное хранилище (`39xxx`)

| Код | Описание | Что делать |
|  --- | --- | --- |
| `39001` | Информация об облачном хранилище не найдена | Проверьте, что облачное хранилище выделено команде |
| `39011` | Файл не найден | Проверьте ID файла |
| `39014` | URL доступа к файлу пуст | Зарегистрируйте загрузку заново |
| `39037` | Недопустимый параметр расширения файла | Передайте поддерживаемое расширение |
| `39041` | Достигнута квота хранилища | Удалите файлы, чтобы освободить место |
| `39044` | Дублирующееся имя файла | Переименуйте файл |
| `39045` | Слишком много неподтверждённых предподписанных загрузок | Сначала завершите или отмените неподтверждённые загрузки |
| `39046` | Файл не был загружен успешно | Загрузите файл на предподписанный URL до вызова complete |
| `39047` | Срок облачного хранилища истёк | Продлите облачное хранилище |
| `39048` | Метка облачного хранилища не найдена | Используйте метку из `/cloudstorage/tag/all` |
| `39049` | ID меток не могут быть пустыми | Передайте хотя бы одну метку; пустой список отклоняется |
| `39050` | Имя файла длиннее 60 символов | Сократите имя |
| `39051` | Размер файла должен быть больше 0 Б и меньше 2 ГБ | Разделите или сожмите файл |


### Прокси (`14xxx`) и кошелёк (`20xxx`)

| Код | Описание | Что делать |
|  --- | --- | --- |
| `14003` | Не удалось обновить прокси либо прокси не существует | Проверьте ID прокси |
| `14017` | Прокси нельзя удалить | Неистёкший прокси облачной платформы удалить нельзя; дождитесь истечения срока |
| `14023` | Тип прокси не существует | Используйте поддерживаемое значение сервиса |
| `14024` | Прокси не существует | Проверьте ID прокси |
| `14519` | Динамические прокси изменить нельзя | Управляйте динамическими прокси вне эндпоинтов прокси |
| `20018` | Не удалось получить цену товара | Повторите позже и сообщите `requestId` в поддержку |
| `20029` | Счёт кошелька недоступен | Проверьте кошелёк команды |
| `20032` | Не удалось запросить баланс | Повторите позже и сообщите `requestId` в поддержку |
| `20041` | Недостаточно средств | Пополните кошелёк |


### Среды выполнения облачного браузера (`40xxx`)

Возвращаются эндпоинтами `/cloudbrowser/start`, `/cloudbrowser/stop` и `/cloudbrowser/connect`. Коды, возникающие после отправки запроса на запуск, проявляются в `/cloudbrowser/page`, а не в ответе на запуск.

| Код | Описание | Что делать |
|  --- | --- | --- |
| `40001` | Облачный браузер уже запущен | Ничего делать не нужно; подключитесь к существующему запуску |
| `40002` | В текущем состоянии облачный браузер остановить нельзя | Перечитайте `/cloudbrowser/page` и повторите |
| `40003` | Проверка прокси не удалась | Убедитесь, что привязанный прокси достижим |
| `40006` | Операция облачного браузера не удалась | Повторите; если не удалась архивация, смотрите `cloudBrowserArchiveStatus` |
| `40008` | Запущенный облачный браузер не найден | Сначала запустите его либо перечитайте `/cloudbrowser/page` |
| `40009` | Нельзя подключиться к запуску другого участника | Попросите этого участника освободить его |
| `40010` | Не удалось подключиться к облачному браузеру | Повторите; токен доступа к рабочему столу не был выпущен |
| `40015` | К профилю не привязан прокси | Сначала привяжите прокси через `/env/setProxy/batch` |
| `40016` | Не удалось отправить запрос на запуск | Повторите |
| `40020` | Облачный браузер останавливается | Дождитесь завершения остановки |
| `40021` | Облачный браузер уже запускается | Не отправляйте повторно; опрашивайте `/cloudbrowser/page` |
| `40023` | Профиль используется | Сначала закройте другую сессию |
| `40024` | Облачный браузер не запустился вовремя | Запустите его снова |
| `40025` | Привязанный прокси больше не существует | Привяжите прокси заново |
| `40026` | Привязанный прокси истёк | Продлите или замените прокси |
| `40027` | Привязанный прокси ещё выделяется | Повторите после завершения выделения |
| `40028` | Локальные прокси не поддерживаются | Используйте нелокальный прокси |
| `40029` | Этот тип прокси не поддерживается | Используйте поддерживаемый тип прокси |
| `40037` | Профили со сквозным шифрованием не могут использовать облачный браузер | Используйте незашифрованный профиль |


### Вебхуки (`41xxx`)

Возвращаются эндпоинтами настройки вебхуков, когда URL обратного вызова отклонён.

| Код | Описание | Что делать |
|  --- | --- | --- |
| `41001` | URL обратного вызова должен быть корректным HTTPS-адресом | Передайте HTTPS-URL длиной не более 1024 символов, без данных пользователя и фрагмента, с корректным портом, и убедитесь, что все адреса, в которые он разрешается, маршрутизируются в интернете |


### Аутентификация API (`35xxx`) и команды (`12xxx`)

| Код | Описание | Что делать |
|  --- | --- | --- |
| `12002` | Команда не существует | Команда участника была удалена; обратитесь в поддержку |
| `35002` | Аутентификация API не удалась | Проверьте `client_id` (API ID) и `client_secret` (API-ключ) |
| `35005` | У запроса нет прав на операцию | Участник отключён либо IP вызывающей стороны не проходит списки разрешённых и запрещённых IP Open API |


## Коды состояния HTTP

| Статус | Описание |
|  --- | --- |
| `200` | Запрос обработан (бизнес-результат смотрите в поле `code`) |
| `401` | Не авторизовано — токен доступа недействителен или истёк |
| `403` | Запрещено — недостаточно прав |
| `429` | Слишком много запросов — превышен лимит частоты |
| `500` | Внутренняя ошибка сервера — обратитесь в поддержку |


Текущий шлюз приложения обозначает собственный отказ по лимиту частоты бизнес-кодом `35000` и не выставляет HTTP `429` явно. Пограничный прокси или будущая версия шлюза всё же может вернуть `429`, поэтому клиентам следует обрабатывать оба варианта.

## Семантика повторов и восстановления

| Категория сбоя | Повторять? | Требуемое поведение клиента |
|  --- | --- | --- |
| Ошибка валидации, прав, баланса или неподдерживаемой возможности | Нет | Исправьте запрос, права, баланс или выбранный ресурс, и только затем повторяйте |
| Ограничение частоты (`35000`) | Да, с условиями | Отступайте с дрожанием; проверяйте `code` в теле, даже когда HTTP-статус равен `200` |
| Временный сбой сервера или Сервиса | Да, с условиями | Чтение повторять можно; для записи сначала запросите состояние ресурса или задачи |
| Асинхронная операция принята | Не отправляйте повторно сразу | Опрашивайте документированный эндпоинт состояния до успеха, ошибки или таймаута |
| Результат неизвестен после сетевого таймаута | Сначала проверьте состояние | Не повторяйте слепо создание, покупку, регистрацию загрузки или создание расписания |


В публичном API сейчас нет общего заголовка ключа идемпотентности. Поэтому запросы состояния для конкретного эндпоинта — часть безопасного восстановления для запросов, меняющих состояние.

Для асинхронных операций ответ с `code: 0` может означать «принято», а не «завершено». Ориентируйтесь на документацию операции: её поле состояния и конечные состояния.

Полный список операций см. в [матрице повторов и завершения эндпоинтов](/ru/api-reference/getting-started/endpoint-behavior), а порядок опроса и конечные состояния — в [Асинхронных операциях](/ru/api-reference/getting-started/async-operations).

> **Совет**: обращаясь в поддержку, всегда указывайте `requestId` из ответа — это ускорит разбор.