Пользовательские ошибки в API грузов [1.0]

В API грузов может произойти достаточно много пользовательских ошибок, и для идентификации конкретной ошибки не всегда достаточно http кода ошибки. Поэтому при возникновении ошибки в теле ответа всегда будет присутствовать объект ошибки, содержащий 2 поля: Error с кодом ошибки в виде строки и Reason с пояснением. В групповых операциях поля Error и Reason будут указаны для каждого груза, с которым произошла ошибка во время выполнения операции.


Примеры ошибок

Ошибка при одиночной операции (на примере добавления груза)


{
  "Error": "load_conflict_error",
  "Reason": "Найден дубликат в грузах",
  "ConflictLoadId": "271be1d2-2a91-e611-a37f-005056c00008"
}


Ошибка при групповой операции (на примере группового восстановления)

{
    "0e9050e4-f5cb-4835-acb2-c211151bad64": {
        "Status": 2,
        "Message": "Груз был помещен в архив менее 60 минут назад",
        "Error": "load_archive_delay_not_elapsed",
        "Reason": "Груз был помещен в архив менее 60 минут назад"
    },
    "9b380991-433f-4738-a68d-8b851c1b5472": {
        "Status": 0,
        "Message": "Успешная операция"
    }
}


Ошибка валидации (на примере добавления груза)

В случае ошибки валидации json в теле запроса возникает ошибка json_validation_error. В теле ответа будут поля Error и Reason, и, кроме того, поле ErrorList, содержащее массив объектов вида {property;reason}, где property – название поля, в котором произошла ошибка, а  reason – причина ошибки.


{
    "Error": "json_validation_error",
    "Reason": "Ошибка валидации json",
    "ErrorsList": [
        {
            "property": "Cargo.Weight",
            "reason": "Максимальная длина для параметра вес - 4 символа",
            "error": "length_out_of_range",
            "context": {
                "Min": 0,
                "Max": 4
            }
        },
        {
            "property": "FirstDate",
            "reason": "Если значение параметра DateType равно 0 или 2, допустимое значение параметра FirstDate - текущая дата",
            "error": "must_be_current_date"
        },
        {
            "property": "LastDate",
            "reason": "Параметр LastDate должен быть больше либо равен параметру FirstDate",
            "error": "must_be_greater_or_equal_than",
            "context": {
                "Min": "2021-06-16T12:00:00.51"
            }
        }
    ]
}


Ошибка доступа (на примере добавления груза)

{
    "Error": "access_denied_error",
    "Reason": "У вашего контакта нет доступа для работы с одной или несколькими персональными площадками, указанными в грузе",
    "AccessDeniedReason": 13,
    "ExceededLimit": null
}

Список возможных ошибок

Код ошибкиПояснение
deserialization_errorОшибка десериализации json
json_validation_errorОшибка валидации json из тела запроса.
validation_errorОшибка валидации. Возникает в случае любой ошибки валидации, кроме ошибки валидации тела запроса (json_validation_error)
load_conflict_errorНайден дубликат в грузах
load_archive_delay_not_elapsedГруз был помещен в архив менее 60 минут назад
load_renew_delay_not_elapsedГруз был обновлен менее 60 минут назад
boards_access_denied_errorНекоторые из указанных площадок не существуют или вы не имеете доступа к ним
access_denied_errorОтказано в доступе
account_not_found_errorФирма не найдена
contact_not_found_or_deletedПервый контакт не существует или удален
unavailable_contact_selectedВ качестве первого контакта должен быть указан контакт из доступного подразделения
city_not_found_errorГород не найден
comment_not_found_errorКомментарий для груза не найден
dictionary_element_not_found_errorЭлемент словаря не найден
load_not_found_errorГруз не найден
response_not_found_errorОтзыв на груз не найден
avatar_not_found_errorАватар не найден
load_reserved_errorГруз зарезервирован/взят, операции с грузом запрещены
load_cant_reserveНевозможно зарезервировать груз. Груз уже зарезервирован, либо не поддерживает резервирование