Перейти к содержимому
CargoDuo logoCargoDuo
Цены
Документация для разработчиковСправочник APIРасчёт загрузки

Оценить стоимость задания

Выполняет ту же валидацию, что и POST /v1/pack, и возвращает диапазон стоимости — без создания задания и резервирования кредитов.

POSThttps://runner.cargoduo.com/v1/estimate

Бесплатно. На некорректный запрос приходит 200 с valid: false и всеми проблемами в errors[].

Аутентификация

Bearer-ключ API с правомpack:writeПодробнее

Параметры тела

application/json
ИмяТипОбязательноОписание
referencestring
string
Нет

Ваш собственный идентификатор (номер заказа, ID отправки…). Возвращается в задании.

≤ 128 chars
vehiclesVehicle[]обязательно
Vehicle[]
Да

Описания транспортных средств. У каждого может быть quantity > 1. Минимум одно.

itemsItem[]обязательно
Item[]
Да

Описания позиций. У каждой может быть quantity > 1. Минимум одна.

groupsGroup[]
Group[]
Нет

Необязательные группы (клиенты, точки доставки, заказы). Если options.group_routing не "none", они обязательны для каждой группы, указанной в позициях; иначе группы создаются из названий групп в позициях в порядке появления.

optionsOptions
Options
Нет

Параметры расчёта загрузки. Все поля необязательны.

Пример запроса

curl -X POST "https://runner.cargoduo.com/v1/estimate" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "order-1042",
    "vehicles": [
      {
        "id": "trailer",
        "type": "trailer",
        "name": "13.6 m trailer",
        "length": 1360,
        "width": 245,
        "height": 270,
        "max_weight": 24000
      }
    ],
    "items": [
      {
        "id": "pallet-eu",
        "label": "Euro pallet",
        "length": 120,
        "width": 80,
        "height": 140,
        "weight": 450,
        "quantity": 18,
        "stackable": false
      },
      {
        "id": "carton-a",
        "label": "Carton A",
        "length": 60,
        "width": 40,
        "height": 40,
        "weight": 12,
        "quantity": 40,
        "rotation": "upright"
      }
    ],
    "options": {
      "packing_mode": "auto"
    }
  }'

Пример ответа

200 OK · Estimate
{
  "valid": true,
  "errors": [],
  "warnings": [],
  "items": 58,
  "max_vehicles": 3,
  "estimated_cost": {
    "min_credits": 0.26,
    "max_credits": 1.11
  },
  "estimated_seconds": 90,
  "balance": {
    "available_credits": 147.75
  }
}

Ответы

  • 200OKРезультат валидации и диапазон стоимости.
    ИмяТипОбязательноОписание
    validboolean
    boolean
    Нет

    Запрос будет принят POST /v1/pack.

    errorsErrorDetail[]
    ErrorDetail[]
    Нет

    Ошибки валидации (пусто, если запрос корректен).

    warningsWarning[]
    Warning[]
    Нет

    Некритичные замечания.

    itemsinteger
    integer
    Нет

    Всего единиц груза.

    max_vehiclesinteger
    integer
    Нет

    Максимум транспортных средств, которые может загрузить задание.

    estimated_costCostRange
    CostRange
    Нет

    Диапазон стоимости в кредитах.

    estimated_secondsnumber · s
    number · s
    Нет

    Бюджет времени вычислений, который получит задание (верхняя граница; большинство заданий завершаются раньше).

    balanceEstimateBalance
    EstimateBalance
    Нет

    Ваши доступные кредиты.

  • 400Bad requestinvalid_json
    • invalid_jsonТело запроса — невалидный JSON, или у поля неверный тип.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 401Unauthorizedunauthorizedkey_revokedkey_expired
    • unauthorizedAPI-ключ отсутствует, имеет неверный формат или неизвестен.
    • key_revokedКлюч отозван.
    • key_expiredСрок действия ключа истёк.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 403Forbiddenip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • ip_not_allowedIP-адреса вызывающей стороны нет в списке разрешённых IP для этого ключа.
    • subscription_inactiveУ организации нет активной подписки, включающей API.
    • account_inactiveРабота организации приостановлена, или у неё нет владельца с активной учётной записью.
    • scope_missingУ ключа нет области доступа, необходимой для этого endpoint.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 413Payload too largepayload_too_large
    • payload_too_largeТело запроса превышает 10 MB.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 429Too many requestsrate_limited
    • rate_limitedСлишком много запросов за текущую минуту, час или сутки (на ключ или на организацию) либо число неудачных попыток аутентификации с вашего IP-адреса превысило 60 в минуту.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 500Internal server errorinternal_error
    • internal_errorСбой на нашей стороне.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок
  • 503Service unavailableapi_disabled
    • api_disabledAPI временно отключён (техническое обслуживание) или выключен для организации.
    ИмяТипОбязательноОписание
    errorErrorBodyобязательно
    ErrorBody
    Да
    Все коды ошибок