Коды ошибок
Если сервер не может выполнить API-запрос, он возвращает JSON-ответ, содержащий код ошибки:
{"error":<code>}
HTTP-статус такого ответа — 200 OK, как и в случае успешного запроса. Чтобы узнать, выполнен ли запрос успешно, проверяйте тело ответа, а не HTTP-статус.
Для некоторых ошибок ответ также содержит поле reason, которое объясняет причину ошибки:
{"error":<code>,"reason":<text>}
Общие коды ошибок
| Код ошибки | Описание | Значение поля reason |
|---|---|---|
| -100 | Внутренняя ошибка (таймаут сети). | |
| -101 | Внутренняя ошибка (неверный ответ сети). | |
| 0 | Успешная операция (например, для выхода из системы это означает успешный выход). | |
| 1 | Невалидная сессия. | |
| 2 | Неверное имя API-сервиса. | |
| 3 | Неверный результат. Плагин библиотеки типов не включен, элемент AVL Server не найден или файл не найден. | |
| 4 | Неверный ввод. Запрос содержит неверное значение параметра или неверную комбинацию параметров, либо ID объекта не соответствует ни одному существующему объекту внутри контейнера, доступного пользователю. | VALIDATE_PARAMS_ERROR: <text>: параметры не соответствуют схеме, предусмотренной методом, где <text> — ожидаемая схема. Возвращается методами, использующими общую проверку параметров.PARAMS_ERROR: <text>: проверка параметров метода не пройдена, где <text> описывает причину.DRIVER_NOT_FOUND: указанный водитель не найден в ресурсе (resource/driver_actions_list, resource/driver_actions_cleanup, resource/driver_actions_register, resource/bind_unit_driver).ROUTE_NOT_FOUND или ORDER_NOT_FOUND: указанный маршрут или заявка не найдены (order/route_update, order/optimize, order/update).BATCH_INVALID_INTERNAL_REQUEST index=<i>: один из элементов массива запросов не является корректным методом, где <i> — позиция этого элемента, отсчитываемая с 0 (core/batch). |
| 5 | Ошибка выполнения запроса. | EVENTS_ARE_DISABLED: подсистема событий отключена для запрашиваемого детектора (events/get_last, events/load, unit/get_events, resource/get_driver_bindings).EVENTS_ARE_INITIALIZING: подсистема событий все еще инициализируется (resource/get_driver_bindings).TWILIO_REQUEST_FAILED: HTTP-запрос к Twilio не выполнен (accounts/get_twilio_templates).PARSING_ERROR или UNKNOWN_ERROR: файл не может быть обработан (exchange/convert_file). |
| 6 | Неизвестная ошибка. Во многих случаях ответ не содержит поля reason. |
UNKNOWN_ERROR: запрос не выполнен по неуказанной причине (unit/create_task, unit/update_task, gis_get_route, gis_get_many_to_many_route, gis_get_one_to_many_route, gis_get_route_via_waypoints).Internal server error: не удалось выполнить внутреннюю операцию сессии, хранилища или формирования ответа (различные обработчики).GET_MESSAGES_UNKNOWN_ERROR: менеджер сообщений не может вернуть данные (resource/driver_actions_list, resource/driver_actions_cleanup, resource/driver_actions_register, resource/bind_unit_driver).Large response: ответ core/batch слишком большой, чтобы быть сформированным.ERROR_CREATING_RESOURCE_DUE_TO_BILLING_RULES: ресурс не может быть создан в соответствии с тарификационными ограничениями (core/create_resource).Internal error (http service unavailable): внутренний HTTP-клиентский сервис недоступен при проверке стороннего токена авторизации (user/bind_auth_service).Internal error (failed to connect to remote service): не удалось установить соединение с провайдером авторизации (user/bind_auth_service).Internal error (bad http response <code>): провайдер авторизации возвращает HTTP-статус, отличный от 200, где <code> — этот статус (user/bind_auth_service).Failed to parse remote response: ответ провайдера авторизации не является корректным JSON (user/bind_auth_service). |
| 7 | Доступ запрещен. Текущий пользователь или токен не имеет необходимого доступа к целевому элементу или операции, либо услуга, требуемая конечной точкой, отключена. Методы, которые создают или изменяют элементы, также возвращают эту ошибку во время переноса учетной записи пользователя в другой дата-центр, даже если у пользователя есть все необходимые права доступа. В этом случае повторите запрос после завершения переноса. В большинстве случаев ответ не содержит поля reason. |
USER_DISABLED: пользователь отключен (token/login).Access denied: услуга, требуемая конечной точкой, отключена для пользователя, например, videomonitoring для videostorage_config, или billing_by_codes для методов unit/get_billing_code и codes/*.Unauthorized user: в сессии нет текущего пользователя (конечные точки сессий чата и водителя).Другие специфичные для конечной точки причины документированы на соответствующих страницах методов. |
| 8 | Неверное имя пользователя или пароль. Все следующие значения reason возвращаются методом token/login. |
TOKEN_USER_NOT_FOUND: GUID пользователя в токене не соответствует ни одному пользователю.INVALID_AUTH_TOKEN: не удается обработать содержимое токена.INVALID_AUHT_TOKEN: не удается инициализировать сессию из токена.OPERATE_AS_USER_NOT_FOUND: <login>: пользователь, указанный в параметре operateAs, не существует.OPERATE_AS_USER_NO_ACCESS: <login>: владелец токена не имеет права доступа OPERATE_AS к указанному пользователю, или пользователь отсутствует в списке элементов, доступных для токена.SOME_LOGIN_PROBLEMS: не удается создать сессию для указанного пользователя по неуказанной причине. |
| 9 | Сервер авторизации недоступен. Во многих случаях ответ не содержит поля reason. |
INTERNAL_ERROR: не удается найти учетную запись верхнего уровня для текущего пользователя (user/share_billing_code, user/unshare_billing_code). |
| 10 | Одновременно обрабатывается слишком много запросов одного типа, например, 5 одновременных пересчетов. В core/batch, если параметр flags включает флаг 0x01 (1), запросы, следующие за первой ошибкой, не выполняются. То же самое происходит, если запрос превысил ограничение по времени, установленное на сервере. Каждый из оставшихся запросов возвращает ошибку 10 без поля reason. |
ERROR: simultaneous recalculations limit (<limit> simultaneuos recalculations) reached, где <limit> — разрешенное количество пересчетов (admin/recalculate_history). |
| 11 | Ошибка сброса пароля. В некоторых случаях ответ не содержит поля reason. Все следующие значения reason возвращаются методом core/reset_password_request. |
USER_OR_EMAIL_NOT_CORRECT: пользователь не существует, либо адрес электронной почты не совпадает с указанным для пользователя.PASSWORD_IMMUTABLE: пароль пользователя не может быть изменен.REQUEST_TOO_OFTEN: с момента предыдущего запроса на сброс пароля прошло менее минуты. |
| 12 | Агро-подсистема не загружена. | |
| 14 | Услуга, требуемая методом, недоступна. | Video service is not available: услуга видео не включена для учетной записи пользователя или для ее родительских учетных записей (user/get_video_units). |
| 1001 | Нет сообщений за выбранный интервал. | |
| 1002 | Элемент не может быть создан, так как элемент с таким именем уже существует, из-за тарификационных ограничений или потому, что указанный идентификатор уже используется. | NAME_ALREADY_EXISTS: элемент с таким именем уже существует (core/create_resource, core/create_user).ERROR_CREATING_RESOURCE_DUE_TO_BILLING_RULES: ресурс не может быть создан из-за тарификационных ограничений (core/create_resource).ERROR_CREATING_USER_DUE_TO_BILLING_RULES: пользователь не может быть создан из-за тарификационных ограничений (core/create_user).User already exists: сторонний идентификатор авторизации уже привязан к другому пользователю (user/bind_auth_service). |
| 1003 | Достигнут лимит, или запрос не может быть обработан в данный момент. | LIMIT <rule_name>: достигнут указанный лимит, например, LIMIT api_concurrent или LIMIT invalid_logins (avl_evts, core/login, core/use_auth_hash, core/check_unique, token/login, token/update, report/apply_report_result).LOCKER_ERROR: внутренняя ошибка сервиса, который подсчитывает лимиты. Возвращается теми же методами, а также методами user/update_password и user/verify_code.LAYERS_MAX_COUNT: достигнут лимит в 50 слоев сообщений (render/create_messages_layer).NO_SESSION: не удается создать новую сессию (core/login, core/duplicate).Accept-Encoding is not gzip: запрос не использует кодировку gzip (messages/load_interval). |
| 1004 | Достигнут лимит сообщений. | LIMIT msgs_count: достигнут лимит загруженных сообщений (messages/load_interval, render/create_messages_layer, report/apply_report_result).LIMIT msgs_activity: достигнут лимит сообщений, загруженных в течение определенного периода времени (report/apply_report_result).EXCEEDS_LIMIT_MSGS_COUNT: количество сообщений, запрошенных в параметре loadCount, превышает максимально допустимое для метода (messages/get_task_messages). |
| 1005 | Время выполнения отчета превысило лимит (report/exec_report), или конфигурация оборудования неверна (unit/update_hw_params). |
|
| 1006 | Достигнут лимит, связанный с паролем или кодом двухфакторной авторизации. | LIMIT <rule_name> for password update: слишком много попыток обновить пароль (user/update_password).LIMIT <rule_name> for verify code: слишком много попыток ввести код двухфакторной авторизации (user/verify_code). |
| 1011 | Ваш IP изменился, или сессия истекла. |
Коды ошибок переноса элементов
Следующие коды возвращаются при переносе элемента в другой ресурс или учетную запись. Коды 2001..2013 возвращаются методом account/change_account.
| Код ошибки | Описание |
|---|---|
| 2001 | Неверный элемент или target_resource. |
| 2002 | target_resource не является учетной записью. |
| 2003 | Неверный целевой плагин. |
| 2004 | Целевая учетная запись заблокирована. |
| 2005 | Недействительный создатель target_resource. |
| 2006 | target_creator не имеет доступа к элементу. |
| 2007 | Неверный исходный ресурс. |
| 2008 | Элемент уже находится в target_resource. |
| 2009 | target_resource принадлежит другому пользователю верхнего уровня. |
| 2010 | В целевой учетной записи недостаточно квоты ресурсов для принятия элемента. |
| 2011 | Неверный плагин элемента. |
| 2012 | Ошибка изменения элемента тарифной учетной записи на target_resource. |
| 2013 | Ошибка изменения создателя элемента. |
Другие ошибки элементов и датчиков
| Код ошибки | Описание |
|---|---|
| 2014 | Выбранный пользователь является создателем некоторых элементов системы, поэтому этот пользователь не может быть назначен на новую учетную запись (core/create_resource). |
| 2015 | Датчик не может быть удален, так как он используется в другом датчике (в качестве валидирующего датчика) или в расширенных свойствах объекта (датчик состояния движения, цвета датчиков, датчик мониторинга) (unit/update_sensor). |