Перейти к содержимому
CargoDuo logoCargoDuo
Цены

Ошибки

Единый формат ошибок, стабильные коды, понятные правила повтора.

Все ответы с кодом, отличным от 2xx, имеют одинаковую структуру. Ветвите логику по error.code, а не по message.

JSON
{
  "error": {
    "code": "validation_failed",
    "message": "The request is invalid.",
    "request_id": "req_8fK2Lq9ZtX4mN7bV1cW3yH6p",
    "details": [
      {
        "path": "items[3].length",
        "code": "out_of_range",
        "message": "length must be greater than 0."
      }
    ]
  }
}
ПолеСодержимое
codeСтабильный, в snake_case
messageНа английском, для логов
request_idТакже в X-Request-Id. Сообщайте его в поддержку
details[]При 400/422: path, code, message для каждой проблемы

Коды

СтатусКодЗначениеЧто делатьМожно повторить
400invalid_jsonТело запроса — невалидный JSON, или у поля неверный тип.Исправьте тело запроса.Нет
401unauthorizedAPI-ключ отсутствует, имеет неверный формат или неизвестен.Передавайте заголовок Authorization: Bearer cd_live_…; проверьте, что ключ скопирован целиком.Нет
401key_revokedКлюч отозван.Создайте новый ключ в консоли разработчика.Нет
401key_expiredСрок действия ключа истёк.Создайте новый ключ в консоли разработчика.Нет
402insufficient_creditsДоступных кредитов не хватает даже на минимально возможный расчёт этого задания.Купите пакет кредитов или дождитесь ежемесячного начисления; ничего не списано.Нет
403ip_not_allowedIP-адреса вызывающей стороны нет в списке разрешённых IP для этого ключа.Вызывайте API с разрешённого IP-адреса или измените список разрешённых IP.Нет
403subscription_inactiveУ организации нет активной подписки, включающей API.Продлите подписку.Нет
403account_inactiveРабота организации приостановлена, или у неё нет владельца с активной учётной записью.Обратитесь в поддержку.Нет
403scope_missingУ ключа нет области доступа, необходимой для этого endpoint.Используйте ключ с нужной областью доступа (pack:write, jobs:read, account:read, resources:read, resources:write).Нет
403preset_read_onlyПресеты нельзя изменять или удалять.Создайте собственное транспортное средство через POST /v1/vehicles.Нет
403plan_limit_reachedТариф организации не позволяет создать больше проектов или позиций груза.Удалите ненужные проекты или перейдите на тариф с более высокими лимитами.Нет
404not_foundEndpoint /v1 с таким методом и путём не существует.Сверьте метод и путь со справочником API.Нет
404job_not_foundВ вашей организации нет задания с таким ID.Проверьте ID.Нет
404vehicle_not_foundТранспортного средства с таким ID нет ни среди пресетов, ни среди транспортных средств вашей организации.Сверьте ID со списком GET /v1/vehicles.Нет
404template_not_foundВ вашей организации нет шаблона с таким ID.Сверьте ID со списком GET /v1/templates.Нет
404project_not_foundВ вашей организации нет проекта с таким ID.Сверьте ID со списком GET /v1/projects.Нет
409job_not_finishedЗадание ещё в очереди или выполняется.Опрашивайте GET /v1/jobs/{id}, пока status не станет succeeded.Да
409project_busyЗагрузка проекта прямо сейчас рассчитывается (в приложении или другим заданием).Дождитесь окончания этого расчёта и повторите.Да
409job_failedЗадание завершилось ошибкой; результата нет.Смотрите job.error; сбои на нашей стороне не оплачиваются (time_limit_exceeded оплачивается как отменённое задание). Если причина была временной, отправьте задание заново.Нет
409job_canceledЗадание отменено; результата нет.При необходимости отправьте задание заново.Нет
409job_already_finishedЗадание уже завершено, отменить его нельзя.Ничего делать не нужно.Нет
400idempotency_key_invalidДлина заголовка Idempotency-Key превышает 128 симв.Используйте ключ покороче (подойдёт UUID).Нет
410result_expiredСрок хранения результата истёк, и он удалён.Если план снова нужен, отправьте задание заново.Нет
413payload_too_largeТело запроса превышает 10 MB.Отправьте меньше позиций или упростите их.Нет
422validation_failedЗапрос — корректный JSON, но описывает недопустимое задание. В details[] перечислены все проблемы.Исправьте все поля, указанные в details[].path; ошибки валидации бесплатны.Нет
429rate_limitedСлишком много запросов за текущую минуту, час или сутки (на ключ или на организацию) либо число неудачных попыток аутентификации с вашего IP-адреса превысило 60 в минуту.Подождите столько секунд, сколько указано в Retry-After, затем повторите запрос с экспоненциальной задержкой.Да
429too_many_jobsУ организации уже максимальное число заданий в очереди и в работе.Дождитесь завершения выполняющихся заданий и повторите.Да
500internal_errorСбой на нашей стороне.Повторите запрос с экспоненциальной задержкой; если ошибка повторяется, сообщите в поддержку request_id.Да
503api_disabledAPI временно отключён (техническое обслуживание) или выключен для организации.Повторите позже.Да

Детали валидации

details[].code в ответе 422 validation_failed:

КодЗначение
requiredНе передано обязательное поле
invalid_valueНеверный тип или недопустимое значение
out_of_rangeЗначение слишком маленькое, слишком большое или слишком длинное
duplicate_idID используется дважды
unknown_vehicleНет ни пресета, ни вашего транспортного средства с таким vehicle_id
unknown_templateУ вас нет шаблона с таким template_id
type_not_allowedТип транспортного средства не включён для вашей организации
unknown_groupПозиция ссылается на группу, которой нет в списке
does_not_fitПозиция не помещается ни в одно из указанных транспортных средств
too_many_itemsЕдиниц груза больше лимита задания
too_many_vehiclesТранспортных средств больше лимита задания
unknown_fieldПоле, неизвестное API

Ошибки заданий

Задание в статусе failed или canceled указывает причину в job.error.code:

КодЗначение
canceledОтменено через DELETE /v1/jobs/{id}. Списываются плата за задание и стоимость использованных вычислений.
time_limit_exceededБюджет времени вычислений исчерпан раньше, чем было загружено хотя бы одно транспортное средство. Оплачивается как отменённое задание: плата за задание, надбавка за крупную загрузку и использованные вычисления; плата за транспортные средства не взимается.
engine_failedСбой алгоритма загрузки. Не оплачивается.
queue_timeoutЗадание слишком долго ждало свободного слота вычислений. Не оплачивается.
server_restartedСервис перезапустился, пока задание ждало в очереди или выполнялось. Не оплачивается.

Повторы

Повторяйте запросы, получившие 429, 500 и 503, с экспоненциальной задержкой и с учётом Retry-After. Передавайте тот же Idempotency-Key (Идемпотентность). Запросы с другими ошибками 4xx не повторяйте без изменений.

См. также