API reference
The reference is the complete list of External API methods with parameters, request bodies and response schemas. It is built from the same OpenAPI specification as the backend code and is updated with every release: a mismatch between the reference and the real endpoints fails the deployment check.
Authentication rules, formats, pagination, idempotency and error codes are described in External API — this page covers the methods only.
How to read the reference
- Section — a resource: catalog, clients, orders, deals, bookings and so on. The table of contents on the right navigates by section.
- Method and path — relative to the base URL
https://app.easymb.ru/api/external/v1.{id}in a path is the record UUID. - Scopes — which permission the token needs.
catalog:writeincludescatalog:read;*:readand*:writeopen every resource. - Component — which component must be enabled for the company, otherwise the response is
403. System components (core,catalog,calendar,messenger) are always enabled. - Parameters — query and path. Paginated lists accept
page,pageSizeand resource-specific filters (sort,order,searchwhere listed); reference lists respond with an array, without pages. Mutating operations describe theX-Idempotency-Keyheader. - 4xx responses — every operation lists the common errors of the API with their codes; the body shape is the
ExternalErrorResponseschema. - Request body and Responses — field schemas. The “required” mark applies to the request; in a response a field marked
| nullmay be empty. - Data schemas at the end — named objects the methods refer to: the same order schema arrives in the list, in a single read and in creation.
How to download the specification and generate a client
The external-openapi.json file can be downloaded from the reference header. Import it into Postman or Insomnia to get a ready request collection, or let a client generator build a typed wrapper for your language:
npx @openapitools/openapi-generator-cli generate \
-i https://docs.easymb.ru/external-openapi.json \
-g typescript-fetch \
-o ./easymb-clientThe base URL is already set in the specification; pass the token in the Authorization: Bearer emb_live_… header.
catalog
Товары, услуги и категории каталога.
GET/catalog/products
Список товаров.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | |
categoryId | query | string | null | |
status | query | stringValues: activehiddenall | |
priceMin | query | number | Мин. цена в копейках |
priceMax | query | number | Макс. цена в копейках |
brand | query | string | Фильтр по бренду (точное совпадение). |
attr | query | dictionary of string | Карта фильтров по характеристикам: attr[<attributeId>]=<значение | minNumber:maxNumber | optionId> |
sort | query | stringValues: nameskupricebrandmodelcreatedAt | |
order | query | stringValues: ascdesc | |
include | query | stringValues: stock |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | ProductResponse[] | array of ProductResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать товар.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: CFE-0012 |
barcode | string | null | Штрихкод Example: 4607034630621 |
namerequired | string | Название товара Example: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } dictionary of string |
descriptionI18n | object | Переводы описания по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
pricerequired | number | Цена в копейках Example: 240000 |
cost | number | Себестоимость в копейках Default: 0 |
unit | string | Единица измерения (код) Default: 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 }] array of object |
isBundle | boolean | Комплект/набор (BOM) Default: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. array of object |
status | stringValues: activehidden | Статус карточки Default: active |
hasStock | boolean | Вести складской учёт остатков по товару Default: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Example: ☕ |
brand | string | null | Бренд Example: Lavazza |
model | string | null | Модель Example: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). array of ProductAttributeValueInput |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID товара |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
barcoderequired | string | null | Штрихкод |
namerequired | string | Название товара |
descriptionrequired | string | null | Описание |
nameI18nrequired | object | Переводы названия по локали: { "de": "..." } dictionary of string |
descriptionI18nrequired | object | Переводы описания по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
brandrequired | string | null | Бренд |
modelrequired | string | null | Модель |
pricerequired | number | Цена в копейках |
costrequired | number | Себестоимость в копейках |
unitrequired | string | Единица измерения (код, денорм) |
unitIdrequired | string | null | ID единицы измерения из справочника |
packQtyrequired | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyrequired | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyrequired | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdrequired | string | null | ID единицы фасовки |
costComponentsrequired | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] array of object |
isBundlerequired | boolean | Комплект/набор (BOM) |
modifierGroupsrequired | object[] | Группы модификаторов позиции с надбавками array of object |
statusrequired | stringValues: activehidden | Статус карточки |
hasStockrequired | boolean | Ведётся складской учёт остатков |
defaultSupplierIdrequired | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojirequired | string | null | Эмодзи-иконка |
photoFileIdrequired | string | null | ID файла основного фото |
thumbnailFileIdrequired | string | null | ID файла миниатюры |
attributeValuesrequired | ProductAttributeValueResponse[] | Значения характеристик array of ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить товар.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID товара |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
barcoderequired | string | null | Штрихкод |
namerequired | string | Название товара |
descriptionrequired | string | null | Описание |
nameI18nrequired | object | Переводы названия по локали: { "de": "..." } dictionary of string |
descriptionI18nrequired | object | Переводы описания по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
brandrequired | string | null | Бренд |
modelrequired | string | null | Модель |
pricerequired | number | Цена в копейках |
costrequired | number | Себестоимость в копейках |
unitrequired | string | Единица измерения (код, денорм) |
unitIdrequired | string | null | ID единицы измерения из справочника |
packQtyrequired | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyrequired | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyrequired | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdrequired | string | null | ID единицы фасовки |
costComponentsrequired | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] array of object |
isBundlerequired | boolean | Комплект/набор (BOM) |
modifierGroupsrequired | object[] | Группы модификаторов позиции с надбавками array of object |
statusrequired | stringValues: activehidden | Статус карточки |
hasStockrequired | boolean | Ведётся складской учёт остатков |
defaultSupplierIdrequired | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojirequired | string | null | Эмодзи-иконка |
photoFileIdrequired | string | null | ID файла основного фото |
thumbnailFileIdrequired | string | null | ID файла миниатюры |
attributeValuesrequired | ProductAttributeValueResponse[] | Значения характеристик array of ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить товар.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: CFE-0012 |
barcode | string | null | Штрихкод Example: 4607034630621 |
name | string | Название товара Example: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } dictionary of string |
descriptionI18n | object | Переводы описания по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
price | number | Цена в копейках Example: 240000 |
cost | number | Себестоимость в копейках Default: 0 |
unit | string | Единица измерения (код) Default: 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 }] array of object |
isBundle | boolean | Комплект/набор (BOM) Default: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. array of object |
status | stringValues: activehidden | Статус карточки Default: active |
hasStock | boolean | Вести складской учёт остатков по товару Default: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Example: ☕ |
brand | string | null | Бренд Example: Lavazza |
model | string | null | Модель Example: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). array of ProductAttributeValueInput |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID товара |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
barcoderequired | string | null | Штрихкод |
namerequired | string | Название товара |
descriptionrequired | string | null | Описание |
nameI18nrequired | object | Переводы названия по локали: { "de": "..." } dictionary of string |
descriptionI18nrequired | object | Переводы описания по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
brandrequired | string | null | Бренд |
modelrequired | string | null | Модель |
pricerequired | number | Цена в копейках |
costrequired | number | Себестоимость в копейках |
unitrequired | string | Единица измерения (код, денорм) |
unitIdrequired | string | null | ID единицы измерения из справочника |
packQtyrequired | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyrequired | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyrequired | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdrequired | string | null | ID единицы фасовки |
costComponentsrequired | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] array of object |
isBundlerequired | boolean | Комплект/набор (BOM) |
modifierGroupsrequired | object[] | Группы модификаторов позиции с надбавками array of object |
statusrequired | stringValues: activehidden | Статус карточки |
hasStockrequired | boolean | Ведётся складской учёт остатков |
defaultSupplierIdrequired | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojirequired | string | null | Эмодзи-иконка |
photoFileIdrequired | string | null | ID файла основного фото |
thumbnailFileIdrequired | string | null | ID файла миниатюры |
attributeValuesrequired | ProductAttributeValueResponse[] | Значения характеристик array of ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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).
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID товара |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
barcoderequired | string | null | Штрихкод |
namerequired | string | Название товара |
descriptionrequired | string | null | Описание |
nameI18nrequired | object | Переводы названия по локали: { "de": "..." } dictionary of string |
descriptionI18nrequired | object | Переводы описания по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
brandrequired | string | null | Бренд |
modelrequired | string | null | Модель |
pricerequired | number | Цена в копейках |
costrequired | number | Себестоимость в копейках |
unitrequired | string | Единица измерения (код, денорм) |
unitIdrequired | string | null | ID единицы измерения из справочника |
packQtyrequired | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyrequired | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyrequired | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdrequired | string | null | ID единицы фасовки |
costComponentsrequired | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] array of object |
isBundlerequired | boolean | Комплект/набор (BOM) |
modifierGroupsrequired | object[] | Группы модификаторов позиции с надбавками array of object |
statusrequired | stringValues: activehidden | Статус карточки |
hasStockrequired | boolean | Ведётся складской учёт остатков |
defaultSupplierIdrequired | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojirequired | string | null | Эмодзи-иконка |
photoFileIdrequired | string | null | ID файла основного фото |
thumbnailFileIdrequired | string | null | ID файла миниатюры |
attributeValuesrequired | ProductAttributeValueResponse[] | Значения характеристик array of ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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
Список услуг.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | |
categoryId | query | string | |
status | query | stringValues: activehiddenall | |
priceMin | query | number | Мин. цена в копейках |
priceMax | query | number | Макс. цена в копейках |
priceModel | query | stringValues: fixedper_hourper_minuteper_dayper_item | |
sort | query | stringValues: nameskupricetotalCostcreatedAt | |
order | query | stringValues: ascdesc |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | ServiceResponse[] | array of ServiceResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать услугу.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: SVC-0001 |
namerequired | string | Название услуги Example: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены Default: fixed |
pricerequired | number | Цена в копейках Example: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Example: 60 |
status | stringValues: activehidden | Статус карточки Default: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. array of ServiceCostItemInputDto |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID услуги |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
namerequired | string | Название услуги |
nameI18nrequired | object | Переводы названия по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
priceModelrequired | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
pricerequired | number | Цена в копейках |
durationMinutesrequired | number | null | Длительность, мин |
totalCostrequired | number | Сумма по составу затрат, копейки |
statusrequired | stringValues: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче array of ServiceCostItemResponse |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить услугу.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID услуги |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
namerequired | string | Название услуги |
nameI18nrequired | object | Переводы названия по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
priceModelrequired | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
pricerequired | number | Цена в копейках |
durationMinutesrequired | number | null | Длительность, мин |
totalCostrequired | number | Сумма по составу затрат, копейки |
statusrequired | stringValues: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче array of ServiceCostItemResponse |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить услугу.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: SVC-0001 |
name | string | Название услуги Example: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены Default: fixed |
price | number | Цена в копейках Example: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Example: 60 |
status | stringValues: activehidden | Статус карточки Default: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. array of ServiceCostItemInputDto |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID услуги |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
namerequired | string | Название услуги |
nameI18nrequired | object | Переводы названия по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
priceModelrequired | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
pricerequired | number | Цена в копейках |
durationMinutesrequired | number | null | Длительность, мин |
totalCostrequired | number | Сумма по составу затрат, копейки |
statusrequired | stringValues: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче array of ServiceCostItemResponse |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Скрыть услугу.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID услуги |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
namerequired | string | Название услуги |
nameI18nrequired | object | Переводы названия по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
priceModelrequired | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
pricerequired | number | Цена в копейках |
durationMinutesrequired | number | null | Длительность, мин |
totalCostrequired | number | Сумма по составу затрат, копейки |
statusrequired | stringValues: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче array of ServiceCostItemResponse |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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
Список категорий.
- Scopes
catalog:read- Component
catalog
Responses
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
Создать категорию.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
namerequired | string | Название категории Example: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки Default: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки Default: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Example: CFE |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID категории |
companyIdrequired | string | ID компании |
parentIdrequired | string | null | ID родительской категории; null — корень |
namerequired | string | Название категории |
iconrequired | string | Имя иконки |
colorrequired | string | null | HEX цвета иконки |
bgrequired | string | null | HEX цвета фона иконки |
sortOrderrequired | number | Порядок сортировки |
prefixrequired | string | null | Префикс артикулов: A-Z, 1-4 символа Example: CFE |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить категорию.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID категории |
companyIdrequired | string | ID компании |
parentIdrequired | string | null | ID родительской категории; null — корень |
namerequired | string | Название категории |
iconrequired | string | Имя иконки |
colorrequired | string | null | HEX цвета иконки |
bgrequired | string | null | HEX цвета фона иконки |
sortOrderrequired | number | Порядок сортировки |
prefixrequired | string | null | Префикс артикулов: A-Z, 1-4 символа Example: CFE |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить категорию.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
name | string | Название категории Example: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки Default: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки Default: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Example: CFE |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID категории |
companyIdrequired | string | ID компании |
parentIdrequired | string | null | ID родительской категории; null — корень |
namerequired | string | Название категории |
iconrequired | string | Имя иконки |
colorrequired | string | null | HEX цвета иконки |
bgrequired | string | null | HEX цвета фона иконки |
sortOrderrequired | number | Порядок сортировки |
prefixrequired | string | null | Префикс артикулов: A-Z, 1-4 символа Example: CFE |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Удалить категорию.
- Scopes
catalog:write- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
204No content
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` строк заказа, продажи и приёмки, а также в корректировке остатков.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
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[]` при создании и изменении товара.
- Scopes
catalog:read- Component
catalog
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
categoryId | query | string | null | |
primaryOnly | query | boolean |
Responses
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` товара.
- Scopes
catalog:read- Component
catalog
Responses
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
Список клиентов.
- Scopes
clients:read- Component
clients
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: displayNamecreatedAtupdatedAt | |
order | query | stringValues: ascdesc | |
kind | query | stringValues: individuallegal | |
status | query | stringValues: activearchived | |
assignedToId | query | string | ID ответственного сотрудника |
tag | query | string | Один тег для фильтра |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | ClientListItemResponse[] | array of ClientListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать клиента.
- Scopes
clients:write- Component
clients
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | 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[] | Теги array of 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) |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
companyIdrequired | string | ID компании |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNamerequired | string | null | Имя |
lastNamerequired | string | null | Фамилия |
middleNamerequired | string | null | Отчество |
companyNamerequired | string | null | Название компании (юрлицо) |
positionrequired | string | null | Должность контактного лица |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
telegramChatIdrequired | string | null | Telegram chat id для исходящих сообщений |
whatsappPhonerequired | string | null | Номер WhatsApp; null — используется phone |
innrequired | string | null | ИНН (B2B) |
kpprequired | string | null | КПП (B2B) |
legalAddressrequired | string | null | Юр. адрес (B2B) |
bankDetailsrequired | string | null | Банковские реквизиты строкой (B2B) |
noterequired | string | null | Внутренняя заметка |
tagsrequired | string[] | Теги array of string |
birthdayrequired | string (date) | null | Дата рождения / основания (ISO 8601) |
statusrequired | stringValues: activearchived | Статус клиента |
balancerequired | number | Баланс/абонемент в копейках |
pointsrequired | number | Баллы лояльности (копейки-эквивалент) |
contractNumberrequired | string | null | Номер договора (B2B) |
groupIdrequired | string | null | ID группы контрагентов (опт) |
priceListIdrequired | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysrequired | number | null | Срок оплаты по договору, дни |
creditLimitrequired | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursrequired | number | null | SLA по договору, часы |
marketingConsentrequired | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtrequired | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourcerequired | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtrequired | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdByIdrequired | string | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить клиента.
- Scopes
clients:read- Component
clients
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
companyIdrequired | string | ID компании |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNamerequired | string | null | Имя |
lastNamerequired | string | null | Фамилия |
middleNamerequired | string | null | Отчество |
companyNamerequired | string | null | Название компании (юрлицо) |
positionrequired | string | null | Должность контактного лица |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
telegramChatIdrequired | string | null | Telegram chat id для исходящих сообщений |
whatsappPhonerequired | string | null | Номер WhatsApp; null — используется phone |
innrequired | string | null | ИНН (B2B) |
kpprequired | string | null | КПП (B2B) |
legalAddressrequired | string | null | Юр. адрес (B2B) |
bankDetailsrequired | string | null | Банковские реквизиты строкой (B2B) |
noterequired | string | null | Внутренняя заметка |
tagsrequired | string[] | Теги array of string |
birthdayrequired | string (date) | null | Дата рождения / основания (ISO 8601) |
statusrequired | stringValues: activearchived | Статус клиента |
balancerequired | number | Баланс/абонемент в копейках |
pointsrequired | number | Баллы лояльности (копейки-эквивалент) |
contractNumberrequired | string | null | Номер договора (B2B) |
groupIdrequired | string | null | ID группы контрагентов (опт) |
priceListIdrequired | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysrequired | number | null | Срок оплаты по договору, дни |
creditLimitrequired | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursrequired | number | null | SLA по договору, часы |
marketingConsentrequired | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtrequired | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourcerequired | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtrequired | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdByIdrequired | string | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить клиента.
- Scopes
clients:write- Component
clients
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
kind | stringValues: 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[] | Теги array of 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 | stringValues: activearchived | Статус клиента |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
companyIdrequired | string | ID компании |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNamerequired | string | null | Имя |
lastNamerequired | string | null | Фамилия |
middleNamerequired | string | null | Отчество |
companyNamerequired | string | null | Название компании (юрлицо) |
positionrequired | string | null | Должность контактного лица |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
telegramChatIdrequired | string | null | Telegram chat id для исходящих сообщений |
whatsappPhonerequired | string | null | Номер WhatsApp; null — используется phone |
innrequired | string | null | ИНН (B2B) |
kpprequired | string | null | КПП (B2B) |
legalAddressrequired | string | null | Юр. адрес (B2B) |
bankDetailsrequired | string | null | Банковские реквизиты строкой (B2B) |
noterequired | string | null | Внутренняя заметка |
tagsrequired | string[] | Теги array of string |
birthdayrequired | string (date) | null | Дата рождения / основания (ISO 8601) |
statusrequired | stringValues: activearchived | Статус клиента |
balancerequired | number | Баланс/абонемент в копейках |
pointsrequired | number | Баллы лояльности (копейки-эквивалент) |
contractNumberrequired | string | null | Номер договора (B2B) |
groupIdrequired | string | null | ID группы контрагентов (опт) |
priceListIdrequired | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysrequired | number | null | Срок оплаты по договору, дни |
creditLimitrequired | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursrequired | number | null | SLA по договору, часы |
marketingConsentrequired | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtrequired | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourcerequired | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtrequired | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdByIdrequired | string | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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.
- Scopes
clients:write- Component
clients
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
companyIdrequired | string | ID компании |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNamerequired | string | null | Имя |
lastNamerequired | string | null | Фамилия |
middleNamerequired | string | null | Отчество |
companyNamerequired | string | null | Название компании (юрлицо) |
positionrequired | string | null | Должность контактного лица |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
telegramChatIdrequired | string | null | Telegram chat id для исходящих сообщений |
whatsappPhonerequired | string | null | Номер WhatsApp; null — используется phone |
innrequired | string | null | ИНН (B2B) |
kpprequired | string | null | КПП (B2B) |
legalAddressrequired | string | null | Юр. адрес (B2B) |
bankDetailsrequired | string | null | Банковские реквизиты строкой (B2B) |
noterequired | string | null | Внутренняя заметка |
tagsrequired | string[] | Теги array of string |
birthdayrequired | string (date) | null | Дата рождения / основания (ISO 8601) |
statusrequired | stringValues: activearchived | Статус клиента |
balancerequired | number | Баланс/абонемент в копейках |
pointsrequired | number | Баллы лояльности (копейки-эквивалент) |
contractNumberrequired | string | null | Номер договора (B2B) |
groupIdrequired | string | null | ID группы контрагентов (опт) |
priceListIdrequired | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysrequired | number | null | Срок оплаты по договору, дни |
creditLimitrequired | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursrequired | number | null | SLA по договору, часы |
marketingConsentrequired | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtrequired | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourcerequired | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtrequired | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdByIdrequired | string | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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
Список лидов.
- Scopes
leads:read- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: createdAtstatus | |
order | query | stringValues: ascdesc | |
status | query | stringValues: newin_progressconvertedspam | |
source | query | string | |
assignedToId | query | string | ID ответственного или `unassigned` (без ответственного). |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | LeadResponse[] | array of LeadResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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`.
- Scopes
leads:write- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
name | string | Имя контакта |
phone | string | Телефон |
email | string | |
message | string | Текст обращения |
source | string | Источник (по умолчанию webhook). |
externalId | string | Внешний id для дедупа. |
utm | object | UTM-метки перехода: плоская карта строка → строка. dictionary of string |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID лида |
sourcerequired | string | Источник: `api`, `public_form`, `telegram`… |
channelrequired | string | null | Канал внутри источника (например, имя формы или бота) |
namerequired | string | null | Имя контакта |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
messagerequired | string | null | Текст обращения |
statusrequired | stringValues: newin_progressconvertedspam | Статус обработки |
externalIdrequired | string | null | Внешний id из источника (для дедупликации) |
rawrequired | object | null | Сырой payload источника (для ручного разбора).object |
clientIdrequired | string (uuid) | null | ID клиента после конвертации |
dealIdrequired | string (uuid) | null | ID сделки после конвертации |
assignedToIdrequired | string (uuid) | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
utmrequired | object | null | UTM-метки перехода. dictionary of string |
createdAtrequired | 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}
Получить лид.
- Scopes
leads:read- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID лида |
sourcerequired | string | Источник: `api`, `public_form`, `telegram`… |
channelrequired | string | null | Канал внутри источника (например, имя формы или бота) |
namerequired | string | null | Имя контакта |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
messagerequired | string | null | Текст обращения |
statusrequired | stringValues: newin_progressconvertedspam | Статус обработки |
externalIdrequired | string | null | Внешний id из источника (для дедупликации) |
rawrequired | object | null | Сырой payload источника (для ручного разбора).object |
clientIdrequired | string (uuid) | null | ID клиента после конвертации |
dealIdrequired | string (uuid) | null | ID сделки после конвертации |
assignedToIdrequired | string (uuid) | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
utmrequired | object | null | UTM-метки перехода. dictionary of string |
createdAtrequired | 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
Сменить статус лида.
- Scopes
leads:write- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
statusrequired | stringValues: newin_progressconvertedspam | Новый статус лида |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID лида |
sourcerequired | string | Источник: `api`, `public_form`, `telegram`… |
channelrequired | string | null | Канал внутри источника (например, имя формы или бота) |
namerequired | string | null | Имя контакта |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
messagerequired | string | null | Текст обращения |
statusrequired | stringValues: newin_progressconvertedspam | Статус обработки |
externalIdrequired | string | null | Внешний id из источника (для дедупликации) |
rawrequired | object | null | Сырой payload источника (для ручного разбора).object |
clientIdrequired | string (uuid) | null | ID клиента после конвертации |
dealIdrequired | string (uuid) | null | ID сделки после конвертации |
assignedToIdrequired | string (uuid) | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
utmrequired | object | null | UTM-метки перехода. dictionary of string |
createdAtrequired | 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.
- Scopes
leads:write- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
assigneeIdrequired | string (uuid) | null | ID сотрудника или null для снятия ответственного. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID лида |
sourcerequired | string | Источник: `api`, `public_form`, `telegram`… |
channelrequired | string | null | Канал внутри источника (например, имя формы или бота) |
namerequired | string | null | Имя контакта |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
messagerequired | string | null | Текст обращения |
statusrequired | stringValues: newin_progressconvertedspam | Статус обработки |
externalIdrequired | string | null | Внешний id из источника (для дедупликации) |
rawrequired | object | null | Сырой payload источника (для ручного разбора).object |
clientIdrequired | string (uuid) | null | ID клиента после конвертации |
dealIdrequired | string (uuid) | null | ID сделки после конвертации |
assignedToIdrequired | string (uuid) | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
utmrequired | object | null | UTM-метки перехода. dictionary of string |
createdAtrequired | 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` не нужен.
- Scopes
leads:write- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
201| Field | Type | Description |
|---|---|---|
clientIdrequired | 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`.
- Scopes
leads:write- Component
marketing
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
typeId | string | ID типа сделки; по умолчанию — тип-«лид». |
Responses
201| Field | Type | Description |
|---|---|---|
dealIdrequired | string (uuid) | |
clientIdrequired | 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
Список заказов.
- Scopes
orders:read- Component
orders
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: createdAtnumberdueAtreadyBypayDueAttotalstatuspaymentStatus | |
order | query | stringValues: ascdesc | |
status | query | stringValues: newconfirmedin_progressreadycompletedcancelled | |
paymentStatus | query | stringValues: 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) |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | OrderListItemResponse[] | array of OrderListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать заказ.
- Scopes
orders:write- Component
orders
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
itemsrequired | OrderLineInputDto[] | array of 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 | Default: 0 |
prepaidAmount | number | Предоплата (копейки) Default: 0 |
assignedToId | string | ID ответственного сотрудника |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
companyIdrequired | string | ID компании |
numberrequired | number | Номер заказа (сквозной по компании) |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
customerIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
customerEmailrequired | string | null | E-mail покупателя |
customerNoterequired | string | null | Пожелания покупателя |
channelrequired | string | null | Канал привлечения |
sourcerequired | string | null | Источник (интеграция/форма) |
deliveryStatusrequired | string | nullValues: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodrequired | string | nullValues: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostrequired | number | Стоимость доставки (копейки) |
deliveryAddressTextrequired | string | null | Адрес доставки строкой |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог со скидкой, копейки |
prepaidAmountrequired | number | Предоплата (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | OrderLineResponse[] | Позиции заказа array of 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}
Получить заказ.
- Scopes
orders:read- Component
orders
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
companyIdrequired | string | ID компании |
numberrequired | number | Номер заказа (сквозной по компании) |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
customerIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
customerEmailrequired | string | null | E-mail покупателя |
customerNoterequired | string | null | Пожелания покупателя |
channelrequired | string | null | Канал привлечения |
sourcerequired | string | null | Источник (интеграция/форма) |
deliveryStatusrequired | string | nullValues: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodrequired | string | nullValues: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostrequired | number | Стоимость доставки (копейки) |
deliveryAddressTextrequired | string | null | Адрес доставки строкой |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог со скидкой, копейки |
prepaidAmountrequired | number | Предоплата (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | OrderLineResponse[] | Позиции заказа array of 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}
Изменить заказ.
- Scopes
orders:write- Component
orders
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
items | OrderLineInputDto[] | Полная замена позиций заказа (только в статусах new/confirmed) array of 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 — снять) |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
companyIdrequired | string | ID компании |
numberrequired | number | Номер заказа (сквозной по компании) |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
customerIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
customerEmailrequired | string | null | E-mail покупателя |
customerNoterequired | string | null | Пожелания покупателя |
channelrequired | string | null | Канал привлечения |
sourcerequired | string | null | Источник (интеграция/форма) |
deliveryStatusrequired | string | nullValues: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodrequired | string | nullValues: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostrequired | number | Стоимость доставки (копейки) |
deliveryAddressTextrequired | string | null | Адрес доставки строкой |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог со скидкой, копейки |
prepaidAmountrequired | number | Предоплата (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | OrderLineResponse[] | Позиции заказа array of 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.
- Scopes
orders:write- Component
orders
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
nextrequired | path | OrderStatus | Целевой статус заказа |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
companyIdrequired | string | ID компании |
numberrequired | number | Номер заказа (сквозной по компании) |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
customerIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
customerEmailrequired | string | null | E-mail покупателя |
customerNoterequired | string | null | Пожелания покупателя |
channelrequired | string | null | Канал привлечения |
sourcerequired | string | null | Источник (интеграция/форма) |
deliveryStatusrequired | string | nullValues: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodrequired | string | nullValues: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostrequired | number | Стоимость доставки (копейки) |
deliveryAddressTextrequired | string | null | Адрес доставки строкой |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог со скидкой, копейки |
prepaidAmountrequired | number | Предоплата (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | OrderLineResponse[] | Позиции заказа array of 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` при переводе сделки на терминальную стадию с исходом «проиграна»; в ответах сделок поле расшифровывается по этому списку. По умолчанию только активные.
- Scopes
deals:read- Component
deals
Responses
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` при создании сделки и для расшифровки поля в ответах. По умолчанию только активные.
- Scopes
deals:read- Component
deals
Responses
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 стадий отсюда нужны для создания сделки и смены стадии.
- Scopes
deals:read- Component
deals
Responses
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
Список сделок.
- Scopes
deals:read- Component
deals
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: createdAtnumberdueAtscheduledAttotalboardOrder | |
order | query | stringValues: ascdesc | |
typeId | query | string | ID типа сделки |
stageId | query | string | ID стадии |
outcome | query | stringValues: 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 | Только сделки с просроченной задачей |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | DealListItemResponse[] | array of DealListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать сделку выбранного типа.
- Scopes
deals:write- Component
deals
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
typeIdrequired | string | ID типа сделки | ||||||||||||||||||||||||||||||||||||
items | DealLineInputDto[] | Позиции сметы (товары и услуги) array of 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 | Скидка на всю сделку, % Default: 0 | ||||||||||||||||||||||||||||||||||||
intake | object | Снапшот приёмки (для типа intake)
|
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер сделки (сквозной по компании) |
typeIdrequired | string | ID типа сделки |
stageIdrequired | string | ID текущей стадии |
checklistDonerequired | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` array of string |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdrequired | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
customerEmailrequired | string | null | E-mail заказчика |
customerNoterequired | string | null | Пожелания заказчика |
channelrequired | string | null | Канал привлечения (manual|public_link|phone) |
sourcerequired | string | null | Источник строкой (интеграция/форма) |
sourceIdrequired | string | null | ID источника лида из справочника |
addressrequired | string | null | Адрес выполнения (для field_job) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на всю сделку, % |
totalrequired | number | Итог со скидкой, копейки |
costrequired | number | Себестоимость по позициям, копейки |
budgetrequired | number | null | Бюджет (копейки) |
budgetExceededAtrequired | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountrequired | number | null | Число гостей мероприятия |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtrequired | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdrequired | string | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | DealLineResponse[] | Позиции сметы array of 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}
Получить сделку с позициями.
- Scopes
deals:read- Component
deals
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер сделки (сквозной по компании) |
typeIdrequired | string | ID типа сделки |
stageIdrequired | string | ID текущей стадии |
checklistDonerequired | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` array of string |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdrequired | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
customerEmailrequired | string | null | E-mail заказчика |
customerNoterequired | string | null | Пожелания заказчика |
channelrequired | string | null | Канал привлечения (manual|public_link|phone) |
sourcerequired | string | null | Источник строкой (интеграция/форма) |
sourceIdrequired | string | null | ID источника лида из справочника |
addressrequired | string | null | Адрес выполнения (для field_job) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на всю сделку, % |
totalrequired | number | Итог со скидкой, копейки |
costrequired | number | Себестоимость по позициям, копейки |
budgetrequired | number | null | Бюджет (копейки) |
budgetExceededAtrequired | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountrequired | number | null | Число гостей мероприятия |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtrequired | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdrequired | string | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | DealLineResponse[] | Позиции сметы array of 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}
Изменить сделку. Позиции и поля меняются, пока сделка не закрыта.
- Scopes
deals:write- Component
deals
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
items | DealLineInputDto[] | Полная замена позиций сметы array of 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 — снять. Позиции сметы с нормой на гостя пересчитываются под новое значение. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер сделки (сквозной по компании) |
typeIdrequired | string | ID типа сделки |
stageIdrequired | string | ID текущей стадии |
checklistDonerequired | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` array of string |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdrequired | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
customerEmailrequired | string | null | E-mail заказчика |
customerNoterequired | string | null | Пожелания заказчика |
channelrequired | string | null | Канал привлечения (manual|public_link|phone) |
sourcerequired | string | null | Источник строкой (интеграция/форма) |
sourceIdrequired | string | null | ID источника лида из справочника |
addressrequired | string | null | Адрес выполнения (для field_job) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на всю сделку, % |
totalrequired | number | Итог со скидкой, копейки |
costrequired | number | Себестоимость по позициям, копейки |
budgetrequired | number | null | Бюджет (копейки) |
budgetExceededAtrequired | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountrequired | number | null | Число гостей мероприятия |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtrequired | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdrequired | string | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | DealLineResponse[] | Позиции сметы array of 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
Перевести сделку на другую стадию пайплайна её типа.
- Scopes
deals:write- Component
deals
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
stageIdrequired | string (uuid) | ID целевой стадии (в рамках того же типа сделки) |
lostReasonId | string (uuid) | null | ID причины проигрыша — при переходе на терминальную стадию с исходом Lost. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер сделки (сквозной по компании) |
typeIdrequired | string | ID типа сделки |
stageIdrequired | string | ID текущей стадии |
checklistDonerequired | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` array of string |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdrequired | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
customerEmailrequired | string | null | E-mail заказчика |
customerNoterequired | string | null | Пожелания заказчика |
channelrequired | string | null | Канал привлечения (manual|public_link|phone) |
sourcerequired | string | null | Источник строкой (интеграция/форма) |
sourceIdrequired | string | null | ID источника лида из справочника |
addressrequired | string | null | Адрес выполнения (для field_job) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на всю сделку, % |
totalrequired | number | Итог со скидкой, копейки |
costrequired | number | Себестоимость по позициям, копейки |
budgetrequired | number | null | Бюджет (копейки) |
budgetExceededAtrequired | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountrequired | number | null | Число гостей мероприятия |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtrequired | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdrequired | string | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | DealLineResponse[] | Позиции сметы array of 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
Журнал продаж.
- Scopes
sales:read- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: createdAtnumbertotal | |
order | query | stringValues: ascdesc | |
shiftId | query | string | |
cashierId | query | string | |
paymentMethod | query | stringValues: cashcardsbpmixed | |
dateFrom | query | string | ISO 8601 |
dateTo | query | string | ISO 8601 |
kind | query | stringValues: allsalerefund | |
customerId | query | string | Фильтр по клиенту |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | SaleListItemResponse[] | array of SaleListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать продажу.
- Scopes
sales:write- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
shiftIdrequired | string | |
itemsrequired | SaleLineInputDto[] | array of SaleLineInputDto |
discountPercent | number | Default: 0 |
paymentMethodrequired | stringValues: 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 = итог чека. Для одиночной оплаты можно опустить — сервер запишет один платёж зеркально. array of SalePaymentInputDto |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID чека |
companyIdrequired | string | ID компании |
shiftIdrequired | string | ID кассовой смены |
numberrequired | number | Номер чека (сквозной по компании) |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь чек, % |
totalrequired | number | Итог к оплате, копейки |
paymentMethodrequired | stringValues: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtrequired | string | null | Уточнение способа оплаты |
receivedAmountrequired | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdrequired | string | ID кассира |
refundOfSaleIdrequired | string | null | ID исходного чека; заполнен только у возврата |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
channelrequired | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtrequired | string (date-time) | Момент продажи (ISO 8601) |
linesrequired | SaleLineResponse[] | Позиции чека array of SaleLineResponse |
paymentsrequired | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) array of 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}
Получить продажу.
- Scopes
sales:read- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID чека |
companyIdrequired | string | ID компании |
shiftIdrequired | string | ID кассовой смены |
numberrequired | number | Номер чека (сквозной по компании) |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь чек, % |
totalrequired | number | Итог к оплате, копейки |
paymentMethodrequired | stringValues: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtrequired | string | null | Уточнение способа оплаты |
receivedAmountrequired | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdrequired | string | ID кассира |
refundOfSaleIdrequired | string | null | ID исходного чека; заполнен только у возврата |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
channelrequired | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtrequired | string (date-time) | Момент продажи (ISO 8601) |
linesrequired | SaleLineResponse[] | Позиции чека array of SaleLineResponse |
paymentsrequired | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) array of 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.
- Scopes
sales:write- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID чека |
companyIdrequired | string | ID компании |
shiftIdrequired | string | ID кассовой смены |
numberrequired | number | Номер чека (сквозной по компании) |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь чек, % |
totalrequired | number | Итог к оплате, копейки |
paymentMethodrequired | stringValues: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtrequired | string | null | Уточнение способа оплаты |
receivedAmountrequired | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdrequired | string | ID кассира |
refundOfSaleIdrequired | string | null | ID исходного чека; заполнен только у возврата |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
channelrequired | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtrequired | string (date-time) | Момент продажи (ISO 8601) |
linesrequired | SaleLineResponse[] | Позиции чека array of SaleLineResponse |
paymentsrequired | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) array of 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
Открыть смену.
- Scopes
sales:write- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
openingCashrequired | number | Начальная сумма наличных в копейках Example: 500000 |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID смены |
companyIdrequired | string | ID компании |
numberrequired | number | Номер смены (сквозной по компании) |
openedAtrequired | string (date-time) | Открыта (ISO 8601) |
closedAtrequired | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashrequired | number | Начальная сумма в копейках |
statusrequired | stringValues: openclosed | Статус смены |
openedByIdrequired | string | ID сотрудника, открывшего смену |
closedByIdrequired | 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`.
- Scopes
sales:read- Component
cashier
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID смены |
companyIdrequired | string | ID компании |
numberrequired | number | Номер смены (сквозной по компании) |
openedAtrequired | string (date-time) | Открыта (ISO 8601) |
closedAtrequired | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashrequired | number | Начальная сумма в копейках |
statusrequired | stringValues: openclosed | Статус смены |
openedByIdrequired | string | ID сотрудника, открывшего смену |
closedByIdrequired | 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}
Получить смену.
- Scopes
sales:read- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID смены |
companyIdrequired | string | ID компании |
numberrequired | number | Номер смены (сквозной по компании) |
openedAtrequired | string (date-time) | Открыта (ISO 8601) |
closedAtrequired | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashrequired | number | Начальная сумма в копейках |
statusrequired | stringValues: openclosed | Статус смены |
openedByIdrequired | string | ID сотрудника, открывшего смену |
closedByIdrequired | 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.
- Scopes
sales:write- Component
cashier
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
closingCash | number | Фактический остаток наличных в копейках |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID смены |
companyIdrequired | string | ID компании |
numberrequired | number | Номер смены (сквозной по компании) |
openedAtrequired | string (date-time) | Открыта (ISO 8601) |
closedAtrequired | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashrequired | number | Начальная сумма в копейках |
statusrequired | stringValues: openclosed | Статус смены |
openedByIdrequired | string | ID сотрудника, открывшего смену |
closedByIdrequired | 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
Список складов.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: namecreatedAt | |
order | query | stringValues: ascdesc |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | WarehouseListItemResponse[] | array of WarehouseListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать склад.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
namerequired | string | Название склада Example: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID склада |
companyIdrequired | string | ID компании |
namerequired | string | Название склада |
addressrequired | string | null | Адрес склада |
isDefaultrequired | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Получить склад.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID склада |
companyIdrequired | string | ID компании |
namerequired | string | Название склада |
addressrequired | string | null | Адрес склада |
isDefaultrequired | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Изменить склад.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
name | string | Название склада Example: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID склада |
companyIdrequired | string | ID компании |
namerequired | string | Название склада |
addressrequired | string | null | Адрес склада |
isDefaultrequired | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Удалить склад.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
204No content
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
Список поставщиков.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: namecreatedAt | |
order | query | stringValues: ascdesc |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | SupplierResponse[] | array of SupplierResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать поставщика.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
namerequired | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID поставщика |
companyIdrequired | string | ID компании |
namerequired | string | Название поставщика |
contactNamerequired | string | null | Контактное лицо |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
innrequired | string | null | ИНН |
addressrequired | string | null | Адрес |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Получить поставщика.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID поставщика |
companyIdrequired | string | ID компании |
namerequired | string | Название поставщика |
contactNamerequired | string | null | Контактное лицо |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
innrequired | string | null | ИНН |
addressrequired | string | null | Адрес |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Изменить поставщика.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
name | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID поставщика |
companyIdrequired | string | ID компании |
namerequired | string | Название поставщика |
contactNamerequired | string | null | Контактное лицо |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
innrequired | string | null | ИНН |
addressrequired | string | null | Адрес |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | 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}
Удалить поставщика.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
204No content
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
Остатки по товарам.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: productNameproductSkuqtyupdatedAt | |
order | query | stringValues: ascdesc | |
warehouseId | query | string | Фильтр по складу |
categoryId | query | string | Фильтр по категории товара |
level | query | stringValues: alllownegativereorder | |
groupBy | query | stringValues: product | Режим агрегации: product — сводка по сети (W4) |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | StockListItemResponse[] | array of StockListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Скорректировать остаток (инвентаризация).
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
productIdrequired | string | |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
warehouseIdrequired | string | |
targetQtyrequired | number | Новое значение остатка (целое число, может быть отрицательным). |
reasonrequired | string | Причина корректировки (обязательно). |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID записи остатка |
productIdrequired | string | ID товара |
productNamerequired | string | Название товара |
productSkurequired | string | Артикул товара |
variantIdrequired | string | null | ID варианта товара; null — товар без вариантов |
variantSkurequired | string | null | Артикул варианта |
variantAttributesrequired | object | null | Атрибуты варианта: { "color": "red", "size": "M" } dictionary of string |
categoryIdrequired | string | null | ID категории товара |
categoryNamerequired | string | null | Название категории |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
qtyrequired | number | Физический остаток |
reservedrequired | number | Зарезервировано под незавершённые заказы |
availablerequired | number | Свободно к продаже: qty − reserved |
reorderPointrequired | number | Порог дозаказа (0 — не задан) |
isLowStockrequired | boolean | Остаток на пороге или ниже |
updatedAtrequired | 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
Список приёмок.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: createdAtdatenumbertotalQtytotalAmount | |
order | query | stringValues: ascdesc | |
status | query | stringValues: postedcancelled | |
warehouseId | query | string | |
supplierId | query | string | |
dateFrom | query | string | Дата приёмки от (ISO 8601) |
dateTo | query | string | Дата приёмки до (ISO 8601) |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | ReceiptListItemResponse[] | array of ReceiptListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать приёмку.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
warehouseIdrequired | string (uuid) | ID склада |
supplierId | string (uuid) | null | ID поставщика |
purchaseOrderId | string (uuid) | null | ID заказа поставщику (W3) |
date | string | Дата приёмки (ISO 8601) |
note | string | null | Комментарий к приёмке |
itemsrequired | ReceiptLineInputDto[] | Позиции приёмки array of ReceiptLineInputDto |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID приёмки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер приёмки (сквозной по компании) |
statusrequired | stringValues: postedcancelled | Статус приёмки |
daterequired | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
supplierIdrequired | string | null | ID поставщика |
supplierNamerequired | string | null | Название поставщика |
purchaseOrderIdrequired | string | null | ID заказа поставщику, по которому пришёл товар |
noterequired | string | null | Комментарий к приёмке |
totalQtyrequired | number | Сумма qty по всем позициям |
totalAmountrequired | number | Сумма приёмки в копейках |
createdByIdrequired | string | ID сотрудника-автора |
createdByNamerequired | string | Имя сотрудника-автора |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
linesrequired | ReceiptLineResponse[] | Позиции приёмки array of 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}
Получить приёмку.
- Scopes
warehouse:read- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID приёмки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер приёмки (сквозной по компании) |
statusrequired | stringValues: postedcancelled | Статус приёмки |
daterequired | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
supplierIdrequired | string | null | ID поставщика |
supplierNamerequired | string | null | Название поставщика |
purchaseOrderIdrequired | string | null | ID заказа поставщику, по которому пришёл товар |
noterequired | string | null | Комментарий к приёмке |
totalQtyrequired | number | Сумма qty по всем позициям |
totalAmountrequired | number | Сумма приёмки в копейках |
createdByIdrequired | string | ID сотрудника-автора |
createdByNamerequired | string | Имя сотрудника-автора |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
linesrequired | ReceiptLineResponse[] | Позиции приёмки array of 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.
- Scopes
warehouse:write- Component
warehouse
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID приёмки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер приёмки (сквозной по компании) |
statusrequired | stringValues: postedcancelled | Статус приёмки |
daterequired | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
supplierIdrequired | string | null | ID поставщика |
supplierNamerequired | string | null | Название поставщика |
purchaseOrderIdrequired | string | null | ID заказа поставщику, по которому пришёл товар |
noterequired | string | null | Комментарий к приёмке |
totalQtyrequired | number | Сумма qty по всем позициям |
totalAmountrequired | number | Сумма приёмки в копейках |
createdByIdrequired | string | ID сотрудника-автора |
createdByNamerequired | string | Имя сотрудника-автора |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
linesrequired | ReceiptLineResponse[] | Позиции приёмки array of 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
Список ресурсов (кабинеты, мастера, юниты).
- Scopes
scheduling:read- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: nametypecreatedAt | |
order | query | stringValues: ascdesc | |
type | query | stringValues: staffseatunitequipment | |
serviceId | query | string | S7: только ресурсы, оказывающие эту услугу (или агностики). |
activeOnly | query | boolean |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | ResourceResponse[] | array of ResourceResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать ресурс.
- Scopes
scheduling:write- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно Default: 1 |
seats | number | Сколько гостей вмещает площадка (зал, веранда, беседка). Отличается от `capacity`: та говорит, сколько броней ресурса идут одновременно. |
color | string | Цвет в календаре (HEX) Example: #0ea5e9 |
bufferMinutes | number | Буфер между бронями, минут Default: 0 |
minDurationMinutes | number | Минимальная длительность брони, минут |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели array of ResourceAvailabilityWindowDto |
userId | string (uuid) | Учётка сотрудника за ресурсом (мастер салона): из неё подставляется ответственный записи, чтобы комиссия считалась по тому же человеку. |
note | string | Внутренняя заметка |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID ресурса |
companyIdrequired | string | ID компании |
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacityrequired | number | Сколько броней ресурс держит одновременно |
seatsrequired | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorrequired | string | null | Цвет в календаре (HEX) |
bufferMinutesrequired | number | Буфер между бронями, минут |
minDurationMinutesrequired | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityrequired | object[] | Окна доступности по дням недели: [{ weekday, from, to }] array of object |
isActiverequired | boolean | Ресурс активен и доступен для записи |
housekeepingStaterequired | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdrequired | string | null | Учётка сотрудника за ресурсом (мастер) |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить ресурс.
- Scopes
scheduling:read- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID ресурса |
companyIdrequired | string | ID компании |
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacityrequired | number | Сколько броней ресурс держит одновременно |
seatsrequired | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorrequired | string | null | Цвет в календаре (HEX) |
bufferMinutesrequired | number | Буфер между бронями, минут |
minDurationMinutesrequired | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityrequired | object[] | Окна доступности по дням недели: [{ weekday, from, to }] array of object |
isActiverequired | boolean | Ресурс активен и доступен для записи |
housekeepingStaterequired | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdrequired | string | null | Учётка сотрудника за ресурсом (мастер) |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить ресурс.
- Scopes
scheduling:write- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
type | stringValues: staffseatunitequipment | Тип ресурса |
name | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно |
seats | number | null | Число мест площадки; null — снять. |
color | string | null | Цвет в календаре (HEX) |
bufferMinutes | number | Буфер между бронями, минут |
minDurationMinutes | number | null | Минимальная длительность брони, минут; null — без ограничения |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели array of ResourceAvailabilityWindowDto |
isActive | boolean | Ресурс активен и доступен для записи |
housekeepingState | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (ручная установка). |
userId | string (uuid) | null | Учётка сотрудника за ресурсом (null — отвязать). |
note | string | null | Внутренняя заметка |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID ресурса |
companyIdrequired | string | ID компании |
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacityrequired | number | Сколько броней ресурс держит одновременно |
seatsrequired | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorrequired | string | null | Цвет в календаре (HEX) |
bufferMinutesrequired | number | Буфер между бронями, минут |
minDurationMinutesrequired | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityrequired | object[] | Окна доступности по дням недели: [{ weekday, from, to }] array of object |
isActiverequired | boolean | Ресурс активен и доступен для записи |
housekeepingStaterequired | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdrequired | string | null | Учётка сотрудника за ресурсом (мастер) |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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
Свободные и занятые слоты ресурса на день.
- Scopes
scheduling:read- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
resourceIdrequired | query | string | |
serviceId | query | string | |
daterequired | query | string | Дата YYYY-MM-DD |
Responses
200| Field | Type | Description |
|---|---|---|
startAtrequired | string (date-time) | |
endAtrequired | string (date-time) | |
freerequired | 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
Список броней.
- Scopes
scheduling:read- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Текстовый поиск. |
sort | query | stringValues: startAtcreatedAtnumber | |
order | query | stringValues: ascdesc | |
resourceId | query | string | |
status | query | stringValues: pendingconfirmedcompletedno_showcancelled | |
assignedToId | query | string | |
clientId | query | string | |
from | query | string | Начало от (ISO 8601) |
to | query | string | Начало до (ISO 8601) |
classesOnly | query | boolean | Только групповые занятия (с вместимостью). |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | BookingListItemResponse[] | array of BookingListItemResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Создать бронь (с проверкой пересечений и вместимости ресурса).
- Scopes
scheduling:write- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
resourceIdrequired | string | ID ресурса |
startAtrequired | 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 | Депозит в копейках Default: 0 |
depositStatus | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | Вместимость группового занятия (число мест); опускается для обычной брони. |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Доп.ресурсы мультиресурсной брони (S8); guard по каждому. array of string |
address | string | Адрес проведения (выезд). Не задан при привязке к сделке — подставляется адрес сделки. |
note | string | Внутренний комментарий |
Responses
201| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
companyIdrequired | string | ID компании |
numberrequired | number | Номер брони (сквозной по компании) |
resourceIdrequired | string | ID ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
customerNamerequired | string | null | Имя клиента (если без карточки) |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги каталога |
assignedToIdrequired | string | null | ID исполнителя |
pricerequired | number | Цена брони в копейках (P0.4) |
saleIdrequired | string | null | ID чека, в который конвертирована бронь |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityrequired | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassrequired | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressrequired | string | null | Адрес проведения (выездная смена) |
noterequired | string | null | Внутренний комментарий |
visitNoterequired | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdrequired | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtrequired | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdrequired | string | null | ID серии повторяющихся броней |
rentalStaterequired | string | nullValues: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtrequired | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtrequired | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoterequired | string | null | Заметка при возврате из проката |
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtrequired | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Получить бронь.
- Scopes
scheduling:read- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
companyIdrequired | string | ID компании |
numberrequired | number | Номер брони (сквозной по компании) |
resourceIdrequired | string | ID ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
customerNamerequired | string | null | Имя клиента (если без карточки) |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги каталога |
assignedToIdrequired | string | null | ID исполнителя |
pricerequired | number | Цена брони в копейках (P0.4) |
saleIdrequired | string | null | ID чека, в который конвертирована бронь |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityrequired | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassrequired | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressrequired | string | null | Адрес проведения (выездная смена) |
noterequired | string | null | Внутренний комментарий |
visitNoterequired | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdrequired | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtrequired | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdrequired | string | null | ID серии повторяющихся броней |
rentalStaterequired | string | nullValues: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtrequired | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtrequired | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoterequired | string | null | Заметка при возврате из проката |
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtrequired | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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}
Изменить бронь.
- Scopes
scheduling:write- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
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 | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | null | Вместимость группового занятия (null — снять групповой режим). |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Полная замена доп.ресурсов мультиресурсной брони (S8). array of string |
address | string | null | Адрес проведения (выезд); null — снять адрес. |
note | string | null | Внутренний комментарий |
visitNote | string | null | Заметка мастера по визиту (формула, результат работы, пожелания). Разрешена и после завершения записи — её пишут по факту приёма. |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
companyIdrequired | string | ID компании |
numberrequired | number | Номер брони (сквозной по компании) |
resourceIdrequired | string | ID ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
customerNamerequired | string | null | Имя клиента (если без карточки) |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги каталога |
assignedToIdrequired | string | null | ID исполнителя |
pricerequired | number | Цена брони в копейках (P0.4) |
saleIdrequired | string | null | ID чека, в который конвертирована бронь |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityrequired | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassrequired | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressrequired | string | null | Адрес проведения (выездная смена) |
noterequired | string | null | Внутренний комментарий |
visitNoterequired | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdrequired | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtrequired | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdrequired | string | null | ID серии повторяющихся броней |
rentalStaterequired | string | nullValues: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtrequired | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtrequired | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoterequired | string | null | Заметка при возврате из проката |
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtrequired | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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
Сменить статус брони.
- Scopes
scheduling:write- Component
scheduling
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description |
|---|---|---|
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Целевой статус брони |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
companyIdrequired | string | ID компании |
numberrequired | number | Номер брони (сквозной по компании) |
resourceIdrequired | string | ID ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
customerNamerequired | string | null | Имя клиента (если без карточки) |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги каталога |
assignedToIdrequired | string | null | ID исполнителя |
pricerequired | number | Цена брони в копейках (P0.4) |
saleIdrequired | string | null | ID чека, в который конвертирована бронь |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityrequired | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassrequired | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressrequired | string | null | Адрес проведения (выездная смена) |
noterequired | string | null | Внутренний комментарий |
visitNoterequired | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdrequired | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtrequired | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdrequired | string | null | ID серии повторяющихся броней |
rentalStaterequired | string | nullValues: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtrequired | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtrequired | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoterequired | string | null | Заметка при возврате из проката |
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtrequired | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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`.
- Scopes
calendar:read- Component
calendar
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
from | query | string | Начало периода (ISO 8601, включается) |
to | query | string | Конец периода (ISO 8601, не включается) |
kind | query | stringValues: eventwork_shiftday_offtaskreminder | |
userId | query | string | ID участника/создателя для фильтра |
companyWide | query | boolean | true=только события компании, false=только личные |
search | query | string | Поиск по заголовку (case-insensitive) |
Responses
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
Создать событие.
- Scopes
calendar:write- Component
calendar
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAtrequired | string | Начало события (ISO 8601) | |||||||||||||||
endAtrequired | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день Default: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании Default: false | |||||||||||||||
color | string | null | Цвет события (HEX) Example: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события array of string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
Responses
201| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ID события | |||||||||||||||
companyIdrequired | string | ID компании | |||||||||||||||
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
descriptionrequired | string | null | Описание | |||||||||||||||
startAtrequired | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtrequired | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayrequired | boolean | Событие на весь день | |||||||||||||||
isCompanyWiderequired | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorrequired | string | null | Цвет (HEX) | |||||||||||||||
locationrequired | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforerequired | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDonerequired | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtrequired | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdrequired | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsrequired | string[] | ID участников события array of string | |||||||||||||||
createdAtrequired | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtrequired | 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}
Получить событие.
- Scopes
calendar:read- Component
calendar
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ID события | |||||||||||||||
companyIdrequired | string | ID компании | |||||||||||||||
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
descriptionrequired | string | null | Описание | |||||||||||||||
startAtrequired | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtrequired | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayrequired | boolean | Событие на весь день | |||||||||||||||
isCompanyWiderequired | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorrequired | string | null | Цвет (HEX) | |||||||||||||||
locationrequired | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforerequired | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDonerequired | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtrequired | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdrequired | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsrequired | string[] | ID участников события array of string | |||||||||||||||
createdAtrequired | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtrequired | 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}
Изменить событие.
- Scopes
calendar:write- Component
calendar
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Request body
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
title | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAt | string | Начало события (ISO 8601) | |||||||||||||||
endAt | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день Default: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании Default: false | |||||||||||||||
color | string | null | Цвет события (HEX) Example: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события array of string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
Responses
200| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ID события | |||||||||||||||
companyIdrequired | string | ID компании | |||||||||||||||
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
descriptionrequired | string | null | Описание | |||||||||||||||
startAtrequired | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtrequired | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayrequired | boolean | Событие на весь день | |||||||||||||||
isCompanyWiderequired | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorrequired | string | null | Цвет (HEX) | |||||||||||||||
locationrequired | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforerequired | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDonerequired | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtrequired | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdrequired | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsrequired | string[] | ID участников события array of string | |||||||||||||||
createdAtrequired | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtrequired | 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}
Удалить событие.
- Scopes
calendar:write- Component
calendar
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string | |
X-Idempotency-Key | header | string (uuid) | UUID запроса. Повтор с тем же ключом в течение 7 дней вернёт сохранённый ответ вместо второго заказа или продажи; пока первый запрос не завершён — 409 `IDEMPOTENCY_IN_FLIGHT`. |
Responses
204No content
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
Журнал действий компании.
- Scopes
audit:read- Component
core
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
entity | query | string | Фильтр по типу сущности |
action | query | stringValues: 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 | stringValues: createdAt | |
order | query | stringValues: ascdesc |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | AuditLogResponse[] | array of AuditLogResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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
Список сотрудников.
- Scopes
users:read- Component
core
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | number | |
pageSize | query | number | |
search | query | string | Поиск по email/имени/фамилии |
role | query | stringValues: adminmanageremployeedirector | |
status | query | numberValues: 0123 | |
sort | query | stringValues: lastNameemailrolestatuscreatedAtupdatedAt | |
order | query | stringValues: ascdesc |
Responses
200| Field | Type | Description |
|---|---|---|
itemsrequired | UserResponse[] | array of UserResponse |
totalrequired | integer | Всего записей по фильтру |
pagerequired | integer | Номер страницы, с 1 |
pageSizerequired | 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}
Получить сотрудника.
- Scopes
users:read- Component
core
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
idrequired | path | string |
Responses
200| Field | Type | Description |
|---|---|---|
idrequired | string | ID сотрудника |
firstNamerequired | string | Имя |
lastNamerequired | string | Фамилия |
emailrequired | string | E-mail (логин) |
rolerequired | stringValues: adminmanageremployeedirector | Роль-персона (admin, manager, employee…) |
roleIdrequired | string | null | Роль компании |
roleNamerequired | string | null | Название роли |
companyIdrequired | string | ID компании |
statusrequired | number | Статус: 0=Registered, 1=Active, 2=Blocked, 3=Deleted |
aboutrequired | string | null | О себе |
phonerequired | string | null | Телефон |
timezonerequired | string | null | Часовой пояс (IANA, например Europe/Moscow) |
avatarFileIdrequired | string | null | ID файла аватара |
avatarUrlrequired | string | null | URL аватара |
twoFactorEnabledrequired | boolean | Включена двухфакторная аутентификация |
ipRestrictionEnabledrequired | boolean | Сотрудник ограничил себе вход списком IP-адресов. |
emailVerifiedAtrequired | string (date-time) | null | Когда подтверждён e-mail (ISO 8601) |
createdAtrequired | string (date-time) | |
updatedAtrequired | 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`.Data schemas
AdjustStockDto
| Field | Type | Description |
|---|---|---|
productIdrequired | string | |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
warehouseIdrequired | string | |
targetQtyrequired | number | Новое значение остатка (целое число, может быть отрицательным). |
reasonrequired | string | Причина корректировки (обязательно). |
AssignLeadDto
| Field | Type | Description |
|---|---|---|
assigneeIdrequired | string (uuid) | null | ID сотрудника или null для снятия ответственного. |
AttributeDefinitionResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID характеристики |
companyIdrequired | string | ID компании |
namerequired | string | Название характеристики |
typerequired | stringValues: colorstringnumberoption_setboolean | Тип значения: определяет, какое поле заполняется в значении |
isPrimaryrequired | boolean | Основная характеристика: показывается в карточке и списках |
categoryIdrequired | string | null | ID категории, к которой привязана; null — общая |
positionrequired | number | Порядок в списке |
optionsrequired | AttributeOptionResponse[] | Варианты значений (для типа select) array of AttributeOptionResponse |
createdAtrequired | string (date-time) | Создана (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлена (ISO 8601) |
AttributeOptionResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID опции |
attributeIdrequired | string | ID характеристики |
valuerequired | string | Значение опции |
positionrequired | number | Порядок в списке |
createdAtrequired | string (date-time) | Создана (ISO 8601) |
AuditActorResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID сотрудника |
firstNamerequired | string | Имя |
lastNamerequired | string | Фамилия |
emailrequired | string |
AuditLogResponse
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ID записи | |||||||||||||||
companyIdrequired | string | ID компании | |||||||||||||||
actorIdrequired | string (uuid) | null | ID сотрудника-инициатора; null — системное действие | |||||||||||||||
actorrequired | object | Сотрудник-инициатор; null — системное действие или сотрудник удалён
| |||||||||||||||
actionrequired | stringValues: 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 | Действие | |||||||||||||||
entityrequired | string | Имя сущности, к которой относится действие | |||||||||||||||
entityIdrequired | string | null | ID затронутой сущности | |||||||||||||||
payloadrequired | object | null | Детали действия — произвольный JSON, состав зависит от действияobject | |||||||||||||||
iprequired | string | null | IP-адрес инициатора | |||||||||||||||
createdAtrequired | string (date-time) | Момент действия (ISO 8601) |
BookingListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
numberrequired | number | Номер брони |
resourceIdrequired | string | ID ресурса |
resourceNamerequired | string | Название ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя клиента |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги |
serviceNamerequired | string | null | Название услуги |
assignedToIdrequired | string | null | ID исполнителя |
assignedToNamerequired | string | null | Имя исполнителя |
capacityrequired | number | null | Мест в занятии. null — обычная бронь без ростера. |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
BookingResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID брони |
companyIdrequired | string | ID компании |
numberrequired | number | Номер брони (сквозной по компании) |
resourceIdrequired | string | ID ресурса |
startAtrequired | string (date-time) | Начало (ISO 8601) |
endAtrequired | string (date-time) | Окончание (ISO 8601) |
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Статус брони |
sourcerequired | stringValues: adminpublic_linkchannel | Откуда создана бронь |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
customerNamerequired | string | null | Имя клиента (если без карточки) |
customerPhonerequired | string | null | Телефон клиента |
dealIdrequired | string | null | ID связанной сделки |
serviceIdrequired | string | null | ID услуги каталога |
assignedToIdrequired | string | null | ID исполнителя |
pricerequired | number | Цена брони в копейках (P0.4) |
saleIdrequired | string | null | ID чека, в который конвертирована бронь |
depositAmountrequired | number | Залог в копейках |
depositStatusrequired | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacityrequired | number | null | Мест в групповом занятии; null — обычная бронь |
isOpenClassrequired | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
addressrequired | string | null | Адрес проведения (выездная смена) |
noterequired | string | null | Внутренний комментарий |
visitNoterequired | string | null | Заметка мастера по визиту (формула, результат работы, пожелания) |
clientPackageIdrequired | string | null | Абонемент, с которого списан визит за эту запись |
packageConsumedAtrequired | string (date-time) | null | Когда списан визит с абонемента (ISO 8601) |
recurrenceIdrequired | string | null | ID серии повторяющихся броней |
rentalStaterequired | string | nullValues: reservedissuedreturned | Состояние проката (выдано/возвращено); null — не прокат |
issuedAtrequired | string (date-time) | null | Когда выдано в прокат (ISO 8601) |
returnedAtrequired | string (date-time) | null | Когда возвращено из проката (ISO 8601) |
returnNoterequired | string | null | Заметка при возврате из проката |
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) |
confirmedAtrequired | string (date-time) | null | Когда клиент подтвердил визит (ISO 8601) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
CalendarEventInstanceResponse
| Field | Type | Description |
|---|---|---|
originIdrequired | string | ID master-события (одинаков для всех инстансов серии) |
companyIdrequired | string | ID компании |
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события |
titlerequired | string | Заголовок события |
descriptionrequired | string | null | Описание |
startAtrequired | string (date-time) | Начало инстанса (ISO 8601) |
endAtrequired | string (date-time) | Окончание инстанса (ISO 8601) |
allDayrequired | boolean | Событие на весь день |
isCompanyWiderequired | boolean | Видно всем сотрудникам компании |
colorrequired | string | null | Цвет (HEX) |
locationrequired | string | null | Место проведения |
isRecurringInstancerequired | boolean | Инстанс развёрнут из повторяющейся серии, а не разовое событие |
isDonerequired | boolean | Событие отмечено выполненным |
createdByIdrequired | string | ID сотрудника-автора |
attendeeIdsrequired | string[] | ID участников события array of string |
CalendarEventResponse
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ID события | |||||||||||||||
companyIdrequired | string | ID компании | |||||||||||||||
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
descriptionrequired | string | null | Описание | |||||||||||||||
startAtrequired | string (date-time) | Начало (ISO 8601) | |||||||||||||||
endAtrequired | string (date-time) | Окончание (ISO 8601) | |||||||||||||||
allDayrequired | boolean | Событие на весь день | |||||||||||||||
isCompanyWiderequired | boolean | Видно всем сотрудникам компании | |||||||||||||||
colorrequired | string | null | Цвет (HEX) | |||||||||||||||
locationrequired | string | null | Место проведения | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBeforerequired | number | null | За сколько минут до начала прислать напоминание | |||||||||||||||
reminderSentAtrequired | string (date-time) | null | Когда отправлено напоминание (ISO 8601) | |||||||||||||||
isDonerequired | boolean | Событие отмечено выполненным | |||||||||||||||
doneAtrequired | string (date-time) | null | Когда отмечено выполненным (ISO 8601) | |||||||||||||||
createdByIdrequired | string | ID сотрудника-автора | |||||||||||||||
attendeeIdsrequired | string[] | ID участников события array of string | |||||||||||||||
createdAtrequired | string (date-time) | Создано (ISO 8601) | |||||||||||||||
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
CalendarRecurrenceDto
| Field | Type | Description |
|---|---|---|
freqrequired | stringValues: dailyweeklymonthly | Частота повторения |
intervalrequired | number | Шаг повторения: каждые N дней/недель/месяцев Default: 1 |
byWeekday | number[] | null | Дни недели для weekly: 0=вс, 1=пн, ..., 6=сб array of number |
until | string (date-time) | null | Дата окончания серии (ISO 8601); null — бессрочно |
CalendarRecurrenceResponse
| Field | Type | Description |
|---|---|---|
freqrequired | stringValues: dailyweeklymonthly | Частота повторения |
intervalrequired | number | Шаг повторения: каждые N дней/недель/месяцев |
byWeekdayrequired | number[] | null | Дни недели для weekly: 0=вс, 1=пн, ..., 6=сб array of number |
untilrequired | string (date-time) | null | Дата окончания серии (ISO 8601); null — бессрочно |
CategoryResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID категории |
companyIdrequired | string | ID компании |
parentIdrequired | string | null | ID родительской категории; null — корень |
namerequired | string | Название категории |
iconrequired | string | Имя иконки |
colorrequired | string | null | HEX цвета иконки |
bgrequired | string | null | HEX цвета фона иконки |
sortOrderrequired | number | Порядок сортировки |
prefixrequired | string | null | Префикс артикулов: A-Z, 1-4 символа Example: CFE |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
ChangeBookingStatusDto
| Field | Type | Description |
|---|---|---|
statusrequired | stringValues: pendingconfirmedcompletedno_showcancelled | Целевой статус брони |
ChangeDealStageDto
| Field | Type | Description |
|---|---|---|
stageIdrequired | string (uuid) | ID целевой стадии (в рамках того же типа сделки) |
lostReasonId | string (uuid) | null | ID причины проигрыша — при переходе на терминальную стадию с исходом Lost. |
ClientListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
tagsrequired | string[] | Теги array of string |
statusrequired | stringValues: activearchived | Статус клиента |
assignedToIdrequired | string | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
lastInteractionAtrequired | string (date-time) | null | Последнее взаимодействие (ISO 8601) |
ordersCountrequired | number | Число заказов клиента |
balancerequired | number | Баланс клиента, копейки (может быть < 0 = долг) |
totalSpentrequired | number | Совокупная выручка (LTV-прокси), копейки |
lastOrderAtrequired | string (date-time) | null | Последний заказ (ISO 8601) |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
ClientResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID клиента |
companyIdrequired | string | ID компании |
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | string | Отображаемое имя — ФИО для физлица, название для юрлица |
firstNamerequired | string | null | Имя |
lastNamerequired | string | null | Фамилия |
middleNamerequired | string | null | Отчество |
companyNamerequired | string | null | Название компании (юрлицо) |
positionrequired | string | null | Должность контактного лица |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
telegramChatIdrequired | string | null | Telegram chat id для исходящих сообщений |
whatsappPhonerequired | string | null | Номер WhatsApp; null — используется phone |
innrequired | string | null | ИНН (B2B) |
kpprequired | string | null | КПП (B2B) |
legalAddressrequired | string | null | Юр. адрес (B2B) |
bankDetailsrequired | string | null | Банковские реквизиты строкой (B2B) |
noterequired | string | null | Внутренняя заметка |
tagsrequired | string[] | Теги array of string |
birthdayrequired | string (date) | null | Дата рождения / основания (ISO 8601) |
statusrequired | stringValues: activearchived | Статус клиента |
balancerequired | number | Баланс/абонемент в копейках |
pointsrequired | number | Баллы лояльности (копейки-эквивалент) |
contractNumberrequired | string | null | Номер договора (B2B) |
groupIdrequired | string | null | ID группы контрагентов (опт) |
priceListIdrequired | string | null | ID персонального прайс-листа (опт) |
paymentTermsDaysrequired | number | null | Срок оплаты по договору, дни |
creditLimitrequired | number | Кредитный лимит B2B в копейках (0 — без лимита) |
slaHoursrequired | number | null | SLA по договору, часы |
marketingConsentrequired | boolean | Согласие на маркетинговые рассылки |
marketingConsentAtrequired | string (date-time) | null | Когда дано согласие на рассылки (ISO 8601) |
marketingConsentSourcerequired | string | null | Откуда получено согласие (форма, оператор…) |
anonymizedAtrequired | string (date-time) | null | Дата анонимизации (право на забвение) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdByIdrequired | string | ID сотрудника-автора |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
CloseShiftDto
| Field | Type | Description |
|---|---|---|
closingCash | number | Фактический остаток наличных в копейках |
ConvertLeadToDealDto
| Field | Type | Description |
|---|---|---|
typeId | string | ID типа сделки; по умолчанию — тип-«лид». |
CreateBookingDto
| Field | Type | Description |
|---|---|---|
resourceIdrequired | string | ID ресурса |
startAtrequired | 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 | Депозит в копейках Default: 0 |
depositStatus | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | Вместимость группового занятия (число мест); опускается для обычной брони. |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Доп.ресурсы мультиресурсной брони (S8); guard по каждому. array of string |
address | string | Адрес проведения (выезд). Не задан при привязке к сделке — подставляется адрес сделки. |
note | string | Внутренний комментарий |
CreateCalendarEventDto
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kindrequired | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
titlerequired | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAtrequired | string | Начало события (ISO 8601) | |||||||||||||||
endAtrequired | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день Default: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании Default: false | |||||||||||||||
color | string | null | Цвет события (HEX) Example: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события array of string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
CreateCategoryDto
| Field | Type | Description |
|---|---|---|
namerequired | string | Название категории Example: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки Default: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки Default: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Example: CFE |
CreateClientDto
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: individuallegal | Физлицо или юрлицо |
displayNamerequired | 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[] | Теги array of 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
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
typeIdrequired | string | ID типа сделки | ||||||||||||||||||||||||||||||||||||
items | DealLineInputDto[] | Позиции сметы (товары и услуги) array of 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 | Скидка на всю сделку, % Default: 0 | ||||||||||||||||||||||||||||||||||||
intake | object | Снапшот приёмки (для типа intake)
|
CreateOrderDto
| Field | Type | Description |
|---|---|---|
itemsrequired | OrderLineInputDto[] | array of 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 | Default: 0 |
prepaidAmount | number | Предоплата (копейки) Default: 0 |
assignedToId | string | ID ответственного сотрудника |
CreateProductDto
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: CFE-0012 |
barcode | string | null | Штрихкод Example: 4607034630621 |
namerequired | string | Название товара Example: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } dictionary of string |
descriptionI18n | object | Переводы описания по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
pricerequired | number | Цена в копейках Example: 240000 |
cost | number | Себестоимость в копейках Default: 0 |
unit | string | Единица измерения (код) Default: 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 }] array of object |
isBundle | boolean | Комплект/набор (BOM) Default: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. array of object |
status | stringValues: activehidden | Статус карточки Default: active |
hasStock | boolean | Вести складской учёт остатков по товару Default: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Example: ☕ |
brand | string | null | Бренд Example: Lavazza |
model | string | null | Модель Example: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). array of ProductAttributeValueInput |
CreateReceiptDto
| Field | Type | Description |
|---|---|---|
warehouseIdrequired | string (uuid) | ID склада |
supplierId | string (uuid) | null | ID поставщика |
purchaseOrderId | string (uuid) | null | ID заказа поставщику (W3) |
date | string | Дата приёмки (ISO 8601) |
note | string | null | Комментарий к приёмке |
itemsrequired | ReceiptLineInputDto[] | Позиции приёмки array of ReceiptLineInputDto |
CreateResourceDto
| Field | Type | Description |
|---|---|---|
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно Default: 1 |
seats | number | Сколько гостей вмещает площадка (зал, веранда, беседка). Отличается от `capacity`: та говорит, сколько броней ресурса идут одновременно. |
color | string | Цвет в календаре (HEX) Example: #0ea5e9 |
bufferMinutes | number | Буфер между бронями, минут Default: 0 |
minDurationMinutes | number | Минимальная длительность брони, минут |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели array of ResourceAvailabilityWindowDto |
userId | string (uuid) | Учётка сотрудника за ресурсом (мастер салона): из неё подставляется ответственный записи, чтобы комиссия считалась по тому же человеку. |
note | string | Внутренняя заметка |
CreateSaleDto
| Field | Type | Description |
|---|---|---|
shiftIdrequired | string | |
itemsrequired | SaleLineInputDto[] | array of SaleLineInputDto |
discountPercent | number | Default: 0 |
paymentMethodrequired | stringValues: 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 = итог чека. Для одиночной оплаты можно опустить — сервер запишет один платёж зеркально. array of SalePaymentInputDto |
CreateServiceDto
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: SVC-0001 |
namerequired | string | Название услуги Example: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены Default: fixed |
pricerequired | number | Цена в копейках Example: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Example: 60 |
status | stringValues: activehidden | Статус карточки Default: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. array of ServiceCostItemInputDto |
CreateSupplierDto
| Field | Type | Description |
|---|---|---|
namerequired | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
CreateWarehouseDto
| Field | Type | Description |
|---|---|---|
namerequired | string | Название склада Example: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
DealIntakeDto
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: productservicepackage | |
refIdrequired | string | ID товара или услуги |
qtyrequired | number | Example: 1 |
unitPricerequired | number | Цена за единицу в копейках |
perGuestQty | number | Норма на одного гостя: 1 порция сет-меню — 1, две закуски на гостя — 2. Задана — количество пересчитывается от числа гостей мероприятия. Example: 2 |
DealLineResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID позиции |
dealIdrequired | string | ID сделки |
kindrequired | stringValues: productservicepackage | Товар или услуга |
productIdrequired | string | null | ID товара |
serviceIdrequired | string | null | ID услуги |
namerequired | string | Название (snapshot на момент добавления) |
qtyrequired | number | Количество |
unitPricerequired | number | Цена за единицу в копейках |
costrequired | number | Себестоимость за единицу в копейках |
lineTotalrequired | number | Стоимость позиции в копейках |
perGuestQtyrequired | number | null | Норма на одного гостя; null — количество от числа гостей не зависит |
DealListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
numberrequired | number | Номер сделки |
typeIdrequired | string | ID типа сделки |
typeNamerequired | string | Название типа сделки |
stageIdrequired | string | ID текущей стадии |
stageNamerequired | string | Название стадии |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
createdAtrequired | string (date-time) | |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
clientIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
addressrequired | string | null | Адрес выполнения |
itemsCountrequired | number | Сумма qty по всем позициям |
totalrequired | number | Итог в копейках |
costrequired | number | Себестоимость в копейках |
budgetrequired | number | null | Бюджет (копейки) |
assignedToIdrequired | string | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
sourceIdrequired | string | null | ID источника лида из справочника |
stageEnteredAtrequired | string (date-time) | null | Когда вошла в текущую стадию (для «дней в стадии» на доске). |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи; null — «без задачи». |
boardOrderrequired | number | null | Ручной порядок карточки в колонке доски; null — не сортировалась. |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null |
DealLostReasonResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID причины |
namerequired | string | Название причины |
isActiverequired | boolean | Активна: доступна при закрытии сделки |
positionrequired | number | Порядок в списке |
createdAtrequired | string (date-time) | Создана (ISO 8601) |
DealResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID сделки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер сделки (сквозной по компании) |
typeIdrequired | string | ID типа сделки |
stageIdrequired | string | ID текущей стадии |
checklistDonerequired | string[] | Выполненные пункты чек-листа: ключи вида `<stageId>:<index>` array of string |
outcomerequired | string | nullValues: wonlostdonecancelled | Исход: won/lost на терминальной стадии, иначе null |
clientIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
venueResourceIdrequired | string | null | ID площадки мероприятия (ресурс расписания) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя заказчика |
customerPhonerequired | string | null | Телефон заказчика |
customerEmailrequired | string | null | E-mail заказчика |
customerNoterequired | string | null | Пожелания заказчика |
channelrequired | string | null | Канал привлечения (manual|public_link|phone) |
sourcerequired | string | null | Источник строкой (интеграция/форма) |
sourceIdrequired | string | null | ID источника лида из справочника |
addressrequired | string | null | Адрес выполнения (для field_job) |
scheduledAtrequired | string (date-time) | null | Запланированное время (ISO 8601) |
dueAtrequired | string (date-time) | null | Срок исполнения (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на всю сделку, % |
totalrequired | number | Итог со скидкой, копейки |
costrequired | number | Себестоимость по позициям, копейки |
budgetrequired | number | null | Бюджет (копейки) |
budgetExceededAtrequired | string (date-time) | null | Когда себестоимость превысила бюджет (ISO 8601) |
headcountrequired | number | null | Число гостей мероприятия |
lostReasonIdrequired | string | null | ID причины проигрыша (терминальный Lost), иначе null. |
nextActionAtrequired | string (date-time) | null | Дедлайн ближайшей незакрытой задачи (next-action); null — «без задачи». |
stageEnteredAtrequired | string (date-time) | null | Когда сделка вошла в текущую стадию (D1). |
createdByIdrequired | string | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | DealLineResponse[] | Позиции сметы array of DealLineResponse |
DealStageResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID стадии |
sortOrderrequired | number | Порядок в пайплайне |
namerequired | string | Название стадии |
isInitialrequired | boolean | Начальная стадия для новых сделок |
terminalOutcomerequired | string | nullValues: wonlostdonecancelled | Исход терминальной стадии (won/lost); null — промежуточная |
kindrequired | string | nullValues: in_transiton_site | Семантика стадии для автоматики; null — обычная |
checklistrequired | object[] | null | Чек-лист стадии: [{ label, done? }] array of object |
wipLimitrequired | number | null | Мягкий лимит карточек в колонке доски (WIP) |
DealTypeResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID типа сделки |
aliasrequired | stringValues: sale_orderprojectproductionfield_jobleadintakemaintenanceevent | Системный алиас типа (sale_order, project, field_job, intake…) |
namerequired | string | Название типа |
featuresrequired | string[] | Включённые возможности типа (lines, payments, schedule, address…) array of string |
configrequired | object | Конфигурация типа (правила доски, печати, автоматики)object |
isActiverequired | boolean | Тип активен и доступен для новых сделок |
isSystemrequired | boolean | Системный тип: нельзя удалить |
availablerequired | boolean | Компонент типа включён у компании |
stagesrequired | DealStageResponse[] | Стадии пайплайна по порядку array of DealStageResponse |
ExternalErrorResponse
| Field | Type | Description |
|---|---|---|
statusCoderequired | number | HTTP-статус Example: 403 |
errorrequired | string | Название статуса Example: Forbidden |
messagerequired | string | Текст ошибки (английский) Example: Insufficient permissions. One of the following scopes is required: deals:write |
code | string | Машинный код ошибки (CAPS_ENUM) — по нему ветвится обработка на стороне интеграции Example: AUTH_API_SCOPE_INSUFFICIENT |
meta | object | Параметры ошибки: значения плейсхолдеров `message` (например, требуемые scope или алиас неактивного компонента) Example: {"scopes":"deals:write"}object |
timestamprequired | string | Момент ошибки, ISO 8601 |
pathrequired | string | Путь запроса Example: /api/external/v1/deals |
IntakeLeadDto
| Field | Type | Description |
|---|---|---|
name | string | Имя контакта |
phone | string | Телефон |
email | string | |
message | string | Текст обращения |
source | string | Источник (по умолчанию webhook). |
externalId | string | Внешний id для дедупа. |
utm | object | UTM-метки перехода: плоская карта строка → строка. dictionary of string |
LeadResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID лида |
sourcerequired | string | Источник: `api`, `public_form`, `telegram`… |
channelrequired | string | null | Канал внутри источника (например, имя формы или бота) |
namerequired | string | null | Имя контакта |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
messagerequired | string | null | Текст обращения |
statusrequired | stringValues: newin_progressconvertedspam | Статус обработки |
externalIdrequired | string | null | Внешний id из источника (для дедупликации) |
rawrequired | object | null | Сырой payload источника (для ручного разбора).object |
clientIdrequired | string (uuid) | null | ID клиента после конвертации |
dealIdrequired | string (uuid) | null | ID сделки после конвертации |
assignedToIdrequired | string (uuid) | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
utmrequired | object | null | UTM-метки перехода. dictionary of string |
createdAtrequired | string (date-time) | Создан (ISO 8601) |
LeadSourceResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | UUID источника |
namerequired | string | Название |
isActiverequired | boolean | Активен ли источник |
positionrequired | number | Порядок сортировки |
createdAtrequired | string (date-time) |
OpenShiftDto
| Field | Type | Description |
|---|---|---|
openingCashrequired | number | Начальная сумма наличных в копейках Example: 500000 |
OrderLineInputDto
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: productservicepackage | |
refIdrequired | string | ID товара или услуги |
variantId | string | Вариант товара (SKU-вариация) |
qtyrequired | number | Example: 1 |
unitPricerequired | number | Цена за единицу в копейках |
OrderLineResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID позиции |
orderIdrequired | string | ID заказа |
kindrequired | stringValues: productservicepackage | Товар или услуга |
productIdrequired | string | null | ID товара |
variantIdrequired | string | null | ID варианта товара (SKU-вариация) |
serviceIdrequired | string | null | ID услуги |
namerequired | string | Название (snapshot на момент добавления) |
qtyrequired | number | Количество |
unitPricerequired | number | Цена за единицу в копейках |
fulfilledQtyrequired | number | Отгружено/готово (O6) |
lineTotalrequired | number | Стоимость позиции в копейках |
OrderListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
numberrequired | number | Номер заказа |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
createdAtrequired | string (date-time) | |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
itemsCountrequired | number | Сумма qty по всем позициям |
subtotalrequired | number | Подытог в копейках |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог в копейках |
prepaidAmountrequired | number | Внесено (копейки) |
balanceDuerequired | number | Остаток к оплате (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
createdByNamerequired | string | null | Имя сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
assignedToNamerequired | string | null | Имя ответственного сотрудника |
OrderResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID заказа |
companyIdrequired | string | ID компании |
numberrequired | number | Номер заказа (сквозной по компании) |
statusrequired | stringValues: newconfirmedin_progressreadycompletedcancelled | Статус заказа |
paymentStatusrequired | stringValues: unpaidpartialpaidrefunded | Статус оплаты |
customerIdrequired | string | null | ID клиента |
assetIdrequired | string | null | ID объекта обслуживания (ClientAsset) |
addressIdrequired | string | null | ID адреса клиента (ClientAddress) |
addressLabelrequired | string | null | Название адреса клиента (denorm по addressId) |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
customerEmailrequired | string | null | E-mail покупателя |
customerNoterequired | string | null | Пожелания покупателя |
channelrequired | string | null | Канал привлечения |
sourcerequired | string | null | Источник (интеграция/форма) |
deliveryStatusrequired | string | nullValues: pendingpackingshippeddeliveredreturned | Статус доставки; null — без доставки |
deliveryMethodrequired | string | nullValues: pickupcourierpost | Способ доставки; null — без доставки |
deliveryCostrequired | number | Стоимость доставки (копейки) |
deliveryAddressTextrequired | string | null | Адрес доставки строкой |
dueAtrequired | string (date-time) | null | Срок (legacy, ISO 8601) |
readyByrequired | string (date-time) | null | Срок готовности (ISO 8601) |
payDueAtrequired | string (date-time) | null | Срок оплаты B2B-отсрочки (ISO 8601) |
noterequired | string | null | Внутренний комментарий |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь заказ, % |
totalrequired | number | Итог со скидкой, копейки |
prepaidAmountrequired | number | Предоплата (копейки) |
createdByIdrequired | string | null | ID сотрудника-автора |
assignedToIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
linesrequired | OrderLineResponse[] | Позиции заказа array of OrderLineResponse |
OrderStatus
stringnewconfirmedin_progressreadycompletedcancelledProductAttributeValueInput
| Field | Type | Description |
|---|---|---|
attributeIdrequired | string (uuid) | ID характеристики |
valueString | string | null | Строковое значение (тип text) |
valueNumber | number | null | Числовое значение (тип number) |
valueColor | string | null | Цвет HEX (тип color) Example: #1ABC9C |
colorName | string | nullValues: blackwhitegraydark_graylight_grayredorangelight_orangeyellowgoldgreenlight_greendark_greenlight_bluebluedark_blueindigopurplepinklight_pinkbrownbeigeburgundykhaki | Имя цвета из палитры NamedColor; пара с `valueColor`. |
valueBoolean | boolean | null | Логическое значение (тип boolean) |
optionId | string (uuid) | null | ID выбранной опции (тип select) |
ProductAttributeValueResponse
| Field | Type | Description |
|---|---|---|
attributeIdrequired | string | ID характеристики |
valueStringrequired | string | null | Строковое значение (тип text) |
valueNumberrequired | number | null | Числовое значение (тип number) |
valueColorrequired | string | null | Цвет HEX (тип color) |
colorNamerequired | string | null | Имя цвета из палитры NamedColor; пара с valueColor |
valueBooleanrequired | boolean | null | Логическое значение (тип boolean) |
optionIdrequired | string | null | ID выбранной опции (тип select) |
ProductResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID товара |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
barcoderequired | string | null | Штрихкод |
namerequired | string | Название товара |
descriptionrequired | string | null | Описание |
nameI18nrequired | object | Переводы названия по локали: { "de": "..." } dictionary of string |
descriptionI18nrequired | object | Переводы описания по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
brandrequired | string | null | Бренд |
modelrequired | string | null | Модель |
pricerequired | number | Цена в копейках |
costrequired | number | Себестоимость в копейках |
unitrequired | string | Единица измерения (код, денорм) |
unitIdrequired | string | null | ID единицы измерения из справочника |
packQtyrequired | number | null | Фасовка: кол-во packUnit в одной unit |
minOrderQtyrequired | number | null | Минимальная партия к заказу (опт); null — без ограничения |
orderStepQtyrequired | number | null | Кратность отгрузки (опт); null — любая |
packUnitIdrequired | string | null | ID единицы фасовки |
costComponentsrequired | object[] | Разбивка себестоимости: [{ label, productId?, qty?, unitId?, unitCost?, amount }] array of object |
isBundlerequired | boolean | Комплект/набор (BOM) |
modifierGroupsrequired | object[] | Группы модификаторов позиции с надбавками array of object |
statusrequired | stringValues: activehidden | Статус карточки |
hasStockrequired | boolean | Ведётся складской учёт остатков |
defaultSupplierIdrequired | string | null | ID поставщика по умолчанию (авто-дозаказ) |
emojirequired | string | null | Эмодзи-иконка |
photoFileIdrequired | string | null | ID файла основного фото |
thumbnailFileIdrequired | string | null | ID файла миниатюры |
attributeValuesrequired | ProductAttributeValueResponse[] | Значения характеристик array of ProductAttributeValueResponse |
stockQty | number | Суммарный остаток по складам компании (только при include=stock и hasStock). |
stockAvailable | number | Свободный остаток (qty − резервы) — при include=stock. |
isLowStock | boolean | Низкий запас (Σqty ≤ Σпорог дозаказа) — при include=stock. |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
ProductVariantResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID варианта |
companyIdrequired | string | ID компании |
productIdrequired | string | ID родительского товара |
skurequired | string | Артикул варианта |
barcoderequired | string | null | Штрихкод |
attributesrequired | object | Атрибуты варианта: { "color": "red", "size": "M" } dictionary of string |
pricerequired | number | Цена варианта в копейках |
costrequired | number | Себестоимость варианта в копейках |
statusrequired | stringValues: activehidden | Статус варианта |
stockQty | number | Суммарный остаток по складам (матрица). |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
ReceiptLineInputDto
| Field | Type | Description |
|---|---|---|
productIdrequired | string (uuid) | ID товара |
variantId | string | Вариант товара (SKU-вариация); опускается для товара без вариантов. |
qtyrequired | number | Количество Example: 1 |
unitCostrequired | number | Закупочная цена за единицу в копейках |
batchNumber | string | Номер партии (информационный учёт) |
expiryDate | string | Срок годности партии (ISO 8601) |
ReceiptLineResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID позиции |
receiptIdrequired | string | ID приёмки |
productIdrequired | string | ID товара |
variantIdrequired | string | null | ID варианта товара (SKU-вариация) |
productNamerequired | string | Название товара |
productSkurequired | string | Артикул товара |
qtyrequired | number | Количество |
unitCostrequired | number | Закупочная цена за единицу в копейках |
lineTotalrequired | number | Стоимость позиции в копейках |
ReceiptListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID приёмки |
numberrequired | number | Номер приёмки |
statusrequired | stringValues: postedcancelled | Статус приёмки |
daterequired | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
supplierIdrequired | string | null | ID поставщика |
supplierNamerequired | string | null | Название поставщика |
purchaseOrderIdrequired | string | null | ID заказа поставщику |
purchaseOrderNumberrequired | number | null | Номер заказа поставщику |
itemsCountrequired | number | Число позиций |
totalQtyrequired | number | Сумма qty по всем позициям |
totalAmountrequired | number | Сумма приёмки в копейках |
createdByIdrequired | string | ID сотрудника-автора |
createdByNamerequired | string | Имя сотрудника-автора |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
ReceiptResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID приёмки |
companyIdrequired | string | ID компании |
numberrequired | number | Номер приёмки (сквозной по компании) |
statusrequired | stringValues: postedcancelled | Статус приёмки |
daterequired | string (date-time) | Дата приёмки (ISO 8601) |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
supplierIdrequired | string | null | ID поставщика |
supplierNamerequired | string | null | Название поставщика |
purchaseOrderIdrequired | string | null | ID заказа поставщику, по которому пришёл товар |
noterequired | string | null | Комментарий к приёмке |
totalQtyrequired | number | Сумма qty по всем позициям |
totalAmountrequired | number | Сумма приёмки в копейках |
createdByIdrequired | string | ID сотрудника-автора |
createdByNamerequired | string | Имя сотрудника-автора |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
linesrequired | ReceiptLineResponse[] | Позиции приёмки array of ReceiptLineResponse |
ResourceAvailabilityWindowDto
| Field | Type | Description |
|---|---|---|
weekdayrequired | number | День недели: 0=вс … 6=сб |
fromrequired | string | Начало окна, HH:MM Example: 09:00 |
torequired | string | Конец окна, HH:MM Example: 18:00 |
ResourceResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID ресурса |
companyIdrequired | string | ID компании |
typerequired | stringValues: staffseatunitequipment | Тип ресурса |
namerequired | string | Название ресурса |
capacityrequired | number | Сколько броней ресурс держит одновременно |
seatsrequired | number | null | Сколько гостей вмещает площадка; null — неприменимо |
colorrequired | string | null | Цвет в календаре (HEX) |
bufferMinutesrequired | number | Буфер между бронями, минут |
minDurationMinutesrequired | number | null | Минимальная длительность брони, минут; null — без ограничения |
availabilityrequired | object[] | Окна доступности по дням недели: [{ weekday, from, to }] array of object |
isActiverequired | boolean | Ресурс активен и доступен для записи |
housekeepingStaterequired | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (для размещения) |
userIdrequired | string | null | Учётка сотрудника за ресурсом (мастер) |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
SaleLineInputDto
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: productservicepackage | |
refIdrequired | string | ID товара или услуги |
variantId | string | Вариант товара (SKU-вариация), если продаётся конкретный вариант (kind=product). |
packageHolderId | string | Кому выдать абонемент (kind=package), если платит не он сам: родитель оплачивает занятия ребёнка. Пусто — владельцем становится клиент чека. |
qtyrequired | number | Example: 1 |
unitPricerequired | number | Базовая цена за единицу в копейках |
modifiers | object[] | Выбранные модификаторы (P1.3b): [{ groupId, optionId }]. Надбавки считает сервер. array of object |
lineDiscountPercent | number | Построчная скидка в процентах (0..100) на позицию (K3) |
lineDiscountAmount | number | Построчная скидка фиксированной суммой за единицу, копейки (K3) |
SaleLineResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID позиции |
saleIdrequired | string | ID чека |
kindrequired | stringValues: productservicepackage | Товар или услуга |
productIdrequired | string | null | ID товара |
variantIdrequired | string | null | ID варианта товара (SKU-вариация) |
serviceIdrequired | string | null | ID услуги |
namerequired | string | Название (snapshot на момент продажи) |
qtyrequired | number | Количество |
unitPricerequired | number | Цена за единицу в копейках |
lineDiscountPercentrequired | number | Построчная скидка в процентах (K3) |
lineDiscountAmountrequired | number | Построчная скидка суммой за единицу, копейки (K3) |
lineTotalrequired | number | Стоимость позиции в копейках |
refundedQtyrequired | number | Сколько единиц уже возвращено предыдущими возвратами. Доступно к возврату — qty минус это число. |
modifiersrequired | object[] | null | Выбранные модификаторы (P1.3b); null — без них. array of object |
SaleListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID чека |
numberrequired | number | Номер чека |
createdAtrequired | string (date-time) | Момент продажи (ISO 8601) |
shiftIdrequired | string | ID кассовой смены |
shiftNumberrequired | number | Номер смены |
cashierIdrequired | string | ID кассира |
cashierNamerequired | string | Имя кассира |
itemsCountrequired | number | Сумма qty по всем позициям |
subtotalrequired | number | Подытог в копейках (со знаком) |
discountPercentrequired | number | Скидка на весь чек, % |
totalrequired | number | Итог в копейках (со знаком) |
paymentMethodrequired | stringValues: cashcardsbpmixed | Способ оплаты |
isRefundrequired | boolean | Чек возврата |
refundOfSaleIdrequired | string | null | ID исходного чека (у возврата) |
refundOfSaleNumberrequired | number | null | Номер исходного чека (у возврата) |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
SalePaymentInputDto
| Field | Type | Description |
|---|---|---|
methodrequired | stringValues: cashcardsbpmixed | |
amountrequired | number | Сумма платежа в копейках |
ext | string | Алиас интеграционного способа оплаты |
SalePaymentResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID платежа |
methodrequired | stringValues: cashcardsbpmixed | Способ оплаты |
amountrequired | number | Сумма платежа в копейках |
extrequired | string | null | Уточнение способа (эквайринг, СБП, сертификат…) |
SaleResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID чека |
companyIdrequired | string | ID компании |
shiftIdrequired | string | ID кассовой смены |
numberrequired | number | Номер чека (сквозной по компании) |
subtotalrequired | number | Сумма позиций до скидки, копейки |
discountPercentrequired | number | Скидка на весь чек, % |
totalrequired | number | Итог к оплате, копейки |
paymentMethodrequired | stringValues: cashcardsbpmixed | Основной способ оплаты (mixed — смешанная, см. payments) |
paymentMethodExtrequired | string | null | Уточнение способа оплаты |
receivedAmountrequired | number | null | Получено наличными в копейках (для расчёта сдачи) |
cashierIdrequired | string | ID кассира |
refundOfSaleIdrequired | string | null | ID исходного чека; заполнен только у возврата |
customerIdrequired | string | null | ID клиента |
customerNamerequired | string | null | Имя покупателя |
customerPhonerequired | string | null | Телефон покупателя |
channelrequired | string | null | Канал продажи (pos, qr_menu, storefront…) |
createdAtrequired | string (date-time) | Момент продажи (ISO 8601) |
linesrequired | SaleLineResponse[] | Позиции чека array of SaleLineResponse |
paymentsrequired | SalePaymentResponse[] | Платежи чека (несколько при смешанной оплате) array of SalePaymentResponse |
ServiceCostItemInputDto
| Field | Type | Description |
|---|---|---|
kindrequired | stringValues: materiallabor | Тип позиции |
productId | string (uuid) | null | UUID товара из справочника. null/undefined — freeform. |
namerequired | string | Название (snapshot) Example: Цемент М500 |
quantityrequired | number | Количество (десятичное) Example: 2.5 |
unitCostrequired | number | Себестоимость единицы, копейки Example: 50000 |
ServiceCostItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID позиции |
serviceIdrequired | string | ID услуги |
kindrequired | stringValues: materiallabor | Тип позиции |
productIdrequired | string | null | ID товара из справочника; null — freeform-позиция |
namerequired | string | Название (snapshot) |
quantityrequired | number | Количество (десятичное) |
unitCostrequired | number | Себестоимость единицы, копейки |
lineTotalrequired | number | Итог по строке, копейки |
positionrequired | number | Порядок в составе |
ServiceResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID услуги |
companyIdrequired | string | ID компании |
skurequired | string | Артикул |
namerequired | string | Название услуги |
nameI18nrequired | object | Переводы названия по локали dictionary of string |
categoryIdrequired | string | null | ID категории; null — без категории |
priceModelrequired | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены |
pricerequired | number | Цена в копейках |
durationMinutesrequired | number | null | Длительность, мин |
totalCostrequired | number | Сумма по составу затрат, копейки |
statusrequired | stringValues: activehidden | Статус карточки |
costItems | ServiceCostItemResponse[] | Состав затрат — присутствует в детальной выдаче array of ServiceCostItemResponse |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
ShiftResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID смены |
companyIdrequired | string | ID компании |
numberrequired | number | Номер смены (сквозной по компании) |
openedAtrequired | string (date-time) | Открыта (ISO 8601) |
closedAtrequired | string (date-time) | null | Закрыта (ISO 8601); null — смена открыта |
openingCashrequired | number | Начальная сумма в копейках |
statusrequired | stringValues: openclosed | Статус смены |
openedByIdrequired | string | ID сотрудника, открывшего смену |
closedByIdrequired | string | null | ID сотрудника, закрывшего смену |
StockListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID записи остатка |
productIdrequired | string | ID товара |
productNamerequired | string | Название товара |
productSkurequired | string | Артикул товара |
variantIdrequired | string | null | ID варианта товара; null — товар без вариантов |
variantSkurequired | string | null | Артикул варианта |
variantAttributesrequired | object | null | Атрибуты варианта: { "color": "red", "size": "M" } dictionary of string |
categoryIdrequired | string | null | ID категории товара |
categoryNamerequired | string | null | Название категории |
warehouseIdrequired | string | ID склада |
warehouseNamerequired | string | Название склада |
qtyrequired | number | Физический остаток |
reservedrequired | number | Зарезервировано под незавершённые заказы |
availablerequired | number | Свободно к продаже: qty − reserved |
reorderPointrequired | number | Порог дозаказа (0 — не задан) |
isLowStockrequired | boolean | Остаток на пороге или ниже |
updatedAtrequired | string (date-time) | Последнее движение по остатку (ISO 8601) |
SupplierResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID поставщика |
companyIdrequired | string | ID компании |
namerequired | string | Название поставщика |
contactNamerequired | string | null | Контактное лицо |
phonerequired | string | null | Телефон |
emailrequired | string | null | |
innrequired | string | null | ИНН |
addressrequired | string | null | Адрес |
noterequired | string | null | Внутренняя заметка |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |
UnitResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID единицы |
companyIdrequired | string | ID компании |
coderequired | string | Код, уникален в компании |
namerequired | string | Название |
kindrequired | stringValues: countweightvolumetimelength | Род единицы |
baseRatiorequired | number | Коэффициент к базовой единице рода. |
isFractionalrequired | boolean | Разрешён дробный ввод количества |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
UpdateBookingDto
| Field | Type | Description |
|---|---|---|
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 | stringValues: nonerequiredreceivedreturnedwithheld | Статус залога |
capacity | number | null | Вместимость группового занятия (null — снять групповой режим). |
isOpenClass | boolean | Открытое занятие: показывать на публичной странице записи и в кабинете клиента. |
extraResourceIds | string[] | Полная замена доп.ресурсов мультиресурсной брони (S8). array of string |
address | string | null | Адрес проведения (выезд); null — снять адрес. |
note | string | null | Внутренний комментарий |
visitNote | string | null | Заметка мастера по визиту (формула, результат работы, пожелания). Разрешена и после завершения записи — её пишут по факту приёма. |
UpdateCalendarEventDto
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind | stringValues: eventwork_shiftday_offtaskreminder | Вид события | |||||||||||||||
title | string | Заголовок события | |||||||||||||||
description | string | null | Описание события | |||||||||||||||
startAt | string | Начало события (ISO 8601) | |||||||||||||||
endAt | string | Окончание события (ISO 8601) | |||||||||||||||
allDay | boolean | Событие на весь день Default: false | |||||||||||||||
isCompanyWide | boolean | Видно всем сотрудникам компании Default: false | |||||||||||||||
color | string | null | Цвет события (HEX) Example: #7A5AF8 | |||||||||||||||
location | string | null | Место проведения | |||||||||||||||
attendeeIds | string[] | ID участников события array of string | |||||||||||||||
recurrence | object | Правило повторения; null — разовое событие
| |||||||||||||||
reminderMinutesBefore | number | null | Минут до начала, чтобы прислать напоминание |
UpdateCategoryDto
| Field | Type | Description |
|---|---|---|
name | string | Название категории Example: Напитки |
parentId | string (uuid) | null | ID родительской категории; null — корень |
icon | string | Имя иконки Default: folder |
color | string | null | HEX цвета иконки |
bg | string | null | HEX цвета фона иконки |
sortOrder | number | Порядок сортировки Default: 0 |
prefix | string | null | Префикс артикула: A-Z, 1-4 символа Example: CFE |
UpdateClientDto
| Field | Type | Description |
|---|---|---|
kind | stringValues: 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[] | Теги array of 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 | stringValues: activearchived | Статус клиента |
UpdateDealDto
| Field | Type | Description |
|---|---|---|
items | DealLineInputDto[] | Полная замена позиций сметы array of 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
| Field | Type | Description |
|---|---|---|
statusrequired | stringValues: newin_progressconvertedspam | Новый статус лида |
UpdateOrderDto
| Field | Type | Description |
|---|---|---|
items | OrderLineInputDto[] | Полная замена позиций заказа (только в статусах new/confirmed) array of 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
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: CFE-0012 |
barcode | string | null | Штрихкод Example: 4607034630621 |
name | string | Название товара Example: Кофе зерновой «Эспрессо», 1 кг |
description | string | null | Описание товара |
nameI18n | object | Переводы названия по локали (C9): { "de": "..." } dictionary of string |
descriptionI18n | object | Переводы описания по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
price | number | Цена в копейках Example: 240000 |
cost | number | Себестоимость в копейках Default: 0 |
unit | string | Единица измерения (код) Default: 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 }] array of object |
isBundle | boolean | Комплект/набор (BOM) Default: false |
modifierGroups | object[] | Модификаторы позиции (P1.3b): группы опций с надбавкой. array of object |
status | stringValues: activehidden | Статус карточки Default: active |
hasStock | boolean | Вести складской учёт остатков по товару Default: false |
defaultSupplierId | string (uuid) | null | Поставщик по умолчанию (W3, авто-дозаказ) |
emoji | string | null | Эмодзи-иконка для карточки и POS Example: ☕ |
brand | string | null | Бренд Example: Lavazza |
model | string | null | Модель Example: Crema e Aroma |
attributes | ProductAttributeValueInput[] | Значения характеристик. Если массив передан — он полностью заменяет предыдущий набор значений у товара (отсутствующие удаляются). array of ProductAttributeValueInput |
UpdateResourceDto
| Field | Type | Description |
|---|---|---|
type | stringValues: staffseatunitequipment | Тип ресурса |
name | string | Название ресурса |
capacity | number | Сколько броней ресурс держит одновременно |
seats | number | null | Число мест площадки; null — снять. |
color | string | null | Цвет в календаре (HEX) |
bufferMinutes | number | Буфер между бронями, минут |
minDurationMinutes | number | null | Минимальная длительность брони, минут; null — без ограничения |
availability | ResourceAvailabilityWindowDto[] | Окна доступности по дням недели array of ResourceAvailabilityWindowDto |
isActive | boolean | Ресурс активен и доступен для записи |
housekeepingState | stringValues: readydirtycleaningout_of_service | Состояние уборки юнита (ручная установка). |
userId | string (uuid) | null | Учётка сотрудника за ресурсом (null — отвязать). |
note | string | null | Внутренняя заметка |
UpdateServiceDto
| Field | Type | Description |
|---|---|---|
sku | string | Артикул. Если опущен и у выбранной категории есть prefix — будет сгенерирован автоматически как PREFIX-NNNN Example: SVC-0001 |
name | string | Название услуги Example: Консультация бариста |
nameI18n | object | Переводы названия по локали (C9). dictionary of string |
categoryId | string (uuid) | null | ID категории; null — без категории |
priceModel | stringValues: fixedper_hourper_minuteper_dayper_item | Способ формирования цены Default: fixed |
price | number | Цена в копейках Example: 150000 |
durationMinutes | number | null | Длительность услуги в минутах (для записи/брони) Example: 60 |
status | stringValues: activehidden | Статус карточки Default: active |
costItems | ServiceCostItemInputDto[] | Состав затрат (материалы и работы). Replace-all при наличии в запросе. array of ServiceCostItemInputDto |
UpdateSupplierDto
| Field | Type | Description |
|---|---|---|
name | string | Название поставщика |
contactName | string | null | Контактное лицо |
phone | string | null | Телефон |
email | string | null | |
inn | string | null | ИНН |
address | string | null | Адрес |
note | string | null | Внутренняя заметка |
UpdateWarehouseDto
| Field | Type | Description |
|---|---|---|
name | string | Название склада Example: Основной |
address | string | null | Адрес склада |
managerUserId | string (uuid) | null | ID ответственного сотрудника |
branchId | string (uuid) | Филиал склада (1:1). Если не указан — берётся филиал компании без склада. |
UserResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID сотрудника |
firstNamerequired | string | Имя |
lastNamerequired | string | Фамилия |
emailrequired | string | E-mail (логин) |
rolerequired | stringValues: adminmanageremployeedirector | Роль-персона (admin, manager, employee…) |
roleIdrequired | string | null | Роль компании |
roleNamerequired | string | null | Название роли |
companyIdrequired | string | ID компании |
statusrequired | number | Статус: 0=Registered, 1=Active, 2=Blocked, 3=Deleted |
aboutrequired | string | null | О себе |
phonerequired | string | null | Телефон |
timezonerequired | string | null | Часовой пояс (IANA, например Europe/Moscow) |
avatarFileIdrequired | string | null | ID файла аватара |
avatarUrlrequired | string | null | URL аватара |
twoFactorEnabledrequired | boolean | Включена двухфакторная аутентификация |
ipRestrictionEnabledrequired | boolean | Сотрудник ограничил себе вход списком IP-адресов. |
emailVerifiedAtrequired | string (date-time) | null | Когда подтверждён e-mail (ISO 8601) |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
WarehouseListItemResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID склада |
namerequired | string | Название склада |
addressrequired | string | null | Адрес склада |
isDefaultrequired | boolean | Склад по умолчанию |
managerUserIdrequired | string | null | ID ответственного сотрудника |
managerNamerequired | string | null | Имя ответственного сотрудника |
totalQtyrequired | number | Сумма qty по складу |
productsCountrequired | number | Кол-во SKU с qty > 0 на складе |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
WarehouseResponse
| Field | Type | Description |
|---|---|---|
idrequired | string | ID склада |
companyIdrequired | string | ID компании |
namerequired | string | Название склада |
addressrequired | string | null | Адрес склада |
isDefaultrequired | boolean | Склад по умолчанию для приёмок и списаний |
managerUserIdrequired | string | null | ID ответственного сотрудника |
createdAtrequired | string (date-time) | Создано (ISO 8601) |
updatedAtrequired | string (date-time) | Обновлено (ISO 8601) |