# ПЭК API личного кабинета: POST /calculator/calculateprice/ — Расчёт стоимости и сроков перевозки

Если заказан забор или доставка, расчёт идёт по координатам или адресу из блоков `pickup`/`delivery`; иначе нужны ID складов `senderWarehouseId`/`receiverWarehouseId`. В ответе стоимость по видам перевозки в массиве `transfers` (`type` 3 — авто, 1 — авиа).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `currencyCode` | body | string | нет | Код валюты, по умолчанию 643 (рубль) |
| `types` | body | array | да | ID продуктов/тарифов ПЭК (список — /typesOfDelivery/all/) |
| `senderWarehouseId` | body | string | нет | Склад отправителя (если нет забора) |
| `receiverWarehouseId` | body | string | нет | Склад получателя (если нет доставки) |
| `plannedDateTime` | body | string | да | Плановая дата и время передачи груза |
| `isInsurance` | body | boolean | да | Страхование |
| `isInsurancePrice` | body | number | да | Стоимость груза для страхования, руб |
| `isPickUp` | body | boolean | да | Нужен забор |
| `isDelivery` | body | boolean | да | Нужна доставка |
| `isOpenCarSender` | body | boolean | да | Растентовка отправителя |
| `isOpenCarReceiver` | body | boolean | да | Растентовка получателя |
| `isHyperMarket` | body | boolean | да | Признак гипермаркета |
| `needReturnDocuments` | body | boolean | нет | Возврат документов с подписью получателя |
| `needArrangeTransportationDocuments` | body | boolean | нет | Передача сопроводительных документов с грузом |
| `pickup.address` | body | string | нет | Адрес забора: страна, регион, район, город, улица, дом через запятую |
| `pickup.coordinates` | body | object | нет | Координаты latitude, longitude |
| `delivery.address` | body | string | нет | Адрес доставки |
| `pickupServices` | body | object | нет | ПРР при заборе: isLoading, floor, carryingDistance, isElevator |
| `deliveryServices` | body | object | нет | ПРР при доставке |
| `counterpart` | body | object | нет | Контрагент для спецусловий: inn, kpp, whoMakesCalculation |
| `cargos` | body | array | да | Грузоместа |
| `cargos[].weight` | body | number | да | Вес, кг |
| `cargos[].length` | body | number | нет | Длина, м (не нужна при maxSize) |
| `cargos[].width` | body | number | нет | Ширина, м |
| `cargos[].height` | body | number | нет | Высота, м |
| `cargos[].volume` | body | number | нет | Объём, м³ |
| `cargos[].maxSize` | body | number | нет | Максимальный габарит, м |
| `cargos[].isHP` | body | boolean | нет | Защитная транспортировочная упаковка |

## Базовые URL

- Боевой: `https://kabinet.pecom.ru/api/v1/`
- URL метода: `https://kabinet.pecom.ru/api/v1/<группа>/<метод>/`

## Авторизация

Тип: Basic Auth

HTTP Basic-аутентификация: логин — имя пользователя личного кабинета ПЭК, пароль — любой активный ключ доступа API. Ключ создаётся на странице «Регистрационные данные» в разделе «Ключи API»; для разных приложений рекомендуются разные ключи. Анонимный доступ не поддерживается.

Обязательные заголовки: `Content-Type: application/json;charset=utf-8`, `Accept: application/json`. Для сжатия ответов — `Accept-Encoding: gzip`. HTTPS с обязательной проверкой сертификата сервера.

```
curl.exe ^
--verbose ^
--cacert cacert-kabinet_pecom_ru.pem ^
--basic ^
--user user:FA21831AB83DB72D3261FA80BA309DBF6B2D7ADC ^
--request POST -d @curl-input.txt ^
--header "Content-Type: application/json; charset=utf-8" ^
--compressed ^
--output curl-output.txt ^
https://kabinet.pecom.ru/api/v1/cargos/status/
```

## Нюансы

- Все поля JSON-объекта в запросе обязательны, если не указано обратное.
- Логические ошибки (нет параметров, неверный формат) приходят с HTTP 200 и объектом `error` в теле — проверяйте его наличие, а не только статус.
- В `cargos` передавайте каждое грузоместо отдельным элементом; если известны только общие параметры — столько элементов, сколько мест, со средними весом и объёмом.
- Числа в габаритах округляются до сотых в большую сторону — передавайте не больше двух знаков после запятой.
- Вес — в килограммах, габариты — в метрах.
- Признак `isHP` применяется ко всему грузу, если стоит хотя бы у одного места.
- Часть полей `/cargos/status/` заполняется только при оформленном доступе к информации участников перевозки.

## Сценарии с этим методом

- [Рассчитать стоимость и сроки перевозки груза](https://mcp-everything.ru/integrations/pek/scenarios/rasschitat-stoimost-i-sroki-perevozki.md)

---

Если этого недостаточно — официальная документация: https://kabinet.pecom.ru/api/v1
Вся интеграция одним документом: https://mcp-everything.ru/integrations/pek.md
