Справочник API
Справочник — полный перечень методов External API с параметрами, телами запросов и схемами ответов. Он собран из той же OpenAPI-спецификации, что и код backend, и обновляется вместе с каждым релизом: расхождение между справочником и реальными ручками не проходит проверку при выкате.
Правила аутентификации, форматы, пагинация, идемпотентность и коды ошибок описаны в статье External API — здесь только сами методы.
Как читать справочник
- Раздел — ресурс: каталог, клиенты, заказы, сделки, брони и так далее. Оглавление справа ведёт по разделам.
- Метод и путь — относительно базового URL
https://app.easymb.ru/api/external/v1.{id}в пути — UUID записи. - Scope — какое право должно быть у токена.
catalog:writeвключаетcatalog:read;*:readи*:writeоткрывают все ресурсы. - Компонент — какой компонент должен быть включён у компании, иначе ответ
403. Системные (core,catalog,calendar,messenger) включены всегда. - Параметры — query и path. Постраничные списки принимают
page,pageSizeи фильтры конкретного ресурса (sort,order,search— где перечислены); справочники отвечают массивом без страниц. У мутирующих операций описан заголовокX-Idempotency-Key. - Ответы 4xx — у каждой операции перечислены общие ошибки контура с их кодами; форма тела — схема
ExternalErrorResponse. - Тело запроса и Ответы — схемы полей. Пометка «обязательно» относится к запросу; в ответе поле с
| nullможет быть пустым. - Схемы данных в конце — именованные объекты, на которые ссылаются методы: одна и та же схема заказа приходит и в списке, и в чтении, и в создании.
Как скачать спецификацию и сгенерировать клиент
Файл external-openapi.json доступен для скачивания в шапке справочника. Его можно импортировать в Postman или Insomnia и получить готовую коллекцию запросов, а генератор клиентов соберёт типизированную обёртку под ваш язык:
npx @openapitools/openapi-generator-cli generate \
-i https://docs.easymb.ru/external-openapi.json \
-g typescript-fetch \
-o ./easymb-clientБазовый URL уже прописан в спецификации, токен передайте в заголовке Authorization: Bearer emb_live_….
catalog
Товары, услуги и категории каталога.
GET/catalog/products
Список товаров.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | |
categoryId | query | string | null | |
status | query | stringЗначения: activehiddenall | |
priceMin | query | number | Мин. цена в копейках |
priceMax | query | number | Макс. цена в копейках |
brand | query | string | Фильтр по бренду (точное совпадение). |
attr | query | словарь значений string | Карта фильтров по характеристикам: attr[<attributeId>]=<значение | minNumber:maxNumber | optionId> |
sort | query | stringЗначения: nameskupricebrandmodelcreatedAt | |
order | query | stringЗначения: ascdesc | |
include | query | stringЗначения: stock |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | ProductResponse[] | массив из ProductResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/catalog/products
Создать товар.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: CFE-0012 |
barcode | string | null | Штрихкод Пример: 4607034630621 |
nameобязательно | string | Название товара Пример: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } словарь значений string |
descriptionI18n | object | Переводы описания по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceобязательно | number | Цена в копейках Пример: 240000 |
cost | number | Себестоимость в копейках По умолчанию: 0 |
unit | string | Единица измерения (код) По умолчанию: pcs |
unitId | string (uuid) | null | FK на справочник единиц (C5). |
packQty | number | null | Фасовка: кол-во packUnit в одной unit. |
packUnitId | string (uuid) | null | FK на единицу фасовки. |
minOrderQty | number | null | Минимальная партия к заказу (опт). Пусто — без ограничения. |
orderStepQty | number | null | Кратность отгрузки (опт): коробка 12 шт → 12, 24, 36. |
costComponents | object[] | Разбивка себестоимости (C8): [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundle | boolean | Комплект/набор (BOM) По умолчанию: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. массив из object |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
hasStock | boolean | Вести складской учёт остатков по товару По умолчанию: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Пример: ☕ |
brand | string | null | Бренд Пример: Lavazza |
model | string | null | Модель Пример: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). массив из ProductAttributeValueInput |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID товара |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
barcodeобязательно | string | null | Штрихкод |
nameобязательно | string | Название товара |
descriptionобязательно | string | null | Описание |
nameI18nобязательно | object | Переводы названия по локали: { "de": "..." } словарь значений string |
descriptionI18nобязательно | object | Переводы описания по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
brandобязательно | string | null | Бренд |
modelобязательно | string | null | Модель |
priceобязательно | number | Цена в копейках |
costобязательно | number | Себестоимость в копейках |
unitобязательно | string | Единица измерения (код, денорм) |
unitIdобязательно | string | null | ID единицы измерения из справочника |
packQtyобязательно | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyобязательно | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyобязательно | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdобязательно | string | null | ID единицы фасовки |
costComponentsобязательно | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundleобязательно | boolean | Комплект/набор (BOM) |
modifierGroupsобязательно | object[] | Группы модификаторов позиции с надбавками массив из object |
statusобязательно | stringЗначения: activehidden | Статус карточки |
hasStockобязательно | boolean | Ведётся складской учёт остатков |
defaultSupplierIdобязательно | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojiобязательно | string | null | Эмодзи-иконка |
photoFileIdобязательно | string | null | ID файла основного фото |
thumbnailFileIdобязательно | string | null | ID файла миниатюры |
attributeValuesобязательно | ProductAttributeValueResponse[] | Значения характеристик массив из ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/products/{id}
Получить товар.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID товара |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
barcodeобязательно | string | null | Штрихкод |
nameобязательно | string | Название товара |
descriptionобязательно | string | null | Описание |
nameI18nобязательно | object | Переводы названия по локали: { "de": "..." } словарь значений string |
descriptionI18nобязательно | object | Переводы описания по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
brandобязательно | string | null | Бренд |
modelобязательно | string | null | Модель |
priceобязательно | number | Цена в копейках |
costобязательно | number | Себестоимость в копейках |
unitобязательно | string | Единица измерения (код, денорм) |
unitIdобязательно | string | null | ID единицы измерения из справочника |
packQtyобязательно | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyобязательно | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyобязательно | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdобязательно | string | null | ID единицы фасовки |
costComponentsобязательно | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundleобязательно | boolean | Комплект/набор (BOM) |
modifierGroupsобязательно | object[] | Группы модификаторов позиции с надбавками массив из object |
statusобязательно | stringЗначения: activehidden | Статус карточки |
hasStockобязательно | boolean | Ведётся складской учёт остатков |
defaultSupplierIdобязательно | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojiобязательно | string | null | Эмодзи-иконка |
photoFileIdобязательно | string | null | ID файла основного фото |
thumbnailFileIdобязательно | string | null | ID файла миниатюры |
attributeValuesобязательно | ProductAttributeValueResponse[] | Значения характеристик массив из ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/catalog/products/{id}
Изменить товар.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: CFE-0012 |
barcode | string | null | Штрихкод Пример: 4607034630621 |
name | string | Название товара Пример: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } словарь значений string |
descriptionI18n | object | Переводы описания по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
price | number | Цена в копейках Пример: 240000 |
cost | number | Себестоимость в копейках По умолчанию: 0 |
unit | string | Единица измерения (код) По умолчанию: pcs |
unitId | string (uuid) | null | FK на справочник единиц (C5). |
packQty | number | null | Фасовка: кол-во packUnit в одной unit. |
packUnitId | string (uuid) | null | FK на единицу фасовки. |
minOrderQty | number | null | Минимальная партия к заказу (опт). Пусто — без ограничения. |
orderStepQty | number | null | Кратность отгрузки (опт): коробка 12 шт → 12, 24, 36. |
costComponents | object[] | Разбивка себестоимости (C8): [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundle | boolean | Комплект/набор (BOM) По умолчанию: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. массив из object |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
hasStock | boolean | Вести складской учёт остатков по товару По умолчанию: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Пример: ☕ |
brand | string | null | Бренд Пример: Lavazza |
model | string | null | Модель Пример: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). массив из ProductAttributeValueInput |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID товара |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
barcodeобязательно | string | null | Штрихкод |
nameобязательно | string | Название товара |
descriptionобязательно | string | null | Описание |
nameI18nобязательно | object | Переводы названия по локали: { "de": "..." } словарь значений string |
descriptionI18nобязательно | object | Переводы описания по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
brandобязательно | string | null | Бренд |
modelобязательно | string | null | Модель |
priceобязательно | number | Цена в копейках |
costобязательно | number | Себестоимость в копейках |
unitобязательно | string | Единица измерения (код, денорм) |
unitIdобязательно | string | null | ID единицы измерения из справочника |
packQtyобязательно | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyобязательно | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyобязательно | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdобязательно | string | null | ID единицы фасовки |
costComponentsобязательно | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundleобязательно | boolean | Комплект/набор (BOM) |
modifierGroupsобязательно | object[] | Группы модификаторов позиции с надбавками массив из object |
statusобязательно | stringЗначения: activehidden | Статус карточки |
hasStockобязательно | boolean | Ведётся складской учёт остатков |
defaultSupplierIdобязательно | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojiобязательно | string | null | Эмодзи-иконка |
photoFileIdобязательно | string | null | ID файла основного фото |
thumbnailFileIdобязательно | string | null | ID файла миниатюры |
attributeValuesобязательно | ProductAttributeValueResponse[] | Значения характеристик массив из ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/catalog/products/{id}
Скрыть товар (soft-delete).
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID товара |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
barcodeобязательно | string | null | Штрихкод |
nameобязательно | string | Название товара |
descriptionобязательно | string | null | Описание |
nameI18nобязательно | object | Переводы названия по локали: { "de": "..." } словарь значений string |
descriptionI18nобязательно | object | Переводы описания по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
brandобязательно | string | null | Бренд |
modelобязательно | string | null | Модель |
priceобязательно | number | Цена в копейках |
costобязательно | number | Себестоимость в копейках |
unitобязательно | string | Единица измерения (код, денорм) |
unitIdобязательно | string | null | ID единицы измерения из справочника |
packQtyобязательно | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyобязательно | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyобязательно | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdобязательно | string | null | ID единицы фасовки |
costComponentsобязательно | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundleобязательно | boolean | Комплект/набор (BOM) |
modifierGroupsобязательно | object[] | Группы модификаторов позиции с надбавками массив из object |
statusобязательно | stringЗначения: activehidden | Статус карточки |
hasStockобязательно | boolean | Ведётся складской учёт остатков |
defaultSupplierIdобязательно | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojiобязательно | string | null | Эмодзи-иконка |
photoFileIdобязательно | string | null | ID файла основного фото |
thumbnailFileIdобязательно | string | null | ID файла миниатюры |
attributeValuesобязательно | ProductAttributeValueResponse[] | Значения характеристик массив из ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/services
Список услуг.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | |
categoryId | query | string | |
status | query | stringЗначения: activehiddenall | |
priceMin | query | number | Мин. цена в копейках |
priceMax | query | number | Макс. цена в копейках |
priceModel | query | stringЗначения: fixedper_hourper_minuteper_dayper_item | |
sort | query | stringЗначения: nameskupricetotalCostcreatedAt | |
order | query | stringЗначения: ascdesc |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | ServiceResponse[] | массив из ServiceResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/catalog/services
Создать услугу.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: SVC-0001 |
nameобязательно | string | Название услуги Пример: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены По умолчанию: fixed |
priceобязательно | number | Цена в копейках Пример: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Пример: 60 |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. массив из ServiceCostItemInputDto |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID услуги |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
nameобязательно | string | Название услуги |
nameI18nобязательно | object | Переводы названия по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
priceModelобязательно | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
priceобязательно | number | Цена в копейках |
durationMinutesобязательно | number | null | Длительность, мин |
totalCostобязательно | number | Сумма по составу затрат, копейки |
statusобязательно | stringЗначения: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче массив из ServiceCostItemResponse |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/services/{id}
Получить услугу.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID услуги |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
nameобязательно | string | Название услуги |
nameI18nобязательно | object | Переводы названия по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
priceModelобязательно | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
priceобязательно | number | Цена в копейках |
durationMinutesобязательно | number | null | Длительность, мин |
totalCostобязательно | number | Сумма по составу затрат, копейки |
statusобязательно | stringЗначения: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче массив из ServiceCostItemResponse |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/catalog/services/{id}
Изменить услугу.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: SVC-0001 |
name | string | Название услуги Пример: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены По умолчанию: fixed |
price | number | Цена в копейках Пример: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Пример: 60 |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. массив из ServiceCostItemInputDto |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID услуги |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
nameобязательно | string | Название услуги |
nameI18nобязательно | object | Переводы названия по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
priceModelобязательно | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
priceобязательно | number | Цена в копейках |
durationMinutesобязательно | number | null | Длительность, мин |
totalCostобязательно | number | Сумма по составу затрат, копейки |
statusобязательно | stringЗначения: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче массив из ServiceCostItemResponse |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/catalog/services/{id}
Скрыть услугу.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID услуги |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
nameобязательно | string | Название услуги |
nameI18nобязательно | object | Переводы названия по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
priceModelобязательно | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
priceобязательно | number | Цена в копейках |
durationMinutesобязательно | number | null | Длительность, мин |
totalCostобязательно | number | Сумма по составу затрат, копейки |
statusобязательно | stringЗначения: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче массив из ServiceCostItemResponse |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/categories
Список категорий.
- Scope
catalog:read- Компонент
catalog
Ответы
200CategoryResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/catalog/categories
Создать категорию.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название категории Пример: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки По умолчанию: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки По умолчанию: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Пример: CFE |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID категории |
companyIdобязательно | string | ID компании |
parentIdобязательно | string | null | ID родительской категории; null — корень |
nameобязательно | string | Название категории |
iconобязательно | string | Имя иконки |
colorобязательно | string | null | HEX цвета иконки |
bgобязательно | string | null | HEX цвета фона иконки |
sortOrderобязательно | number | Порядок сортировки |
prefixобязательно | string | null | Префикс артикулов: A-Z, 1-4 символа Пример: CFE |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/categories/{id}
Получить категорию.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID категории |
companyIdобязательно | string | ID компании |
parentIdобязательно | string | null | ID родительской категории; null — корень |
nameобязательно | string | Название категории |
iconобязательно | string | Имя иконки |
colorобязательно | string | null | HEX цвета иконки |
bgобязательно | string | null | HEX цвета фона иконки |
sortOrderобязательно | number | Порядок сортировки |
prefixобязательно | string | null | Префикс артикулов: A-Z, 1-4 символа Пример: CFE |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/catalog/categories/{id}
Изменить категорию.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
name | string | Название категории Пример: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки По умолчанию: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки По умолчанию: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Пример: CFE |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID категории |
companyIdобязательно | string | ID компании |
parentIdобязательно | string | null | ID родительской категории; null — корень |
nameобязательно | string | Название категории |
iconобязательно | string | Имя иконки |
colorобязательно | string | null | HEX цвета иконки |
bgобязательно | string | null | HEX цвета фона иконки |
sortOrderобязательно | number | Порядок сортировки |
prefixобязательно | string | null | Префикс артикулов: A-Z, 1-4 символа Пример: CFE |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/catalog/categories/{id}
Удалить категорию.
- Scope
catalog:write- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
204Без тела
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/products/{id}/variants
Варианты товара (SKU по размеру, цвету и т. п.).
Идентификаторы вариантов нужны в `variantId` строк заказа, продажи и приёмки, а также в корректировке остатков.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200ProductVariantResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/attributes
Атрибуты товаров с вариантами значений.
Идентификаторы атрибутов и их опций подставляются в `attributes[]` при создании и изменении товара.
- Scope
catalog:read- Компонент
catalog
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
categoryId | query | string | null | |
primaryOnly | query | boolean |
Ответы
200AttributeDefinitionResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/catalog/units
Единицы измерения компании.
Идентификаторы — для `unitId` и `packUnitId` товара.
- Scope
catalog:read- Компонент
catalog
Ответы
200UnitResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.clients
Клиенты компании.
GET/clients
Список клиентов.
- Scope
clients:read- Компонент
clients
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: displayNamecreatedAtupdatedAt | |
order | query | stringЗначения: ascdesc | |
kind | query | stringЗначения: individuallegal | |
status | query | stringЗначения: activearchived | |
assignedToId | query | string | ID ответственного сотрудника |
tag | query | string | Один тег для фильтра |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | ClientListItemResponse[] | массив из ClientListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/clients
Создать клиента.
- Scope
clients:write- Компонент
clients
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstName | string | null | Имя |
lastName | string | null | Фамилия |
middleName | string | null | Отчество |
companyName | string | null | Название компании (юрлицо) |
position | string | null | Должность контактного лица |
phone | string | null | Телефон |
email | string | null | |
telegramChatId | string | null | Telegram chat id для исходящих сообщений (канал telegram). |
whatsappPhone | string | null | Номер WhatsApp; пустой → используется phone. |
note | string | null | Внутренняя заметка |
tags | string[] | Теги массив из string |
birthday | string (date) | null | Дата рождения / основания (ISO 8601) |
assignedToId | string (uuid) | null | ID ответственного сотрудника |
inn | string | null | ИНН (B2B, для документов) |
kpp | string | null | КПП (B2B) |
legalAddress | string | null | Юр. адрес (B2B) |
bankDetails | string | null | Банковские реквизиты строкой (B2B) |
contractNumber | string | null | Номер договора (B2B) |
paymentTermsDays | number | null | Срок оплаты по договору, дни |
creditLimit | number | null | Кредитный лимит B2B, копейки (0 = без лимита) |
groupId | string (uuid) | null | Группа контрагентов (опт): общий прайс-лист и скидка сегмента |
priceListId | string (uuid) | null | Персональный прайс-лист (опт), перекрывает прайс группы |
slaHours | number | null | SLA по договору, часы |
marketingConsent | boolean | Согласие на маркетинговые рассылки (CL9) |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNameобязательно | string | null | Имя |
lastNameобязательно | string | null | Фамилия |
middleNameобязательно | string | null | Отчество |
companyNameобязательно | string | null | Название компании (юрлицо) |
positionобязательно | string | null | Должность контактного лица |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
telegramChatIdобязательно | string | null | Telegram chat id для исходящих сообщений |
whatsappPhoneобязательно | string | null | Номер WhatsApp; null — используется phone |
innобязательно | string | null | ИНН (B2B) |
kppобязательно | string | null | КПП (B2B) |
legalAddressобязательно | string | null | Юр. адрес (B2B) |
bankDetailsобязательно | string | null | Банковские реквизиты строкой (B2B) |
noteобязательно | string | null | Внутренняя заметка |
tagsобязательно | string[] | Теги массив из string |
birthdayобязательно | string (date) | null | Дата рождения / основания (ISO 8601) |
statusобязательно | stringЗначения: activearchived | Статус клиента |
balanceобязательно | number | Баланс/абонемент в копейках |
pointsобязательно | number | Баллы лояльности (копейки-эквивалент) |
contractNumberобязательно | string | null | Номер договора (B2B) |
groupIdобязательно | string | null | ID группы контрагентов (опт) |
priceListIdобязательно | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysобязательно | number | null | Срок оплаты по договору, дни |
creditLimitобязательно | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursобязательно | number | null | SLA по договору, часы |
marketingConsentобязательно | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtобязательно | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourceобязательно | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtобязательно | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdByIdобязательно | string | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/clients/{id}
Получить клиента.
- Scope
clients:read- Компонент
clients
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNameобязательно | string | null | Имя |
lastNameобязательно | string | null | Фамилия |
middleNameобязательно | string | null | Отчество |
companyNameобязательно | string | null | Название компании (юрлицо) |
positionобязательно | string | null | Должность контактного лица |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
telegramChatIdобязательно | string | null | Telegram chat id для исходящих сообщений |
whatsappPhoneобязательно | string | null | Номер WhatsApp; null — используется phone |
innобязательно | string | null | ИНН (B2B) |
kppобязательно | string | null | КПП (B2B) |
legalAddressобязательно | string | null | Юр. адрес (B2B) |
bankDetailsобязательно | string | null | Банковские реквизиты строкой (B2B) |
noteобязательно | string | null | Внутренняя заметка |
tagsобязательно | string[] | Теги массив из string |
birthdayобязательно | string (date) | null | Дата рождения / основания (ISO 8601) |
statusобязательно | stringЗначения: activearchived | Статус клиента |
balanceобязательно | number | Баланс/абонемент в копейках |
pointsобязательно | number | Баллы лояльности (копейки-эквивалент) |
contractNumberобязательно | string | null | Номер договора (B2B) |
groupIdобязательно | string | null | ID группы контрагентов (опт) |
priceListIdобязательно | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysобязательно | number | null | Срок оплаты по договору, дни |
creditLimitобязательно | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursобязательно | number | null | SLA по договору, часы |
marketingConsentобязательно | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtобязательно | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourceобязательно | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtобязательно | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdByIdобязательно | string | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/clients/{id}
Изменить клиента.
- Scope
clients:write- Компонент
clients
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
kind | stringЗначения: individuallegal | Физлицо или юрлицо |
displayName | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstName | string | null | Имя |
lastName | string | null | Фамилия |
middleName | string | null | Отчество |
companyName | string | null | Название компании (юрлицо) |
position | string | null | Должность контактного лица |
phone | string | null | Телефон |
email | string | null | |
telegramChatId | string | null | Telegram chat id для исходящих сообщений (канал telegram). |
whatsappPhone | string | null | Номер WhatsApp; пустой → используется phone. |
note | string | null | Внутренняя заметка |
tags | string[] | Теги массив из string |
birthday | string (date) | null | Дата рождения / основания (ISO 8601) |
assignedToId | string (uuid) | null | ID ответственного сотрудника |
inn | string | null | ИНН (B2B, для документов) |
kpp | string | null | КПП (B2B) |
legalAddress | string | null | Юр. адрес (B2B) |
bankDetails | string | null | Банковские реквизиты строкой (B2B) |
contractNumber | string | null | Номер договора (B2B) |
paymentTermsDays | number | null | Срок оплаты по договору, дни |
creditLimit | number | null | Кредитный лимит B2B, копейки (0 = без лимита) |
groupId | string (uuid) | null | Группа контрагентов (опт): общий прайс-лист и скидка сегмента |
priceListId | string (uuid) | null | Персональный прайс-лист (опт), перекрывает прайс группы |
slaHours | number | null | SLA по договору, часы |
marketingConsent | boolean | Согласие на маркетинговые рассылки (CL9) |
status | stringЗначения: activearchived | Статус клиента |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNameобязательно | string | null | Имя |
lastNameобязательно | string | null | Фамилия |
middleNameобязательно | string | null | Отчество |
companyNameобязательно | string | null | Название компании (юрлицо) |
positionобязательно | string | null | Должность контактного лица |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
telegramChatIdобязательно | string | null | Telegram chat id для исходящих сообщений |
whatsappPhoneобязательно | string | null | Номер WhatsApp; null — используется phone |
innобязательно | string | null | ИНН (B2B) |
kppобязательно | string | null | КПП (B2B) |
legalAddressобязательно | string | null | Юр. адрес (B2B) |
bankDetailsобязательно | string | null | Банковские реквизиты строкой (B2B) |
noteобязательно | string | null | Внутренняя заметка |
tagsобязательно | string[] | Теги массив из string |
birthdayобязательно | string (date) | null | Дата рождения / основания (ISO 8601) |
statusобязательно | stringЗначения: activearchived | Статус клиента |
balanceобязательно | number | Баланс/абонемент в копейках |
pointsобязательно | number | Баллы лояльности (копейки-эквивалент) |
contractNumberобязательно | string | null | Номер договора (B2B) |
groupIdобязательно | string | null | ID группы контрагентов (опт) |
priceListIdобязательно | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysобязательно | number | null | Срок оплаты по договору, дни |
creditLimitобязательно | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursобязательно | number | null | SLA по договору, часы |
marketingConsentобязательно | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtобязательно | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourceобязательно | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtобязательно | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdByIdобязательно | string | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/clients/{id}/archive
Архивировать клиента (soft-delete).
Команда над существующим клиентом — отвечает 200.
- Scope
clients:write- Компонент
clients
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNameобязательно | string | null | Имя |
lastNameобязательно | string | null | Фамилия |
middleNameобязательно | string | null | Отчество |
companyNameобязательно | string | null | Название компании (юрлицо) |
positionобязательно | string | null | Должность контактного лица |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
telegramChatIdобязательно | string | null | Telegram chat id для исходящих сообщений |
whatsappPhoneобязательно | string | null | Номер WhatsApp; null — используется phone |
innобязательно | string | null | ИНН (B2B) |
kppобязательно | string | null | КПП (B2B) |
legalAddressобязательно | string | null | Юр. адрес (B2B) |
bankDetailsобязательно | string | null | Банковские реквизиты строкой (B2B) |
noteобязательно | string | null | Внутренняя заметка |
tagsобязательно | string[] | Теги массив из string |
birthdayобязательно | string (date) | null | Дата рождения / основания (ISO 8601) |
statusобязательно | stringЗначения: activearchived | Статус клиента |
balanceобязательно | number | Баланс/абонемент в копейках |
pointsобязательно | number | Баллы лояльности (копейки-эквивалент) |
contractNumberобязательно | string | null | Номер договора (B2B) |
groupIdобязательно | string | null | ID группы контрагентов (опт) |
priceListIdобязательно | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysобязательно | number | null | Срок оплаты по договору, дни |
creditLimitобязательно | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursобязательно | number | null | SLA по договору, часы |
marketingConsentобязательно | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtобязательно | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourceобязательно | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtобязательно | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdByIdобязательно | string | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.leads
Лиды входящего контура: приём, статус, ответственный, конвертация.
GET/leads
Список лидов.
- Scope
leads:read- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: createdAtstatus | |
order | query | stringЗначения: ascdesc | |
status | query | stringЗначения: newin_progressconvertedspam | |
source | query | string | |
assignedToId | query | string | ID ответственного или `unassigned` (без ответственного). |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | LeadResponse[] | массив из LeadResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/leads
Создать лид.
Идемпотентно по `externalId` в рамках источника: повторный запрос возвращает уже созданный лид без нового события `lead.created`.
- Scope
leads:write- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
name | string | Имя контакта |
phone | string | Телефон |
email | string | |
message | string | Текст обращения |
source | string | Источник (по умолчанию webhook). |
externalId | string | Внешний id для дедупа. |
utm | object | UTM-метки перехода: плоская карта строка → строка. словарь значений string |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID лида |
sourceобязательно | string | Источник: `api`, `public_form`, `telegram`… |
channelобязательно | string | null | Канал внутри источника (например, имя формы или бота) |
nameобязательно | string | null | Имя контакта |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
messageобязательно | string | null | Текст обращения |
statusобязательно | stringЗначения: newin_progressconvertedspam | Статус обработки |
externalIdобязательно | string | null | Внешний id из источника (для дедупликации) |
rawобязательно | object | null | Сырой payload источника (для ручного разбора).object |
clientIdобязательно | string (uuid) | null | ID клиента после конвертации |
dealIdобязательно | string (uuid) | null | ID сделки после конвертации |
assignedToIdобязательно | string (uuid) | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
utmобязательно | object | null | UTM-метки перехода. словарь значений string |
createdAtобязательно | string (date-time) | Создан (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/leads/{id}
Получить лид.
- Scope
leads:read- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID лида |
sourceобязательно | string | Источник: `api`, `public_form`, `telegram`… |
channelобязательно | string | null | Канал внутри источника (например, имя формы или бота) |
nameобязательно | string | null | Имя контакта |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
messageобязательно | string | null | Текст обращения |
statusобязательно | stringЗначения: newin_progressconvertedspam | Статус обработки |
externalIdобязательно | string | null | Внешний id из источника (для дедупликации) |
rawобязательно | object | null | Сырой payload источника (для ручного разбора).object |
clientIdобязательно | string (uuid) | null | ID клиента после конвертации |
dealIdобязательно | string (uuid) | null | ID сделки после конвертации |
assignedToIdобязательно | string (uuid) | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
utmобязательно | object | null | UTM-метки перехода. словарь значений string |
createdAtобязательно | string (date-time) | Создан (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/leads/{id}/status
Сменить статус лида.
- Scope
leads:write- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
statusобязательно | stringЗначения: newin_progressconvertedspam | Новый статус лида |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID лида |
sourceобязательно | string | Источник: `api`, `public_form`, `telegram`… |
channelобязательно | string | null | Канал внутри источника (например, имя формы или бота) |
nameобязательно | string | null | Имя контакта |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
messageобязательно | string | null | Текст обращения |
statusобязательно | stringЗначения: newin_progressconvertedspam | Статус обработки |
externalIdобязательно | string | null | Внешний id из источника (для дедупликации) |
rawобязательно | object | null | Сырой payload источника (для ручного разбора).object |
clientIdобязательно | string (uuid) | null | ID клиента после конвертации |
dealIdобязательно | string (uuid) | null | ID сделки после конвертации |
assignedToIdобязательно | string (uuid) | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
utmобязательно | object | null | UTM-метки перехода. словарь значений string |
createdAtобязательно | string (date-time) | Создан (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/leads/{id}/assign
Назначить или снять ответственного за лид.
Команда над существующим лидом — отвечает 200.
- Scope
leads:write- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
assigneeIdобязательно | string (uuid) | null | ID сотрудника или null для снятия ответственного. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID лида |
sourceобязательно | string | Источник: `api`, `public_form`, `telegram`… |
channelобязательно | string | null | Канал внутри источника (например, имя формы или бота) |
nameобязательно | string | null | Имя контакта |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
messageобязательно | string | null | Текст обращения |
statusобязательно | stringЗначения: newin_progressconvertedspam | Статус обработки |
externalIdобязательно | string | null | Внешний id из источника (для дедупликации) |
rawобязательно | object | null | Сырой payload источника (для ручного разбора).object |
clientIdобязательно | string (uuid) | null | ID клиента после конвертации |
dealIdобязательно | string (uuid) | null | ID сделки после конвертации |
assignedToIdобязательно | string (uuid) | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
utmобязательно | object | null | UTM-метки перехода. словарь значений string |
createdAtобязательно | string (date-time) | Создан (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/leads/{id}/convert
Конвертировать лид в клиента.
Создаёт клиента в компоненте «Клиенты» по данным лида (или связывает с найденным по телефону/почте). Достаточно scope `leads:write` — отдельный `clients:write` не нужен.
- Scope
leads:write- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
clientIdобязательно | string (uuid) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/leads/{id}/convert-deal
Конвертировать лид в клиента и сделку.
Создаёт клиента и сделку выбранного типа в дефолтном филиале. Достаточно scope `leads:write`; компонент «Сделки» должен быть включён у компании, иначе 403 `MODULE_ACCESS_INACTIVE`.
- Scope
leads:write- Компонент
marketing
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
typeId | string | ID типа сделки; по умолчанию — тип-«лид». |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
dealIdобязательно | string (uuid) | |
clientIdобязательно | string (uuid) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.orders
Заказы клиентов и их статусы.
GET/orders
Список заказов.
- Scope
orders:read- Компонент
orders
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: createdAtnumberdueAtreadyBypayDueAttotalstatuspaymentStatus | |
order | query | stringЗначения: ascdesc | |
status | query | stringЗначения: newconfirmedin_progressreadycompletedcancelled | |
paymentStatus | query | stringЗначения: unpaidpartialpaidrefunded | |
assignedToId | query | string | ID ответственного сотрудника |
createdById | query | string | ID создателя |
customerId | query | string | ID клиента |
dateFrom | query | string | Создан от (ISO 8601) |
dateTo | query | string | Создан до (ISO 8601) |
dueFrom | query | string | Срок от (ISO 8601) |
dueTo | query | string | Срок до (ISO 8601) |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | OrderListItemResponse[] | массив из OrderListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/orders
Создать заказ.
- Scope
orders:write- Компонент
orders
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | OrderLineInputDto[] | массив из OrderLineInputDto |
customerId | string | ID клиента из модуля Clients |
assetId | string | ID объекта обслуживания (ClientAsset) |
addressId | string | ID адреса клиента (ClientAddress) |
customerName | string | |
customerPhone | string | |
customerEmail | string | |
customerNote | string | |
channel | string | Канал привлечения (manual|public_link|phone) |
source | string | Источник (интеграция/форма) |
dealId | string | ID сделки, к которой привязан заказ-запчастей (D5) |
dueAt | string | Срок (legacy, ISO 8601) |
readyBy | string | Срок готовности (ISO 8601, O8) |
payDueAt | string | Срок оплаты B2B-отсрочки (ISO 8601, O8) |
note | string | Внутренний комментарий по заказу |
discountPercent | number | По умолчанию: 0 |
prepaidAmount | number | Предоплата (копейки) По умолчанию: 0 |
assignedToId | string | ID ответственного сотрудника |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер заказа (сквозной по компании) |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
customerIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
customerEmailобязательно | string | null | E-mail покупателя |
customerNoteобязательно | string | null | Пожелания покупателя |
channelобязательно | string | null | Канал привлечения |
sourceобязательно | string | null | Источник (интеграция/форма) |
deliveryStatusобязательно | string | nullЗначения: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodобязательно | string | nullЗначения: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostобязательно | number | Стоимость доставки (копейки) |
deliveryAddressTextобязательно | string | null | Адрес доставки строкой |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог со скидкой, копейки |
prepaidAmountобязательно | number | Предоплата (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | OrderLineResponse[] | Позиции заказа массив из OrderLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/orders/{id}
Получить заказ.
- Scope
orders:read- Компонент
orders
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер заказа (сквозной по компании) |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
customerIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
customerEmailобязательно | string | null | E-mail покупателя |
customerNoteобязательно | string | null | Пожелания покупателя |
channelобязательно | string | null | Канал привлечения |
sourceобязательно | string | null | Источник (интеграция/форма) |
deliveryStatusобязательно | string | nullЗначения: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodобязательно | string | nullЗначения: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostобязательно | number | Стоимость доставки (копейки) |
deliveryAddressTextобязательно | string | null | Адрес доставки строкой |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог со скидкой, копейки |
prepaidAmountобязательно | number | Предоплата (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | OrderLineResponse[] | Позиции заказа массив из OrderLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/orders/{id}
Изменить заказ.
- Scope
orders:write- Компонент
orders
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
items | OrderLineInputDto[] | Полная замена позиций заказа (только в статусах new/confirmed) массив из OrderLineInputDto |
customerId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
addressId | string (uuid) | null | ID адреса клиента (null — отвязать) |
customerName | string | null | Имя покупателя |
customerPhone | string | null | Телефон покупателя |
customerEmail | string | null | E-mail покупателя |
customerNote | string | null | Пожелания покупателя |
channel | string | null | Канал привлечения |
source | string | null | Источник |
dueAt | string (date-time) | null | Срок (legacy, ISO 8601) |
readyBy | string (date-time) | null | Срок готовности (ISO 8601, O8) |
payDueAt | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601, O8) |
note | string | null | Внутренний комментарий |
discountPercent | number | Скидка на весь заказ, % |
prepaidAmount | number | Предоплата — целевая Σ оплат (копейки) |
assignedToId | string (uuid) | null | ID ответственного сотрудника (null — снять) |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер заказа (сквозной по компании) |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
customerIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
customerEmailобязательно | string | null | E-mail покупателя |
customerNoteобязательно | string | null | Пожелания покупателя |
channelобязательно | string | null | Канал привлечения |
sourceобязательно | string | null | Источник (интеграция/форма) |
deliveryStatusобязательно | string | nullЗначения: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodобязательно | string | nullЗначения: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostобязательно | number | Стоимость доставки (копейки) |
deliveryAddressTextобязательно | string | null | Адрес доставки строкой |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог со скидкой, копейки |
prepaidAmountобязательно | number | Предоплата (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | OrderLineResponse[] | Позиции заказа массив из OrderLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/orders/{id}/status/{next}
Сменить статус заказа.
Команда над существующим заказом — отвечает 200 с обновлённым заказом. Недопустимый переход — 409 `ORDER_STATUS_TRANSITION_INVALID`, значение вне перечня — 400.
- Scope
orders:write- Компонент
orders
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
nextобязательно | path | OrderStatus | Целевой статус заказа |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер заказа (сквозной по компании) |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
customerIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
customerEmailобязательно | string | null | E-mail покупателя |
customerNoteобязательно | string | null | Пожелания покупателя |
channelобязательно | string | null | Канал привлечения |
sourceобязательно | string | null | Источник (интеграция/форма) |
deliveryStatusобязательно | string | nullЗначения: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodобязательно | string | nullЗначения: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostобязательно | number | Стоимость доставки (копейки) |
deliveryAddressTextобязательно | string | null | Адрес доставки строкой |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог со скидкой, копейки |
prepaidAmountобязательно | number | Предоплата (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | OrderLineResponse[] | Позиции заказа массив из OrderLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.deals
Сделки с пайплайном стадий и их типы.
GET/deals/lost-reasons
Причины проигрыша сделки.
Идентификатор причины обязателен в `lostReasonId` при переводе сделки на терминальную стадию с исходом «проиграна»; в ответах сделок поле расшифровывается по этому списку. По умолчанию только активные.
- Scope
deals:read- Компонент
deals
Ответы
200DealLostReasonResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/deals/sources
Источники сделок и лидов.
Идентификатор источника — для `sourceId` при создании сделки и для расшифровки поля в ответах. По умолчанию только активные.
- Scope
deals:read- Компонент
deals
Ответы
200LeadSourceResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/deals/types
Типы сделок со стадиями пайплайна.
Только типы включённых компонентов: id стадий отсюда нужны для создания сделки и смены стадии.
- Scope
deals:read- Компонент
deals
Ответы
200DealTypeResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/deals
Список сделок.
- Scope
deals:read- Компонент
deals
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: createdAtnumberdueAtscheduledAttotalboardOrder | |
order | query | stringЗначения: ascdesc | |
typeId | query | string | ID типа сделки |
stageId | query | string | ID стадии |
outcome | query | stringЗначения: wonlostdonecancelled | |
openOnly | query | boolean | Только открытые (без исхода) сделки |
assignedToId | query | string | ID ответственного |
clientId | query | string | ID клиента |
addressId | query | string | ID адреса клиента: все визиты по конкретной точке обслуживания |
scheduledFrom | query | string | Запланирован от (ISO 8601) — окно дня для полевого экрана |
scheduledTo | query | string | Запланирован до (ISO 8601) |
sourceId | query | string | ID источника лида (D7) |
dateFrom | query | string | Создан от (ISO 8601) |
dateTo | query | string | Создан до (ISO 8601) |
noTask | query | boolean | Только сделки без задачи (next-action отсутствует) |
overdue | query | boolean | Только сделки с просроченной задачей |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | DealListItemResponse[] | массив из DealListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/deals
Создать сделку выбранного типа.
- Scope
deals:write- Компонент
deals
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
typeIdобязательно | string | ID типа сделки | ||||||||||||||||||||||||||||||||||||
items | DealLineInputDto[] | Позиции сметы (товары и услуги) массив из DealLineInputDto | ||||||||||||||||||||||||||||||||||||
clientId | string | ID клиента из модуля Clients | ||||||||||||||||||||||||||||||||||||
assetId | string | ID объекта обслуживания (ClientAsset) | ||||||||||||||||||||||||||||||||||||
addressId | string | ID адреса клиента (ClientAddress) | ||||||||||||||||||||||||||||||||||||
customerName | string | Имя заказчика (если без карточки клиента) | ||||||||||||||||||||||||||||||||||||
customerPhone | string | Телефон заказчика | ||||||||||||||||||||||||||||||||||||
customerEmail | string | E-mail заказчика | ||||||||||||||||||||||||||||||||||||
customerNote | string | Пожелания заказчика | ||||||||||||||||||||||||||||||||||||
channel | string | Канал привлечения (manual|public_link|phone) | ||||||||||||||||||||||||||||||||||||
source | string | Источник (интеграция/форма) | ||||||||||||||||||||||||||||||||||||
sourceId | string | ID источника лида из справочника (D7) | ||||||||||||||||||||||||||||||||||||
budget | number | Плановый бюджет проекта в копейках (D4) | ||||||||||||||||||||||||||||||||||||
assignedToId | string | ID ответственного сотрудника | ||||||||||||||||||||||||||||||||||||
address | string | Адрес выполнения (для field_job) | ||||||||||||||||||||||||||||||||||||
venueResourceId | string (uuid) | null | Площадка мероприятия — ресурс расписания (зал, шатёр). По ней вешается бронь и сверяется вместимость; раньше зал угадывался по строке адреса. | ||||||||||||||||||||||||||||||||||||
scheduledAt | string | Запланированное время (ISO 8601) | ||||||||||||||||||||||||||||||||||||
dueAt | string | Срок исполнения (ISO 8601) | ||||||||||||||||||||||||||||||||||||
headcount | number | Число гостей мероприятия: множитель для позиций с нормой на гостя. | ||||||||||||||||||||||||||||||||||||
note | string | Внутренний комментарий | ||||||||||||||||||||||||||||||||||||
discountPercent | number | Скидка на всю сделку, % По умолчанию: 0 | ||||||||||||||||||||||||||||||||||||
intake | object | Снапшот приёмки (для типа intake)
|
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер сделки (сквозной по компании) |
typeIdобязательно | string | ID типа сделки |
stageIdобязательно | string | ID текущей стадии |
checklistDoneобязательно | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` массив из string |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdобязательно | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
customerEmailобязательно | string | null | E-mail заказчика |
customerNoteобязательно | string | null | Пожелания заказчика |
channelобязательно | string | null | Канал привлечения (manual|public_link|phone) |
sourceобязательно | string | null | Источник строкой (интеграция/форма) |
sourceIdобязательно | string | null | ID источника лида из справочника |
addressобязательно | string | null | Адрес выполнения (для field_job) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на всю сделку, % |
totalобязательно | number | Итог со скидкой, копейки |
costобязательно | number | Себестоимость по позициям, копейки |
budgetобязательно | number | null | Бюджет (копейки) |
budgetExceededAtобязательно | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountобязательно | number | null | Число гостей мероприятия |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtобязательно | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdобязательно | string | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | DealLineResponse[] | Позиции сметы массив из DealLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/deals/{id}
Получить сделку с позициями.
- Scope
deals:read- Компонент
deals
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер сделки (сквозной по компании) |
typeIdобязательно | string | ID типа сделки |
stageIdобязательно | string | ID текущей стадии |
checklistDoneобязательно | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` массив из string |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdобязательно | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
customerEmailобязательно | string | null | E-mail заказчика |
customerNoteобязательно | string | null | Пожелания заказчика |
channelобязательно | string | null | Канал привлечения (manual|public_link|phone) |
sourceобязательно | string | null | Источник строкой (интеграция/форма) |
sourceIdобязательно | string | null | ID источника лида из справочника |
addressобязательно | string | null | Адрес выполнения (для field_job) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на всю сделку, % |
totalобязательно | number | Итог со скидкой, копейки |
costобязательно | number | Себестоимость по позициям, копейки |
budgetобязательно | number | null | Бюджет (копейки) |
budgetExceededAtобязательно | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountобязательно | number | null | Число гостей мероприятия |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtобязательно | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdобязательно | string | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | DealLineResponse[] | Позиции сметы массив из DealLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/deals/{id}
Изменить сделку. Позиции и поля меняются, пока сделка не закрыта.
- Scope
deals:write- Компонент
deals
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
items | DealLineInputDto[] | Полная замена позиций сметы массив из DealLineInputDto |
clientId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
addressId | string (uuid) | null | ID адреса клиента (null — отвязать) |
customerName | string | null | Имя заказчика |
customerPhone | string | null | Телефон заказчика |
customerEmail | string | null | E-mail заказчика |
customerNote | string | null | Пожелания заказчика |
assignedToId | string (uuid) | null | ID ответственного сотрудника (null — снять) |
address | string | null | Адрес выполнения (для field_job) |
venueResourceId | string (uuid) | null | Площадка мероприятия — ресурс расписания (null — снять). |
scheduledAt | string (date-time) | null | Запланированное время (ISO 8601) |
dueAt | string (date-time) | null | Срок исполнения (ISO 8601) |
note | string | null | Внутренний комментарий |
discountPercent | number | Скидка на всю сделку, % |
sourceId | string (uuid) | null | ID источника лида из справочника (D7), null — отвязать |
budget | number | null | Плановый бюджет проекта в копейках (D4), null — снять |
headcount | number | null | Число гостей мероприятия, null — снять. Позиции сметы с нормой на гостя пересчитываются под новое значение. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер сделки (сквозной по компании) |
typeIdобязательно | string | ID типа сделки |
stageIdобязательно | string | ID текущей стадии |
checklistDoneобязательно | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` массив из string |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdобязательно | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
customerEmailобязательно | string | null | E-mail заказчика |
customerNoteобязательно | string | null | Пожелания заказчика |
channelобязательно | string | null | Канал привлечения (manual|public_link|phone) |
sourceобязательно | string | null | Источник строкой (интеграция/форма) |
sourceIdобязательно | string | null | ID источника лида из справочника |
addressобязательно | string | null | Адрес выполнения (для field_job) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на всю сделку, % |
totalобязательно | number | Итог со скидкой, копейки |
costобязательно | number | Себестоимость по позициям, копейки |
budgetобязательно | number | null | Бюджет (копейки) |
budgetExceededAtобязательно | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountобязательно | number | null | Число гостей мероприятия |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtобязательно | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdобязательно | string | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | DealLineResponse[] | Позиции сметы массив из DealLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/deals/{id}/stage
Перевести сделку на другую стадию пайплайна её типа.
- Scope
deals:write- Компонент
deals
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
stageIdобязательно | string (uuid) | ID целевой стадии (в рамках того же типа сделки) |
lostReasonId | string (uuid) | null | ID причины проигрыша — при переходе на терминальную стадию с исходом Lost. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер сделки (сквозной по компании) |
typeIdобязательно | string | ID типа сделки |
stageIdобязательно | string | ID текущей стадии |
checklistDoneобязательно | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` массив из string |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdобязательно | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
customerEmailобязательно | string | null | E-mail заказчика |
customerNoteобязательно | string | null | Пожелания заказчика |
channelобязательно | string | null | Канал привлечения (manual|public_link|phone) |
sourceобязательно | string | null | Источник строкой (интеграция/форма) |
sourceIdобязательно | string | null | ID источника лида из справочника |
addressобязательно | string | null | Адрес выполнения (для field_job) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на всю сделку, % |
totalобязательно | number | Итог со скидкой, копейки |
costобязательно | number | Себестоимость по позициям, копейки |
budgetобязательно | number | null | Бюджет (копейки) |
budgetExceededAtобязательно | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountобязательно | number | null | Число гостей мероприятия |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtобязательно | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdобязательно | string | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | DealLineResponse[] | Позиции сметы массив из DealLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.sales
Продажи, возвраты и кассовые смены.
GET/sales
Журнал продаж.
- Scope
sales:read- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: createdAtnumbertotal | |
order | query | stringЗначения: ascdesc | |
shiftId | query | string | |
cashierId | query | string | |
paymentMethod | query | stringЗначения: cashcardsbpmixed | |
dateFrom | query | string | ISO 8601 |
dateTo | query | string | ISO 8601 |
kind | query | stringЗначения: allsalerefund | |
customerId | query | string | Фильтр по клиенту |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | SaleListItemResponse[] | массив из SaleListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/sales
Создать продажу.
- Scope
sales:write- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
shiftIdобязательно | string | |
itemsобязательно | SaleLineInputDto[] | массив из SaleLineInputDto |
discountPercent | number | По умолчанию: 0 |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | |
paymentMethodExt | string | Алиас способа оплаты интеграции (ozon-wallet и т.п.); базовый paymentMethod при этом — ближайший стандартный |
receivedAmount | number | Полученная сумма в копейках (для cash) |
customerId | string | ID клиента из модуля Clients |
redeemPoints | number | Списать N баллов лояльности клиента как скидку (1 балл = 1 копейка) |
customerName | string | Snapshot имени клиента (опционально) |
customerPhone | string | Snapshot телефона клиента (опционально) |
channel | string | Канал продажи (default pos) |
payments | SalePaymentInputDto[] | Платежи (K5). Для paymentMethod=mixed обязателен и Σamount = итог чека. Для одиночной оплаты можно опустить — сервер запишет один платёж зеркально. массив из SalePaymentInputDto |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID чека |
companyIdобязательно | string | ID компании |
shiftIdобязательно | string | ID кассовой смены |
numberобязательно | number | Номер чека (сквозной по компании) |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь чек, % |
totalобязательно | number | Итог к оплате, копейки |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtобязательно | string | null | Уточнение способа оплаты |
receivedAmountобязательно | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdобязательно | string | ID кассира |
refundOfSaleIdобязательно | string | null | ID исходного чека; заполнен только у возврата |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
channelобязательно | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtобязательно | string (date-time) | Момент продажи (ISO 8601) |
linesобязательно | SaleLineResponse[] | Позиции чека массив из SaleLineResponse |
paymentsобязательно | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) массив из SalePaymentResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/sales/{id}
Получить продажу.
- Scope
sales:read- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID чека |
companyIdобязательно | string | ID компании |
shiftIdобязательно | string | ID кассовой смены |
numberобязательно | number | Номер чека (сквозной по компании) |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь чек, % |
totalобязательно | number | Итог к оплате, копейки |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtобязательно | string | null | Уточнение способа оплаты |
receivedAmountобязательно | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdобязательно | string | ID кассира |
refundOfSaleIdобязательно | string | null | ID исходного чека; заполнен только у возврата |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
channelобязательно | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtобязательно | string (date-time) | Момент продажи (ISO 8601) |
linesобязательно | SaleLineResponse[] | Позиции чека массив из SaleLineResponse |
paymentsобязательно | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) массив из SalePaymentResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/sales/{id}/refund
Оформить возврат продажи целиком.
Команда над существующей продажей — отвечает 200.
- Scope
sales:write- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID чека |
companyIdобязательно | string | ID компании |
shiftIdобязательно | string | ID кассовой смены |
numberобязательно | number | Номер чека (сквозной по компании) |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь чек, % |
totalобязательно | number | Итог к оплате, копейки |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtобязательно | string | null | Уточнение способа оплаты |
receivedAmountобязательно | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdобязательно | string | ID кассира |
refundOfSaleIdобязательно | string | null | ID исходного чека; заполнен только у возврата |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
channelобязательно | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtобязательно | string (date-time) | Момент продажи (ISO 8601) |
linesобязательно | SaleLineResponse[] | Позиции чека массив из SaleLineResponse |
paymentsобязательно | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) массив из SalePaymentResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/shifts/open
Открыть смену.
- Scope
sales:write- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
openingCashобязательно | number | Начальная сумма наличных в копейках Пример: 500000 |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID смены |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер смены (сквозной по компании) |
openedAtобязательно | string (date-time) | Открыта (ISO 8601) |
closedAtобязательно | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashобязательно | number | Начальная сумма в копейках |
statusобязательно | stringЗначения: openclosed | Статус смены |
openedByIdобязательно | string | ID сотрудника, открывшего смену |
closedByIdобязательно | string | null | ID сотрудника, закрывшего смену |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/shifts/current
Текущая открытая смена интеграции.
Смена, открытая этим же API-токеном через `POST /shifts/open` и ещё не закрытая. Нужна, чтобы восстановить `shiftId` для `POST /sales`, если ответ открытия потерян. Открытой смены нет — 404 `SHIFT_NOT_FOUND`.
- Scope
sales:read- Компонент
cashier
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID смены |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер смены (сквозной по компании) |
openedAtобязательно | string (date-time) | Открыта (ISO 8601) |
closedAtобязательно | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashобязательно | number | Начальная сумма в копейках |
statusобязательно | stringЗначения: openclosed | Статус смены |
openedByIdобязательно | string | ID сотрудника, открывшего смену |
closedByIdобязательно | string | null | ID сотрудника, закрывшего смену |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/shifts/{id}
Получить смену.
- Scope
sales:read- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID смены |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер смены (сквозной по компании) |
openedAtобязательно | string (date-time) | Открыта (ISO 8601) |
closedAtобязательно | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashобязательно | number | Начальная сумма в копейках |
statusобязательно | stringЗначения: openclosed | Статус смены |
openedByIdобязательно | string | ID сотрудника, открывшего смену |
closedByIdобязательно | string | null | ID сотрудника, закрывшего смену |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/shifts/{id}/close
Закрыть смену.
Команда над существующей сменой — отвечает 200.
- Scope
sales:write- Компонент
cashier
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
closingCash | number | Фактический остаток наличных в копейках |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID смены |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер смены (сквозной по компании) |
openedAtобязательно | string (date-time) | Открыта (ISO 8601) |
closedAtобязательно | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashобязательно | number | Начальная сумма в копейках |
statusобязательно | stringЗначения: openclosed | Статус смены |
openedByIdобязательно | string | ID сотрудника, открывшего смену |
closedByIdобязательно | string | null | ID сотрудника, закрывшего смену |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.warehouse
Склады, поставщики, остатки и приёмки.
GET/warehouse/warehouses
Список складов.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: namecreatedAt | |
order | query | stringЗначения: ascdesc |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | WarehouseListItemResponse[] | массив из WarehouseListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/warehouse/warehouses
Создать склад.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название склада Пример: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID склада |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название склада |
addressобязательно | string | null | Адрес склада |
isDefaultобязательно | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/warehouses/{id}
Получить склад.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID склада |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название склада |
addressобязательно | string | null | Адрес склада |
isDefaultобязательно | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/warehouse/warehouses/{id}
Изменить склад.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
name | string | Название склада Пример: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID склада |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название склада |
addressобязательно | string | null | Адрес склада |
isDefaultобязательно | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/warehouse/warehouses/{id}
Удалить склад.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
204Без тела
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/suppliers
Список поставщиков.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: namecreatedAt | |
order | query | stringЗначения: ascdesc |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | SupplierResponse[] | массив из SupplierResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/warehouse/suppliers
Создать поставщика.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID поставщика |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название поставщика |
contactNameобязательно | string | null | Контактное лицо |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
innобязательно | string | null | ИНН |
addressобязательно | string | null | Адрес |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/suppliers/{id}
Получить поставщика.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID поставщика |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название поставщика |
contactNameобязательно | string | null | Контактное лицо |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
innобязательно | string | null | ИНН |
addressобязательно | string | null | Адрес |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/warehouse/suppliers/{id}
Изменить поставщика.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
name | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID поставщика |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название поставщика |
contactNameобязательно | string | null | Контактное лицо |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
innобязательно | string | null | ИНН |
addressобязательно | string | null | Адрес |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/warehouse/suppliers/{id}
Удалить поставщика.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
204Без тела
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/stocks
Остатки по товарам.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: productNameproductSkuqtyupdatedAt | |
order | query | stringЗначения: ascdesc | |
warehouseId | query | string | Фильтр по складу |
categoryId | query | string | Фильтр по категории товара |
level | query | stringЗначения: alllownegativereorder | |
groupBy | query | stringЗначения: product | Режим агрегации: product — сводка по сети (W4) |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | StockListItemResponse[] | массив из StockListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/warehouse/stocks/adjust
Скорректировать остаток (инвентаризация).
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
productIdобязательно | string | |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
warehouseIdобязательно | string | |
targetQtyобязательно | number | Новое значение остатка (целое число, может быть отрицательным). |
reasonобязательно | string | Причина корректировки (обязательно). |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID записи остатка |
productIdобязательно | string | ID товара |
productNameобязательно | string | Название товара |
productSkuобязательно | string | Артикул товара |
variantIdобязательно | string | null | ID варианта товара; null — товар без вариантов |
variantSkuобязательно | string | null | Артикул варианта |
variantAttributesобязательно | object | null | Атрибуты варианта: { "color": "red", "size": "M" } словарь значений string |
categoryIdобязательно | string | null | ID категории товара |
categoryNameобязательно | string | null | Название категории |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
qtyобязательно | number | Физический остаток |
reservedобязательно | number | Зарезервировано под незавершённые заказы |
availableобязательно | number | Свободно к продаже: qty − reserved |
reorderPointобязательно | number | Порог дозаказа (0 — не задан) |
isLowStockобязательно | boolean | Остаток на пороге или ниже |
updatedAtобязательно | string (date-time) | Последнее движение по остатку (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/receipts
Список приёмок.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: createdAtdatenumbertotalQtytotalAmount | |
order | query | stringЗначения: ascdesc | |
status | query | stringЗначения: postedcancelled | |
warehouseId | query | string | |
supplierId | query | string | |
dateFrom | query | string | Дата приёмки от (ISO 8601) |
dateTo | query | string | Дата приёмки до (ISO 8601) |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | ReceiptListItemResponse[] | массив из ReceiptListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/warehouse/receipts
Создать приёмку.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
warehouseIdобязательно | string (uuid) | ID склада |
supplierId | string (uuid) | null | ID поставщика |
purchaseOrderId | string (uuid) | null | ID заказа поставщику (W3) |
date | string | Дата приёмки (ISO 8601) |
note | string | null | Комментарий к приёмке |
itemsобязательно | ReceiptLineInputDto[] | Позиции приёмки массив из ReceiptLineInputDto |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID приёмки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер приёмки (сквозной по компании) |
statusобязательно | stringЗначения: postedcancelled | Статус приёмки |
dateобязательно | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
supplierIdобязательно | string | null | ID поставщика |
supplierNameобязательно | string | null | Название поставщика |
purchaseOrderIdобязательно | string | null | ID заказа поставщику, по которому пришёл товар |
noteобязательно | string | null | Комментарий к приёмке |
totalQtyобязательно | number | Сумма qty по всем позициям |
totalAmountобязательно | number | Сумма приёмки в копейках |
createdByIdобязательно | string | ID сотрудника-автора |
createdByNameобязательно | string | Имя сотрудника-автора |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
linesобязательно | ReceiptLineResponse[] | Позиции приёмки массив из ReceiptLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/warehouse/receipts/{id}
Получить приёмку.
- Scope
warehouse:read- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID приёмки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер приёмки (сквозной по компании) |
statusобязательно | stringЗначения: postedcancelled | Статус приёмки |
dateобязательно | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
supplierIdобязательно | string | null | ID поставщика |
supplierNameобязательно | string | null | Название поставщика |
purchaseOrderIdобязательно | string | null | ID заказа поставщику, по которому пришёл товар |
noteобязательно | string | null | Комментарий к приёмке |
totalQtyобязательно | number | Сумма qty по всем позициям |
totalAmountобязательно | number | Сумма приёмки в копейках |
createdByIdобязательно | string | ID сотрудника-автора |
createdByNameобязательно | string | Имя сотрудника-автора |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
linesобязательно | ReceiptLineResponse[] | Позиции приёмки массив из ReceiptLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/warehouse/receipts/{id}/cancel
Отменить приёмку.
Команда над существующей приёмкой — отвечает 200.
- Scope
warehouse:write- Компонент
warehouse
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID приёмки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер приёмки (сквозной по компании) |
statusобязательно | stringЗначения: postedcancelled | Статус приёмки |
dateобязательно | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
supplierIdобязательно | string | null | ID поставщика |
supplierNameобязательно | string | null | Название поставщика |
purchaseOrderIdобязательно | string | null | ID заказа поставщику, по которому пришёл товар |
noteобязательно | string | null | Комментарий к приёмке |
totalQtyобязательно | number | Сумма qty по всем позициям |
totalAmountобязательно | number | Сумма приёмки в копейках |
createdByIdобязательно | string | ID сотрудника-автора |
createdByNameобязательно | string | Имя сотрудника-автора |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
linesобязательно | ReceiptLineResponse[] | Позиции приёмки массив из ReceiptLineResponse |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.scheduling
Ресурсы (кабинеты, мастера, юниты) и брони.
GET/scheduling/resources
Список ресурсов (кабинеты, мастера, юниты).
- Scope
scheduling:read- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: nametypecreatedAt | |
order | query | stringЗначения: ascdesc | |
type | query | stringЗначения: staffseatunitequipment | |
serviceId | query | string | S7: только ресурсы, оказывающие эту услугу (или агностики). |
activeOnly | query | boolean |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | ResourceResponse[] | массив из ResourceResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/scheduling/resources
Создать ресурс.
- Scope
scheduling:write- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно По умолчанию: 1 |
seats | number | Сколько гостей вмещает площадка (зал, веранда, беседка). Отличается от `capacity`: та говорит, сколько броней ресурса идут одновременно. |
color | string | Цвет в календаре (HEX) Пример: #0ea5e9 |
bufferMinutes | number | Буфер между бронями, минут По умолчанию: 0 |
minDurationMinutes | number | Минимальная длительность брони, минут |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели массив из ResourceAvailabilityWindowDto |
userId | string (uuid) | Учётка сотрудника за ресурсом (мастер салона): из неё подставляется ответственный записи, чтобы комиссия считалась по тому же человеку. |
note | string | Внутренняя заметка |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID ресурса |
companyIdобязательно | string | ID компании |
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacityобязательно | number | Сколько броней ресурс держит одновременно |
seatsобязательно | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorобязательно | string | null | Цвет в календаре (HEX) |
bufferMinutesобязательно | number | Буфер между бронями, минут |
minDurationMinutesобязательно | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityобязательно | object[] | Окна доступности по дням недели: [{ weekday, from, to }] массив из object |
isActiveобязательно | boolean | Ресурс активен и доступен для записи |
housekeepingStateобязательно | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdобязательно | string | null | Учётка сотрудника за ресурсом (мастер) |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/scheduling/resources/{id}
Получить ресурс.
- Scope
scheduling:read- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID ресурса |
companyIdобязательно | string | ID компании |
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacityобязательно | number | Сколько броней ресурс держит одновременно |
seatsобязательно | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorобязательно | string | null | Цвет в календаре (HEX) |
bufferMinutesобязательно | number | Буфер между бронями, минут |
minDurationMinutesобязательно | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityобязательно | object[] | Окна доступности по дням недели: [{ weekday, from, to }] массив из object |
isActiveобязательно | boolean | Ресурс активен и доступен для записи |
housekeepingStateобязательно | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdобязательно | string | null | Учётка сотрудника за ресурсом (мастер) |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/scheduling/resources/{id}
Изменить ресурс.
- Scope
scheduling:write- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
type | stringЗначения: staffseatunitequipment | Тип ресурса |
name | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно |
seats | number | null | Число мест площадки; null — снять. |
color | string | null | Цвет в календаре (HEX) |
bufferMinutes | number | Буфер между бронями, минут |
minDurationMinutes | number | null | Минимальная длительность брони, минут; null — без ограничения |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели массив из ResourceAvailabilityWindowDto |
isActive | boolean | Ресурс активен и доступен для записи |
housekeepingState | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (ручная установка). |
userId | string (uuid) | null | Учётка сотрудника за ресурсом (null — отвязать). |
note | string | null | Внутренняя заметка |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID ресурса |
companyIdобязательно | string | ID компании |
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacityобязательно | number | Сколько броней ресурс держит одновременно |
seatsобязательно | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorобязательно | string | null | Цвет в календаре (HEX) |
bufferMinutesобязательно | number | Буфер между бронями, минут |
minDurationMinutesобязательно | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityобязательно | object[] | Окна доступности по дням недели: [{ weekday, from, to }] массив из object |
isActiveобязательно | boolean | Ресурс активен и доступен для записи |
housekeepingStateобязательно | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdобязательно | string | null | Учётка сотрудника за ресурсом (мастер) |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/scheduling/bookings/slots
Свободные и занятые слоты ресурса на день.
- Scope
scheduling:read- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
resourceIdобязательно | query | string | |
serviceId | query | string | |
dateобязательно | query | string | Дата YYYY-MM-DD |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
startAtобязательно | string (date-time) | |
endAtобязательно | string (date-time) | |
freeобязательно | boolean |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/scheduling/bookings
Список броней.
- Scope
scheduling:read- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringЗначения: startAtcreatedAtnumber | |
order | query | stringЗначения: ascdesc | |
resourceId | query | string | |
status | query | stringЗначения: pendingconfirmedcompletedno_showcancelled | |
assignedToId | query | string | |
clientId | query | string | |
from | query | string | Начало от (ISO 8601) |
to | query | string | Начало до (ISO 8601) |
classesOnly | query | boolean | Только групповые занятия (с вместимостью). |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | BookingListItemResponse[] | массив из BookingListItemResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/scheduling/bookings
Создать бронь (с проверкой пересечений и вместимости ресурса).
- Scope
scheduling:write- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string | Начало интервала (ISO 8601) |
endAt | string | Конец интервала (ISO 8601). Опционален при serviceId — считается из длительности услуги. |
serviceId | string | ID услуги каталога (запись на услугу) |
clientId | string | ID клиента из модуля Clients |
assetId | string | ID объекта обслуживания (ClientAsset) |
customerName | string | Имя клиента (если без карточки) |
customerPhone | string | Телефон клиента |
dealId | string | ID связанной сделки |
assignedToId | string | ID ответственного сотрудника |
price | number | Цена брони в копейках; не задана — авторасчёт по тарифу |
depositAmount | number | Депозит в копейках По умолчанию: 0 |
depositStatus | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | Вместимость группового занятия (число мест); опускается для обычной брони. |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Доп.ресурсы мультиресурсной брони (S8); guard по каждому. массив из string |
address | string | Адрес проведения (выезд). Не задан при привязке к сделке — подставляется адрес сделки. |
note | string | Внутренний комментарий |
Ответы
201| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер брони (сквозной по компании) |
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
customerNameобязательно | string | null | Имя клиента (если без карточки) |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги каталога |
assignedToIdобязательно | string | null | ID исполнителя |
priceобязательно | number | Цена брони в копейках (P0.4) |
saleIdобязательно | string | null | ID чека, в который конвертирована бронь |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityобязательно | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassобязательно | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressобязательно | string | null | Адрес проведения (выездная смена) |
noteобязательно | string | null | Внутренний комментарий |
visitNoteобязательно | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdобязательно | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtобязательно | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdобязательно | string | null | ID серии повторяющихся броней |
rentalStateобязательно | string | nullЗначения: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtобязательно | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtобязательно | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoteобязательно | string | null | Заметка при возврате из проката |
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtобязательно | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/scheduling/bookings/{id}
Получить бронь.
- Scope
scheduling:read- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер брони (сквозной по компании) |
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
customerNameобязательно | string | null | Имя клиента (если без карточки) |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги каталога |
assignedToIdобязательно | string | null | ID исполнителя |
priceобязательно | number | Цена брони в копейках (P0.4) |
saleIdобязательно | string | null | ID чека, в который конвертирована бронь |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityобязательно | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassобязательно | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressобязательно | string | null | Адрес проведения (выездная смена) |
noteобязательно | string | null | Внутренний комментарий |
visitNoteобязательно | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdобязательно | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtобязательно | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdобязательно | string | null | ID серии повторяющихся броней |
rentalStateобязательно | string | nullЗначения: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtобязательно | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtобязательно | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoteобязательно | string | null | Заметка при возврате из проката |
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtобязательно | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/scheduling/bookings/{id}
Изменить бронь.
- Scope
scheduling:write- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
resourceId | string (uuid) | ID ресурса |
startAt | string | ISO 8601 |
endAt | string | ISO 8601 |
serviceId | string (uuid) | null | ID услуги каталога (null — снять) |
clientId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
customerName | string | null | Имя клиента (если без карточки) |
customerPhone | string | null | Телефон клиента |
dealId | string (uuid) | null | ID связанной сделки (null — отвязать) |
assignedToId | string (uuid) | null | ID исполнителя (null — снять) |
price | number | Цена брони в копейках |
depositAmount | number | Залог в копейках |
depositStatus | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | null | Вместимость группового занятия (null — снять групповой режим). |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Полная замена доп.ресурсов мультиресурсной брони (S8). массив из string |
address | string | null | Адрес проведения (выезд); null — снять адрес. |
note | string | null | Внутренний комментарий |
visitNote | string | null | Заметка мастера по визиту (формула, результат работы, пожелания). Разрешена и после завершения записи — её пишут по факту приёма. |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер брони (сквозной по компании) |
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
customerNameобязательно | string | null | Имя клиента (если без карточки) |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги каталога |
assignedToIdобязательно | string | null | ID исполнителя |
priceобязательно | number | Цена брони в копейках (P0.4) |
saleIdобязательно | string | null | ID чека, в который конвертирована бронь |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityобязательно | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassобязательно | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressобязательно | string | null | Адрес проведения (выездная смена) |
noteобязательно | string | null | Внутренний комментарий |
visitNoteобязательно | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdобязательно | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtобязательно | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdобязательно | string | null | ID серии повторяющихся броней |
rentalStateобязательно | string | nullЗначения: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtобязательно | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtобязательно | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoteобязательно | string | null | Заметка при возврате из проката |
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtобязательно | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/scheduling/bookings/{id}/status
Сменить статус брони.
- Scope
scheduling:write- Компонент
scheduling
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Целевой статус брони |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер брони (сквозной по компании) |
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
customerNameобязательно | string | null | Имя клиента (если без карточки) |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги каталога |
assignedToIdобязательно | string | null | ID исполнителя |
priceобязательно | number | Цена брони в копейках (P0.4) |
saleIdобязательно | string | null | ID чека, в который конвертирована бронь |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityобязательно | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassобязательно | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressобязательно | string | null | Адрес проведения (выездная смена) |
noteобязательно | string | null | Внутренний комментарий |
visitNoteобязательно | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdобязательно | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtобязательно | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdобязательно | string | null | ID серии повторяющихся броней |
rentalStateобязательно | string | nullЗначения: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtобязательно | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtобязательно | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoteобязательно | string | null | Заметка при возврате из проката |
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtобязательно | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.calendar
События календаря.
GET/calendar/events
Развёрнутые экземпляры событий за период (raw + recurrence expansion).
Отдаёт массив без пагинации: экземпляры повторяющихся событий разворачиваются на лету, и страницы по ним не считаются. Период ограничен 92 днями — шире → 400 `VALIDATION_ERROR`.
- Scope
calendar:read- Компонент
calendar
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
from | query | string | Начало периода (ISO 8601, включается) |
to | query | string | Конец периода (ISO 8601, не включается) |
kind | query | stringЗначения: eventwork_shiftday_offtaskreminder | |
userId | query | string | ID участника/создателя для фильтра |
companyWide | query | boolean | true=только события компании, false=только личные |
search | query | string | Поиск по заголовку (case-insensitive) |
Ответы
200CalendarEventInstanceResponse400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.POST/calendar/events
Создать событие.
- Scope
calendar:write- Компонент
calendar
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAtобязательно | string | Начало события (ISO 8601) | |||||||||||||||
endAtобязательно | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день По умолчанию: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании По умолчанию: false | |||||||||||||||
color | string | null | Цвет события (HEX) Пример: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события массив из string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
Ответы
201| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idобязательно | string | ID события | |||||||||||||||
companyIdобязательно | string | ID компании | |||||||||||||||
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
descriptionобязательно | string | null | Описание | |||||||||||||||
startAtобязательно | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtобязательно | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayобязательно | boolean | Событие на весь день | |||||||||||||||
isCompanyWideобязательно | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorобязательно | string | null | Цвет (HEX) | |||||||||||||||
locationобязательно | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforeобязательно | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDoneобязательно | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtобязательно | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdобязательно | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsобязательно | string[] | ID участников события массив из string | |||||||||||||||
createdAtобязательно | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/calendar/events/{id}
Получить событие.
- Scope
calendar:read- Компонент
calendar
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idобязательно | string | ID события | |||||||||||||||
companyIdобязательно | string | ID компании | |||||||||||||||
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
descriptionобязательно | string | null | Описание | |||||||||||||||
startAtобязательно | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtобязательно | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayобязательно | boolean | Событие на весь день | |||||||||||||||
isCompanyWideобязательно | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorобязательно | string | null | Цвет (HEX) | |||||||||||||||
locationобязательно | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforeобязательно | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDoneобязательно | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtобязательно | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdобязательно | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsобязательно | string[] | ID участников события массив из string | |||||||||||||||
createdAtобязательно | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.PATCH/calendar/events/{id}
Изменить событие.
- Scope
calendar:write- Компонент
calendar
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Тело запроса
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
title | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAt | string | Начало события (ISO 8601) | |||||||||||||||
endAt | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день По умолчанию: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании По умолчанию: false | |||||||||||||||
color | string | null | Цвет события (HEX) Пример: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события массив из string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
Ответы
200| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idобязательно | string | ID события | |||||||||||||||
companyIdобязательно | string | ID компании | |||||||||||||||
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
descriptionобязательно | string | null | Описание | |||||||||||||||
startAtобязательно | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtобязательно | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayобязательно | boolean | Событие на весь день | |||||||||||||||
isCompanyWideобязательно | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorобязательно | string | null | Цвет (HEX) | |||||||||||||||
locationобязательно | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforeобязательно | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDoneобязательно | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtобязательно | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdобязательно | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsобязательно | string[] | ID участников события массив из string | |||||||||||||||
createdAtобязательно | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.DELETE/calendar/events/{id}
Удалить событие.
- Scope
calendar:write- Компонент
calendar
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Ответы
204Без тела
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.audit
Журнал действий компании.
GET/audit
Журнал действий компании.
- Scope
audit:read- Компонент
core
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
entity | query | string | Фильтр по типу сущности |
action | query | stringЗначения: createupdatedeleteloginlogoutshift_openshift_closecash_movement_createsalerefund_issueinvitation_sendorder_createorder_updateorder_status_changeorder_cancelorder_paymentorder_payment_deleteorder_checkoutorder_line_fulfillorder_template_createorder_template_updateorder_template_deletedeal_createdeal_updatedeal_stage_changedeal_checkoutdeal_share_enabledeal_share_revokedeal_share_filesdeal_file_approval_requestdeal_file_approvedeal_file_rejectdeal_type_createdeal_type_updatedeal_type_deleteexpense_createexpense_updateexpense_deleteother_income_createother_income_updateother_income_deletecash_account_createcash_account_updatecash_account_deletecash_transaction_createcash_transaction_deleterecurring_expense_createrecurring_expense_updaterecurring_expense_deletebudget_createbudget_updatebudget_deleteresource_createresource_updateresource_deletebooking_createbooking_updatebooking_status_changebooking_attendee_enrollbooking_attendee_updatebooking_attendee_removehousekeeping_task_createhousekeeping_task_updatehousekeeping_task_generatewarehouse_createwarehouse_updatewarehouse_deletewarehouse_set_defaultbranch_createbranch_updatebranch_deletebranch_set_defaultsupplier_createsupplier_updatesupplier_deletereceipt_createreceipt_cancelstock_adjustmentproduct_bom_setproduction_run_createproduction_run_cancelproduct_variant_createproduct_variant_updateproduct_variant_deleteautomation_rule_createautomation_rule_updateautomation_rule_deletestock_write_offstock_reorder_setstocktake_createstocktake_applystocktake_cancelpurchase_order_createpurchase_order_sendpurchase_order_cancelpurchase_order_receivestock_bulk_reorder_setstock_bulk_adjuststock_transfer_shipstock_transfer_receivestock_transfer_cancelclient_createclient_updateclient_archiveclient_restoreclient_asset_createclient_asset_updateclient_asset_deleteclient_address_createclient_address_updateclient_address_deleteclient_balance_topupclient_balance_chargeclient_package_createclient_package_updateclient_package_deleteclient_package_useclient_package_refundpackage_template_createpackage_template_updatepackage_template_deleteclient_relation_createclient_relation_deletestudent_group_createstudent_group_updatestudent_group_deletestudent_group_schedulestudent_group_member_addstudent_group_member_updatestudent_group_member_removeservice_contract_createservice_contract_updateservice_contract_deleteservice_contract_generateclient_price_setclient_price_deleteprice_list_createprice_list_updateprice_list_deleteprice_list_fillclient_group_createclient_group_updateclient_group_deleteshipment_createshipment_shipshipment_cancelclient_portal_enableclient_portal_disableb2b_portal_order_createinteraction_createinteraction_updateinteraction_deletecalendar_event_createcalendar_event_updatecalendar_event_deleteproduct_bulk_repriceproduct_bulk_set_categoryproduct_bulk_set_brandproduct_bulk_hideproduct_bulk_restoreproduct_duplicateclient_mergeclient_importclient_bulk_assignclient_bulk_tagclient_bulk_archiveclient_bulk_restoreclient_asset_service_doneclient_segment_createclient_segment_updateclient_segment_deleteclient_segment_broadcastclient_marketing_consentmessage_template_createmessage_template_updatemessage_template_deleteclient_anonymizeclient_tag_setclient_tag_deleteloyalty_tier_setloyalty_tier_deletepromo_code_createpromo_code_updatepromo_code_deletepromo_code_redeemdeal_comment_createdeal_comment_deletedeal_task_createdeal_task_updatedeal_task_deletedeal_template_createdeal_template_deletelead_source_createlead_source_updatelead_source_deletedeal_lost_reason_createdeal_lost_reason_updatedeal_lost_reason_deletebooking_issuebooking_returnwaitlist_createwaitlist_notifystorefront_settings_updatestorefront_product_publishdelivery_zone_createdelivery_zone_updatedelivery_zone_deletestorefront_payment_paidorder_delivery_status_changerestaurant_settings_updaterestaurant_menu_visibilityrestaurant_table_createrestaurant_table_updaterestaurant_table_deleterestaurant_session_closerestaurant_session_cancelkds_ticket_status_changerestaurant_payment_paidhardware_enrollment_issuehardware_agent_enrollhardware_agent_updatehardware_agent_revokehardware_command_dispatchcrew_createcrew_updatecrew_deletework_order_creatework_order_updatework_order_completework_order_canceldeal_material_issuedeal_material_returnestimate_version_createestimate_version_approveuser_ip_restriction_disablecompany_deletion_requestcompany_deletion_cancelcompany_deletion_confirmcompany_restoredata_exportpassword_changetwo_factor_enabletwo_factor_disableip_restriction_updateuser_createuser_updateuser_role_changeuser_status_changeuser_password_resetuser_deletesa_company_updatesa_billing_updatesa_user_updatesa_session_revokeaccess_deniedfile_downloadfile_delete | |
actorId | query | string | |
dateFrom | query | string | ISO дата начала |
dateTo | query | string | ISO дата окончания |
sort | query | stringЗначения: createdAt | |
order | query | stringЗначения: ascdesc |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | AuditLogResponse[] | массив из AuditLogResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.users
Сотрудники компании (только чтение).
GET/users
Список сотрудников.
- Scope
users:read- Компонент
core
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Поиск по email/имени/фамилии |
role | query | stringЗначения: adminmanageremployeedirector | |
status | query | numberЗначения: 0123 | |
sort | query | stringЗначения: lastNameemailrolestatuscreatedAtupdatedAt | |
order | query | stringЗначения: ascdesc |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | UserResponse[] | массив из UserResponse |
totalобязательно | integer | Всего записей по фильтру |
pageобязательно | integer | Номер страницы, с 1 |
pageSizeобязательно | integer | Размер страницы |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.GET/users/{id}
Получить сотрудника.
- Scope
users:read- Компонент
core
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
idобязательно | path | string |
Ответы
200| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сотрудника |
firstNameобязательно | string | Имя |
lastNameобязательно | string | Фамилия |
emailобязательно | string | E-mail (логин) |
roleобязательно | stringЗначения: adminmanageremployeedirector | Роль-персона (admin, manager, employee…) |
roleIdобязательно | string | null | Роль компании |
roleNameобязательно | string | null | Название роли |
companyIdобязательно | string | ID компании |
statusобязательно | number | Статус: 0=Registered, 1=Active, 2=Blocked, 3=Deleted |
aboutобязательно | string | null | О себе |
phoneобязательно | string | null | Телефон |
timezoneобязательно | string | null | Часовой пояс (IANA, например Europe/Moscow) |
avatarFileIdобязательно | string | null | ID файла аватара |
avatarUrlобязательно | string | null | URL аватара |
twoFactorEnabledобязательно | boolean | Включена двухфакторная аутентификация |
ipRestrictionEnabledобязательно | boolean | Сотрудник ограничил себе вход списком IP-адресов. |
emailVerifiedAtобязательно | string (date-time) | null | Когда подтверждён e-mail (ISO 8601) |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
400Ошибка валидации тела или параметров (`VALIDATION_ERROR`, `message` — массив строк).401Токен отсутствует, недействителен, отозван или истёк (`AUTH_API_TOKEN_INVALID`, `AUTH_API_TOKEN_EXPIRED`), компания архивирована (`COMPANY_ARCHIVED`).403Не хватает scope (`AUTH_API_SCOPE_INSUFFICIENT`, нужные — в `meta.scopes`), компонент выключен у компании (`MODULE_ACCESS_INACTIVE`, алиас — в `meta.alias`), API недоступно на тарифе (`PLAN_API_DISABLED`).404Сущность не найдена в компании (`<ENTITY>_NOT_FOUND`).409Конфликт состояния: недопустимый переход статуса, занятый артикул, повтор `X-Idempotency-Key` с незавершённым запросом (`IDEMPOTENCY_IN_FLIGHT`).429Лимит частоты по токену; пауза — в заголовке `Retry-After`, остаток — в `X-RateLimit-Remaining`.Схемы данных
AdjustStockDto
| Поле | Тип | Описание |
|---|---|---|
productIdобязательно | string | |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
warehouseIdобязательно | string | |
targetQtyобязательно | number | Новое значение остатка (целое число, может быть отрицательным). |
reasonобязательно | string | Причина корректировки (обязательно). |
AssignLeadDto
| Поле | Тип | Описание |
|---|---|---|
assigneeIdобязательно | string (uuid) | null | ID сотрудника или null для снятия ответственного. |
AttributeDefinitionResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID характеристики |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название характеристики |
typeобязательно | stringЗначения: colorstringnumberoption_setboolean | Тип значения: определяет, какое поле заполняется в значении |
isPrimaryобязательно | boolean | Основная характеристика: показывается в карточке и списках |
categoryIdобязательно | string | null | ID категории, к которой привязана; null — общая |
positionобязательно | number | Порядок в списке |
optionsобязательно | AttributeOptionResponse[] | Варианты значений (для типа select) массив из AttributeOptionResponse |
createdAtобязательно | string (date-time) | Создана (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлена (ISO 8601) |
AttributeOptionResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID опции |
attributeIdобязательно | string | ID характеристики |
valueобязательно | string | Значение опции |
positionобязательно | number | Порядок в списке |
createdAtобязательно | string (date-time) | Создана (ISO 8601) |
AuditActorResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сотрудника |
firstNameобязательно | string | Имя |
lastNameобязательно | string | Фамилия |
emailобязательно | string |
AuditLogResponse
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idобязательно | string | ID записи | |||||||||||||||
companyIdобязательно | string | ID компании | |||||||||||||||
actorIdобязательно | string (uuid) | null | ID сотрудника-инициатора; null — системное действие | |||||||||||||||
actorобязательно | object | Сотрудник-инициатор; null — системное действие или сотрудник удалён
| |||||||||||||||
actionобязательно | stringЗначения: createupdatedeleteloginlogoutshift_openshift_closecash_movement_createsalerefund_issueinvitation_sendorder_createorder_updateorder_status_changeorder_cancelorder_paymentorder_payment_deleteorder_checkoutorder_line_fulfillorder_template_createorder_template_updateorder_template_deletedeal_createdeal_updatedeal_stage_changedeal_checkoutdeal_share_enabledeal_share_revokedeal_share_filesdeal_file_approval_requestdeal_file_approvedeal_file_rejectdeal_type_createdeal_type_updatedeal_type_deleteexpense_createexpense_updateexpense_deleteother_income_createother_income_updateother_income_deletecash_account_createcash_account_updatecash_account_deletecash_transaction_createcash_transaction_deleterecurring_expense_createrecurring_expense_updaterecurring_expense_deletebudget_createbudget_updatebudget_deleteresource_createresource_updateresource_deletebooking_createbooking_updatebooking_status_changebooking_attendee_enrollbooking_attendee_updatebooking_attendee_removehousekeeping_task_createhousekeeping_task_updatehousekeeping_task_generatewarehouse_createwarehouse_updatewarehouse_deletewarehouse_set_defaultbranch_createbranch_updatebranch_deletebranch_set_defaultsupplier_createsupplier_updatesupplier_deletereceipt_createreceipt_cancelstock_adjustmentproduct_bom_setproduction_run_createproduction_run_cancelproduct_variant_createproduct_variant_updateproduct_variant_deleteautomation_rule_createautomation_rule_updateautomation_rule_deletestock_write_offstock_reorder_setstocktake_createstocktake_applystocktake_cancelpurchase_order_createpurchase_order_sendpurchase_order_cancelpurchase_order_receivestock_bulk_reorder_setstock_bulk_adjuststock_transfer_shipstock_transfer_receivestock_transfer_cancelclient_createclient_updateclient_archiveclient_restoreclient_asset_createclient_asset_updateclient_asset_deleteclient_address_createclient_address_updateclient_address_deleteclient_balance_topupclient_balance_chargeclient_package_createclient_package_updateclient_package_deleteclient_package_useclient_package_refundpackage_template_createpackage_template_updatepackage_template_deleteclient_relation_createclient_relation_deletestudent_group_createstudent_group_updatestudent_group_deletestudent_group_schedulestudent_group_member_addstudent_group_member_updatestudent_group_member_removeservice_contract_createservice_contract_updateservice_contract_deleteservice_contract_generateclient_price_setclient_price_deleteprice_list_createprice_list_updateprice_list_deleteprice_list_fillclient_group_createclient_group_updateclient_group_deleteshipment_createshipment_shipshipment_cancelclient_portal_enableclient_portal_disableb2b_portal_order_createinteraction_createinteraction_updateinteraction_deletecalendar_event_createcalendar_event_updatecalendar_event_deleteproduct_bulk_repriceproduct_bulk_set_categoryproduct_bulk_set_brandproduct_bulk_hideproduct_bulk_restoreproduct_duplicateclient_mergeclient_importclient_bulk_assignclient_bulk_tagclient_bulk_archiveclient_bulk_restoreclient_asset_service_doneclient_segment_createclient_segment_updateclient_segment_deleteclient_segment_broadcastclient_marketing_consentmessage_template_createmessage_template_updatemessage_template_deleteclient_anonymizeclient_tag_setclient_tag_deleteloyalty_tier_setloyalty_tier_deletepromo_code_createpromo_code_updatepromo_code_deletepromo_code_redeemdeal_comment_createdeal_comment_deletedeal_task_createdeal_task_updatedeal_task_deletedeal_template_createdeal_template_deletelead_source_createlead_source_updatelead_source_deletedeal_lost_reason_createdeal_lost_reason_updatedeal_lost_reason_deletebooking_issuebooking_returnwaitlist_createwaitlist_notifystorefront_settings_updatestorefront_product_publishdelivery_zone_createdelivery_zone_updatedelivery_zone_deletestorefront_payment_paidorder_delivery_status_changerestaurant_settings_updaterestaurant_menu_visibilityrestaurant_table_createrestaurant_table_updaterestaurant_table_deleterestaurant_session_closerestaurant_session_cancelkds_ticket_status_changerestaurant_payment_paidhardware_enrollment_issuehardware_agent_enrollhardware_agent_updatehardware_agent_revokehardware_command_dispatchcrew_createcrew_updatecrew_deletework_order_creatework_order_updatework_order_completework_order_canceldeal_material_issuedeal_material_returnestimate_version_createestimate_version_approveuser_ip_restriction_disablecompany_deletion_requestcompany_deletion_cancelcompany_deletion_confirmcompany_restoredata_exportpassword_changetwo_factor_enabletwo_factor_disableip_restriction_updateuser_createuser_updateuser_role_changeuser_status_changeuser_password_resetuser_deletesa_company_updatesa_billing_updatesa_user_updatesa_session_revokeaccess_deniedfile_downloadfile_delete | Действие | |||||||||||||||
entityобязательно | string | Имя сущности, к которой относится действие | |||||||||||||||
entityIdобязательно | string | null | ID затронутой сущности | |||||||||||||||
payloadобязательно | object | null | Детали действия — произвольный JSON, состав зависит от действияobject | |||||||||||||||
ipобязательно | string | null | IP-адрес инициатора | |||||||||||||||
createdAtобязательно | string (date-time) | Момент действия (ISO 8601) |
BookingListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
numberобязательно | number | Номер брони |
resourceIdобязательно | string | ID ресурса |
resourceNameобязательно | string | Название ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя клиента |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги |
serviceNameобязательно | string | null | Название услуги |
assignedToIdобязательно | string | null | ID исполнителя |
assignedToNameобязательно | string | null | Имя исполнителя |
capacityобязательно | number | null | Мест в занятии. null — обычная бронь без ростера. |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
BookingResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID брони |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер брони (сквозной по компании) |
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string (date-time) | Начало (ISO 8601) |
endAtобязательно | string (date-time) | Окончание (ISO 8601) |
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourceобязательно | stringЗначения: adminpublic_linkchannel | Откуда создана бронь |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
customerNameобязательно | string | null | Имя клиента (если без карточки) |
customerPhoneобязательно | string | null | Телефон клиента |
dealIdобязательно | string | null | ID связанной сделки |
serviceIdобязательно | string | null | ID услуги каталога |
assignedToIdобязательно | string | null | ID исполнителя |
priceобязательно | number | Цена брони в копейках (P0.4) |
saleIdобязательно | string | null | ID чека, в который конвертирована бронь |
depositAmountобязательно | number | Залог в копейках |
depositStatusобязательно | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityобязательно | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassобязательно | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressобязательно | string | null | Адрес проведения (выездная смена) |
noteобязательно | string | null | Внутренний комментарий |
visitNoteобязательно | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdобязательно | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtобязательно | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdобязательно | string | null | ID серии повторяющихся броней |
rentalStateобязательно | string | nullЗначения: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtобязательно | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtобязательно | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoteобязательно | string | null | Заметка при возврате из проката |
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtобязательно | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
CalendarEventInstanceResponse
| Поле | Тип | Описание |
|---|---|---|
originIdобязательно | string | ID master-события (одинаков для всех инстансов серии) |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события |
titleобязательно | string | Заголовок события |
descriptionобязательно | string | null | Описание |
startAtобязательно | string (date-time) | Начало инстанса (ISO 8601) |
endAtобязательно | string (date-time) | Окончание инстанса (ISO 8601) |
allDayобязательно | boolean | Событие на весь день |
isCompanyWideобязательно | boolean | Видно всем сотрудникам компании |
colorобязательно | string | null | Цвет (HEX) |
locationобязательно | string | null | Место проведения |
isRecurringInstanceобязательно | boolean | Инстанс развёрнут из повторяющейся серии, а не разовое событие |
isDoneобязательно | boolean | Событие отмечено выполненным |
createdByIdобязательно | string | ID сотрудника-автора |
attendeeIdsобязательно | string[] | ID участников события массив из string |
CalendarEventResponse
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idобязательно | string | ID события | |||||||||||||||
companyIdобязательно | string | ID компании | |||||||||||||||
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
descriptionобязательно | string | null | Описание | |||||||||||||||
startAtобязательно | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtобязательно | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayобязательно | boolean | Событие на весь день | |||||||||||||||
isCompanyWideобязательно | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorобязательно | string | null | Цвет (HEX) | |||||||||||||||
locationобязательно | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforeобязательно | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtобязательно | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDoneобязательно | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtобязательно | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdобязательно | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsобязательно | string[] | ID участников события массив из string | |||||||||||||||
createdAtобязательно | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
CalendarRecurrenceDto
| Поле | Тип | Описание |
|---|---|---|
freqобязательно | stringЗначения: dailyweeklymonthly | Частота повторения |
intervalобязательно | number | Шаг повторения: каждые N дней/недель/месяцев По умолчанию: 1 |
byWeekday | number[] | null | Дни недели для weekly: 0=вс, 1=пн, ..., 6=сб массив из number |
until | string (date-time) | null | Дата окончания серии (ISO 8601); null — бессрочно |
CalendarRecurrenceResponse
| Поле | Тип | Описание |
|---|---|---|
freqобязательно | stringЗначения: dailyweeklymonthly | Частота повторения |
intervalобязательно | number | Шаг повторения: каждые N дней/недель/месяцев |
byWeekdayобязательно | number[] | null | Дни недели для weekly: 0=вс, 1=пн, ..., 6=сб массив из number |
untilобязательно | string (date-time) | null | Дата окончания серии (ISO 8601); null — бессрочно |
CategoryResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID категории |
companyIdобязательно | string | ID компании |
parentIdобязательно | string | null | ID родительской категории; null — корень |
nameобязательно | string | Название категории |
iconобязательно | string | Имя иконки |
colorобязательно | string | null | HEX цвета иконки |
bgобязательно | string | null | HEX цвета фона иконки |
sortOrderобязательно | number | Порядок сортировки |
prefixобязательно | string | null | Префикс артикулов: A-Z, 1-4 символа Пример: CFE |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
ChangeBookingStatusDto
| Поле | Тип | Описание |
|---|---|---|
statusобязательно | stringЗначения: pendingconfirmedcompletedno_showcancelled | Целевой статус брони |
ChangeDealStageDto
| Поле | Тип | Описание |
|---|---|---|
stageIdобязательно | string (uuid) | ID целевой стадии (в рамках того же типа сделки) |
lostReasonId | string (uuid) | null | ID причины проигрыша — при переходе на терминальную стадию с исходом Lost. |
ClientListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
tagsобязательно | string[] | Теги массив из string |
statusобязательно | stringЗначения: activearchived | Статус клиента |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
lastInteractionAtобязательно | string (date-time) | null | Последнее взаимодействие (ISO 8601) |
ordersCountобязательно | number | Число заказов клиента |
balanceобязательно | number | Баланс клиента, копейки (может быть < 0 = долг) |
totalSpentобязательно | number | Совокупная выручка (LTV-прокси), копейки |
lastOrderAtобязательно | string (date-time) | null | Последний заказ (ISO 8601) |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
ClientResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID клиента |
companyIdобязательно | string | ID компании |
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNameобязательно | string | null | Имя |
lastNameобязательно | string | null | Фамилия |
middleNameобязательно | string | null | Отчество |
companyNameобязательно | string | null | Название компании (юрлицо) |
positionобязательно | string | null | Должность контактного лица |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
telegramChatIdобязательно | string | null | Telegram chat id для исходящих сообщений |
whatsappPhoneобязательно | string | null | Номер WhatsApp; null — используется phone |
innобязательно | string | null | ИНН (B2B) |
kppобязательно | string | null | КПП (B2B) |
legalAddressобязательно | string | null | Юр. адрес (B2B) |
bankDetailsобязательно | string | null | Банковские реквизиты строкой (B2B) |
noteобязательно | string | null | Внутренняя заметка |
tagsобязательно | string[] | Теги массив из string |
birthdayобязательно | string (date) | null | Дата рождения / основания (ISO 8601) |
statusобязательно | stringЗначения: activearchived | Статус клиента |
balanceобязательно | number | Баланс/абонемент в копейках |
pointsобязательно | number | Баллы лояльности (копейки-эквивалент) |
contractNumberобязательно | string | null | Номер договора (B2B) |
groupIdобязательно | string | null | ID группы контрагентов (опт) |
priceListIdобязательно | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysобязательно | number | null | Срок оплаты по договору, дни |
creditLimitобязательно | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursобязательно | number | null | SLA по договору, часы |
marketingConsentобязательно | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtобязательно | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourceобязательно | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtобязательно | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdByIdобязательно | string | ID сотрудника-автора |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
CloseShiftDto
| Поле | Тип | Описание |
|---|---|---|
closingCash | number | Фактический остаток наличных в копейках |
ConvertLeadToDealDto
| Поле | Тип | Описание |
|---|---|---|
typeId | string | ID типа сделки; по умолчанию — тип-«лид». |
CreateBookingDto
| Поле | Тип | Описание |
|---|---|---|
resourceIdобязательно | string | ID ресурса |
startAtобязательно | string | Начало интервала (ISO 8601) |
endAt | string | Конец интервала (ISO 8601). Опционален при serviceId — считается из длительности услуги. |
serviceId | string | ID услуги каталога (запись на услугу) |
clientId | string | ID клиента из модуля Clients |
assetId | string | ID объекта обслуживания (ClientAsset) |
customerName | string | Имя клиента (если без карточки) |
customerPhone | string | Телефон клиента |
dealId | string | ID связанной сделки |
assignedToId | string | ID ответственного сотрудника |
price | number | Цена брони в копейках; не задана — авторасчёт по тарифу |
depositAmount | number | Депозит в копейках По умолчанию: 0 |
depositStatus | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | Вместимость группового занятия (число мест); опускается для обычной брони. |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Доп.ресурсы мультиресурсной брони (S8); guard по каждому. массив из string |
address | string | Адрес проведения (выезд). Не задан при привязке к сделке — подставляется адрес сделки. |
note | string | Внутренний комментарий |
CreateCalendarEventDto
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kindобязательно | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titleобязательно | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAtобязательно | string | Начало события (ISO 8601) | |||||||||||||||
endAtобязательно | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день По умолчанию: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании По умолчанию: false | |||||||||||||||
color | string | null | Цвет события (HEX) Пример: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события массив из string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
CreateCategoryDto
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название категории Пример: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки По умолчанию: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки По умолчанию: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Пример: CFE |
CreateClientDto
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: individuallegal | Физлицо или юрлицо |
displayNameобязательно | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstName | string | null | Имя |
lastName | string | null | Фамилия |
middleName | string | null | Отчество |
companyName | string | null | Название компании (юрлицо) |
position | string | null | Должность контактного лица |
phone | string | null | Телефон |
email | string | null | |
telegramChatId | string | null | Telegram chat id для исходящих сообщений (канал telegram). |
whatsappPhone | string | null | Номер WhatsApp; пустой → используется phone. |
note | string | null | Внутренняя заметка |
tags | string[] | Теги массив из string |
birthday | string (date) | null | Дата рождения / основания (ISO 8601) |
assignedToId | string (uuid) | null | ID ответственного сотрудника |
inn | string | null | ИНН (B2B, для документов) |
kpp | string | null | КПП (B2B) |
legalAddress | string | null | Юр. адрес (B2B) |
bankDetails | string | null | Банковские реквизиты строкой (B2B) |
contractNumber | string | null | Номер договора (B2B) |
paymentTermsDays | number | null | Срок оплаты по договору, дни |
creditLimit | number | null | Кредитный лимит B2B, копейки (0 = без лимита) |
groupId | string (uuid) | null | Группа контрагентов (опт): общий прайс-лист и скидка сегмента |
priceListId | string (uuid) | null | Персональный прайс-лист (опт), перекрывает прайс группы |
slaHours | number | null | SLA по договору, часы |
marketingConsent | boolean | Согласие на маркетинговые рассылки (CL9) |
CreateDealDto
| Поле | Тип | Описание | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
typeIdобязательно | string | ID типа сделки | ||||||||||||||||||||||||||||||||||||
items | DealLineInputDto[] | Позиции сметы (товары и услуги) массив из DealLineInputDto | ||||||||||||||||||||||||||||||||||||
clientId | string | ID клиента из модуля Clients | ||||||||||||||||||||||||||||||||||||
assetId | string | ID объекта обслуживания (ClientAsset) | ||||||||||||||||||||||||||||||||||||
addressId | string | ID адреса клиента (ClientAddress) | ||||||||||||||||||||||||||||||||||||
customerName | string | Имя заказчика (если без карточки клиента) | ||||||||||||||||||||||||||||||||||||
customerPhone | string | Телефон заказчика | ||||||||||||||||||||||||||||||||||||
customerEmail | string | E-mail заказчика | ||||||||||||||||||||||||||||||||||||
customerNote | string | Пожелания заказчика | ||||||||||||||||||||||||||||||||||||
channel | string | Канал привлечения (manual|public_link|phone) | ||||||||||||||||||||||||||||||||||||
source | string | Источник (интеграция/форма) | ||||||||||||||||||||||||||||||||||||
sourceId | string | ID источника лида из справочника (D7) | ||||||||||||||||||||||||||||||||||||
budget | number | Плановый бюджет проекта в копейках (D4) | ||||||||||||||||||||||||||||||||||||
assignedToId | string | ID ответственного сотрудника | ||||||||||||||||||||||||||||||||||||
address | string | Адрес выполнения (для field_job) | ||||||||||||||||||||||||||||||||||||
venueResourceId | string (uuid) | null | Площадка мероприятия — ресурс расписания (зал, шатёр). По ней вешается бронь и сверяется вместимость; раньше зал угадывался по строке адреса. | ||||||||||||||||||||||||||||||||||||
scheduledAt | string | Запланированное время (ISO 8601) | ||||||||||||||||||||||||||||||||||||
dueAt | string | Срок исполнения (ISO 8601) | ||||||||||||||||||||||||||||||||||||
headcount | number | Число гостей мероприятия: множитель для позиций с нормой на гостя. | ||||||||||||||||||||||||||||||||||||
note | string | Внутренний комментарий | ||||||||||||||||||||||||||||||||||||
discountPercent | number | Скидка на всю сделку, % По умолчанию: 0 | ||||||||||||||||||||||||||||||||||||
intake | object | Снапшот приёмки (для типа intake)
|
CreateOrderDto
| Поле | Тип | Описание |
|---|---|---|
itemsобязательно | OrderLineInputDto[] | массив из OrderLineInputDto |
customerId | string | ID клиента из модуля Clients |
assetId | string | ID объекта обслуживания (ClientAsset) |
addressId | string | ID адреса клиента (ClientAddress) |
customerName | string | |
customerPhone | string | |
customerEmail | string | |
customerNote | string | |
channel | string | Канал привлечения (manual|public_link|phone) |
source | string | Источник (интеграция/форма) |
dealId | string | ID сделки, к которой привязан заказ-запчастей (D5) |
dueAt | string | Срок (legacy, ISO 8601) |
readyBy | string | Срок готовности (ISO 8601, O8) |
payDueAt | string | Срок оплаты B2B-отсрочки (ISO 8601, O8) |
note | string | Внутренний комментарий по заказу |
discountPercent | number | По умолчанию: 0 |
prepaidAmount | number | Предоплата (копейки) По умолчанию: 0 |
assignedToId | string | ID ответственного сотрудника |
CreateProductDto
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: CFE-0012 |
barcode | string | null | Штрихкод Пример: 4607034630621 |
nameобязательно | string | Название товара Пример: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } словарь значений string |
descriptionI18n | object | Переводы описания по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceобязательно | number | Цена в копейках Пример: 240000 |
cost | number | Себестоимость в копейках По умолчанию: 0 |
unit | string | Единица измерения (код) По умолчанию: pcs |
unitId | string (uuid) | null | FK на справочник единиц (C5). |
packQty | number | null | Фасовка: кол-во packUnit в одной unit. |
packUnitId | string (uuid) | null | FK на единицу фасовки. |
minOrderQty | number | null | Минимальная партия к заказу (опт). Пусто — без ограничения. |
orderStepQty | number | null | Кратность отгрузки (опт): коробка 12 шт → 12, 24, 36. |
costComponents | object[] | Разбивка себестоимости (C8): [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundle | boolean | Комплект/набор (BOM) По умолчанию: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. массив из object |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
hasStock | boolean | Вести складской учёт остатков по товару По умолчанию: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Пример: ☕ |
brand | string | null | Бренд Пример: Lavazza |
model | string | null | Модель Пример: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). массив из ProductAttributeValueInput |
CreateReceiptDto
| Поле | Тип | Описание |
|---|---|---|
warehouseIdобязательно | string (uuid) | ID склада |
supplierId | string (uuid) | null | ID поставщика |
purchaseOrderId | string (uuid) | null | ID заказа поставщику (W3) |
date | string | Дата приёмки (ISO 8601) |
note | string | null | Комментарий к приёмке |
itemsобязательно | ReceiptLineInputDto[] | Позиции приёмки массив из ReceiptLineInputDto |
CreateResourceDto
| Поле | Тип | Описание |
|---|---|---|
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно По умолчанию: 1 |
seats | number | Сколько гостей вмещает площадка (зал, веранда, беседка). Отличается от `capacity`: та говорит, сколько броней ресурса идут одновременно. |
color | string | Цвет в календаре (HEX) Пример: #0ea5e9 |
bufferMinutes | number | Буфер между бронями, минут По умолчанию: 0 |
minDurationMinutes | number | Минимальная длительность брони, минут |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели массив из ResourceAvailabilityWindowDto |
userId | string (uuid) | Учётка сотрудника за ресурсом (мастер салона): из неё подставляется ответственный записи, чтобы комиссия считалась по тому же человеку. |
note | string | Внутренняя заметка |
CreateSaleDto
| Поле | Тип | Описание |
|---|---|---|
shiftIdобязательно | string | |
itemsобязательно | SaleLineInputDto[] | массив из SaleLineInputDto |
discountPercent | number | По умолчанию: 0 |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | |
paymentMethodExt | string | Алиас способа оплаты интеграции (ozon-wallet и т.п.); базовый paymentMethod при этом — ближайший стандартный |
receivedAmount | number | Полученная сумма в копейках (для cash) |
customerId | string | ID клиента из модуля Clients |
redeemPoints | number | Списать N баллов лояльности клиента как скидку (1 балл = 1 копейка) |
customerName | string | Snapshot имени клиента (опционально) |
customerPhone | string | Snapshot телефона клиента (опционально) |
channel | string | Канал продажи (default pos) |
payments | SalePaymentInputDto[] | Платежи (K5). Для paymentMethod=mixed обязателен и Σamount = итог чека. Для одиночной оплаты можно опустить — сервер запишет один платёж зеркально. массив из SalePaymentInputDto |
CreateServiceDto
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: SVC-0001 |
nameобязательно | string | Название услуги Пример: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены По умолчанию: fixed |
priceобязательно | number | Цена в копейках Пример: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Пример: 60 |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. массив из ServiceCostItemInputDto |
CreateSupplierDto
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
CreateWarehouseDto
| Поле | Тип | Описание |
|---|---|---|
nameобязательно | string | Название склада Пример: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
DealIntakeDto
| Поле | Тип | Описание |
|---|---|---|
deviceKind | string | null | Вид объекта (телефон, ноутбук, авто, обувь…) |
brand | string | null | Марка/бренд |
model | string | null | Модель |
serial | string | null | Серийный номер / IMEI / VIN |
defect | string | null | Заявленная неисправность |
accessories | string | null | Комплектация (что принято вместе с устройством) |
appearance | string | null | Внешний вид (царапины, сколы) |
condition | string | null | Состояние при приёмке |
agreedPrice | number | null | Согласованная цена работ в копейках |
agreedTermDays | number | null | Согласованный срок, дней |
prepayment | number | null | Предоплата в копейках |
DealLineInputDto
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: productservicepackage | |
refIdобязательно | string | ID товара или услуги |
qtyобязательно | number | Пример: 1 |
unitPriceобязательно | number | Цена за единицу в копейках |
perGuestQty | number | Норма на одного гостя: 1 порция сет-меню — 1, две закуски на гостя — 2. Задана — количество пересчитывается от числа гостей мероприятия. Пример: 2 |
DealLineResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID позиции |
dealIdобязательно | string | ID сделки |
kindобязательно | stringЗначения: productservicepackage | Товар или услуга |
productIdобязательно | string | null | ID товара |
serviceIdобязательно | string | null | ID услуги |
nameобязательно | string | Название (snapshot на момент добавления) |
qtyобязательно | number | Количество |
unitPriceобязательно | number | Цена за единицу в копейках |
costобязательно | number | Себестоимость за единицу в копейках |
lineTotalобязательно | number | Стоимость позиции в копейках |
perGuestQtyобязательно | number | null | Норма на одного гостя; null — количество от числа гостей не зависит |
DealListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
numberобязательно | number | Номер сделки |
typeIdобязательно | string | ID типа сделки |
typeNameобязательно | string | Название типа сделки |
stageIdобязательно | string | ID текущей стадии |
stageNameобязательно | string | Название стадии |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
createdAtобязательно | string (date-time) | |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
clientIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
addressобязательно | string | null | Адрес выполнения |
itemsCountобязательно | number | Сумма qty по всем позициям |
totalобязательно | number | Итог в копейках |
costобязательно | number | Себестоимость в копейках |
budgetобязательно | number | null | Бюджет (копейки) |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
sourceIdобязательно | string | null | ID источника лида из справочника |
stageEnteredAtобязательно | string (date-time) | null | Когда вошла в текущую стадию (для «дней в стадии» на доске). |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи; null — «без задачи». |
boardOrderобязательно | number | null | Ручной порядок карточки в колонке доски; null — не сортировалась. |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null |
DealLostReasonResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID причины |
nameобязательно | string | Название причины |
isActiveобязательно | boolean | Активна: доступна при закрытии сделки |
positionобязательно | number | Порядок в списке |
createdAtобязательно | string (date-time) | Создана (ISO 8601) |
DealResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сделки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер сделки (сквозной по компании) |
typeIdобязательно | string | ID типа сделки |
stageIdобязательно | string | ID текущей стадии |
checklistDoneобязательно | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` массив из string |
outcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdобязательно | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя заказчика |
customerPhoneобязательно | string | null | Телефон заказчика |
customerEmailобязательно | string | null | E-mail заказчика |
customerNoteобязательно | string | null | Пожелания заказчика |
channelобязательно | string | null | Канал привлечения (manual|public_link|phone) |
sourceобязательно | string | null | Источник строкой (интеграция/форма) |
sourceIdобязательно | string | null | ID источника лида из справочника |
addressобязательно | string | null | Адрес выполнения (для field_job) |
scheduledAtобязательно | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtобязательно | string (date-time) | null | Срок исполнения (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на всю сделку, % |
totalобязательно | number | Итог со скидкой, копейки |
costобязательно | number | Себестоимость по позициям, копейки |
budgetобязательно | number | null | Бюджет (копейки) |
budgetExceededAtобязательно | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountобязательно | number | null | Число гостей мероприятия |
lostReasonIdобязательно | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtобязательно | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtобязательно | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdобязательно | string | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | DealLineResponse[] | Позиции сметы массив из DealLineResponse |
DealStageResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID стадии |
sortOrderобязательно | number | Порядок в пайплайне |
nameобязательно | string | Название стадии |
isInitialобязательно | boolean | Начальная стадия для новых сделок |
terminalOutcomeобязательно | string | nullЗначения: wonlostdonecancelled | Исход терминальной стадии (won/lost); null — промежуточная |
kindобязательно | string | nullЗначения: in_transiton_site | Семантика стадии для автоматики; null — обычная |
checklistобязательно | object[] | null | Чек-лист стадии: [{ label, done? }] массив из object |
wipLimitобязательно | number | null | Мягкий лимит карточек в колонке доски (WIP) |
DealTypeResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID типа сделки |
aliasобязательно | stringЗначения: sale_orderprojectproductionfield_jobleadintakemaintenanceevent | Системный алиас типа (sale_order, project, field_job, intake…) |
nameобязательно | string | Название типа |
featuresобязательно | string[] | Включённые возможности типа (lines, payments, schedule, address…) массив из string |
configобязательно | object | Конфигурация типа (правила доски, печати, автоматики)object |
isActiveобязательно | boolean | Тип активен и доступен для новых сделок |
isSystemобязательно | boolean | Системный тип: нельзя удалить |
availableобязательно | boolean | Компонент типа включён у компании |
stagesобязательно | DealStageResponse[] | Стадии пайплайна по порядку массив из DealStageResponse |
ExternalErrorResponse
| Поле | Тип | Описание |
|---|---|---|
statusCodeобязательно | number | HTTP-статус Пример: 403 |
errorобязательно | string | Название статуса Пример: Forbidden |
messageобязательно | string | Текст ошибки (английский) Пример: Insufficient permissions. One of the following scopes is required: deals:write |
code | string | Машинный код ошибки (CAPS_ENUM) — по нему ветвится обработка на стороне интеграции Пример: AUTH_API_SCOPE_INSUFFICIENT |
meta | object | Параметры ошибки: значения плейсхолдеров `message` (например, требуемые scope или алиас неактивного компонента) Пример: {"scopes":"deals:write"}object |
timestampобязательно | string | Момент ошибки, ISO 8601 |
pathобязательно | string | Путь запроса Пример: /api/external/v1/deals |
IntakeLeadDto
| Поле | Тип | Описание |
|---|---|---|
name | string | Имя контакта |
phone | string | Телефон |
email | string | |
message | string | Текст обращения |
source | string | Источник (по умолчанию webhook). |
externalId | string | Внешний id для дедупа. |
utm | object | UTM-метки перехода: плоская карта строка → строка. словарь значений string |
LeadResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID лида |
sourceобязательно | string | Источник: `api`, `public_form`, `telegram`… |
channelобязательно | string | null | Канал внутри источника (например, имя формы или бота) |
nameобязательно | string | null | Имя контакта |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
messageобязательно | string | null | Текст обращения |
statusобязательно | stringЗначения: newin_progressconvertedspam | Статус обработки |
externalIdобязательно | string | null | Внешний id из источника (для дедупликации) |
rawобязательно | object | null | Сырой payload источника (для ручного разбора).object |
clientIdобязательно | string (uuid) | null | ID клиента после конвертации |
dealIdобязательно | string (uuid) | null | ID сделки после конвертации |
assignedToIdобязательно | string (uuid) | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
utmобязательно | object | null | UTM-метки перехода. словарь значений string |
createdAtобязательно | string (date-time) | Создан (ISO 8601) |
LeadSourceResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | UUID источника |
nameобязательно | string | Название |
isActiveобязательно | boolean | Активен ли источник |
positionобязательно | number | Порядок сортировки |
createdAtобязательно | string (date-time) |
OpenShiftDto
| Поле | Тип | Описание |
|---|---|---|
openingCashобязательно | number | Начальная сумма наличных в копейках Пример: 500000 |
OrderLineInputDto
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: productservicepackage | |
refIdобязательно | string | ID товара или услуги |
variantId | string | Вариант товара (SKU-вариация) |
qtyобязательно | number | Пример: 1 |
unitPriceобязательно | number | Цена за единицу в копейках |
OrderLineResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID позиции |
orderIdобязательно | string | ID заказа |
kindобязательно | stringЗначения: productservicepackage | Товар или услуга |
productIdобязательно | string | null | ID товара |
variantIdобязательно | string | null | ID варианта товара (SKU-вариация) |
serviceIdобязательно | string | null | ID услуги |
nameобязательно | string | Название (snapshot на момент добавления) |
qtyобязательно | number | Количество |
unitPriceобязательно | number | Цена за единицу в копейках |
fulfilledQtyобязательно | number | Отгружено/готово (O6) |
lineTotalобязательно | number | Стоимость позиции в копейках |
OrderListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
numberобязательно | number | Номер заказа |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
createdAtобязательно | string (date-time) | |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
itemsCountобязательно | number | Сумма qty по всем позициям |
subtotalобязательно | number | Подытог в копейках |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог в копейках |
prepaidAmountобязательно | number | Внесено (копейки) |
balanceDueобязательно | number | Остаток к оплате (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
createdByNameобязательно | string | null | Имя сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
assignedToNameобязательно | string | null | Имя ответственного сотрудника |
OrderResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID заказа |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер заказа (сквозной по компании) |
statusобязательно | stringЗначения: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusобязательно | stringЗначения: unpaidpartialpaidrefunded | Статус оплаты |
customerIdобязательно | string | null | ID клиента |
assetIdобязательно | string | null | ID объекта обслуживания (ClientAsset) |
addressIdобязательно | string | null | ID адреса клиента (ClientAddress) |
addressLabelобязательно | string | null | Название адреса клиента (denorm по addressId) |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
customerEmailобязательно | string | null | E-mail покупателя |
customerNoteобязательно | string | null | Пожелания покупателя |
channelобязательно | string | null | Канал привлечения |
sourceобязательно | string | null | Источник (интеграция/форма) |
deliveryStatusобязательно | string | nullЗначения: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodобязательно | string | nullЗначения: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostобязательно | number | Стоимость доставки (копейки) |
deliveryAddressTextобязательно | string | null | Адрес доставки строкой |
dueAtобязательно | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByобязательно | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtобязательно | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noteобязательно | string | null | Внутренний комментарий |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь заказ, % |
totalобязательно | number | Итог со скидкой, копейки |
prepaidAmountобязательно | number | Предоплата (копейки) |
createdByIdобязательно | string | null | ID сотрудника-автора |
assignedToIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) | |
linesобязательно | OrderLineResponse[] | Позиции заказа массив из OrderLineResponse |
OrderStatus
stringnewconfirmedin_progressreadycompletedcancelledProductAttributeValueInput
| Поле | Тип | Описание |
|---|---|---|
attributeIdобязательно | string (uuid) | ID характеристики |
valueString | string | null | Строковое значение (тип text) |
valueNumber | number | null | Числовое значение (тип number) |
valueColor | string | null | Цвет HEX (тип color) Пример: #1ABC9C |
colorName | string | nullЗначения: blackwhitegraydark_graylight_grayredorangelight_orangeyellowgoldgreenlight_greendark_greenlight_bluebluedark_blueindigopurplepinklight_pinkbrownbeigeburgundykhaki | Имя цвета из палитры NamedColor; пара с `valueColor`. |
valueBoolean | boolean | null | Логическое значение (тип boolean) |
optionId | string (uuid) | null | ID выбранной опции (тип select) |
ProductAttributeValueResponse
| Поле | Тип | Описание |
|---|---|---|
attributeIdобязательно | string | ID характеристики |
valueStringобязательно | string | null | Строковое значение (тип text) |
valueNumberобязательно | number | null | Числовое значение (тип number) |
valueColorобязательно | string | null | Цвет HEX (тип color) |
colorNameобязательно | string | null | Имя цвета из палитры NamedColor; пара с valueColor |
valueBooleanобязательно | boolean | null | Логическое значение (тип boolean) |
optionIdобязательно | string | null | ID выбранной опции (тип select) |
ProductResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID товара |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
barcodeобязательно | string | null | Штрихкод |
nameобязательно | string | Название товара |
descriptionобязательно | string | null | Описание |
nameI18nобязательно | object | Переводы названия по локали: { "de": "..." } словарь значений string |
descriptionI18nобязательно | object | Переводы описания по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
brandобязательно | string | null | Бренд |
modelобязательно | string | null | Модель |
priceобязательно | number | Цена в копейках |
costобязательно | number | Себестоимость в копейках |
unitобязательно | string | Единица измерения (код, денорм) |
unitIdобязательно | string | null | ID единицы измерения из справочника |
packQtyобязательно | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyобязательно | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyобязательно | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdобязательно | string | null | ID единицы фасовки |
costComponentsобязательно | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundleобязательно | boolean | Комплект/набор (BOM) |
modifierGroupsобязательно | object[] | Группы модификаторов позиции с надбавками массив из object |
statusобязательно | stringЗначения: activehidden | Статус карточки |
hasStockобязательно | boolean | Ведётся складской учёт остатков |
defaultSupplierIdобязательно | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojiобязательно | string | null | Эмодзи-иконка |
photoFileIdобязательно | string | null | ID файла основного фото |
thumbnailFileIdобязательно | string | null | ID файла миниатюры |
attributeValuesобязательно | ProductAttributeValueResponse[] | Значения характеристик массив из ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
ProductVariantResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID варианта |
companyIdобязательно | string | ID компании |
productIdобязательно | string | ID родительского товара |
skuобязательно | string | Артикул варианта |
barcodeобязательно | string | null | Штрихкод |
attributesобязательно | object | Атрибуты варианта: { "color": "red", "size": "M" } словарь значений string |
priceобязательно | number | Цена варианта в копейках |
costобязательно | number | Себестоимость варианта в копейках |
statusобязательно | stringЗначения: activehidden | Статус варианта |
stockQty | number | Суммарный остаток по складам (матрица). |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
ReceiptLineInputDto
| Поле | Тип | Описание |
|---|---|---|
productIdобязательно | string (uuid) | ID товара |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
qtyобязательно | number | Количество Пример: 1 |
unitCostобязательно | number | Закупочная цена за единицу в копейках |
batchNumber | string | Номер партии (информационный учёт) |
expiryDate | string | Срок годности партии (ISO 8601) |
ReceiptLineResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID позиции |
receiptIdобязательно | string | ID приёмки |
productIdобязательно | string | ID товара |
variantIdобязательно | string | null | ID варианта товара (SKU-вариация) |
productNameобязательно | string | Название товара |
productSkuобязательно | string | Артикул товара |
qtyобязательно | number | Количество |
unitCostобязательно | number | Закупочная цена за единицу в копейках |
lineTotalобязательно | number | Стоимость позиции в копейках |
ReceiptListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID приёмки |
numberобязательно | number | Номер приёмки |
statusобязательно | stringЗначения: postedcancelled | Статус приёмки |
dateобязательно | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
supplierIdобязательно | string | null | ID поставщика |
supplierNameобязательно | string | null | Название поставщика |
purchaseOrderIdобязательно | string | null | ID заказа поставщику |
purchaseOrderNumberобязательно | number | null | Номер заказа поставщику |
itemsCountобязательно | number | Число позиций |
totalQtyобязательно | number | Сумма qty по всем позициям |
totalAmountобязательно | number | Сумма приёмки в копейках |
createdByIdобязательно | string | ID сотрудника-автора |
createdByNameобязательно | string | Имя сотрудника-автора |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
ReceiptResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID приёмки |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер приёмки (сквозной по компании) |
statusобязательно | stringЗначения: postedcancelled | Статус приёмки |
dateобязательно | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
supplierIdобязательно | string | null | ID поставщика |
supplierNameобязательно | string | null | Название поставщика |
purchaseOrderIdобязательно | string | null | ID заказа поставщику, по которому пришёл товар |
noteобязательно | string | null | Комментарий к приёмке |
totalQtyобязательно | number | Сумма qty по всем позициям |
totalAmountобязательно | number | Сумма приёмки в копейках |
createdByIdобязательно | string | ID сотрудника-автора |
createdByNameобязательно | string | Имя сотрудника-автора |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
linesобязательно | ReceiptLineResponse[] | Позиции приёмки массив из ReceiptLineResponse |
ResourceAvailabilityWindowDto
| Поле | Тип | Описание |
|---|---|---|
weekdayобязательно | number | День недели: 0=вс … 6=сб |
fromобязательно | string | Начало окна, HH:MM Пример: 09:00 |
toобязательно | string | Конец окна, HH:MM Пример: 18:00 |
ResourceResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID ресурса |
companyIdобязательно | string | ID компании |
typeобязательно | stringЗначения: staffseatunitequipment | Тип ресурса |
nameобязательно | string | Название ресурса |
capacityобязательно | number | Сколько броней ресурс держит одновременно |
seatsобязательно | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorобязательно | string | null | Цвет в календаре (HEX) |
bufferMinutesобязательно | number | Буфер между бронями, минут |
minDurationMinutesобязательно | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityобязательно | object[] | Окна доступности по дням недели: [{ weekday, from, to }] массив из object |
isActiveобязательно | boolean | Ресурс активен и доступен для записи |
housekeepingStateобязательно | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdобязательно | string | null | Учётка сотрудника за ресурсом (мастер) |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
SaleLineInputDto
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: productservicepackage | |
refIdобязательно | string | ID товара или услуги |
variantId | string | Вариант товара (SKU-вариация), если продаётся конкретный вариант (kind=product). |
packageHolderId | string | Кому выдать абонемент (kind=package), если платит не он сам: родитель оплачивает занятия ребёнка. Пусто — владельцем становится клиент чека. |
qtyобязательно | number | Пример: 1 |
unitPriceобязательно | number | Базовая цена за единицу в копейках |
modifiers | object[] | Выбранные модификаторы (P1.3b): [{ groupId, optionId }]. Надбавки считает сервер. массив из object |
lineDiscountPercent | number | Построчная скидка в процентах (0..100) на позицию (K3) |
lineDiscountAmount | number | Построчная скидка фиксированной суммой за единицу, копейки (K3) |
SaleLineResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID позиции |
saleIdобязательно | string | ID чека |
kindобязательно | stringЗначения: productservicepackage | Товар или услуга |
productIdобязательно | string | null | ID товара |
variantIdобязательно | string | null | ID варианта товара (SKU-вариация) |
serviceIdобязательно | string | null | ID услуги |
nameобязательно | string | Название (snapshot на момент продажи) |
qtyобязательно | number | Количество |
unitPriceобязательно | number | Цена за единицу в копейках |
lineDiscountPercentобязательно | number | Построчная скидка в процентах (K3) |
lineDiscountAmountобязательно | number | Построчная скидка суммой за единицу, копейки (K3) |
lineTotalобязательно | number | Стоимость позиции в копейках |
refundedQtyобязательно | number | Сколько единиц уже возвращено предыдущими возвратами. Доступно к возврату — qty минус это число. |
modifiersобязательно | object[] | null | Выбранные модификаторы (P1.3b); null — без них. массив из object |
SaleListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID чека |
numberобязательно | number | Номер чека |
createdAtобязательно | string (date-time) | Момент продажи (ISO 8601) |
shiftIdобязательно | string | ID кассовой смены |
shiftNumberобязательно | number | Номер смены |
cashierIdобязательно | string | ID кассира |
cashierNameобязательно | string | Имя кассира |
itemsCountобязательно | number | Сумма qty по всем позициям |
subtotalобязательно | number | Подытог в копейках (со знаком) |
discountPercentобязательно | number | Скидка на весь чек, % |
totalобязательно | number | Итог в копейках (со знаком) |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | Способ оплаты |
isRefundобязательно | boolean | Чек возврата |
refundOfSaleIdобязательно | string | null | ID исходного чека (у возврата) |
refundOfSaleNumberобязательно | number | null | Номер исходного чека (у возврата) |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
SalePaymentInputDto
| Поле | Тип | Описание |
|---|---|---|
methodобязательно | stringЗначения: cashcardsbpmixed | |
amountобязательно | number | Сумма платежа в копейках |
ext | string | Алиас интеграционного способа оплаты |
SalePaymentResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID платежа |
methodобязательно | stringЗначения: cashcardsbpmixed | Способ оплаты |
amountобязательно | number | Сумма платежа в копейках |
extобязательно | string | null | Уточнение способа (эквайринг, СБП, сертификат…) |
SaleResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID чека |
companyIdобязательно | string | ID компании |
shiftIdобязательно | string | ID кассовой смены |
numberобязательно | number | Номер чека (сквозной по компании) |
subtotalобязательно | number | Сумма позиций до скидки, копейки |
discountPercentобязательно | number | Скидка на весь чек, % |
totalобязательно | number | Итог к оплате, копейки |
paymentMethodобязательно | stringЗначения: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtобязательно | string | null | Уточнение способа оплаты |
receivedAmountобязательно | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdобязательно | string | ID кассира |
refundOfSaleIdобязательно | string | null | ID исходного чека; заполнен только у возврата |
customerIdобязательно | string | null | ID клиента |
customerNameобязательно | string | null | Имя покупателя |
customerPhoneобязательно | string | null | Телефон покупателя |
channelобязательно | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtобязательно | string (date-time) | Момент продажи (ISO 8601) |
linesобязательно | SaleLineResponse[] | Позиции чека массив из SaleLineResponse |
paymentsобязательно | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) массив из SalePaymentResponse |
ServiceCostItemInputDto
| Поле | Тип | Описание |
|---|---|---|
kindобязательно | stringЗначения: materiallabor | Тип позиции |
productId | string (uuid) | null | UUID товара из справочника. null/undefined — freeform. |
nameобязательно | string | Название (snapshot) Пример: Цемент М500 |
quantityобязательно | number | Количество (десятичное) Пример: 2.5 |
unitCostобязательно | number | Себестоимость единицы, копейки Пример: 50000 |
ServiceCostItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID позиции |
serviceIdобязательно | string | ID услуги |
kindобязательно | stringЗначения: materiallabor | Тип позиции |
productIdобязательно | string | null | ID товара из справочника; null — freeform-позиция |
nameобязательно | string | Название (snapshot) |
quantityобязательно | number | Количество (десятичное) |
unitCostобязательно | number | Себестоимость единицы, копейки |
lineTotalобязательно | number | Итог по строке, копейки |
positionобязательно | number | Порядок в составе |
ServiceResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID услуги |
companyIdобязательно | string | ID компании |
skuобязательно | string | Артикул |
nameобязательно | string | Название услуги |
nameI18nобязательно | object | Переводы названия по локали словарь значений string |
categoryIdобязательно | string | null | ID категории; null — без категории |
priceModelобязательно | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
priceобязательно | number | Цена в копейках |
durationMinutesобязательно | number | null | Длительность, мин |
totalCostобязательно | number | Сумма по составу затрат, копейки |
statusобязательно | stringЗначения: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче массив из ServiceCostItemResponse |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
ShiftResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID смены |
companyIdобязательно | string | ID компании |
numberобязательно | number | Номер смены (сквозной по компании) |
openedAtобязательно | string (date-time) | Открыта (ISO 8601) |
closedAtобязательно | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashобязательно | number | Начальная сумма в копейках |
statusобязательно | stringЗначения: openclosed | Статус смены |
openedByIdобязательно | string | ID сотрудника, открывшего смену |
closedByIdобязательно | string | null | ID сотрудника, закрывшего смену |
StockListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID записи остатка |
productIdобязательно | string | ID товара |
productNameобязательно | string | Название товара |
productSkuобязательно | string | Артикул товара |
variantIdобязательно | string | null | ID варианта товара; null — товар без вариантов |
variantSkuобязательно | string | null | Артикул варианта |
variantAttributesобязательно | object | null | Атрибуты варианта: { "color": "red", "size": "M" } словарь значений string |
categoryIdобязательно | string | null | ID категории товара |
categoryNameобязательно | string | null | Название категории |
warehouseIdобязательно | string | ID склада |
warehouseNameобязательно | string | Название склада |
qtyобязательно | number | Физический остаток |
reservedобязательно | number | Зарезервировано под незавершённые заказы |
availableобязательно | number | Свободно к продаже: qty − reserved |
reorderPointобязательно | number | Порог дозаказа (0 — не задан) |
isLowStockобязательно | boolean | Остаток на пороге или ниже |
updatedAtобязательно | string (date-time) | Последнее движение по остатку (ISO 8601) |
SupplierResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID поставщика |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название поставщика |
contactNameобязательно | string | null | Контактное лицо |
phoneобязательно | string | null | Телефон |
emailобязательно | string | null | |
innобязательно | string | null | ИНН |
addressобязательно | string | null | Адрес |
noteобязательно | string | null | Внутренняя заметка |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |
UnitResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID единицы |
companyIdобязательно | string | ID компании |
codeобязательно | string | Код, уникален в компании |
nameобязательно | string | Название |
kindобязательно | stringЗначения: countweightvolumetimelength | Род единицы |
baseRatioобязательно | number | Коэффициент к базовой единице рода. |
isFractionalобязательно | boolean | Разрешён дробный ввод количества |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
UpdateBookingDto
| Поле | Тип | Описание |
|---|---|---|
resourceId | string (uuid) | ID ресурса |
startAt | string | ISO 8601 |
endAt | string | ISO 8601 |
serviceId | string (uuid) | null | ID услуги каталога (null — снять) |
clientId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
customerName | string | null | Имя клиента (если без карточки) |
customerPhone | string | null | Телефон клиента |
dealId | string (uuid) | null | ID связанной сделки (null — отвязать) |
assignedToId | string (uuid) | null | ID исполнителя (null — снять) |
price | number | Цена брони в копейках |
depositAmount | number | Залог в копейках |
depositStatus | stringЗначения: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | null | Вместимость группового занятия (null — снять групповой режим). |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Полная замена доп.ресурсов мультиресурсной брони (S8). массив из string |
address | string | null | Адрес проведения (выезд); null — снять адрес. |
note | string | null | Внутренний комментарий |
visitNote | string | null | Заметка мастера по визиту (формула, результат работы, пожелания). Разрешена и после завершения записи — её пишут по факту приёма. |
UpdateCalendarEventDto
| Поле | Тип | Описание | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind | stringЗначения: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
title | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAt | string | Начало события (ISO 8601) | |||||||||||||||
endAt | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день По умолчанию: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании По умолчанию: false | |||||||||||||||
color | string | null | Цвет события (HEX) Пример: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события массив из string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
UpdateCategoryDto
| Поле | Тип | Описание |
|---|---|---|
name | string | Название категории Пример: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки По умолчанию: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки По умолчанию: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Пример: CFE |
UpdateClientDto
| Поле | Тип | Описание |
|---|---|---|
kind | stringЗначения: individuallegal | Физлицо или юрлицо |
displayName | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstName | string | null | Имя |
lastName | string | null | Фамилия |
middleName | string | null | Отчество |
companyName | string | null | Название компании (юрлицо) |
position | string | null | Должность контактного лица |
phone | string | null | Телефон |
email | string | null | |
telegramChatId | string | null | Telegram chat id для исходящих сообщений (канал telegram). |
whatsappPhone | string | null | Номер WhatsApp; пустой → используется phone. |
note | string | null | Внутренняя заметка |
tags | string[] | Теги массив из string |
birthday | string (date) | null | Дата рождения / основания (ISO 8601) |
assignedToId | string (uuid) | null | ID ответственного сотрудника |
inn | string | null | ИНН (B2B, для документов) |
kpp | string | null | КПП (B2B) |
legalAddress | string | null | Юр. адрес (B2B) |
bankDetails | string | null | Банковские реквизиты строкой (B2B) |
contractNumber | string | null | Номер договора (B2B) |
paymentTermsDays | number | null | Срок оплаты по договору, дни |
creditLimit | number | null | Кредитный лимит B2B, копейки (0 = без лимита) |
groupId | string (uuid) | null | Группа контрагентов (опт): общий прайс-лист и скидка сегмента |
priceListId | string (uuid) | null | Персональный прайс-лист (опт), перекрывает прайс группы |
slaHours | number | null | SLA по договору, часы |
marketingConsent | boolean | Согласие на маркетинговые рассылки (CL9) |
status | stringЗначения: activearchived | Статус клиента |
UpdateDealDto
| Поле | Тип | Описание |
|---|---|---|
items | DealLineInputDto[] | Полная замена позиций сметы массив из DealLineInputDto |
clientId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
addressId | string (uuid) | null | ID адреса клиента (null — отвязать) |
customerName | string | null | Имя заказчика |
customerPhone | string | null | Телефон заказчика |
customerEmail | string | null | E-mail заказчика |
customerNote | string | null | Пожелания заказчика |
assignedToId | string (uuid) | null | ID ответственного сотрудника (null — снять) |
address | string | null | Адрес выполнения (для field_job) |
venueResourceId | string (uuid) | null | Площадка мероприятия — ресурс расписания (null — снять). |
scheduledAt | string (date-time) | null | Запланированное время (ISO 8601) |
dueAt | string (date-time) | null | Срок исполнения (ISO 8601) |
note | string | null | Внутренний комментарий |
discountPercent | number | Скидка на всю сделку, % |
sourceId | string (uuid) | null | ID источника лида из справочника (D7), null — отвязать |
budget | number | null | Плановый бюджет проекта в копейках (D4), null — снять |
headcount | number | null | Число гостей мероприятия, null — снять. Позиции сметы с нормой на гостя пересчитываются под новое значение. |
UpdateLeadDto
| Поле | Тип | Описание |
|---|---|---|
statusобязательно | stringЗначения: newin_progressconvertedspam | Новый статус лида |
UpdateOrderDto
| Поле | Тип | Описание |
|---|---|---|
items | OrderLineInputDto[] | Полная замена позиций заказа (только в статусах new/confirmed) массив из OrderLineInputDto |
customerId | string (uuid) | null | ID клиента (null — отвязать) |
assetId | string (uuid) | null | ID объекта обслуживания (null — отвязать) |
addressId | string (uuid) | null | ID адреса клиента (null — отвязать) |
customerName | string | null | Имя покупателя |
customerPhone | string | null | Телефон покупателя |
customerEmail | string | null | E-mail покупателя |
customerNote | string | null | Пожелания покупателя |
channel | string | null | Канал привлечения |
source | string | null | Источник |
dueAt | string (date-time) | null | Срок (legacy, ISO 8601) |
readyBy | string (date-time) | null | Срок готовности (ISO 8601, O8) |
payDueAt | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601, O8) |
note | string | null | Внутренний комментарий |
discountPercent | number | Скидка на весь заказ, % |
prepaidAmount | number | Предоплата — целевая Σ оплат (копейки) |
assignedToId | string (uuid) | null | ID ответственного сотрудника (null — снять) |
UpdateProductDto
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: CFE-0012 |
barcode | string | null | Штрихкод Пример: 4607034630621 |
name | string | Название товара Пример: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } словарь значений string |
descriptionI18n | object | Переводы описания по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
price | number | Цена в копейках Пример: 240000 |
cost | number | Себестоимость в копейках По умолчанию: 0 |
unit | string | Единица измерения (код) По умолчанию: pcs |
unitId | string (uuid) | null | FK на справочник единиц (C5). |
packQty | number | null | Фасовка: кол-во packUnit в одной unit. |
packUnitId | string (uuid) | null | FK на единицу фасовки. |
minOrderQty | number | null | Минимальная партия к заказу (опт). Пусто — без ограничения. |
orderStepQty | number | null | Кратность отгрузки (опт): коробка 12 шт → 12, 24, 36. |
costComponents | object[] | Разбивка себестоимости (C8): [{ label, productId?, qty?, unitId?, unitCost?, amount }] массив из object |
isBundle | boolean | Комплект/набор (BOM) По умолчанию: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. массив из object |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
hasStock | boolean | Вести складской учёт остатков по товару По умолчанию: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Пример: ☕ |
brand | string | null | Бренд Пример: Lavazza |
model | string | null | Модель Пример: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). массив из ProductAttributeValueInput |
UpdateResourceDto
| Поле | Тип | Описание |
|---|---|---|
type | stringЗначения: staffseatunitequipment | Тип ресурса |
name | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно |
seats | number | null | Число мест площадки; null — снять. |
color | string | null | Цвет в календаре (HEX) |
bufferMinutes | number | Буфер между бронями, минут |
minDurationMinutes | number | null | Минимальная длительность брони, минут; null — без ограничения |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели массив из ResourceAvailabilityWindowDto |
isActive | boolean | Ресурс активен и доступен для записи |
housekeepingState | stringЗначения: readydirtycleaningout_of_service | Состояние уборки юнита (ручная установка). |
userId | string (uuid) | null | Учётка сотрудника за ресурсом (null — отвязать). |
note | string | null | Внутренняя заметка |
UpdateServiceDto
| Поле | Тип | Описание |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Пример: SVC-0001 |
name | string | Название услуги Пример: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). словарь значений string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringЗначения: fixedper_hourper_minuteper_dayper_item | Способ формирования цены По умолчанию: fixed |
price | number | Цена в копейках Пример: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Пример: 60 |
status | stringЗначения: activehidden | Статус карточки По умолчанию: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. массив из ServiceCostItemInputDto |
UpdateSupplierDto
| Поле | Тип | Описание |
|---|---|---|
name | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
UpdateWarehouseDto
| Поле | Тип | Описание |
|---|---|---|
name | string | Название склада Пример: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
UserResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID сотрудника |
firstNameобязательно | string | Имя |
lastNameобязательно | string | Фамилия |
emailобязательно | string | E-mail (логин) |
roleобязательно | stringЗначения: adminmanageremployeedirector | Роль-персона (admin, manager, employee…) |
roleIdобязательно | string | null | Роль компании |
roleNameобязательно | string | null | Название роли |
companyIdобязательно | string | ID компании |
statusобязательно | number | Статус: 0=Registered, 1=Active, 2=Blocked, 3=Deleted |
aboutобязательно | string | null | О себе |
phoneобязательно | string | null | Телефон |
timezoneобязательно | string | null | Часовой пояс (IANA, например Europe/Moscow) |
avatarFileIdобязательно | string | null | ID файла аватара |
avatarUrlобязательно | string | null | URL аватара |
twoFactorEnabledобязательно | boolean | Включена двухфакторная аутентификация |
ipRestrictionEnabledобязательно | boolean | Сотрудник ограничил себе вход списком IP-адресов. |
emailVerifiedAtобязательно | string (date-time) | null | Когда подтверждён e-mail (ISO 8601) |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
WarehouseListItemResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID склада |
nameобязательно | string | Название склада |
addressобязательно | string | null | Адрес склада |
isDefaultобязательно | boolean | Склад по умолчанию |
managerUserIdобязательно | string | null | ID ответственного сотрудника |
managerNameобязательно | string | null | Имя ответственного сотрудника |
totalQtyобязательно | number | Сумма qty по складу |
productsCountобязательно | number | Кол-во SKU с qty > 0 на складе |
createdAtобязательно | string (date-time) | |
updatedAtобязательно | string (date-time) |
WarehouseResponse
| Поле | Тип | Описание |
|---|---|---|
idобязательно | string | ID склада |
companyIdобязательно | string | ID компании |
nameобязательно | string | Название склада |
addressобязательно | string | null | Адрес склада |
isDefaultобязательно | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdобязательно | string | null | ID ответственного сотрудника |
createdAtобязательно | string (date-time) | Создано (ISO 8601) |
updatedAtобязательно | string (date-time) | Обновлено (ISO 8601) |