{"openapi":"3.1.0","info":{"title":"Gliver Agent API","version":"0.2.3","description":"Единый контракт для Gliver CLI и других клиентов. Права определяются сервером; расчёт с указанной ценой ткани предварительный."},"servers":[{"url":"/api/agent/v1"}],"tags":[{"name":"Сервис"},{"name":"Вход"},{"name":"Каталог"},{"name":"Контент"},{"name":"Конструктор страниц"},{"name":"Калькулятор"},{"name":"Проекты"},{"name":"Заказы"},{"name":"Журнал"}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque token"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}},"Limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}},"schemas":{"Envelope":{"type":"object","required":["data","meta"],"properties":{"data":[],"meta":{"type":"object","required":["request_id","api_version"],"properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"ProjectCreate":{"type":"object","additionalProperties":false,"required":["client","phone"],"properties":{"client":{"type":"string","minLength":1,"maxLength":120},"phone":{"type":"string","minLength":7,"maxLength":30},"allow_duplicate":{"type":"boolean","default":false}}},"CalculatorQuote":{"type":"object","additionalProperties":false,"required":["code","fields"],"properties":{"code":{"type":"string"},"fields":{"type":"object","additionalProperties":true,"description":"Параметры модуля и fabric_id из GET /calculator/fabrics: название и актуальную цену ткани сервер возьмёт сам. Для модулей Фри/Драм обязательно укажите type: free или drum; этот же type передайте при сохранении в проект. Для Квадро используйте коды quad_backrest, quad_angular или quad_puff: тип quad задан кодом, а размеры ограничены вариантами сайта. Поправка на вес Фри/Драм: 0, 5, 10 или 15 процентов. Для альтернативной ткани вместо fabric_id передайте объекты cloth_price и cloth_title с одинаковыми ключами. Не смешивайте эти способы. Для заказа добавьте color и передайте те же fields при сохранении расчёта в проект."}}},"OrderFromProject":{"type":"object","additionalProperties":false,"required":["if_project_version","items","checkout"],"properties":{"if_project_version":{"type":"string","description":"Версия из checkout-options"},"items":{"type":"array","minItems":1,"maxItems":30,"items":{"oneOf":[{"type":"object","required":["kind","position","configuration"],"properties":{"kind":{"const":"calculated"},"position":{"type":"integer","minimum":1},"configuration":{"type":"string"}}},{"type":"object","required":["kind","id"],"properties":{"kind":{"enum":["catalog","custom"]},"id":{"type":"string"}}}]},"description":"Рассчитанная позиция должна иметь цвет: проверьте ready_for_order в checkout-options."},"checkout":{"$ref":"#/components/schemas/OrderCheckout"}}},"OrderCheckout":{"type":"object","additionalProperties":false,"required":["payment_system_id","delivery_id","properties"],"properties":{"payment_system_id":{"type":"integer","minimum":1},"delivery_id":{"type":"integer","minimum":1},"payer_type":{"type":"string","enum":["person","organization"],"default":"person"},"scheme":{"type":"string","enum":["retail","wholesale"],"default":"retail"},"payer":{"type":"string","enum":["dealer","agent"]},"dealer_id":{"type":"integer","minimum":1},"contractor_id":{"type":"integer","minimum":1},"agent_id":{"type":"integer","minimum":1,"description":"Агент из checkout-options; для оптовой схемы agent требуется также его заявка."},"agent_request_id":{"type":"integer","minimum":1,"description":"Заявка из GET /orders/checkout-agents/{id}/requests."},"discount_contract":{"type":"string","enum":["dealer","agent"],"description":"Договор выбранного партнёра; агентский договор доступен только сотруднику, которому сайт показывает этот выбор."},"organization_id":{"type":"integer","minimum":1},"order_city_id":{"type":"integer","minimum":1},"delivery_term":{"type":"string"},"delivery_term_new":{"type":"string","description":"Новое условие доставки при delivery_term=NEW; до 150 символов."},"is_express":{"type":"boolean","default":false,"description":"Срочный заказ: сайт назначает приоритет и дату по своим правилам."},"order_source":{"type":"string","description":"Для менеджера обязательно: выберите name из order_sources в checkout-options."},"description":{"type":"string"},"properties":{"type":"object","description":"Коды свойств заказа из checkout-options; name и phone по умолчанию берутся из проекта","additionalProperties":{"type":"string"}}}},"OrderDetailsUpdate":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из orders get"},"properties":{"type":"object","minProperties":1,"description":"Поля получателя name,last_name,middle_name,phone,email или адреса address,index,country,region,city,street,house,building,apartment,entrance,floor,intercom. Группы меняются отдельно.","additionalProperties":{"type":"string"}},"comment":{"type":"string","maxLength":2000,"description":"Комментарий покупателя; можно очистить пустой строкой."}},"description":"Укажите ровно одно: properties (получатель или адрес) либо comment."},"OrderItemUpdate":{"type":"object","additionalProperties":false,"required":["if_version","quantity"],"properties":{"if_version":{"type":"string","description":"Версия из orders get"},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":10000}}}}},"paths":{"/status/":{"get":{"operationId":"getStatus","tags":["Сервис"],"security":[],"responses":{"200":{"description":"Состояние API"}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","tags":["Сервис"],"security":[],"responses":{"200":{"description":"OpenAPI 3.1"}}}},"/auth/device/":{"post":{"operationId":"startDeviceLogin","tags":["Вход"],"security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"client_name":{"type":"string","maxLength":80,"description":"Необязательное название клиента на странице подтверждения. Задаётся самим клиентом; пользователь должен сверять код подключения."}}}}}},"responses":{"201":{"description":"Код подключения и адрес подтверждения"},"429":{"description":"Лимит запросов"}}}},"/auth/token/":{"post":{"operationId":"finishDeviceLogin","tags":["Вход"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["device_code"],"properties":{"device_code":{"type":"string"}}}}}},"responses":{"200":{"description":"Ожидание или одноразовая выдача токена"}}}},"/auth/logout/":{"post":{"operationId":"logout","tags":["Вход"],"security":[{"BearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Токен отозван"},"401":{"description":"Требуется вход"}}}},"/me/":{"get":{"operationId":"getProfile","tags":["Вход"],"security":[],"responses":{"200":{"description":"Режим, разрешения и возможности"}}}},"/catalog/sections/":{"get":{"operationId":"listCatalogSections","tags":["Каталог"],"security":[],"responses":{"200":{"description":"Публичные разделы каталога"}}}},"/catalog/search/":{"get":{"operationId":"searchCatalog","description":"Поиск по названию товара. Запрос «Француз» использует название коллекции «ДеФранс».","tags":["Каталог"],"security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Найденные товары"}}}},"/catalog/products/{id}/":{"get":{"operationId":"getCatalogProduct","tags":["Каталог"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Карточка, очищенное описание, публичные свойства, dimensions_mm товара и вариантов, серверные цены. Размеры указаны в миллиметрах; пустой объект означает, что размеры в источнике не заданы."},"404":{"description":"Товар недоступен"}}}},"/content/":{"get":{"operationId":"listContent","tags":["Контент"],"security":[],"parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Публичные страницы и лендинги"}}}},"/content/{type}/{code}/":{"get":{"operationId":"getContent","tags":["Контент"],"security":[],"parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string","enum":["static","landing"]}},{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Текст опубликованной страницы"},"404":{"description":"Страница не найдена"}}}},"/pages/roots/":{"get":{"operationId":"listPageRoots","tags":["Конструктор страниц"],"summary":"Корневые маршруты конструктора, включая главную страницу (ID 410, шаблон 2023)","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно"},"403":{"description":"Нет права читать конструктор"}}}},"/pages/":{"get":{"operationId":"listPages","tags":["Конструктор страниц"],"summary":"Страницы конструктора, включая главную и черновики","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"$ref":"#/components/parameters/Limit"}]},"post":{"operationId":"createPage","tags":["Конструктор страниц"],"summary":"Создать черновик в действующем разделе конструктора","security":[{"BearerAuth":[]}],"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"parent_id":{"type":"integer"},"name":{"type":"string","maxLength":255},"code":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,79}$"},"sort":{"type":"integer"},"noindex":{"type":"boolean"},"hide_in_menu":{"type":"boolean"},"description":{"type":"string","description":"HTML-описание раздела для карточек блога и списков"},"seo":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string"},"description":{"type":"string"}},"required":[]},"hide_in_breadcrumbs":{"type":"boolean"},"picture_file_id":{"oneOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"file_id из pages upload-file; null очищает изображение"},"author_id":{"oneOf":[{"type":"integer","minimum":1},{"type":"null"}]}},"required":["parent_id","name","code"]}}}}}},"/pages/block-types/":{"get":{"operationId":"listPageBlockTypes","tags":["Конструктор страниц"],"summary":"Типы блоков выбранного шаблона","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"template","in":"query","required":false,"description":"Шаблон .default для внутренних страниц; 2023 для главной страницы (ID 410).","schema":{"type":"string","enum":[".default","2023"],"default":".default"}}]}},"/pages/block-types/{type}/":{"get":{"operationId":"getPageBlockType","tags":["Конструктор страниц"],"summary":"Свойства блока выбранного шаблона и допустимые XML_ID","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"}},{"name":"template","in":"query","required":false,"description":"Шаблон .default для внутренних страниц; 2023 для главной страницы (ID 410).","schema":{"type":"string","enum":[".default","2023"],"default":".default"}}]}},"/pages/{id}/":{"get":{"operationId":"getPage","tags":["Конструктор страниц"],"summary":"Страница с блоками, SEO и версией; ID 410 — главная","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]},"patch":{"operationId":"updatePage","tags":["Конструктор страниц"],"summary":"Изменить страницу и опубликовать или снять с публикации","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"version из pages get"},"name":{"type":"string","maxLength":255},"code":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,79}$"},"sort":{"type":"integer"},"active":{"type":"boolean"},"noindex":{"type":"boolean"},"hide_in_menu":{"type":"boolean"},"description":{"type":"string","description":"HTML-описание раздела для карточек блога и списков"},"seo":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string"},"description":{"type":"string"}},"required":[]},"hide_in_breadcrumbs":{"type":"boolean"},"picture_file_id":{"oneOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"file_id из pages upload-file; null очищает изображение"},"author_id":{"oneOf":[{"type":"integer","minimum":1},{"type":"null"}]}},"required":["if_version"]}}}}},"delete":{"operationId":"deletePage","tags":["Конструктор страниц"],"summary":"Удалить пустую неопубликованную страницу","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"}}}}}},"responses":{"200":{"description":"Удалено"},"403":{"description":"Недостаточно прав"},"409":{"description":"Страница не пустая или версия устарела"}}}},"/pages/{id}/blocks/":{"post":{"operationId":"createPageBlock","tags":["Конструктор страниц"],"summary":"Добавить блок выбранного типа","security":[{"BearerAuth":[]}],"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"},"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"version из pages get"},"name":{"type":"string"},"sort":{"type":"integer"},"active":{"type":"boolean"},"properties":{"type":"object","additionalProperties":true,"description":"Коды из pages block-type. Перечисление: xml_id; файл: file_id из pages upload-file; ElementWithDescription: {id,description}; веб-форма: числовой id из options."}},"required":["if_version","type"]}}}},"description":"Для страницы 410 применяется шаблон 2023, для внутренних страниц — .default."}},"/pages/{id}/blocks/{block_id}/":{"patch":{"operationId":"updatePageBlock","tags":["Конструктор страниц"],"summary":"Изменить, скрыть или вернуть блок","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"block_id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"version из pages get"},"name":{"type":"string"},"sort":{"type":"integer"},"active":{"type":"boolean"},"properties":{"type":"object","additionalProperties":true,"description":"Коды из pages block-type. Перечисление: xml_id; файл: file_id из pages upload-file; ElementWithDescription: {id,description}; веб-форма: числовой id из options."}},"required":["if_version"]}}}},"description":"Для страницы 410 применяется шаблон 2023, для внутренних страниц — .default."},"delete":{"operationId":"deletePageBlock","tags":["Конструктор страниц"],"summary":"Удалить блок страницы","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"block_id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"}}}}}},"responses":{"200":{"description":"Удалено"},"403":{"description":"Недостаточно прав"},"409":{"description":"Страница не пустая или версия устарела"}},"description":"Для страницы 410 применяется шаблон 2023, для внутренних страниц — .default."}},"/pages/{id}/blocks/reorder/":{"patch":{"operationId":"reorderPageBlocks","tags":["Конструктор страниц"],"summary":"Изменить порядок всех блоков","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"version из pages get"},"block_ids":{"type":"array","items":{"type":"integer"}}},"required":["if_version","block_ids"]}}}},"description":"Для страницы 410 применяется шаблон 2023, для внутренних страниц — .default."}},"/pages/files/":{"post":{"operationId":"uploadPageAsset","tags":["Конструктор страниц"],"summary":"Загрузить изображение или MP4 для файлового свойства","security":[{"BearerAuth":[]}],"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Требуется вход","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Нет права редактировать инфоблок 31","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Некорректные данные","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}}}},"/calculator/modules/":{"get":{"operationId":"listCalculatorModules","tags":["Калькулятор"],"security":[],"responses":{"200":{"description":"Модули калькулятора"}}}},"/calculator/fabrics/":{"get":{"operationId":"listCalculatorFabrics","tags":["Калькулятор"],"security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100}},{"name":"module","in":"query","description":"Код модуля; для mattress применяются правила выбора ткани матраса на сайте.","schema":{"type":"string"}},{"name":"type","in":"query","description":"free или drum: применяет фильтр доступности тканей, как в выборе ткани на сайте.","schema":{"type":"string","enum":["free","drum"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Ткани из выбора калькулятора сайта. price_per_meter — цена за погонный метр из текущего справочника Gliver; null означает, что рассчитать ткань нельзя."},"422":{"description":"Неверный поисковый запрос"}}}},"/calculator/modules/{code}/":{"get":{"operationId":"getCalculatorModule","tags":["Калькулятор"],"security":[],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"free или drum для модулей с выбором типа. Для Квадро тип задан кодом модуля и этот параметр не нужен.","schema":{"type":"string","enum":["free","drum"]}}],"responses":{"200":{"description":"Поля и возможные комплектации модуля. configurations_scope=possible_for_module: доступность для конкретных размеров определяется расчётом. Для Квадро используйте items[].available_configurations из /calculator/quote."},"404":{"description":"Модуль не найден"}}}},"/calculator/quote/":{"post":{"operationId":"calculateQuote","tags":["Калькулятор"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorQuote"}}}},"responses":{"200":{"description":"Расчёт по существующей логике Gliver. Для Квадро items[].available_configurations содержит только комплектации с положительной ценой для переданных размеров, их price_key и цену. При сохранении в проект используйте price_key из этого списка."},"422":{"description":"Неверные параметры"}}}},"/projects/":{"get":{"operationId":"listProjects","tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Проекты менеджера"},"403":{"description":"Нет доступа"},"401":{"description":"Требуется авторизация или токен недействителен"}}},"post":{"operationId":"createProject","tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}}},"responses":{"201":{"description":"Созданный проект"},"403":{"description":"Нет доступа"},"409":{"description":"Возможный дубль или конфликт ключа"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/projects/{id}/":{"get":{"operationId":"getProject","tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Проект, позиции и свойства"},"403":{"description":"Нет доступа"},"404":{"description":"Проект не найден"},"401":{"description":"Требуется авторизация или токен недействителен"}}},"patch":{"operationId":"updateProject","tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["client","phone","if_version"],"additionalProperties":false,"properties":{"client":{"type":"string"},"phone":{"type":"string"},"if_version":{"type":"string"},"allow_duplicate":{"type":"boolean"},"comment":{"type":"string","maxLength":5000},"manager_id":{"type":"integer","minimum":1}}}}}},"responses":{"200":{"description":"Обновлённый проект"},"403":{"description":"Нет доступа"},"409":{"description":"Проект уже изменился или найден дубль"},"401":{"description":"Требуется авторизация или токен недействителен"}}},"delete":{"operationId":"deleteProject","tags":["Проекты"],"summary":"Удалить свой проект или проект с правом администратора","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/calculated-items/":{"post":{"operationId":"addCalculatedItem","tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code","fields","configurations"],"additionalProperties":false,"properties":{"code":{"type":"string"},"fields":{"type":"object","description":"Поля расчёта, включая обязательный type (free/drum) для модулей с выбором типа, fabric_id из поиска тканей либо ручные cloth_price и cloth_title для альтернативной ткани. Передайте тот же type, что и в расчёте. color нужен для оформления позиции в заказ; без него расчёт можно сохранить только в проекте."},"item_index":{"type":"integer","minimum":0},"configurations":{"type":"array","minItems":1,"items":{"type":"string"}}}}}}},"responses":{"201":{"description":"Рассчитанный модуль добавлен в проект"},"403":{"description":"Нет доступа"},"409":{"description":"Конфликт ключа"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/orders/":{"get":{"operationId":"listOrders","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/Limit"},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"integer","minimum":1}},{"name":"phone","in":"query","schema":{"type":"string"}},{"name":"project_id","in":"query","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Заказы и пагинация"},"403":{"description":"Нет доступа"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/orders/{id}/":{"get":{"operationId":"getOrder","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Заказ, состав, оплаты и отгрузки"},"403":{"description":"Нет доступа"},"404":{"description":"Заказ не найден"},"401":{"description":"Требуется авторизация или токен недействителен"}}},"patch":{"operationId":"updateOrderDetails","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderDetailsUpdate"}}}},"responses":{"200":{"description":"Обновлённый заказ после выполнения действия текущего компонента сайта и синхронизации с 1С"},"403":{"description":"Нет доступа"},"409":{"description":"Заказ изменён"},"422":{"description":"Недоступное свойство"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/audit/":{"get":{"operationId":"listAudit","tags":["Журнал"],"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"source","in":"query","description":"Источник вызова; значение заявляет клиент и оно не используется для проверки прав.","schema":{"type":"string","enum":["api","cli","webmcp","site","legacy"]}},{"name":"user_id","in":"query","schema":{"type":"integer","minimum":0}},{"name":"operation","in":"query","schema":{"type":"string","maxLength":80}},{"name":"invocation_id","in":"query","description":"Один вызов инструмента WebMCP может включать несколько API-запросов с этим UUID.","schema":{"type":"string","format":"uuid"}},{"name":"request_id","in":"query","description":"ID запроса из meta.request_id или заголовка X-Request-Id.","schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}},{"name":"status_code","in":"query","schema":{"type":"integer","minimum":100,"maximum":599}},{"name":"since","in":"query","description":"Начальная дата включительно, ГГГГ-ММ-ДД, по времени сервера.","schema":{"type":"string","format":"date"}},{"name":"until","in":"query","description":"Конечная дата включительно, ГГГГ-ММ-ДД, по времени сервера.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Метаданные вызовов API; полный JSON отдельного запроса и ответа доступен через /audit/{request_id}/. Хранение 90 дней."},"403":{"description":"Только администратор"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/audit/{request_id}/":{"get":{"operationId":"getAudit","tags":["Журнал"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{24}$"}}],"responses":{"200":{"description":"Запись журнала с JSON запроса и ответа. Коды входа и токены исключены; для файлов сохранены метаданные. Payload свыше 1 МиБ содержит признак усечения и начало JSON."},"403":{"description":"Только администратор"},"404":{"description":"Запись не найдена"}}}},"/projects/{id}/checkout-options/":{"get":{"operationId":"getProjectCheckoutOptions","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Варианты оформления: позиции, оплаты, доставки, partners, agents, order_sources, delivery_terms и organizations. Рассчитанные позиции содержат ready_for_order и missing_fields."},"403":{"description":"Нет доступа"},"404":{"description":"Проект не найден"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/projects/{id}/checkout-preview/":{"post":{"operationId":"previewOrderFromProject","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderFromProject"}}}},"responses":{"200":{"description":"Предварительная сумма выбранных позиций в корзине сайта; final_total=null до оформления."},"403":{"description":"Нет доступа"},"409":{"description":"Проект изменился"},"422":{"description":"Недопустимые параметры оформления"}}}},"/projects/{id}/orders/":{"post":{"operationId":"createOrderFromProject","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderFromProject"}}}},"responses":{"201":{"description":"Созданный заказ"},"403":{"description":"Нет доступа"},"409":{"description":"Проект изменён или конфликт ключа"},"422":{"description":"Позиции или оформление недоступны"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/orders/checkout-locations/":{"get":{"operationId":"searchCheckoutLocations","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":80}}],"responses":{"200":{"description":"Города и ID для order_city_id"},"403":{"description":"Нет доступа"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/orders/checkout-partners/{id}/contractors/":{"get":{"operationId":"getCheckoutPartnerContractors","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Активные контрагенты, привязанные к доступному партнёру."},"403":{"description":"Нет доступа"},"422":{"description":"Партнёр недоступен"}}}},"/orders/checkout-agents/{id}/requests/":{"get":{"operationId":"getCheckoutAgentRequests","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Активные заявки агента с состояниями, доступными в форме оформления."},"403":{"description":"Нет доступа"},"422":{"description":"Агент недоступен"}}}},"/orders/{id}/items/{basketId}/":{"patch":{"operationId":"updateOrderItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderItemUpdate"}}}},"responses":{"200":{"description":"Заказ с обновлённым количеством и пересчитанной ценой"},"403":{"description":"Нет доступа"},"404":{"description":"Заказ или позиция не найдены"},"409":{"description":"Заказ изменён"},"422":{"description":"Недопустимое количество"},"401":{"description":"Требуется авторизация или токен недействителен"}}}},"/orders/{id}/operations/":{"get":{"operationId":"listOrderOperations","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Доступные действия для текущего пользователя и статуса заказа; запись требует if_version.","responses":{"200":{"description":"Действия и версия заказа"},"401":{"description":"Требуется вход"},"403":{"description":"Нет доступа"}}}},"/orders/{id}/operations/{operation}/":{"get":{"operationId":"readOrderOperation","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"operation","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]+$"}},{"name":"payment_id","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":80}}],"description":"Чтение: references, contractors, history, shipping, payments-1c, order-1c, bill, payment-link. references возвращает справочники и ID из карточки сайта; для payment-link нужен payment_id. bill формирует PDF через текущий компонент сайта. order-1c читает данные заказа в 1С. Для contractors передайте q (минимум 2 символа); ответ ограничен 50 записями.","responses":{"200":{"description":"Результат операции"},"403":{"description":"Нет доступа"},"404":{"description":"Заказ или действие не найдены"}}},"post":{"operationId":"runOrderOperation","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"operation","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]+$"}}],"description":"Изменение заказа. Доступные имена и статус редактирования — GET /orders/{id}/operations. JSON содержит if_version и поля конкретного действия. Операции используют обработчики карточки заказа, 1С и существующие правила сайта.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"Обновлённый заказ"},"403":{"description":"Нет доступа"},"409":{"description":"Заказ или его статус изменился"},"422":{"description":"Неправильные поля"}}}},"/orders/{id}/files/":{"post":{"tags":["Заказы"],"security":[{"BearerAuth":[]}],"operationId":"uploadOrderFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Прикрепляет файл заказа, вызывает синхронизацию файлов с 1С. Допускаются форматы файлов из формы сайта до 20 МБ.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["if_version","file"],"properties":{"if_version":{"type":"string"},"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Файл прикреплён"},"409":{"description":"Версия заказа изменилась"},"422":{"description":"Неверный файл"}}}},"/orders/{id}/files/{fileId}/":{"get":{"tags":["Заказы"],"security":[{"BearerAuth":[]}],"operationId":"downloadOrderFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"fileId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Скачивает только файл, принадлежащий этому заказу.","responses":{"200":{"description":"Содержимое файла","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Файл не найден или не готов"}}},"delete":{"tags":["Заказы"],"security":[{"BearerAuth":[]}],"operationId":"deleteOrderFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"fileId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version"],"properties":{"if_version":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Обновлённый заказ"},"409":{"description":"Версия изменилась"},"404":{"description":"Файл не принадлежит заказу"}}}},"/orders/{id}/payment-links/":{"post":{"operationId":"createOrderPaymentLink","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"description":"Создаёт ссылку на оплату без отправки письма; сумма не больше остатка. Посещение ссылки на сайте создаёт платёж.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","amount","description"],"properties":{"if_version":{"type":"string"},"amount":{"type":"number","exclusiveMinimum":0},"description":{"type":"string"}},"additionalProperties":false}}}},"responses":{"201":{"description":"Ссылка на оплату"},"409":{"description":"Версия изменилась"},"422":{"description":"Сумма или поля недопустимы"}}}},"/orders/{id}/payment-links/send/":{"post":{"operationId":"sendOrderPaymentLink","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"description":"Создаёт ссылку и ставит письмо в очередь через логику карточки заказа.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","amount","description","email"],"properties":{"if_version":{"type":"string"},"amount":{"type":"number","exclusiveMinimum":0},"description":{"type":"string"},"email":{"type":"string","format":"email"},"message":{"type":"string"}},"additionalProperties":false}}}},"responses":{"201":{"description":"Ссылка на оплату"},"409":{"description":"Версия изменилась"},"422":{"description":"Сумма или поля недопустимы"}}}},"/orders/{id}/bill.pdf":{"get":{"operationId":"downloadOrderBill","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Скачивает сформированный счёт PDF; при необходимости формирует его обработчиком сайта.","responses":{"200":{"description":"PDF счёта","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"502":{"description":"Сайт не смог сформировать счёт"}}}},"/orders/{id}/payments/actions/{action}/":{"post":{"operationId":"runOrderPaymentAction","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"action","in":"path","required":true,"schema":{"type":"string","enum":["cash","card","update","refund","delete"]}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"description":"Внесение наличной/терминальной оплаты, изменение, возврат или удаление через обработчики сайта и 1С. Для новых заказов требуется EXPORT_TO_1C=Y; суммы проверяются относительно остатка и исходного платежа. Все действия требуют if_version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version"],"properties":{"if_version":{"type":"string"},"payment_id":{"type":"integer"},"amount":{"type":"number"},"date":{"type":"string"},"box_office":{"type":"string"},"terminal":{"type":"string"},"card":{"type":"string"},"comment":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Заказ с обновлёнными оплатами"},"403":{"description":"Нет доступа"},"409":{"description":"Версия или статус не позволяют действие"},"422":{"description":"Недопустимые поля или сумма"},"502":{"description":"Операция не подтверждена сайтом или 1С"}}}},"/orders/{id}/buyer/":{"post":{"operationId":"updateOrderBuyer","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"description":"Изменяет покупателя и получателя через обработчик карточки заказа. Для юридического лица нужен существующий contractor_id либо new; смена юридического лица на физическое после выгрузки в 1С запрещена. Перед записью сверяется if_version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","person_type","recipient"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"person_type":{"type":"string","enum":["person","organization"]},"recipient":{"type":"object","description":"last_name, name, middle_name, phone, email"},"contractor_id":{"oneOf":[{"type":"integer","minimum":1},{"type":"string","enum":["new"]}]},"company":{"type":"object","description":"company_name, inn, kpp, bik, bank_name, correspondent_account, checking_account, legal_address, phone, email"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Обновлённый заказ"},"403":{"description":"Нет доступа"},"409":{"description":"Заказ изменился или смена типа недоступна"},"422":{"description":"Неверные данные покупателя"}}}},"/orders/{id}/custom-classifiers/":{"get":{"operationId":"searchOrderCustomClassifiers","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":80}}],"description":"Поиск классификатора для ручного товара через компонент сайта; до 50 результатов.","responses":{"200":{"description":"Классификаторы"},"403":{"description":"Нет доступа"}}}},"/orders/{id}/custom-items/":{"post":{"operationId":"createOrderCustomItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","classificator_id","name","quantity","price"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"classificator_id":{"type":"integer","minimum":1},"name":{"type":"string"},"quantity":{"type":"integer","minimum":1},"price":{"type":"number","minimum":0},"size":{"type":"string"},"cloth":{"type":"string"},"color":{"type":"string"},"weight_correction":{"type":"string"},"image_file_ids":{"type":"array","description":"ID изображений, предварительно загруженных в файлы этого заказа; до 10 JPEG, PNG или GIF.","maxItems":10,"items":{"type":"integer","minimum":1}},"pdf_file_ids":{"type":"array","description":"ID PDF, предварительно загруженных в файлы этого заказа; до 10 файлов.","maxItems":10,"items":{"type":"integer","minimum":1}}},"additionalProperties":false}}}},"description":"Добавляет ручной товар в заказ через существующий компонент сайта и синхронизацию с 1С.","responses":{"200":{"description":"Заказ и ID новой позиции"},"409":{"description":"Заказ изменился"},"422":{"description":"Неверные поля"}}}},"/orders/{id}/custom-items/{basketId}/":{"get":{"operationId":"getOrderCustomItemContext","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Данные существующего ручного товара из формы сайта, включая классификатор и ID вложений.","responses":{"200":{"description":"Поля для изменения позиции"},"404":{"description":"Позиция не найдена"}}},"post":{"operationId":"updateOrderCustomItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","classificator_id","name","quantity","price"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"classificator_id":{"type":"integer","minimum":1},"name":{"type":"string"},"quantity":{"type":"integer","minimum":1},"price":{"type":"number","minimum":0},"size":{"type":"string"},"cloth":{"type":"string"},"color":{"type":"string"},"weight_correction":{"type":"string"},"image_file_ids":{"type":"array","description":"ID изображений из файлов заказа. Если поле опущено, текущие вложения сохраняются; пустой массив удаляет их.","maxItems":10,"items":{"type":"integer","minimum":1}},"pdf_file_ids":{"type":"array","description":"ID PDF из файлов заказа. Если поле опущено, текущие вложения сохраняются; пустой массив удаляет их.","maxItems":10,"items":{"type":"integer","minimum":1}}},"additionalProperties":false}}}},"description":"Редактирует ручной товар через компонент сайта, заменяя позицию новой. Возвращает новый basket_id.","responses":{"200":{"description":"Заказ и новый ID позиции"},"409":{"description":"Заказ изменился"},"422":{"description":"Позиция не является ручным товаром"}}}},"/orders/{id}/project-items/":{"get":{"operationId":"listOrderProjectItems","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Позиции привязанного проекта, которые можно добавить в заказ.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]},"post":{"operationId":"addOrderProjectItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Добавляет выбранную готовую позицию проекта через калькулятор сайта.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","kind"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"kind":{"type":"string","enum":["calculated","catalog","custom"]},"position":{"type":"integer","minimum":1},"configuration":{"type":"string"},"id":{"oneOf":[{"type":"integer"},{"type":"string"}]}},"additionalProperties":false}}}}}},"/orders/catalog-offers/{offerId}/colors/":{"get":{"operationId":"listOrderCatalogColors","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Цвета ткани выбранного варианта каталога.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"offerId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/orders/{id}/catalog-items/":{"post":{"operationId":"addOrderCatalogItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Добавляет вариант товара каталога через модальное окно заказа на сайте.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","offer_id","color_id","quantity"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"offer_id":{"type":"integer","minimum":1},"color_id":{"type":"integer","minimum":1},"second_color_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1}},"additionalProperties":false}}}}}},"/orders/fabrics/{fabricId}/colors/":{"get":{"operationId":"listOrderFabricColors","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Цвета ткани, цена для заказа и признак синхронизации цвета с 1С.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"fabricId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/orders/{id}/fabrics/":{"post":{"operationId":"addOrderFabric","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Добавляет ткань из справочника по color_id либо альтернативную ткань с вручную указанной ценой через обработчики сайта.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","kind","quantity"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"kind":{"type":"string","enum":["catalog","alternative"]},"color_id":{"type":"integer","minimum":1},"name":{"type":"string"},"color":{"type":"string"},"price":{"type":"number","exclusiveMinimum":0},"quantity":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false}}}}}},"/orders/stock/":{"get":{"operationId":"searchOrderStock","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Товары из наличия, свободный остаток и базовая цена.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}]}},"/orders/{id}/stock-items/":{"post":{"operationId":"addOrderStockItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Добавляет товар из наличия через компонент сайта и пересчитывает сумму заказа.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","product_id","quantity"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"product_id":{"type":"integer","minimum":1},"quantity":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false}}}}}},"/orders/{id}/catalog-items/{basketId}/":{"post":{"operationId":"updateOrderCatalogItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"description":"Заменяет вариант каталожной позиции через тот же обработчик карточки заказа; возвращает новый basket_id.","responses":{"200":{"description":"Результат операции"},"409":{"description":"Заказ изменился"},"422":{"description":"Недопустимые данные"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","offer_id","color_id","quantity"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"offer_id":{"type":"integer","minimum":1},"color_id":{"type":"integer","minimum":1},"second_color_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1}},"additionalProperties":false}}}}}},"/orders/{id}/items/{basketId}/calculator/":{"get":{"operationId":"getOrderCalculatedItemContext","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"description":"Калькулятор, текущая конфигурация и позиция проекта для модуля заказа.","responses":{"200":{"description":"Контекст редактирования модуля"},"404":{"description":"Позиция не найдена"}}},"post":{"operationId":"updateOrderCalculatedItem","tags":["Заказы"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"basketId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":100}}],"description":"Пересчитывает модуль и обновляет позицию заказа вместе с привязанным проектом через обработчик сайта.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","fields","configuration"],"properties":{"if_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"fields":{"type":"object"},"item_index":{"type":"integer","minimum":0},"configuration":{"type":"string","pattern":"^result-val-1-[a-z0-9-]{1,30}$"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Обновлённые заказ и проект"},"409":{"description":"Заказ изменился"},"422":{"description":"Расчёт или конфигурация недоступны"}}}},"/projects/custom-classifiers/":{"get":{"operationId":"searchProjectCustomClassifiers","tags":["Проекты"],"summary":"Поиск классификаторов ручных товаров","security":[{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2}}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}}}},"/projects/{id}/calculated-items/{position}/":{"post":{"operationId":"updateProjectCalculatedItem","tags":["Проекты"],"summary":"Пересчитать модуль проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"position","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","code","fields","configurations"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"code":{"type":"string"},"fields":{"type":"object"},"item_index":{"type":"integer","minimum":0},"configurations":{"type":"array","items":{"type":"string"}}}}}}}},"delete":{"operationId":"removeProjectCalculatedItem","tags":["Проекты"],"summary":"Удалить модуль проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"position","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/calculated-items/{position}/configurations/{priceKey}/":{"delete":{"operationId":"removeProjectConfiguration","tags":["Проекты"],"summary":"Удалить комплектацию модуля","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"position","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"priceKey","in":"path","required":true,"schema":{"type":"string","pattern":"^result-val-1-[a-z0-9-]{1,30}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/calculated-items/{position}/color/":{"post":{"operationId":"changeProjectModuleColor","tags":["Проекты"],"summary":"Изменить цвет модуля","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"position","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","color"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"color":{"type":"string"},"update_linked_orders":{"type":"boolean"}}}}}}}},"/projects/{id}/custom-items/":{"post":{"operationId":"createProjectCustomItem","tags":["Проекты"],"summary":"Добавить ручную позицию","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","classificator_id","name","quantity","price"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"classificator_id":{"type":"integer","minimum":1},"name":{"type":"string"},"quantity":{"type":"integer","minimum":1},"price":{"type":"number","minimum":0},"size":{"type":"string"},"cloth":{"type":"string"},"color":{"type":"string"},"weight_correction":{"type":"string"},"image_paths":{"type":"array","items":{"type":"string"},"description":"Пути изображений из projects upload-file; при редактировании заменяют предыдущие."},"pdf_paths":{"type":"array","items":{"type":"string"},"description":"Пути PDF из projects upload-file; при редактировании заменяют предыдущие."}}}}}}}},"/projects/{id}/custom-items/{itemId}/":{"post":{"operationId":"updateProjectCustomItem","tags":["Проекты"],"summary":"Изменить ручную позицию","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","classificator_id","name","quantity","price"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"classificator_id":{"type":"integer","minimum":1},"name":{"type":"string"},"quantity":{"type":"integer","minimum":1},"price":{"type":"number","minimum":0},"size":{"type":"string"},"cloth":{"type":"string"},"color":{"type":"string"},"weight_correction":{"type":"string"},"image_paths":{"type":"array","items":{"type":"string"},"description":"Пути изображений из projects upload-file; при редактировании заменяют предыдущие."},"pdf_paths":{"type":"array","items":{"type":"string"},"description":"Пути PDF из projects upload-file; при редактировании заменяют предыдущие."}}}}}}},"delete":{"operationId":"removeProjectCustomItem","tags":["Проекты"],"summary":"Удалить ручную позицию","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/custom-items/{itemId}/quantity/":{"patch":{"operationId":"changeProjectCustomQuantity","tags":["Проекты"],"summary":"Изменить количество ручной позиции","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","quantity"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"quantity":{"type":"integer","minimum":1}}}}}}}},"/projects/{id}/catalog-items/":{"post":{"operationId":"createProjectCatalogItem","tags":["Проекты"],"summary":"Добавить товар каталога в проект","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","offer_id","quantity"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"offer_id":{"type":"integer","minimum":1},"color_id":{"type":"integer","minimum":1},"second_color_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1},"material_mode":{"type":"string","enum":["alternative"],"description":"Укажите только для альтернативной ткани"},"material_name":{"type":"string","maxLength":250},"product_price":{"type":"number","exclusiveMinimum":0,"maximum":100000000,"multipleOf":0.01},"color":{"type":"string","maxLength":120},"second_color":{"type":"string","maxLength":120}},"description":"Ткань из каталога: color_id и при необходимости second_color_id. Альтернативная ткань: material_mode=alternative, material_name, color, product_price и при необходимости second_color. Поля двух режимов не смешиваются."}}}}}},"/projects/{id}/catalog-items/{itemId}/":{"post":{"operationId":"updateProjectCatalogItem","tags":["Проекты"],"summary":"Изменить товар каталога","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","offer_id","quantity"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"offer_id":{"type":"integer","minimum":1},"color_id":{"type":"integer","minimum":1},"second_color_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1},"material_mode":{"type":"string","enum":["alternative"],"description":"Укажите только для альтернативной ткани"},"material_name":{"type":"string","maxLength":250},"product_price":{"type":"number","exclusiveMinimum":0,"maximum":100000000,"multipleOf":0.01},"color":{"type":"string","maxLength":120},"second_color":{"type":"string","maxLength":120}},"description":"Ткань из каталога: color_id и при необходимости second_color_id. Альтернативная ткань: material_mode=alternative, material_name, color, product_price и при необходимости second_color. Поля двух режимов не смешиваются."}}}}},"delete":{"operationId":"removeProjectCatalogItem","tags":["Проекты"],"summary":"Удалить товар каталога","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/catalog-items/{itemId}/quantity/":{"patch":{"operationId":"changeProjectCatalogQuantity","tags":["Проекты"],"summary":"Изменить количество товара каталога","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","quantity"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"quantity":{"type":"integer","minimum":1}}}}}}}},"/projects/{id}/settings/":{"patch":{"operationId":"updateProjectSettings","tags":["Проекты"],"summary":"Группа и суммирование комплектаций","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"is_group":{"type":"boolean"},"sum_configurations":{"type":"boolean"}}}}}}}},"/projects/{id}/history/":{"get":{"operationId":"getProjectHistory","tags":["Проекты"],"summary":"История изменений проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","schema":{"type":"integer"}},{"name":"offset","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}}}},"/projects/{id}/copy-with-fabric/":{"post":{"operationId":"copyProjectModulesWithFabric","tags":["Проекты"],"summary":"Скопировать модули с другой тканью","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","positions","fabric_id"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"positions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Номера из projects get; новые позиции пересчитываются текущим калькулятором, цвет очищается."},"fabric_id":{"type":"integer","minimum":1},"fields_by_position":{"type":"object","additionalProperties":{"type":"object"},"description":"Исходные параметры модулей по номерам. Нужны для старых позиций без calculator_fields."}}}}}}}},"/projects/{id}/editor-items/":{"post":{"operationId":"selectProjectEditorItems","tags":["Проекты"],"summary":"Выбрать модули для расстановщика","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","xml_ids"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"xml_ids":{"type":"array","items":{"type":"string"}}}}}}}}},"/projects/{id}/scheme/":{"post":{"operationId":"saveProjectScheme","tags":["Проекты"],"summary":"Сохранить PNG-схему проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version","image_base64"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"},"image_base64":{"type":"string","description":"data:image/png;base64 до 160 КБ"},"original_image_base64":{"type":"string"},"comment":{"type":"string"}}}}}}},"delete":{"tags":["Проекты"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"operationId":"clearProjectScheme","summary":"Очистить сохранённую схему проекта перед новой расстановкой","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["if_version"],"properties":{"if_version":{"type":"string","description":"Версия из projects get"}}}}}}}},"/projects/{id}/pdf/":{"post":{"operationId":"generateProjectPdf","tags":["Проекты"],"summary":"Сформировать PDF проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Результат операции"},"401":{"description":"Требуется вход"},"403":{"description":"Недостаточно прав"},"409":{"description":"Проект изменён"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"type":{"type":"string","enum":["client","prod"]}}}}}}}},"/projects/{id}/files/":{"post":{"operationId":"uploadProjectFile","tags":["Проекты"],"summary":"Загрузить изображение или PDF для ручной позиции проекта","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["if_version","file"],"properties":{"if_version":{"type":"string"},"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Путь файла для image_paths или pdf_paths"},"409":{"description":"Проект изменился"}}}},"/pages/product-card/":{"get":{"tags":["Конструктор страниц"],"summary":"Найти разделы конструктора карточки по ID или URL товара","security":[{"BearerAuth":[]}],"parameters":[{"name":"product","in":"query","required":true,"schema":{"type":"string"},"description":"ID товара или полный URL карточки Gliver"}],"responses":{"200":{"description":"Обычный и express-разделы конструктора"},"403":{"description":"Нет права читать конструктор"},"404":{"description":"Товар не найден"}},"operationId":"findProductCardPage"}},"/pages/{id}/product-links/":{"post":{"tags":["Конструктор страниц"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","product_id","express"],"properties":{"if_version":{"type":"string","description":"version из pages get"},"product_id":{"type":"integer","minimum":1},"express":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Привязка обновлена; ответ содержит свежую страницу"},"403":{"description":"Нет права редактировать конструктор"},"409":{"description":"Конфликт версии или существующей привязки"}},"operationId":"linkProductCardPage","summary":"Привязать раздел конструктора каталога к товару"},"delete":{"tags":["Конструктор страниц"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["if_version","product_id","express"],"properties":{"if_version":{"type":"string","description":"version из pages get"},"product_id":{"type":"integer","minimum":1},"express":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Привязка обновлена; ответ содержит свежую страницу"},"403":{"description":"Нет права редактировать конструктор"},"409":{"description":"Конфликт версии или существующей привязки"}},"operationId":"unlinkProductCardPage","summary":"Снять привязку раздела к товару"}}}}