{"consumes":["application/json"],"definitions":{"AdminApprovePayoutBody":{"type":"object"},"AdminBlockOrgBody":{"properties":{"reason":{"type":"string"}},"type":"object"},"AdminBlockUserBody":{"properties":{"reason":{"type":"string"}},"type":"object"},"AdminEnterOrgBody":{"type":"object"},"AdminMarkPayoutPaidBody":{"type":"object"},"AdminRejectPayoutBody":{"properties":{"reason":{"type":"string"}},"type":"object"},"AdminSetOrgTemplatePublisherBody":{"description":"Аддитивные сообщения держим последними: опубликованные descriptor indexes\nвыше не сдвигаются при добавлении операторского флага.","properties":{"can_publish_templates":{"type":"boolean"}},"type":"object"},"AdminSetUserRoleBody":{"properties":{"role":{"type":"string"}},"type":"object"},"AdminSuspendOrgBody":{"type":"object"},"AdminUnblockOrgBody":{"type":"object"},"AdminUnblockUserBody":{"type":"object"},"AdminUnsuspendOrgBody":{"type":"object"},"AdminUpdateUserBody":{"properties":{"country":{"type":"string"},"first_name":{"type":"string"},"language":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"ApiAccessDeleteWebhookBody":{"description":"DeleteWebhookRequest — id вебхука своей компании.","type":"object"},"ApiAccessEditWebhookBody":{"description":"EditWebhookRequest — partial: не присланное поле не трогаем.","properties":{"events":{"items":{"type":"string"},"title":"непустой = replace","type":"array"},"is_active":{"type":"boolean"},"secret":{"title":"присланный — минимум 16 символов","type":"string"},"url":{"type":"string"}},"type":"object"},"ApiAccessRevokeApiTokenBody":{"description":"RevokeApiTokenRequest — id токена своей компании.","type":"object"},"ApiAccessTestWebhookBody":{"description":"TestWebhookRequest — id вебхука своей компании.","type":"object"},"CatalogAddToCartBody":{"properties":{"data":{"type":"object"},"quantity":{"format":"int32","title":"0 → трактуется как 1","type":"integer"}},"type":"object"},"CatalogAddToWishlistBody":{"properties":{"data":{"type":"object"},"key":{"type":"string"}},"type":"object"},"CatalogAppendProductMoneyValueBody":{"properties":{"amount":{"format":"int64","type":"string"},"currency":{"type":"string"},"effective_from":{"format":"date-time","type":"string"},"variant_id":{"format":"int64","type":"string"}},"type":"object"},"CatalogCopyProductBody":{"type":"object"},"CatalogCreateColumnBody":{"properties":{"label":{"type":"string"}},"type":"object"},"CatalogDeleteAccessPolicyBody":{"properties":{"expected_version":{"format":"int64","type":"string"}},"type":"object"},"CatalogDeleteArticleBody":{"type":"object"},"CatalogDeleteAttributeBody":{"type":"object"},"CatalogDeleteCanvasAssetBody":{"type":"object"},"CatalogDeleteCanvasComponentBody":{"type":"object"},"CatalogDeleteCanvasDocumentBody":{"type":"object"},"CatalogDeleteCategoryBody":{"type":"object"},"CatalogDeleteColumnBody":{"type":"object"},"CatalogDeleteContentBlockBody":{"description":"Мягкое удаление блока.","type":"object"},"CatalogDeleteCustomerRoleBody":{"properties":{"expected_version":{"format":"int64","type":"string"}},"type":"object"},"CatalogDeleteFormBody":{"type":"object"},"CatalogDeleteFormLeadBody":{"type":"object"},"CatalogDeleteGalleryBody":{"type":"object"},"CatalogDeleteHTMLDocumentBody":{"type":"object"},"CatalogDeletePriceFieldBody":{"properties":{"expected_version":{"format":"int64","type":"string"}},"type":"object"},"CatalogDeletePricingRuleBody":{"properties":{"expected_version":{"format":"int64","type":"string"}},"type":"object"},"CatalogDeleteProductBody":{"type":"object"},"CatalogDeleteProductGroupBody":{"description":"Мягкое удаление группы.","type":"object"},"CatalogDeletePromoCampaignBody":{"type":"object"},"CatalogDeletePromoKeyBody":{"type":"object"},"CatalogDeletePromotionBody":{"type":"object"},"CatalogDeleteReviewBody":{"description":"Мягкое удаление отзыва.","type":"object"},"CatalogDeleteSandboxBody":{"type":"object"},"CatalogDeleteStarterTemplateBody":{"type":"object"},"CatalogDeleteStarterTemplateCategoryBody":{"type":"object"},"CatalogEditAccessPolicyBody":{"properties":{"expected_version":{"format":"int64","type":"string"},"item":{"$ref":"#/definitions/v1AccessPolicy"},"password":{"description":"Не прислано = сохранить; новое значение = сменить и отозвать grants.","type":"string"}},"type":"object"},"CatalogEditArticleBody":{"properties":{"item":{"$ref":"#/definitions/v1EditArticleRequestUpdate"}},"type":"object"},"CatalogEditAttributeBody":{"properties":{"item":{"$ref":"#/definitions/v1EditAttributeRequestUpdate"}},"type":"object"},"CatalogEditAudienceBody":{"properties":{"expected_version":{"format":"int64","type":"string"},"item":{"$ref":"#/definitions/v1Audience"}},"type":"object"},"CatalogEditCanvasAssetBody":{"description":"Partial-update: не прислано → не трогаем. Пустая строка в category — снять\nгруппировку (единственный способ обнулить nullable-колонку через gateway).","properties":{"item":{"$ref":"#/definitions/v1EditCanvasAssetRequestUpdate"}},"type":"object"},"CatalogEditCanvasComponentBody":{"description":"Partial-update: не прислано → не трогаем. bump_version=true — инкремент\nversion (кнопка «Обновить компонент»: в проде фронт заменяет source-файл\nчерез storage Replace тем же id; в ДЕВ-контуре Replace живого файла\nзапрещён (FILE_CONTOUR_MISMATCH) — фронт заливает НОВЫЙ файл и меняет\nссылку через source_file_id).","properties":{"item":{"$ref":"#/definitions/v1EditCanvasComponentRequestUpdate"}},"type":"object"},"CatalogEditCanvasDocumentBody":{"description":"Partial-update: не прислано → не трогаем; frames непустой → replace-set\n(ограничение proto3 repeated — «очистить все» не выражается, ср. sections).","properties":{"item":{"$ref":"#/definitions/v1EditCanvasDocumentRequestUpdate"}},"type":"object"},"CatalogEditCategoryBody":{"properties":{"item":{"$ref":"#/definitions/v1EditCategoryRequestUpdate"}},"type":"object"},"CatalogEditCharGroupBody":{"description":"Запрос изменения группы характеристик (partial).","properties":{"item":{"$ref":"#/definitions/v1EditCharGroupRequestUpdate"}},"type":"object"},"CatalogEditColumnBody":{"properties":{"label":{"type":"string"}},"type":"object"},"CatalogEditContentBlockBody":{"description":"Partial-update блока.","properties":{"item":{"$ref":"#/definitions/v1EditContentBlockRequestUpdate"}},"type":"object"},"CatalogEditCustomerRoleBody":{"properties":{"expected_version":{"format":"int64","type":"string"},"item":{"$ref":"#/definitions/v1CustomerRole"}},"type":"object"},"CatalogEditFormBody":{"description":"Partial-update: не прислано → не трогаем (эталон EditHTMLDocument).","properties":{"item":{"$ref":"#/definitions/v1EditFormRequestUpdate"}},"type":"object"},"CatalogEditGalleryBody":{"properties":{"item":{"$ref":"#/definitions/v1GalleryUpdate"}},"type":"object"},"CatalogEditHTMLDocumentBody":{"description":"Partial-update: не прислано → не трогаем; assets непустой → replace-set\n(ограничение proto3 repeated — «очистить все» не выражается, ср. frames).","properties":{"item":{"$ref":"#/definitions/v1EditHTMLDocumentRequestUpdate"}},"type":"object"},"CatalogEditOrderConfigurationBody":{"properties":{"data":{"type":"object"}},"type":"object"},"CatalogEditPriceFieldBody":{"properties":{"expected_version":{"format":"int64","type":"string"},"item":{"$ref":"#/definitions/v1PriceFieldDefinition"}},"type":"object"},"CatalogEditPricingRuleBody":{"properties":{"expected_version":{"format":"int64","type":"string"},"item":{"$ref":"#/definitions/v1PricingRule"}},"type":"object"},"CatalogEditProductBody":{"properties":{"item":{"$ref":"#/definitions/EditProductRequestProductUpdate"}},"type":"object"},"CatalogEditProductGroupBody":{"description":"Partial-update группы.","properties":{"item":{"$ref":"#/definitions/v1EditProductGroupRequestUpdate"}},"type":"object"},"CatalogEditPromoCampaignBody":{"properties":{"item":{"$ref":"#/definitions/v1PromoCampaign"}},"type":"object"},"CatalogEditPromoKeyBody":{"properties":{"item":{"$ref":"#/definitions/v1PromoKey"}},"type":"object"},"CatalogEditPromotionBody":{"properties":{"item":{"$ref":"#/definitions/v1Promotion"}},"type":"object"},"CatalogEditRelationTypeBody":{"description":"Запрос изменения типа связи (partial).","properties":{"item":{"$ref":"#/definitions/v1EditRelationTypeRequestUpdate"}},"type":"object"},"CatalogEditSandboxBody":{"properties":{"name":{"type":"string"}},"type":"object"},"CatalogEditSpecTemplateBody":{"description":"Запрос изменения шаблона характеристик (partial).","properties":{"item":{"$ref":"#/definitions/v1EditSpecTemplateRequestUpdate"}},"type":"object"},"CatalogEditStarterTemplateBody":{"properties":{"item":{"$ref":"#/definitions/v1EditStarterTemplateRequestUpdate"}},"type":"object"},"CatalogEditStarterTemplateCategoryBody":{"properties":{"item":{"$ref":"#/definitions/v1EditStarterTemplateCategoryRequestUpdate"}},"type":"object"},"CatalogInstallStarterTemplateBody":{"properties":{"idempotency_key":{"description":"Ключ идемпотентности: двойной клик и повтор после таймаута дают ту же\nстраницу, а не вторую копию.","type":"string"},"parent_category_id":{"format":"int64","title":"0 = корень дерева","type":"string"},"title":{"description":"Имя будущей страницы (первый вопрос мастера). Пусто → имя шаблона.","type":"string"}},"type":"object"},"CatalogMarkOrderRefundedBody":{"type":"object"},"CatalogMarkOrderSeenBody":{"description":"Отметка переписки заказа прочитанной.","type":"object"},"CatalogMarkReviewHelpfulBody":{"description":"«Полезно» +1.","type":"object"},"CatalogModerateCommentBody":{"description":"Модерация комментария: approve|reject|delete (delete — hard, с ответами;.","properties":{"action":{"type":"string"}},"type":"object"},"CatalogModerateProductBody":{"properties":{"approve":{"title":"true = одобрить, false = отклонить","type":"boolean"},"comment":{"title":"причина (обязательна при reject — проверяется в хендлере)","type":"string"}},"type":"object"},"CatalogModerateReviewBody":{"description":"Решение продавца по отзыву.","properties":{"approve":{"title":"true = approved, false = rejected","type":"boolean"}},"type":"object"},"CatalogPostCommentBody":{"description":"Новый вопрос/комментарий (или ответ, если задан parent_id).","properties":{"body":{"type":"string"},"kind":{"type":"string"},"parent_id":{"format":"int64","type":"string"}},"type":"object"},"CatalogPostOrderMessageBody":{"description":"Отправка сообщения в переписку заказа (author_role проставит сервер).","properties":{"body":{"type":"string"}},"type":"object"},"CatalogRemoveFromCartBody":{"type":"object"},"CatalogRemoveFromWishlistBody":{"properties":{"key":{"type":"string"}},"type":"object"},"CatalogReorderColumnsBody":{"properties":{"ids":{"items":{"format":"int64","type":"string"},"type":"array"}},"type":"object"},"CatalogReplaceCompanyCustomerRolesBody":{"properties":{"role_ids":{"items":{"format":"int64","type":"string"},"type":"array"}},"type":"object"},"CatalogReplacePricingCollectionBody":{"properties":{"active":{"type":"boolean"},"expected_versions":{"description":"Exact complete pre-image, including rules omitted from items and therefore\ndeleted. A concurrently added/edited rule makes the whole request abort.","items":{"$ref":"#/definitions/v1PricingRuleExpectedVersion"},"type":"array"},"idempotency_key":{"type":"string"},"items":{"description":"Desired complete collection. Empty means atomically remove the collection.","items":{"$ref":"#/definitions/v1PricingRuleBatchItem"},"type":"array"}},"type":"object"},"CatalogReplaceProductCommercialPriceValuesBody":{"properties":{"expected_versions":{"items":{"$ref":"#/definitions/v1PriceFieldValueExpectedVersion"},"type":"array"},"idempotency_key":{"type":"string"},"values":{"items":{"$ref":"#/definitions/v1CommercialPriceFieldValue"},"type":"array"}},"type":"object"},"CatalogReplyReviewBody":{"description":"Ответ продавца на отзыв.","properties":{"reply":{"title":"'' = снять ответ","type":"string"}},"type":"object"},"CatalogSendTestFormLeadBody":{"type":"object"},"CatalogSetArticleContentBlocksBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ProductContentBlockRef"},"type":"array"}},"type":"object"},"CatalogSetArticleRelatedBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ArticleRelatedRef"},"type":"array"}},"type":"object"},"CatalogSetAttributeFieldAccessBody":{"properties":{"access":{"$ref":"#/definitions/v1FieldAccessSettings"},"expected_version":{"description":"0 создаёт первую настройку для старого атрибута; далее обязателен\nфактический version из GET (optimistic concurrency).","format":"int64","type":"string"}},"type":"object"},"CatalogSetCategoryAttributeValuesBody":{"description":"Запрос замены значений ТТХ категории (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1CategoryValueInput"},"type":"array"}},"type":"object"},"CatalogSetCategoryAttributesBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CategoryAttribute"},"title":"полный набор (replace-set)","type":"array"}},"type":"object"},"CatalogSetCategoryContentBlocksBody":{"description":"полный набор привязок блоков категории (replace-set, зеркало\nSetProductContentBlocksRequest; ref-сообщение общее).","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductContentBlockRef"},"type":"array"}},"type":"object"},"CatalogSetCategoryRelationsBody":{"description":"Запрос замены рёбер связей категории (replace-set исходящих рёбер from_category;\nпереиспользует ProductRelationInput и SetProductRelationsResponse).","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductRelationInput"},"type":"array"}},"type":"object"},"CatalogSetCategorySpecBody":{"description":"Запрос установки режима+привязок узла.","properties":{"bindings":{"items":{"$ref":"#/definitions/v1CategorySpecBinding"},"type":"array"},"mode":{"description":"\"\" = сбросить к наследованию (строку режима и привязки удалить);\nappend|replace требуют непустой bindings; clear очищает привязки.","type":"string"}},"type":"object"},"CatalogSetComboItemsBody":{"description":"Полный состав комбо-набора (replace-set). product_id — товар-комбо (из пути);\nпустой items = товар перестаёт быть комбо.","properties":{"items":{"items":{"$ref":"#/definitions/v1ComboItemInput"},"type":"array"}},"type":"object"},"CatalogSetCompanyCustomerStatusBody":{"properties":{"status":{"type":"string"}},"type":"object"},"CatalogSetDesignBindingsBody":{"description":"Replace-set привязок ресурса: slots = полный новый набор (slot → block_id);\nпустая карта = снять все привязки ресурса.","properties":{"slots":{"additionalProperties":{"format":"int64","type":"string"},"description":"Потолок 12, а не 8 (Э1): у ЛЕЙАУТА слотов больше — скелет плюс тела по\nчетырём видам страниц. Набор допустимых слотов зависит от вида ресурса и\nпроверяется хендлером (domain.ValidDesignSlotFor) — здесь только объём.","type":"object"}},"type":"object"},"CatalogSetFormLeadStatusBody":{"properties":{"status":{"type":"string"}},"type":"object"},"CatalogSetGroupAxesBody":{"description":"Полный набор осей группы (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1GroupAxis"},"type":"array"}},"type":"object"},"CatalogSetGroupMembersBody":{"description":"Полный набор членов группы (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1GroupMember"},"type":"array"}},"type":"object"},"CatalogSetLeadColumnBody":{"properties":{"column_id":{"format":"int64","type":"string"}},"type":"object"},"CatalogSetLeadSpamBody":{"properties":{"is_spam":{"type":"boolean"}},"type":"object"},"CatalogSetPricingCollectionActiveBody":{"properties":{"active":{"type":"boolean"},"expected_versions":{"items":{"$ref":"#/definitions/v1PricingRuleExpectedVersion"},"type":"array"},"idempotency_key":{"type":"string"}},"type":"object"},"CatalogSetPricingRuleActiveBody":{"properties":{"active":{"type":"boolean"},"expected_version":{"format":"int64","type":"string"}},"type":"object"},"CatalogSetProductAttributesBody":{"properties":{"items":{"description":"Полный набор значений (replace-set).","items":{"$ref":"#/definitions/v1ProductAttributeValue"},"type":"array"}},"type":"object"},"CatalogSetProductChildrenBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ProductChildRef"},"type":"array"}},"type":"object"},"CatalogSetProductContentBlocksBody":{"description":"Полный набор привязок товара (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductContentBlockRef"},"type":"array"}},"type":"object"},"CatalogSetProductKindBody":{"description":"Переключатель типа товара (владелец): только standard|multi (combo задаётся\nсоставом комбо и здесь недопустим).","properties":{"kind":{"type":"string"}},"type":"object"},"CatalogSetProductRelationsBody":{"description":"Запрос замены рёбер связей товара (replace-set исходящих рёбер).","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductRelationInput"},"type":"array"}},"type":"object"},"CatalogSetProductStockBody":{"description":"SetProductStockRequest — установка остатка «как есть» (продавец пересчитал).\nВ журнал уходит РАЗНИЦА: иначе история потеряла бы саму инвентаризацию.","properties":{"low_threshold":{"format":"int32","type":"integer"},"quantity":{"description":"Отрицательное значение = снять учёт (товар не кончается: услуга, цифровой\nтовар, изделие под заказ). Ноль — законное «кончился».","format":"int32","type":"integer"}},"type":"object"},"CatalogSetProductVariantAxesBody":{"description":"Полный набор осей вариантов товара (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1VariantAxis"},"type":"array"}},"type":"object"},"CatalogSetProductVariantsBody":{"description":"Полный набор наборов товара (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductVariant"},"type":"array"}},"type":"object"},"CatalogSetSpecTemplateItemsBody":{"description":"Запрос замены строк шаблона (replace-set).","properties":{"items":{"items":{"$ref":"#/definitions/v1SpecTemplateItemInput"},"type":"array"}},"type":"object"},"CatalogSetSpecTemplateLayoutBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1SpecTemplateLayoutItemInput"},"type":"array"}},"type":"object"},"CatalogStartOrderPaymentBody":{"type":"object"},"CatalogUpdateCartItemBody":{"properties":{"quantity":{"format":"int32","type":"integer"}},"type":"object"},"CatalogUpdateOrderStatusBody":{"properties":{"status":{"format":"int32","title":"1 new | 2 processing | 3 done | 4 cancelled","type":"integer"}},"type":"object"},"CreateProductsBatchResponseItem":{"description":"Результат ОДНОЙ позиции. Успех: id \u003e 0, error пустой. Провал: id = 0,\nerror — стабильный код (PRODUCT_NAME_REQUIRED, CATEGORY_NOT_FOUND,\nSLUG_TAKEN, PRODUCT_LIMIT_REACHED…), message — деталь для человека.","properties":{"error":{"type":"string"},"id":{"format":"int32","type":"integer"},"index":{"format":"int32","title":"позиция в items запроса, 0-based","type":"integer"},"message":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"DevPublishRollbackBody":{"description":"RollbackRequest — id публикации своей компании.","type":"object"},"EditContainerRequestContainerUpdate":{"properties":{"data":{"type":"object"},"file_ids":{"items":{"type":"string"},"type":"array"},"is_published":{"type":"boolean"},"is_show_in_menu":{"type":"boolean"},"name":{"type":"string"}},"type":"object"},"EditEntityMaterialRequestMaterialUpdate":{"description":"Частичный апдейт: пустые optional-поля не трогаются. entity_type/entity_id\nнеизменны (перенос материала между узлами = создание нового).","properties":{"body":{"type":"string"},"file_id":{"type":"string"},"kind":{"type":"string"},"path":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"title":{"type":"string"},"url":{"type":"string"}},"type":"object"},"EditProductRequestProductUpdate":{"properties":{"card_template":{"title":"шаблон карточки: simple|base|3d (B+)","type":"string"},"catalog_hidden":{"description":"скрытие из сеток витрины, tri-state ('' = NULL — показывать).","type":"string"},"categories":{"items":{"format":"int32","type":"integer"},"type":"array"},"categories_replace":{"description":"Доп-категории: proto3 не отличает отсутствующий repeated от пустого [] —\nбез флага снять ВСЕ доп-категории невозможно (categories=nil = «не менять»).\ntrue → categories применяется как ПОЛНАЯ замена, включая пустую (снять все).\nОтсутствует/false → легаси-семантика (len\u003e0 = замена) — партнёрский PUT\nбез поля categories по-прежнему НЕ затирает (контракт мержа сохранён).","type":"boolean"},"category_id":{"format":"int32","type":"integer"},"comments_enabled":{"type":"string"},"description":{"type":"string"},"gallery_ids":{"description":"Б-Галереи: набор привязок товара к галереям компании, семантика —\nпаттерн categories_replace (та же форма, что у Product на чтении, поэтому\nround-trip GET→PUT безопасен): непустой список → полная замена в\nприсланном порядке; пустой список БЕЗ gallery_ids_replace → привязки не\nтрогаем; пустой список с gallery_ids_replace=true → отвязать все.\nСодержимое галереи правится своей ручкой (PUT /galleries/{id}).","items":{"format":"int64","type":"string"},"type":"array"},"gallery_ids_replace":{"type":"boolean"},"is_deleted":{"type":"boolean"},"is_published":{"type":"boolean"},"is_shared":{"type":"boolean"},"is_show_menu":{"type":"boolean"},"name":{"type":"string"},"preloader_id":{"title":"uuid file; '' = снять","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_id":{"description":"ignore_empty: пустая строка = «снять» (превью/видео/прелоадер → NULL) —\nбез этого магазин не даёт убрать картинку товара, только заменить.","type":"string"},"price":{"$ref":"#/definitions/v1ProductPrice"},"price_mode":{"description":"Явное изменение ценовой полосы. Пустое значение не разрешено: старые\nклиенты просто не присылают optional-поле, новые выбирают одно из двух.","type":"string"},"questions_enabled":{"type":"string"},"reviews_scope":{"description":"настройки контента карточки, tri-state строкой ('' = NULL — наследовать).","type":"string"},"scene_id":{"format":"int32","type":"integer"},"seo":{"$ref":"#/definitions/v1Seo"},"sku":{"type":"string"},"status":{"type":"string"},"stock_low_threshold":{"format":"int32","type":"integer"},"stock_quantity":{"description":"Склад. Отрицательное значение = снять учёт (вернуть NULL): proto3 не\nотличает «не прислали» от нуля, а ноль здесь законное значение —\n«кончился». Ноль и больше — установить остаток.","format":"int32","type":"integer"},"tags":{"items":{"type":"string"},"type":"array"},"video_id":{"title":"uuid file; '' = снять","type":"string"}},"type":"object"},"EditSceneRequestSceneUpdate":{"properties":{"camera_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"collection_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"data":{"type":"object"},"environment_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"file_ids":{"items":{"type":"string"},"type":"array"},"light_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"material_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"model_file_id":{"type":"string"},"name":{"title":"переименование сцены (B+)","type":"string"},"texture_ids":{"items":{"format":"int32","type":"integer"},"type":"array"}},"type":"object"},"OrgBindOrgDomainBody":{"properties":{"domain":{"type":"string"}},"type":"object"},"OrgCancelOrgDeletionBody":{"type":"object"},"OrgInviteMemberBody":{"properties":{"email":{"type":"string"},"role":{"type":"string"}},"type":"object"},"OrgLeaveOrgBody":{"type":"object"},"OrgRemoveMemberBody":{"type":"object"},"OrgRevokeInviteBody":{"type":"object"},"OrgTransferOwnershipBody":{"properties":{"user_id":{"format":"int32","type":"integer"}},"type":"object"},"OrgUpdateFiscalSettingsBody":{"properties":{"payment_subject":{"type":"string"},"tax_system":{"description":"Отсутствующее поле — не трогать, пустая строка/ноль — сбросить в\n«не выбрано». Без optional различить эти два случая нельзя.","type":"string"},"vat_code":{"format":"int32","type":"integer"}},"type":"object"},"OrgUpdateMemberRoleBody":{"properties":{"role":{"type":"string"}},"type":"object"},"OrgUpdateOrgBody":{"properties":{"address":{"type":"string"},"avatar_id":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"email":{"type":"string"},"max_total_discount_percent":{"description":"предохранитель маржи — потолок суммарной скидки заказа в процентах\nот суммы до скидок. 0 = без ограничения. Нужен потому, что слои выгоды\nскладываются (комбо → акция → промокод), и до него единственной защитой\nбыл пол цены 0. Урезает ступени сверху вниз; построчные скидки не трогает —\nих урезание требует перераспределения по строкам и рассогласовало бы\nпострочный снимок заказа.","format":"int32","type":"integer"},"name":{"type":"string"},"phone":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"OrgUpdatePaymentSettingsBody":{"properties":{"disconnect":{"description":"Отключить кассу совсем, вместе с ключами. Отдельным флагом, а не пустым\nprovider: пустой приходит и когда правят только режим оплаты, и стирать по\nнему ключи значило бы снести рабочую настройку невинным сохранением.","type":"boolean"},"is_enabled":{"type":"boolean"},"is_test":{"type":"boolean"},"login":{"type":"string"},"payment_mode":{"type":"string"},"provider":{"type":"string"},"secret":{"description":"Ключи: ПУСТАЯ строка = «не менять». Продавец правит логин или режим, не\nвводя ключи заново — требовать их при каждой правке значит напрашиваться\nна опечатку в рабочей настройке.\n\nподпись запроса (у Робокассы пароль №1)","type":"string"},"secret_result":{"title":"проверка уведомлений (пароль №2)","type":"string"}},"type":"object"},"OrgUpdateStorefrontBody":{"properties":{"storefront":{"$ref":"#/definitions/v1Storefront"}},"type":"object"},"OrgUpdateTelegramSettingsBody":{"properties":{"bot_token":{"description":"Отсутствующее поле — не трогать, пустая строка — отключить бота (секрет\nудаляется). Без optional различить эти два случая нельзя.","type":"string"}},"type":"object"},"OrgVerifyOrgDomainBody":{"type":"object"},"SnapshotDeleteSnapshotBody":{"description":"DeleteSnapshotRequest — id снапшота своей компании.","type":"object"},"SnapshotRestoreSnapshotBody":{"description":"RestoreSnapshotRequest — id снапшота своей компании.","type":"object"},"StorageCopySceneBody":{"type":"object"},"StorageEditCollectionBody":{"properties":{"item":{"$ref":"#/definitions/v1EditCollectionRequestUpdate"}},"type":"object"},"StorageEditContainerBody":{"properties":{"item":{"$ref":"#/definitions/EditContainerRequestContainerUpdate"},"know_version":{"format":"int32","type":"integer"}},"type":"object"},"StorageEditEntityMaterialBody":{"description":"Запрос partial-редактирования материала.","properties":{"item":{"$ref":"#/definitions/EditEntityMaterialRequestMaterialUpdate"}},"type":"object"},"StorageEditSceneBody":{"properties":{"item":{"$ref":"#/definitions/EditSceneRequestSceneUpdate"},"know_version":{"format":"int32","type":"integer"}},"type":"object"},"StoragePublishSceneBody":{"properties":{"artifact":{"description":"PublishedArtifact (schema vizen-publish/1). Struct, НЕ bytes: через\ngrpc-gateway bytes = base64 (+33% против лимита) и ручной decode;\nпрецедент = Scene.data. Числа double — не проблема: артефакт\nпроизводится и потребляется JS, где числа и так double.","type":"object"},"file_ids":{"description":"Все файлы артефакта (UUID): images/geometries ∪ инлайн-контейнеры ∪\nmaterialGlobals-карты ∪ превью опций. По ним резолвятся URL у анонима.","items":{"type":"string"},"type":"array"},"product_id":{"description":"Продукт, из которого публикуют (currentProductId студии). Валидируется\nproduct.scene_id == id и company; в строку публикации пишется денормализованно.","format":"int32","type":"integer"},"scene_version":{"description":"Версия сцены, которую видит студия. Несовпадение с текущей scenes.version\n→ FAILED_PRECONDITION (студия делает save и авторетрай).","format":"int32","type":"integer"}},"type":"object"},"StorageRenameFileBody":{"properties":{"original_name":{"type":"string"}},"type":"object"},"StorageReorderFilesInCollectionBody":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ReorderItem"},"type":"array"}},"type":"object"},"StorageReplaceFileBody":{"properties":{"original_name":{"type":"string"}},"type":"object"},"StorageRestorePublicationBody":{"type":"object"},"StorageSetPublicationVisibilityBody":{"properties":{"hidden":{"description":"true — скрыть публикацию (публичный GET → 404-маска), false — показать.","type":"boolean"}},"type":"object"},"StorageUnpublishSceneBody":{"type":"object"},"TariffDeleteTariffPlanBody":{"description":"DeleteTariffPlanRequest — code живого плана.","type":"object"},"TariffEditTariffPlanBody":{"description":"EditTariffPlanRequest — ПОЛНАЯ замена полей плана code (не partial:\nфронт-конструктор шлёт весь input).","properties":{"is_active":{"type":"boolean"},"name":{"type":"string"},"period":{"title":"пусто → month; year запрещён (авансов не берём)","type":"string"},"price":{"format":"int64","type":"string"},"sort":{"format":"int64","type":"string"},"vat_code":{"format":"int32","title":"0 → не трогать (конструктор шлёт полный input)","type":"integer"}},"type":"object"},"TariffSetCompanyPlanBody":{"description":"SetCompanyPlanRequest — назначение плана компании (admin/superadmin).","properties":{"code":{"description":"Код живого АКТИВНОГО плана; пустая строка = снять план (безлимит).","type":"string"}},"type":"object"},"TariffSetTariffLimitsBody":{"description":"SetTariffLimitsRequest — полный набор лимитов плана (replace-set).","properties":{"limits":{"items":{"$ref":"#/definitions/v1TariffLimit"},"type":"array"}},"type":"object"},"apiaccountv1ListPayoutsResponse":{"properties":{"min_amount_kop":{"description":"Нижний порог заявки: комиссия банка не зависит от суммы, и выплата в сто\nрублей стоит площадке столько же, сколько десять тысяч.","format":"int64","type":"string"},"next_wave_at":{"description":"Ближайшая волна — показываем до подачи заявки.","format":"date-time","type":"string"},"result":{"items":{"$ref":"#/definitions/v1PayoutRequestItem"},"type":"array"}},"type":"object"},"apiadminv1ListPayoutsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Payout"},"type":"array"},"limit":{"format":"int32","type":"integer"},"page":{"format":"int32","type":"integer"},"total":{"format":"int64","type":"string"}},"type":"object"},"apicatalogv1MiniUser":{"properties":{"id":{"format":"int32","type":"integer"},"name":{"type":"string"}},"type":"object"},"apicatalogv1PageRequest":{"properties":{"limit":{"description":"Количество значений на странице. Минимум — 1, максимум — 100.\n\nРазмер страницы.","format":"int64","minimum":1,"type":"integer"},"number":{"default":1,"description":"Номер страницы, отсчет идет с 1.\n\nНомер страницы, с 1. Не передан вместе с `limit` — сервер возьмёт первую.","format":"int64","minimum":1,"type":"integer"}},"type":"object"},"apistoragev1MiniUser":{"properties":{"id":{"format":"int32","type":"integer"},"name":{"type":"string"}},"type":"object"},"apistoragev1PageRequest":{"properties":{"limit":{"description":"Количество значений на странице. Минимум — 1, максимум — 100.\nБ граница выровнена с catalog.PageRequest (lte:100)\nДО массовой пагинации — иначе разнобой закрепился бы в новых ручках.\nРасширение допустимых значений — не ломающее.\n\nРазмер страницы.","format":"int64","minimum":1,"type":"integer"},"number":{"default":1,"description":"Номер страницы, отсчет идет с 1.\n\nНомер страницы, с 1. Не передан вместе с `limit` — сервер возьмёт первую.","format":"int64","minimum":1,"type":"integer"}},"type":"object"},"protobufNullValue":{"description":"`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.","type":"string"},"v1AcceptInviteRequest":{"description":"AcceptInviteRequest — принять приглашение. Ровно ОДНО из полей (email-путь и\nin-app по id); «ровно одно» проверяет хендлер (min_len с token снят, иначе\nValidateAll резал бы in-app вызов без токена).","properties":{"invite_id":{"format":"int64","type":"string"},"token":{"type":"string"}},"type":"object"},"v1AccessPolicy":{"description":"Политика закрывает ресурс целиком. Пароль никогда не возвращается: наружу\nвыходит только has_password. audience_id — buyer audience магазина, не\nstaff role и не platform role.","properties":{"active":{"type":"boolean"},"audience_id":{"format":"int64","type":"string"},"code":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"grant_ttl_seconds":{"format":"int32","type":"integer"},"has_password":{"readOnly":true,"title":"read-only","type":"boolean"},"id":{"format":"int64","type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"password_version":{"format":"int64","readOnly":true,"title":"read-only; смена пароля отзывает старые grants","type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int64","readOnly":true,"title":"read-only OCC","type":"string"}},"type":"object"},"v1AccessPolicyResponse":{"properties":{"result":{"$ref":"#/definitions/v1AccessPolicy"}},"type":"object"},"v1AddCompanyCustomerRequest":{"properties":{"email":{"type":"string"}},"type":"object"},"v1AddContainerToCollectionRequest":{"properties":{"collection_id":{"format":"int64","type":"string"},"container_id":{"format":"int64","type":"string"}},"type":"object"},"v1AddContainerToCollectionResponse":{"type":"object"},"v1AddFileToCollectionRequest":{"properties":{"collection_id":{"format":"int64","type":"string"},"file_id":{"type":"string"},"order_index":{"format":"int32","title":"позиция вставки (default = max+1)","type":"integer"}},"type":"object"},"v1AddFileToCollectionResponse":{"type":"object"},"v1AddToCartResponse":{"type":"object"},"v1AddToWishlistResponse":{"type":"object"},"v1AdminDeleteOrgBody":{"description":"Admin-префикс в имени — чтобы не коллидировать с org.v1.DeleteOrgRequest\nв общем swagger-merge (иначе definition org-ручки переименовался бы —\nнарушение аддитивности П2).","properties":{"confirm":{"description":"Двойная защита от случайного оффбординга: без confirm=true запрос\nотклоняется (InvalidArgument CONFIRM_REQUIRED).","type":"boolean"}},"type":"object"},"v1AdminDeleteOrgResponse":{"type":"object"},"v1AdminOrg":{"properties":{"address":{"type":"string"},"block_reason":{"description":"причина бана (BlockOrg reason); пусто = не блокирована/без причины.\nЖивёт вместе со status='blocked': UnblockOrg очищает.","type":"string"},"can_publish_templates":{"type":"boolean"},"country":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"email":{"type":"string"},"id":{"format":"int32","type":"integer"},"members_count":{"format":"int32","type":"integer"},"name":{"type":"string"},"owner_email":{"description":"админ (аддитивно): владелец человекочитаемо (join users по owner_id);\nпустые строки = владелец не найден (удалён из users).","type":"string"},"owner_id":{"format":"int32","type":"integer"},"owner_name":{"title":"«Имя Фамилия», фолбэк username","type":"string"},"phone":{"type":"string"},"plan":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1AdminOrgResponse":{"properties":{"result":{"$ref":"#/definitions/v1AdminOrg"}},"type":"object"},"v1AdminUser":{"properties":{"birth_date":{"type":"string"},"company_id":{"format":"int32","type":"integer"},"country":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"delete_after":{"format":"date-time","type":"string"},"email":{"type":"string"},"email_verified":{"type":"boolean"},"first_name":{"type":"string"},"id":{"format":"int32","type":"integer"},"language":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"phone":{"type":"string"},"providers":{"items":{"type":"string"},"type":"array"},"roles":{"items":{"type":"string"},"type":"array"},"status":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1AdminUserResponse":{"properties":{"result":{"$ref":"#/definitions/v1AdminUser"}},"type":"object"},"v1ApiToken":{"description":"ApiToken — токен в списке: маска вместо значения (plaintext не хранится).","properties":{"contour":{"description":"Контур ключа (план dev/prod Э1): \"prod\" — пишет на живой сайт;\n\"dev\" — в черновик компании, публикует владелец вручную. Пусто = prod.","type":"string"},"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"last_used_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"revoked_at":{"format":"date-time","type":"string"},"scopes":{"items":{"type":"string"},"type":"array"},"token_mask":{"title":"всегда \"vz_pat_********\"","type":"string"}},"type":"object"},"v1AppliedPromotion":{"description":"снимок применённой акции (в строку корзины/заказа и в блок итога).","properties":{"amount":{"format":"int32","title":"суммарная выгода этой акции (целые единицы валюты)","type":"integer"},"code":{"description":"код, по которому дана эта скидка (пусто = скидка сработала сама).\nБерётся из снимка заказа, поэтому виден и в старых заказах, где ключ уже\nпогашен или удалён: «чем расплатились» — факт сделки, а не ссылка на\nсправочник. Покупателю отвечает на «а промокод-то сработал?», продавцу — на\n«по какому коду прошла эта скидка».","type":"string"},"description":{"title":"Б5.1: «Описание условий» — видит покупатель в корзине","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"product_discount | order_discount","type":"string"},"name":{"title":"видит покупатель","type":"string"}},"type":"object"},"v1ApplyPromoCodeRequest":{"properties":{"code":{"type":"string"},"company_id":{"format":"int32","title":"магазин (витрина)","type":"integer"}},"type":"object"},"v1Article":{"properties":{"announce":{"title":"анонс для карточки в ленте","type":"string"},"category_id":{"format":"int32","title":"рубрика (news-категория)","type":"integer"},"category_name":{"readOnly":true,"title":"read-only: рубрика (чип в ленте/хлебные крошки)","type":"string"},"cover":{"$ref":"#/definitions/v1MiniFile"},"cover_id":{"title":"uuid обложки (на запись)","type":"string"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apicatalogv1MiniUser"},"deleted_after":{"format":"date-time","type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW; прод/аноним = false).","type":"boolean"},"galleries":{"items":{"$ref":"#/definitions/v1Gallery"},"type":"array"},"gallery_ids":{"description":"Б-Галереи (волна 3, Э5): привязки статьи к галереям компании (решение 6\nвладельца). gallery_ids — набор по порядку; galleries — содержимое на\nЧТЕНИИ. Оба поля заполняются ТОЛЬКО у ГЛАВНОЙ статьи ответа\n(GetArticle/BySlug/Create/Edit): в ленте ListArticles и в related галереи\nне грузятся (ленивость §4.5 паспорта — там нужна только обложка).","items":{"format":"int64","type":"string"},"type":"array"},"id":{"format":"int32","type":"integer"},"is_deleted":{"type":"boolean"},"is_published":{"type":"boolean"},"published_at":{"format":"date-time","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"slug":{"description":"MED-5: слаг верхним уровнем — зеркало ProductShort.slug=14. Дублирует\nseo.slug (источник истины — колонка articles.slug), чтобы карточки лент и\nссылки строились без разбора вложенного seo. '' допустимо (статья без слага).","type":"string"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apicatalogv1MiniUser"},"views":{"format":"int32","readOnly":true,"title":"просмотры (read-only; для «популярных»)","type":"integer"}},"title":"«Статьи/Новости» ------------------------------------------------------","type":"object"},"v1ArticleInput":{"description":"Ввод на создание статьи (create/edit-паттерн; company_id — из токена).","properties":{"announce":{"type":"string"},"category_id":{"format":"int32","type":"integer"},"cover_id":{"type":"string"},"gallery_ids":{"description":"Б-Галереи (Э5): привязки создаваемой статьи (replace-set в присланном\nпорядке). Флага replace на создании нет — у новой статьи нечего сохранять.","items":{"format":"int64","type":"string"},"type":"array"},"is_published":{"type":"boolean"},"published_at":{"format":"date-time","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"slug":{"description":"слаг верхним уровнем — симметрия с Article.slug=19 в выдаче\n(фронт шлёт слаг в корне input). ПРИОРИТЕТ над seo.slug; пусто → фолбэк на\nseo.slug, пусто и там → автогенерация из title. Та же валидация\n(числовой/форма/RESERVED), что у категории и товара.","type":"string"},"title":{"type":"string"}},"type":"object"},"v1ArticleRelatedRef":{"properties":{"related_article_id":{"format":"int32","type":"integer"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1AttributeDefinition":{"description":"Определение характеристики магазина (тип + правила).","properties":{"code":{"type":"string"},"data_type":{"description":"Тип значения атрибута. Ось переключателя — всегда `select`.","enum":["string","number","bool","select","multiselect","date","color","url","group"],"title":"string|number|bool|select|multiselect|date|color|url|group (whitelist в хендлере)","type":"string"},"default_value":{},"deleted_after":{"format":"date-time","readOnly":true,"title":"read-only","type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"id":{"format":"int64","type":"string"},"is_deleted":{"readOnly":true,"title":"read-only","type":"boolean"},"is_filterable":{"type":"boolean"},"is_required":{"type":"boolean"},"name":{"type":"string"},"options":{"items":{"$ref":"#/definitions/v1AttributeOption"},"type":"array"},"section":{"title":"пусто → 'characteristics'","type":"string"},"show_admin_list":{"type":"boolean"},"show_admin_product":{"description":"Безопасная административная проекция surface-флагов. optional нужен,\nчтобы старый backend (поля нет) отличался от явного false. Audience id и\nbuyer visibility в этот общий справочник намеренно не входят.","type":"boolean"},"sort_order":{"format":"int32","type":"integer"},"ui_settings":{"description":"настройки отображения значений в переключателях витрины\n{chip_size:\"s\"|\"m\"|\"l\", grid_cols:0|2|3|4|5|6}; отсутствие/пусто = дефолты.\nWhitelist значений и отбрасывание неизвестных ключей — в хендлере.","type":"object"},"unit":{"type":"string"},"validation":{"type":"object"},"widget":{"description":"Вид переключателя на витрине. Пусто = не задан.","enum":["text","select","icon","swatch","photo"],"type":"string"}},"type":"object"},"v1AttributeFieldAccessResponse":{"properties":{"access":{"$ref":"#/definitions/v1FieldAccessSettings"},"attribute_id":{"format":"int64","type":"string"}},"type":"object"},"v1AttributeFilter":{"description":"Фасет-фильтр каталога: values → IN по строковым значениям,\nmin/max → диапазон по числовым.","properties":{"attribute_id":{"format":"int64","type":"string"},"max":{"format":"double","type":"number"},"min":{"format":"double","type":"number"},"values":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1AttributeOption":{"description":"Опция select/multiselect-атрибута. image_id — иконка значения,\nфайл компании section='icon'; '' = снять); image_url — read-only резолв.","properties":{"color_hex":{"type":"string"},"id":{"format":"int64","type":"string"},"image_id":{"type":"string"},"image_url":{"readOnly":true,"title":"read-only","type":"string"},"label":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"value":{"type":"string"}},"type":"object"},"v1AttributeSection":{"description":"Секция «О товаре»: группировка значений по section.","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductAttributeValue"},"type":"array"},"section":{"type":"string"},"title":{"type":"string"}},"type":"object"},"v1Audience":{"properties":{"active":{"type":"boolean"},"code":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"role_ids":{"items":{"format":"int64","type":"string"},"type":"array"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"string"}},"type":"object"},"v1AudienceResponse":{"properties":{"result":{"$ref":"#/definitions/v1Audience"}},"type":"object"},"v1AuthMethod":{"properties":{"can_unlink":{"type":"boolean"},"linked":{"type":"boolean"}},"type":"object"},"v1AuthTokens":{"properties":{"access_expires_at":{"format":"date-time","type":"string"},"access_token":{"type":"string"},"refresh_expires_at":{"format":"date-time","type":"string"},"refresh_token":{"type":"string"}},"type":"object"},"v1BatchUpsertPricingRulesRequest":{"properties":{"idempotency_key":{"type":"string"},"items":{"items":{"$ref":"#/definitions/v1PricingRuleBatchItem"},"type":"array"}},"type":"object"},"v1BulkDeleteLeadsRequest":{"properties":{"ids":{"items":{"format":"int64","type":"string"},"type":"array"}},"type":"object"},"v1BulkLeadsResult":{"properties":{"affected":{"format":"int32","type":"integer"}},"type":"object"},"v1BulkSetLeadColumnRequest":{"properties":{"column_id":{"format":"int64","type":"string"},"ids":{"items":{"format":"int64","type":"string"},"type":"array"}},"type":"object"},"v1CancelDeletionResponse":{"type":"object"},"v1CancelPayoutRequest":{"properties":{"id":{"format":"int64","type":"string"}},"type":"object"},"v1CancelPayoutResponse":{"type":"object"},"v1CanvasAsset":{"description":"Ассет = готовый фрагмент библиотеки файлом + метаданные. Вставка = копия без\nсвязи, синка нет → поля version НЕТ (осознанно, ср. CanvasComponent).","properties":{"category":{"description":"Задел группировки библиотеки ('шаблоны'/'паттерны'/'текстуры'). Свободный\nярлык, НЕ машинный code к нему не применяется): набор значений ещё не\nзакреплён, whitelist появится вместе с UI-разделами библиотеки.","type":"string"},"created_at":{"format":"date-time","type":"string"},"h":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"owner_scope":{"description":"Владелец строки: 'global' — платформенная статика Vizen (пишет только\nсуперадмин), 'company' — библиотека магазина. На создании пусто = 'company'.\nВ ответе всегда заполнен. company_id наружу НЕ отдаётся: тенант берётся из\nтокена, а знать чужой id клиенту незачем.","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_file_id":{"type":"string"},"source":{"$ref":"#/definitions/v1MiniFile"},"source_file_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"visibility":{"type":"string"},"w":{"description":"bbox фрагмента; необязателен (у паттерна/текстуры размера может не быть).","format":"int32","type":"integer"}},"type":"object"},"v1CanvasAssetResponse":{"properties":{"result":{"$ref":"#/definitions/v1CanvasAsset"}},"type":"object"},"v1CanvasComponent":{"description":"Компонент = фрагмент сцены файлом + метаданные. w/h — bbox фрагмента\n(сетка Assets и вставка); version — сигнал обновления инстансов.","properties":{"created_at":{"format":"date-time","type":"string"},"dev_dirty":{"title":"есть неопубликованные правки (дев-контур)","type":"boolean"},"h":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_file_id":{"type":"string"},"source":{"$ref":"#/definitions/v1MiniFile"},"source_file_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int32","readOnly":true,"title":"read-only: растёт на «Обновить компонент»","type":"integer"},"w":{"format":"int32","type":"integer"}},"type":"object"},"v1CanvasComponentResponse":{"properties":{"result":{"$ref":"#/definitions/v1CanvasComponent"}},"type":"object"},"v1CanvasDocument":{"description":"Именованный документ Design Editor («Логотип компании»). Сцена Fabric\nхранится ФАЙЛОМ (section canvas-source) — API гоняет только file_id,\nсодержимое сцены ходит через storage (presign), БД не раздувается base64.","properties":{"created_at":{"format":"date-time","type":"string"},"dev_dirty":{"description":"Э0.2: документ тронут в дев-черновике (маркер «есть неопубликованные\nправки»). В прод-контуре всегда false.","type":"boolean"},"frames":{"items":{"$ref":"#/definitions/v1CanvasFrame"},"type":"array"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_file_id":{"type":"string"},"source":{"$ref":"#/definitions/v1MiniFile"},"source_file_id":{"type":"string"},"type":{"description":"Тип: banner — фреймы под брейкпоинты витрины; product-cards — флоу\nкарточек товара (Figma-Canvas Э0, включение UI — М3); project/design —\nрезерв («своя Фигма»). Пусто при создании → banner.","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1CanvasDocumentResponse":{"properties":{"result":{"$ref":"#/definitions/v1CanvasDocument"}},"type":"object"},"v1CanvasDocumentUsage":{"description":"Место использования документа. С «Где используется» (2026-09-13) ответ\nотвечает на вопрос владельца «на каких СТРАНИЦАХ стоит этот канвас», а не\n«в каких блоках»: блок-баннер резолвится до страницы (товар, раздел/страница,\nстатья, лейаут, системная страница), и `content_block` остаётся ТОЛЬКО для\nблока, который никуда не поставлен, — то есть для честного «блок без страниц».","properties":{"block_id":{"description":"Блок-баннер, через который документ попал на страницу; 0 — ссылка не\nблочная (галерея карточки товара). Нужен в ответе, потому что один блок\nзаконно стоит на нескольких страницах, а одна страница может нести два\nразных блока с этим документом: без block_id строки схлопывались бы.","format":"int64","type":"string"},"entity_id":{"type":"string"},"entity_type":{"title":"product | category | article | theme | system | gallery | content_block","type":"string"},"slot":{"description":"Слот привязки оформления (header/footer/body…) — пусто у зон страницы\n(product_content_blocks и родня) и у галерей.","type":"string"},"title":{"type":"string"}},"type":"object"},"v1CanvasFrame":{"description":"Фрейм-выход документа: картинка под диапазон ширин экрана [band_min..band_max).","properties":{"band_max":{"format":"int32","title":"отсутствует = ∞","type":"integer"},"band_min":{"format":"int32","type":"integer"},"file":{"$ref":"#/definitions/v1MiniFile"},"file_id":{"type":"string"},"frame_key":{"description":"Э0.2: СТАБИЛЬНЫЙ ключ кадра из сцены (data.shapeId фрейма Fabric).\nОБЯЗАТЕЛЕН на записи: это натуральный ключ replace-set'а дев-контура и\nключ сопоставления при публикации. Без него ключом остаётся позиция, и\nперестановка кадров даёт ложный конфликт публикации/схлопывание строк.","type":"string"},"h":{"format":"int32","type":"integer"},"hidden":{"title":"👁: не выводить на витрину","type":"boolean"},"kind":{"description":"М3 (Т41/Т46): НАЗНАЧЕНИЕ кадра — как он интегрируется у потребителя.\nbanner — комплект картинок под разрешения витрины; product-card — слайд\nгалереи товара; free — просто картинка библиотеки. В одном документе\nзаконно лежат кадры разного назначения, каждый инжект берёт свои.\nПусто на записи → дефолт ТИПА ДОКУМЕНТА (banner→banner,\nproduct-cards→product-card, design/project→free).","type":"string"},"sort_order":{"format":"int32","readOnly":true,"title":"read-only: порядок = позиция в массиве при записи","type":"integer"},"w":{"format":"int32","type":"integer"}},"type":"object"},"v1CartItem":{"properties":{"base_unit_price":{"description":"цена строки ДО скидки (0 = скидки нет); price.price = цена со скидкой.","format":"int32","type":"integer"},"catalog_unit_price":{"description":"Безопасное объяснение переключения на фиксированную коммерческую цену.\nИдентификатор и внутреннее имя правила покупателю не раскрываются.","format":"int32","type":"integer"},"combo_items":{"items":{"$ref":"#/definitions/v1ComboItem"},"type":"array"},"company_id":{"format":"int32","title":"магазин товара","type":"integer"},"data":{"type":"object"},"is_combo":{"description":"+: строка — КОМБО-НАБОР, и вот из чего он состоит.\n\nЗачем в корзине: набор едет одной позицией, и покупатель видит только его\nимя и цену. «Почему 61 000, если кровать стоит 40 000» — вопрос, на который\nкорзина обязана отвечать сама, иначе человек уходит проверять на карточку.\nСостав приходит с ценами ВНУТРИ набора (та же формула, что на карточке и в\nзаказе), поэтому витрине не нужно ничего вычислять — у неё в подстановках\nвсё равно нет выражений.","type":"boolean"},"is_gift":{"description":".v1.1: строка-подарок (auto-gift). unit_price=0, base_unit_price=ценность;\nфронт помечает и БЛОКИРУЕТ редактирование (количество фиксировано движком).","type":"boolean"},"key":{"type":"string"},"line_total":{"format":"int32","title":"price * quantity","type":"integer"},"name":{"title":"снимок названия","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"price":{"$ref":"#/definitions/v1ProductPrice"},"price_source":{"title":"catalog | configuration | combo | pricing_rule","type":"string"},"pricing_min_quantity":{"format":"int32","type":"integer"},"pricing_quantity_scope":{"title":"line | product","type":"string"},"product_id":{"format":"int32","type":"integer"},"promotion":{"$ref":"#/definitions/v1AppliedPromotion"},"promotion_locked":{"type":"boolean"},"quantity":{"format":"int32","type":"integer"},"slug":{"description":"Плоский адрес товара для ссылки из корзины. Пусто у legacy-товара без\nslug; витрина использует product_id как совместимый fallback.","type":"string"}},"type":"object"},"v1CatalogSnapshot":{"description":"CatalogSnapshot — карточка снапшота (без payload: он тяжёлый и наружу\nне отдаётся). int64 в protojson приходят строками — фронт нормализует.","properties":{"created_at":{"format":"date-time","type":"string"},"created_by":{"format":"int64","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"manual|auto|pre_restore (whitelist в Go, CHECK в 0036)","type":"string"},"name":{"type":"string"},"size_bytes":{"format":"int64","type":"string"}},"type":"object"},"v1Category":{"properties":{"comments_enabled":{"description":"включатели, tri-state строкой '' = NULL (наследует витрину) | true | false.\n\nКомментарии в разделе. Тройное состояние СТРОКОЙ: `\"\"` — наследовать, `\"true\"`, `\"false\"`.","enum":["","true","false"],"type":"string"},"count_articles":{"description":"число ОПУБЛИКОВАННЫХ статей рубрики (для type=news; read-only,\nденорм на чтении). Для не-news = 0.","format":"int32","readOnly":true,"type":"integer"},"count_products":{"format":"int32","type":"integer"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apicatalogv1MiniUser"},"deleted_after":{"format":"date-time","type":"string"},"description":{"type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"galleries":{"items":{"$ref":"#/definitions/v1Gallery"},"type":"array"},"gallery_ids":{"description":"Б-Галереи (волна 3, Э5): ПРИВЯЗКИ категории к галереям компании — та же\nформа и та же семантика, что у товара (решение 6 владельца: галерея есть\nу категории ВСЕХ типов, включая model).\ngallery_ids — на ЗАПИСИ (CreateCategory принимает Category целиком) и\n на чтении: набор привязок по порядку показа. Чужая/удалённая галерея →\n NotFound GALLERY_NOT_FOUND; больше 10 на объект → GALLERIES_TOO_MANY.\ngalleries — на ЧТЕНИИ: содержимое по порядку привязки (у canvas-галерей\n items уже подменены кадрами документа). Отдаётся ТОЛЬКО в КАРТОЧКЕ\n (GetCategory/GetCategoryBySlug) и в ответах Create/EditCategory:\n GetCategories галереи не грузит (ленивость §4.5 паспорта).","items":{"format":"int64","type":"string"},"type":"array"},"id":{"format":"int32","type":"integer"},"is_deleted":{"type":"boolean"},"is_home":{"description":"категория-«Главная» страница магазина (read-only; ровно одна живая\nна компанию). Фронт исключает её из меню/деревьев сам; удалить/переместить/\nснять с публикации нельзя (инварианты сервера).","readOnly":true,"type":"boolean"},"is_published":{"type":"boolean"},"is_show_menu":{"type":"boolean"},"name":{"type":"string"},"order":{"format":"int32","type":"integer"},"page_template":{"description":"задел шаблона (page_template; v1 только 'default', UI не показываем).","type":"string"},"parent_id":{"format":"int64","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_id":{"title":"главная картинка (унифицировано с товаром)","type":"string"},"questions_enabled":{"description":"Вопросы в разделе. Тройное состояние СТРОКОЙ: `\"\"` — наследовать, `\"true\"`, `\"false\"`.","enum":["","true","false"],"type":"string"},"root_id":{"format":"int64","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"sidebar_config":{"description":"конфиг сайдбара news (raw JSON массив виджетов; конв. №8 — bytes, не\nStruct). Пусто = сайдбар не задан. Валидируется по whitelist типов в Go.","format":"byte","type":"string"},"type":{"description":"тип страницы (product|page|news; whitelist ValidCategoryType). Create\nпринимает из этого поля; Edit — через EditCategoryRequest.Update.type.\n\nТип страницы. Пусто при создании = product.","enum":["","product","page","news"],"type":"string"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apicatalogv1MiniUser"}},"type":"object"},"v1CategoryAttribute":{"description":"Привязка атрибута к категории (+переопределения).\ncode/name/data_type — read-only резолвы из определения (для UI админки;\nна запись учитывается только attribute_id + переопределения).","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"readOnly":true,"title":"read-only","type":"string"},"data_type":{"readOnly":true,"title":"read-only","type":"string"},"default_value":{},"is_required":{"type":"boolean"},"name":{"readOnly":true,"title":"read-only","type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1CategorySpecBinding":{"description":"Привязка шаблона характеристик к узлу.","properties":{"sort_order":{"format":"int32","type":"integer"},"template_id":{"format":"int64","type":"string"}},"type":"object"},"v1CategoryValueInput":{"description":"Значение ТТХ категории на запись (tri-state).","properties":{"attribute_id":{"format":"int64","type":"string"},"state":{"type":"string"},"value":{"title":"при state=value"}},"type":"object"},"v1CategoryValueView":{"description":"Значение ТТХ категории на чтение.","properties":{"attribute_id":{"format":"int64","type":"string"},"state":{"type":"string"},"value":{}},"type":"object"},"v1ChangePasswordRequest":{"properties":{"new_password":{"type":"string"},"old_password":{"description":"Пусто допустимо ТОЛЬКО когда пароля ещё нет (вход был через провайдера):\nтогда это первичная установка пароля. Проверку делает сервер.","type":"string"},"session_scope":{"$ref":"#/definitions/v1PasswordSessionScope"}},"type":"object"},"v1ChangePasswordResponse":{"type":"object"},"v1ChangeUsernameRequest":{"properties":{"username":{"type":"string"}},"type":"object"},"v1ChangeUsernameResponse":{"properties":{"result":{"$ref":"#/definitions/v1Profile"}},"type":"object"},"v1CharGroupInput":{"description":"Данные группы характеристик (создание).","properties":{"code":{"type":"string"},"description":{"type":"string"},"display":{"title":"настройки показа","type":"object"},"label":{"title":"i18n {ru,en}","type":"object"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1CharGroupItem":{"description":"Группа характеристик (краткая карточка справочника).","properties":{"code":{"type":"string"},"id":{"format":"int64","type":"string"},"name":{"title":"из label i18n (или пусто)","type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1Collection":{"properties":{"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"file_count":{"format":"int32","title":"прямые файлы в коллекции","type":"integer"},"id":{"format":"int64","type":"string"},"is_product_linked":{"type":"boolean"},"is_published":{"type":"boolean"},"is_show_in_menu":{"type":"boolean"},"mode":{"type":"string"},"name":{"type":"string"},"order":{"format":"int32","type":"integer"},"parent_id":{"format":"int64","type":"string"},"subfolder_count":{"format":"int32","title":"прямые подпапки","type":"integer"},"total_file_count":{"format":"int32","title":"рекурсивный счёт (эта + все вложенные)","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apistoragev1MiniUser"}},"title":"Collection","type":"object"},"v1CollectionSearchResult":{"properties":{"ancestors":{"items":{"$ref":"#/definitions/v1Collection"},"title":"путь от корня до найденной коллекции","type":"array"},"collection":{"$ref":"#/definitions/v1Collection"}},"type":"object"},"v1ComboItem":{"description":"строка состава комбо-набора (компонент). price/old_price — ВИТРИННЫЕ\n(после акций. preview — резолвнутый объект превью (id + url).","properties":{"base_price":{"description":"базовая цена компонента ЗА ЕДИНИЦУ — вход формулы effective_price.\nФронт считает percent/fixed локально ровно от неё (не от витринной price),\nчтобы прикидка админки совпала с сервером до сохранения.","format":"int32","type":"integer"},"effective_price":{"format":"int32","type":"integer"},"name":{"type":"string"},"old_price":{"format":"int32","type":"integer"},"preview":{"$ref":"#/definitions/v1MiniFile"},"price":{"format":"int32","title":"витринная цена компонента (после акций","type":"integer"},"price_mode":{"description":"попозиционная цена в наборе. price_mode: inherit|fixed|percent|free;\nprice_value: fixed — цена за единицу, percent — скидка 1..99, иначе 0.\neffective_price — вычисленная цена компонента в наборе ЗА ЕДИНИЦУ (от базовой).","type":"string"},"price_value":{"format":"int32","type":"integer"},"product_id":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"},"slug":{"type":"string"}},"type":"object"},"v1ComboItemInput":{"description":"строка ввода состава комбо. sort_order выводится из порядка массива\n(в теле его нет). quantity 1..100; component — товар компании (валидируется в\nхендлере: свой и живой, не комбо — запрет вложенности).","properties":{"component_product_id":{"format":"int32","type":"integer"},"price_mode":{"description":"режим цены компонента в наборе ('' = inherit). Кросс-полевая\nвалидация (fixed\u003e=0, percent 1..99, inherit/free value=0) — в хендлере.","type":"string"},"price_value":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"}},"type":"object"},"v1CommentResponse":{"description":"Комментарий (создание/модерация).","properties":{"result":{"$ref":"#/definitions/v1ProductComment"}},"type":"object"},"v1CommercialPriceFieldValue":{"properties":{"active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int32","readOnly":true,"title":"read-only pricing_rules.id; 0 for a new desired row","type":"integer"},"min_quantity":{"description":"Quantity fields use min_quantity; subtotal fields keep it at 1 and use\nthreshold_amount in minor currency units.","format":"int32","type":"integer"},"price_field_id":{"format":"int64","readOnly":true,"title":"read-only from path","type":"string"},"product_id":{"format":"int32","readOnly":true,"title":"read-only from path","type":"integer"},"threshold_amount":{"format":"int64","type":"string"},"unit_price":{"format":"int32","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"variant_id":{"format":"int64","type":"string"},"version":{"format":"int64","readOnly":true,"title":"read-only","type":"string"}},"type":"object"},"v1CommercialPriceFieldValuesResponse":{"properties":{"replayed":{"type":"boolean"},"result":{"items":{"$ref":"#/definitions/v1CommercialPriceFieldValue"},"type":"array"}},"type":"object"},"v1CompanyCustomer":{"properties":{"created_at":{"format":"date-time","type":"string"},"email":{"type":"string"},"first_seen_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"last_seen_at":{"format":"date-time","type":"string"},"role_ids":{"items":{"format":"int64","type":"string"},"type":"array"},"source":{"type":"string"},"status":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_id":{"format":"int32","type":"integer"},"username":{"type":"string"}},"title":"── Клиенты магазина, покупательские роли и аудитории (V2-1) ──","type":"object"},"v1CompanyCustomerResponse":{"properties":{"result":{"$ref":"#/definitions/v1CompanyCustomer"}},"type":"object"},"v1CompanyRelation":{"description":"Ребро связи для центрального списка: узлы + резолвнутые имена (для таблицы).","properties":{"from_category_id":{"format":"int64","title":"0 = источник-товар","type":"string"},"from_name":{"title":"имя узла-источника (товар/папка)","type":"string"},"from_product_id":{"format":"int64","title":"0 = источник-категория","type":"string"},"id":{"format":"int64","type":"string"},"note":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"to_category_id":{"format":"int64","title":"0 = цель-товар","type":"string"},"to_name":{"title":"имя узла-цели","type":"string"},"to_product_id":{"format":"int64","title":"0 = цель-категория","type":"string"},"type_id":{"format":"int64","type":"string"}},"type":"object"},"v1ConfirmCartRequest":{"properties":{"address":{"title":"адрес доставки/самовывоза как JSON","type":"object"},"comment":{"type":"string"},"company_id":{"format":"int32","title":"магазин (витрина)","type":"integer"},"contact":{"$ref":"#/definitions/v1OrderContact"},"expected_total":{"description":"сумма, которую покупатель видел в корзине. Сервер считает заказ\nзаново по актуальным правилам, и если между показом и отправкой акция\nкончилась или код разобрали, итог молча менялся. Расхождение → 412\nPRICE_CHANGED, корзину надо перечитать. Для заказа с применённым ценовым\nправилом поле обязательно: отсутствие → PRICE_CONFIRMATION_REQUIRED.\noptional отличает честный итог 0 от отсутствующего поля; старые клиенты\nостаются совместимы, пока к их корзине не применилось ценовое правило.","format":"int32","type":"integer"}},"type":"object"},"v1ConfirmCartResponse":{"properties":{"order_id":{"format":"int32","title":"для обратной совместимости","type":"integer"},"result":{"$ref":"#/definitions/v1Order"}},"type":"object"},"v1ConfirmEmailChangeRequest":{"properties":{"token":{"type":"string"}},"type":"object"},"v1ConfirmEmailChangeResponse":{"type":"object"},"v1ConfirmPasswordResetRequest":{"properties":{"new_password":{"type":"string"},"token":{"type":"string"}},"type":"object"},"v1ConfirmPasswordResetResponse":{"type":"object"},"v1ConflictResolution":{"description":"ConflictResolution — решение по конфликту: take_dev|keep_prod.","properties":{"id":{"format":"int64","type":"string"},"resolution":{"type":"string"},"table":{"type":"string"}},"type":"object"},"v1Container":{"properties":{"company_id":{"format":"int32","type":"integer"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"data":{"type":"object"},"deleted_after":{"format":"date-time","type":"string"},"file_ids":{"items":{"type":"string"},"type":"array"},"id":{"format":"int64","type":"string"},"is_deleted":{"type":"boolean"},"is_published":{"type":"boolean"},"is_show_in_menu":{"type":"boolean"},"name":{"type":"string"},"type":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1ContainerComplex":{"properties":{"container":{"$ref":"#/definitions/v1Container"},"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"}},"type":"object"},"v1ContentBlock":{"description":"Переиспользуемый блок «Презентации» (data jsonb → sections).","properties":{"created_at":{"format":"date-time","type":"string"},"deleted_after":{"format":"date-time","readOnly":true,"title":"read-only","type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"group_type":{"description":"Модель групп (2026-08-21): ярлык сборки, если блок является ГРУППОЙ\nоформления. Пусто = обычный блок (виджет или презентация).\n\nКолонка, а не метка внутри секции: ярлык принадлежит НАБОРУ, поэтому\nперестановка виджетов внутри группы его не задевает. До этого он лежал в\nпервой секции и уезжал вместе с ней — у одной группы метка оказывалась на\nкрошках, у другой на карточке.\n\nНабор ярлыков ОТКРЫТ: новый тип заводится строкой в реестре ядра, без\nмиграции. Значения на 2026-08-21: chrome · product · category · news ·\narticle · design · layout.","type":"string"},"id":{"format":"int64","type":"string"},"is_deleted":{"readOnly":true,"title":"read-only","type":"boolean"},"name":{"type":"string"},"sections":{"items":{"$ref":"#/definitions/v1ContentSection"},"type":"array"},"sort_order":{"format":"int32","readOnly":true,"title":"read-only: порядок привязки к товару","type":"integer"}},"type":"object"},"v1ContentBlockResponse":{"description":"Блок (создание/редактирование).","properties":{"result":{"$ref":"#/definitions/v1ContentBlock"}},"type":"object"},"v1ContentSection":{"description":"Секция контент-блока: type из whitelist, payload — произвольный JSON\n({file_id|file_ids|text|url…}); files — read-only резолв file-URL из payload.","properties":{"files":{"items":{"$ref":"#/definitions/v1MiniFile"},"readOnly":true,"title":"read-only","type":"array"},"payload":{"type":"object"},"type":{"type":"string"}},"type":"object"},"v1CopyProductResponse":{"properties":{"new_id":{"format":"int32","type":"integer"}},"type":"object"},"v1CopySceneResponse":{"properties":{"new_id":{"format":"int32","type":"integer"}},"type":"object"},"v1CreateAccessPolicyRequest":{"properties":{"item":{"$ref":"#/definitions/v1AccessPolicy"},"password":{"description":"Требуется для password-режима. В хранилище уходит только Argon2id hash.","type":"string"}},"type":"object"},"v1CreateApiTokenRequest":{"description":"CreateApiTokenRequest — имя + scopes (whitelist domain.ValidScope).","properties":{"contour":{"description":"Контур ключа: \"dev\" — токен пишет в ЧЕРНОВИК компании (нейронка работает\nв дев-контуре, владелец публикует вручную); \"prod\"/пусто — живой сайт.","type":"string"},"expires_at":{"format":"date-time","title":"не задан = бессрочный","type":"string"},"name":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1CreateApiTokenResponse":{"description":"CreateApiTokenResponse — token (plaintext) возвращается ТОЛЬКО здесь и один раз.","properties":{"result":{"$ref":"#/definitions/v1ApiToken"},"token":{"title":"vz_pat_\u003chex32\u003e","type":"string"}},"type":"object"},"v1CreateArticleRequest":{"properties":{"item":{"$ref":"#/definitions/v1ArticleInput"}},"type":"object"},"v1CreateAttributeRequest":{"properties":{"item":{"$ref":"#/definitions/v1AttributeDefinition"}},"type":"object"},"v1CreateAttributeResponse":{"properties":{"result":{"$ref":"#/definitions/v1AttributeDefinition"}},"type":"object"},"v1CreateAudienceRequest":{"properties":{"item":{"$ref":"#/definitions/v1Audience"}},"type":"object"},"v1CreateCanvasAssetRequest":{"properties":{"item":{"$ref":"#/definitions/v1CanvasAsset"}},"type":"object"},"v1CreateCanvasComponentRequest":{"properties":{"item":{"$ref":"#/definitions/v1CanvasComponent"}},"type":"object"},"v1CreateCanvasDocumentRequest":{"properties":{"item":{"$ref":"#/definitions/v1CanvasDocument"}},"type":"object"},"v1CreateCategoryRequest":{"properties":{"item":{"$ref":"#/definitions/v1Category"}},"type":"object"},"v1CreateCategoryResponse":{"properties":{"result":{"$ref":"#/definitions/v1Category"}},"type":"object"},"v1CreateCharGroupRequest":{"description":"Запрос создания группы характеристик.","properties":{"item":{"$ref":"#/definitions/v1CharGroupInput"}},"type":"object"},"v1CreateCharGroupResponse":{"description":"Созданная группа характеристик.","properties":{"result":{"$ref":"#/definitions/v1CharGroupItem"}},"type":"object"},"v1CreateCollectionRequest":{"properties":{"item":{"$ref":"#/definitions/v1Collection"}},"type":"object"},"v1CreateCollectionResponse":{"properties":{"result":{"$ref":"#/definitions/v1Collection"}},"type":"object"},"v1CreateContainerRequest":{"properties":{"item":{"$ref":"#/definitions/v1Container"}},"type":"object"},"v1CreateContainerResponse":{"properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"result":{"$ref":"#/definitions/v1Container"}},"type":"object"},"v1CreateContentBlockRequest":{"description":"Новый блок.","properties":{"item":{"$ref":"#/definitions/v1ContentBlock"}},"type":"object"},"v1CreateCustomerRoleRequest":{"properties":{"item":{"$ref":"#/definitions/v1CustomerRole"}},"type":"object"},"v1CreateEntityMaterialRequest":{"description":"Запрос создания материала.","properties":{"item":{"$ref":"#/definitions/v1EntityMaterial"}},"type":"object"},"v1CreateEntityMaterialResponse":{"description":"Созданный материал + файлы-ссылки.","properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"result":{"$ref":"#/definitions/v1EntityMaterial"}},"type":"object"},"v1CreateFileFromURLRequest":{"description":"п.3: серверная загрузка файла по внешнему URL (импорт каталога).\nsection/file_type — те же значения, что у CreateFile (file_type нормализуется\nиз MIME в категорию); original_name пустой → имя берётся из пути URL.","properties":{"file_type":{"type":"string"},"metadata":{"type":"object"},"original_name":{"type":"string"},"section":{"type":"string"},"source_url":{"type":"string"}},"type":"object"},"v1CreateFileFromURLResponse":{"properties":{"file_size":{"description":"Фактический размер сохранённого объекта (после конвертации в WebP, если\nона случилась) — импортёру не нужен отдельный GetFile для сверки.","format":"int64","type":"string"},"result":{"$ref":"#/definitions/v1File"}},"type":"object"},"v1CreateFileRequest":{"properties":{"file_type":{"type":"string"},"metadata":{"type":"object"},"original_name":{"type":"string"},"section":{"type":"string"},"upload_id":{"type":"string"}},"type":"object"},"v1CreateFileResponse":{"properties":{"result":{"$ref":"#/definitions/v1File"},"upload":{"$ref":"#/definitions/v1CreateFileResponseUpload"}},"type":"object"},"v1CreateFileResponseUpload":{"properties":{"id":{"type":"string"},"mode":{"title":"presign","type":"string"},"url":{"type":"string"}},"type":"object"},"v1CreateFormLeadRequest":{"description":"Ручная заявка (кабинет): контакт вне формы. sandbox_id — куда положить\n(падает в intake этой песочницы); хотя бы одно из name/phone/email непусто.","properties":{"comment":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"sandbox_id":{"format":"int64","type":"string"}},"type":"object"},"v1CreateFormRequest":{"properties":{"item":{"$ref":"#/definitions/v1Form"}},"type":"object"},"v1CreateGalleryRequest":{"properties":{"item":{"$ref":"#/definitions/v1GalleryInput"}},"type":"object"},"v1CreateHTMLDocumentRequest":{"properties":{"item":{"$ref":"#/definitions/v1HTMLDocument"}},"type":"object"},"v1CreateOrderConfigurationRequest":{"properties":{"data":{"type":"object"},"session_id":{"type":"string"}},"type":"object"},"v1CreateOrderConfigurationResponse":{"properties":{"grant_key":{"type":"string"},"id":{"type":"string"},"session_id":{"type":"string"}},"type":"object"},"v1CreateOrgRequest":{"properties":{"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"v1CreatePriceFieldRequest":{"properties":{"item":{"$ref":"#/definitions/v1PriceFieldDefinition"}},"type":"object"},"v1CreatePricingRuleRequest":{"properties":{"item":{"$ref":"#/definitions/v1PricingRule"}},"type":"object"},"v1CreateProductGroupRequest":{"description":"Новая группа (учитываются name + group_type).","properties":{"item":{"$ref":"#/definitions/v1ProductGroup"}},"type":"object"},"v1CreateProductRequest":{"properties":{"item":{"$ref":"#/definitions/v1Product"}},"type":"object"},"v1CreateProductResponse":{"properties":{"result":{"$ref":"#/definitions/v1Product"}},"type":"object"},"v1CreateProductsBatchRequest":{"description":"п.3: пакетное создание товаров (импорт каталога).","properties":{"items":{"description":"items.message.skip=true — ОБЯЗАТЕЛЬНО для контракта частичного успеха:\nбез него ValidateAll рекурсивно валидирует каждый Product и одна позиция\nбез name роняла бы ВЕСЬ запрос в 400 (проверено смоуком). Позиционные\nпроверки делает createProductCore и складывает в results[i].error.","items":{"$ref":"#/definitions/v1Product"},"type":"array"}},"type":"object"},"v1CreateProductsBatchResponse":{"properties":{"created":{"format":"int32","type":"integer"},"failed":{"format":"int32","type":"integer"},"results":{"items":{"$ref":"#/definitions/CreateProductsBatchResponseItem"},"type":"array"}},"type":"object"},"v1CreatePromoCampaignRequest":{"properties":{"item":{"$ref":"#/definitions/v1PromoCampaign"}},"type":"object"},"v1CreatePromoKeyRequest":{"properties":{"item":{"$ref":"#/definitions/v1PromoKey"}},"type":"object"},"v1CreatePromotionRequest":{"properties":{"item":{"$ref":"#/definitions/v1Promotion"}},"type":"object"},"v1CreateRelationTypeRequest":{"description":"Запрос создания типа связи.","properties":{"item":{"$ref":"#/definitions/v1RelationTypeInput"}},"type":"object"},"v1CreateRelationTypeResponse":{"description":"Созданный тип связи.","properties":{"result":{"$ref":"#/definitions/v1RelationType"}},"type":"object"},"v1CreateSandboxRequest":{"properties":{"name":{"type":"string"}},"type":"object"},"v1CreateSceneRequest":{"properties":{"item":{"$ref":"#/definitions/v1Scene"}},"type":"object"},"v1CreateSceneResponse":{"properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"result":{"$ref":"#/definitions/v1Scene"}},"type":"object"},"v1CreateSellerReviewRequest":{"description":"Отзыв от продавца (оффлайн-клиент): product_id пусто = отзыв на магазин.","properties":{"author_name":{"type":"string"},"body":{"type":"string"},"file_ids":{"items":{"type":"string"},"type":"array"},"product_id":{"format":"int32","type":"integer"},"rating":{"format":"int32","type":"integer"}},"type":"object"},"v1CreateSnapshotRequest":{"description":"CreateSnapshotRequest — имя снапшота (может быть пустым — «безымянный»).","properties":{"name":{"type":"string"}},"type":"object"},"v1CreateSnapshotResponse":{"description":"CreateSnapshotResponse — созданный снапшот (обёртка result, как ждёт фронт).","properties":{"result":{"$ref":"#/definitions/v1CatalogSnapshot"}},"type":"object"},"v1CreateSpecTemplateRequest":{"description":"Запрос создания шаблона характеристик.","properties":{"item":{"$ref":"#/definitions/v1SpecTemplateInput"}},"type":"object"},"v1CreateSpecTemplateResponse":{"description":"Созданный шаблон характеристик.","properties":{"result":{"$ref":"#/definitions/v1SpecTemplateInfo"}},"type":"object"},"v1CreateStarterTemplateCategoryRequest":{"properties":{"item":{"$ref":"#/definitions/v1StarterTemplateCategory"}},"type":"object"},"v1CreateTariffPlanRequest":{"description":"CreateTariffPlanRequest — новый план; code — машинный slug.","properties":{"code":{"type":"string"},"is_active":{"type":"boolean"},"name":{"type":"string"},"period":{"title":"пусто → month; year запрещён (авансов не берём)","type":"string"},"price":{"format":"int64","type":"string"},"sort":{"format":"int64","type":"string"},"vat_code":{"format":"int32","title":"0 → «без НДС» (код 1), иначе справочник ФНС 1..12","type":"integer"}},"type":"object"},"v1CreateTariffPlanResponse":{"description":"CreateTariffPlanResponse — созданный план (лимитов ещё нет).","properties":{"result":{"$ref":"#/definitions/v1TariffPlan"}},"type":"object"},"v1CreateWebhookRequest":{"description":"CreateWebhookRequest — url http(s) + события (whitelist domain.ValidWebhookEvent).","properties":{"events":{"items":{"type":"string"},"type":"array"},"secret":{"description":"Пустой = сгенерировать сервером; свой — минимум 16 символов (ключ HMAC).","type":"string"},"url":{"type":"string"}},"type":"object"},"v1CreateWebhookResponse":{"description":"CreateWebhookResponse — созданный вебхук (с секретом).","properties":{"result":{"$ref":"#/definitions/v1Webhook"}},"type":"object"},"v1CustomerRole":{"properties":{"active":{"type":"boolean"},"code":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"string"}},"type":"object"},"v1CustomerRoleResponse":{"properties":{"result":{"$ref":"#/definitions/v1CustomerRole"}},"type":"object"},"v1DashboardDay":{"description":"День периода: создано заявок / выручка done-заявок, созданных в этот день.","properties":{"date":{"title":"YYYY-MM-DD","type":"string"},"orders":{"format":"int32","type":"integer"},"revenue_done":{"format":"int64","title":"целые единицы валюты,","type":"string"}},"type":"object"},"v1DeclineInviteRequest":{"properties":{"invite_id":{"format":"int64","type":"string"}},"type":"object"},"v1DeclineInviteResponse":{"type":"object"},"v1DeleteAccessPolicyResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteArticleResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteAttributeResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCanvasAssetResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCanvasComponentResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCanvasDocumentResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCategoryResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCharGroupResponse":{"description":"Отметка времени soft-delete группы характеристик.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCollectionResponse":{"type":"object"},"v1DeleteColumnResponse":{"type":"object"},"v1DeleteContainerResponse":{"type":"object"},"v1DeleteContentBlockResponse":{"description":"Метка удаления блока.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteCustomerRoleResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteEntityMaterialResponse":{"description":"Пустой ответ удаления.","type":"object"},"v1DeleteFileResponse":{"type":"object"},"v1DeleteFormLeadResponse":{"type":"object"},"v1DeleteFormResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteGalleryResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteHTMLDocumentResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteOrgDomainResponse":{"type":"object"},"v1DeleteOrgResponse":{"properties":{"delete_after":{"description":"Когда магазин удалится окончательно, если не отменить.","format":"date-time","type":"string"}},"type":"object"},"v1DeletePriceFieldResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeletePricingRuleResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteProductGroupResponse":{"description":"Метка удаления группы.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteProductRelationResponse":{"description":"Пустой ответ удаления ребра.","type":"object"},"v1DeleteProductResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeletePromoCampaignResponse":{"properties":{"ok":{"type":"boolean"}},"type":"object"},"v1DeletePromoKeyResponse":{"properties":{"ok":{"type":"boolean"}},"type":"object"},"v1DeletePromotionResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteRelationTypeResponse":{"description":"Отметка времени soft-delete типа связи.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteReviewResponse":{"description":"Метка удаления отзыва.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteSandboxResponse":{"type":"object"},"v1DeleteSceneResponse":{"type":"object"},"v1DeleteSnapshotResponse":{"description":"DeleteSnapshotResponse — пустой.","type":"object"},"v1DeleteSpecTemplateResponse":{"description":"Отметка времени soft-delete шаблона характеристик.","properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteStarterTemplateCategoryResponse":{"type":"object"},"v1DeleteStarterTemplateResponse":{"properties":{"deleted_after":{"format":"date-time","type":"string"}},"type":"object"},"v1DeleteTariffPlanResponse":{"description":"DeleteTariffPlanResponse — пустой; назначенный план → FailedPrecondition PLAN_ASSIGNED.","type":"object"},"v1DeleteWebhookResponse":{"description":"DeleteWebhookResponse — пустой.","type":"object"},"v1DesignBinding":{"description":"Одна привязка ресурса: слот → блок библиотеки.","properties":{"block_id":{"format":"int64","type":"string"},"slot":{"title":"chrome | layout (whitelist на бэке, набор открыт)","type":"string"}},"type":"object"},"v1DesignLayer":{"description":"Слой композиции страницы (порядок в массиве = порядок на странице).","properties":{"edit_id":{"format":"int64","title":"id объекта для перехода (кит/шаблон)","type":"string"},"edit_kind":{"title":"layout | block | '' (нет отдельного редактора)","type":"string"},"layer":{"title":"layout | zones | template","type":"string"},"locked":{"title":"true → заблокированный показ, клик ведёт в edit_*","type":"boolean"},"zone":{"title":"top | bottom | body","type":"string"}},"type":"object"},"v1DesignResolution":{"description":"Разрешение слота по цепочке наследования.","properties":{"block_id":{"format":"int64","title":"0 = привязки нет нигде (системный дефолт)","type":"string"},"source":{"description":"own | category:\u003cid\u003e | shop | default — для подписи «унаследовано от…».","type":"string"}},"type":"object"},"v1DesignUsageRef":{"properties":{"resource_id":{"format":"int64","type":"string"},"resource_type":{"type":"string"},"slot":{"type":"string"}},"type":"object"},"v1DevTableStatus":{"description":"DevTableStatus — счётчики оверлея одной таблицы реестра.","properties":{"deletes":{"format":"int64","type":"string"},"table":{"type":"string"},"upserts":{"format":"int64","type":"string"}},"type":"object"},"v1DiscardDevRequest":{"description":"DiscardDevRequest — без параметров (сбрасывается весь оверлей компании).","type":"object"},"v1DiscardDevResponse":{"description":"DiscardDevResponse — сколько оверлей-строк стёрто.","properties":{"removed":{"format":"int64","type":"string"}},"type":"object"},"v1DoneFileResponse":{"type":"object"},"v1EditArticleRequestUpdate":{"properties":{"announce":{"type":"string"},"category_id":{"format":"int32","type":"integer"},"cover_id":{"type":"string"},"gallery_ids":{"description":"Б-Галереи (Э5): набор привязок статьи, семантика — паттерн\ncategories_replace (как у товара и категории): непустой список → замена;\nпустой БЕЗ флага → не трогать; пустой С флагом → отвязать все.","items":{"format":"int64","type":"string"},"type":"array"},"gallery_ids_replace":{"type":"boolean"},"is_deleted":{"title":"recovery из корзины","type":"boolean"},"is_published":{"type":"boolean"},"published_at":{"format":"date-time","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"slug":{"description":"слаг верхним уровнем (фронт шлёт тот же ArticleInput и на\nправку). optional: не прислан → слаг не трогаем; прислан → ПРИОРИТЕТ над\nseo.slug ('' = снять слаг).","type":"string"},"title":{"type":"string"}},"type":"object"},"v1EditAttributeRequestUpdate":{"properties":{"code":{"type":"string"},"data_type":{"type":"string"},"default_value":{},"is_filterable":{"type":"boolean"},"is_required":{"type":"boolean"},"name":{"type":"string"},"options":{"description":"Непустой список → replace-set опций (ограничение proto3 repeated:\n«очистить все опции» через partial не выражается, ср. gallery).","items":{"$ref":"#/definitions/v1AttributeOption"},"type":"array"},"section":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"ui_settings":{"description":"настройки отображения значений. Value (не Struct) — чтобы JSON null\nотличался от отсутствия: присутствие объекта → перезапись очищенной формой,\nnull → сброс в дефолты (SQL NULL), отсутствие → не трогаем (паттерн\ndefault_value. Чистка/whitelist — в хендлере."},"unit":{"type":"string"},"validation":{"type":"object"},"widget":{"type":"string"}},"type":"object"},"v1EditAttributeResponse":{"properties":{"result":{"$ref":"#/definitions/v1AttributeDefinition"}},"type":"object"},"v1EditCanvasAssetRequestUpdate":{"properties":{"category":{"type":"string"},"h":{"format":"int32","type":"integer"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"source_file_id":{"type":"string"},"visibility":{"type":"string"},"w":{"format":"int32","type":"integer"}},"type":"object"},"v1EditCanvasComponentRequestUpdate":{"properties":{"bump_version":{"type":"boolean"},"h":{"format":"int32","type":"integer"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"source_file_id":{"type":"string"},"w":{"format":"int32","type":"integer"}},"type":"object"},"v1EditCanvasDocumentRequestUpdate":{"properties":{"frames":{"items":{"$ref":"#/definitions/v1CanvasFrame"},"type":"array"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"source_file_id":{"type":"string"}},"type":"object"},"v1EditCategoryRequestUpdate":{"properties":{"comments_enabled":{"description":"включатели, tri-state строкой ('' = NULL — наследовать витрину).","type":"string"},"description":{"type":"string"},"gallery_ids":{"description":"Б-Галереи (Э5): набор привязок категории к галереям, семантика — тот же\nпаттерн categories_replace, что у ProductUpdate (round-trip GET→PUT\nбезопасен): непустой список → полная замена в присланном порядке; пустой\nсписок БЕЗ gallery_ids_replace → привязки не трогаем; пустой список с\ngallery_ids_replace=true → отвязать все. Содержимое галереи правится\nсвоей ручкой (PUT /galleries/{id}).","items":{"format":"int64","type":"string"},"type":"array"},"gallery_ids_replace":{"type":"boolean"},"is_deleted":{"type":"boolean"},"is_published":{"type":"boolean"},"is_show_menu":{"type":"boolean"},"name":{"type":"string"},"order":{"format":"int32","type":"integer"},"page_template":{"type":"string"},"parent_id":{"format":"int64","type":"string"},"preview_id":{"type":"string"},"questions_enabled":{"type":"string"},"root_id":{"format":"int64","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"sidebar_config":{"format":"byte","type":"string"},"type":{"description":"смена типа страницы (whitelist в хендлере; гейт CATEGORY_HAS_CONTENT),\nзадел шаблона и конфиг сайдбара news (raw JSON, конв. №8).","type":"string"}},"type":"object"},"v1EditCategoryResponse":{"properties":{"result":{"$ref":"#/definitions/v1Category"}},"type":"object"},"v1EditCharGroupRequestUpdate":{"description":"Частичное обновление: отсутствующие поля не трогаем.","properties":{"code":{"type":"string"},"description":{"type":"string"},"display":{"type":"object"},"label":{"type":"object"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1EditCharGroupResponse":{"description":"Изменённая группа характеристик.","properties":{"result":{"$ref":"#/definitions/v1CharGroupItem"}},"type":"object"},"v1EditCollectionRequestUpdate":{"properties":{"is_published":{"type":"boolean"},"is_show_in_menu":{"type":"boolean"},"name":{"type":"string"},"order":{"format":"int32","type":"integer"},"parent_id":{"format":"int64","type":"string"}},"type":"object"},"v1EditCollectionResponse":{"properties":{"result":{"$ref":"#/definitions/v1Collection"}},"type":"object"},"v1EditContainerResponse":{"properties":{"last_version":{"format":"int32","type":"integer"},"result":{"$ref":"#/definitions/v1Container"}},"type":"object"},"v1EditContentBlockRequestUpdate":{"description":"Поля: не присланы → не трогаем; sections непустой → replace-set секций\n(ограничение proto3 repeated — «очистить все секции» не выражается, ср. options).","properties":{"group_type":{"description":"Ярлык сборки (модель групп). `optional` намеренно: «не прислали» ≠\n«снять». Пустая строка снимает ярлык — группа становится обычным блоком.","type":"string"},"name":{"type":"string"},"sections":{"items":{"$ref":"#/definitions/v1ContentSection"},"type":"array"}},"type":"object"},"v1EditEntityMaterialResponse":{"description":"Обновлённый материал + файлы-ссылки.","properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"result":{"$ref":"#/definitions/v1EntityMaterial"}},"type":"object"},"v1EditFormRequestUpdate":{"properties":{"code":{"description":"Пустая строка = снять code (proto3 optional не различает «нет»/«сброс» иначе).","type":"string"},"is_active":{"type":"boolean"},"name":{"type":"string"},"sandbox_id":{"description":"Перепривязка формы к песочнице (0 = дефолтная). Не прислано → не трогаем.","format":"int64","type":"string"},"schema":{"format":"byte","type":"string"}},"type":"object"},"v1EditHTMLDocumentRequestUpdate":{"properties":{"assets":{"items":{"$ref":"#/definitions/v1HTMLAsset"},"type":"array"},"level":{"format":"int32","type":"integer"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"source_file_id":{"type":"string"}},"type":"object"},"v1EditOrderConfigurationResponse":{"type":"object"},"v1EditProductGroupRequestUpdate":{"description":"Поля: не присланы → не трогаем.","properties":{"name":{"type":"string"}},"type":"object"},"v1EditProductResponse":{"properties":{"result":{"$ref":"#/definitions/v1Product"}},"type":"object"},"v1EditRelationTypeRequestUpdate":{"description":"Частичное обновление: отсутствующие поля не трогаем.","properties":{"code":{"type":"string"},"label":{"type":"object"},"label_reverse":{"type":"object"},"sort_order":{"format":"int32","type":"integer"},"symmetric":{"type":"boolean"}},"type":"object"},"v1EditRelationTypeResponse":{"description":"Изменённый тип связи.","properties":{"result":{"$ref":"#/definitions/v1RelationType"}},"type":"object"},"v1EditSceneResponse":{"properties":{"last_version":{"format":"int32","type":"integer"},"result":{"$ref":"#/definitions/v1Scene"}},"type":"object"},"v1EditSpecTemplateRequestUpdate":{"description":"Частичное обновление: отсутствующие поля не трогаем.","properties":{"applies_to":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1EditSpecTemplateResponse":{"description":"Изменённый шаблон характеристик.","properties":{"result":{"$ref":"#/definitions/v1SpecTemplateInfo"}},"type":"object"},"v1EditStarterTemplateCategoryRequestUpdate":{"properties":{"name":{"type":"string"},"parent_id":{"format":"int64","title":"0 = в корень","type":"string"},"sort":{"format":"int32","type":"integer"}},"type":"object"},"v1EditStarterTemplateRequestUpdate":{"properties":{"ai_purpose":{"type":"string"},"category_id":{"format":"int64","type":"string"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"required_feature_code":{"type":"string"},"summary":{"type":"string"},"visibility":{"type":"string"}},"type":"object"},"v1EditTariffPlanResponse":{"description":"EditTariffPlanResponse — обновлённый план.","properties":{"result":{"$ref":"#/definitions/v1TariffPlan"}},"type":"object"},"v1EditWebhookResponse":{"description":"EditWebhookResponse — вебхук после правки.","properties":{"result":{"$ref":"#/definitions/v1Webhook"}},"type":"object"},"v1EnterOrgResponse":{"description":"Новая сессия суперадмина на целевую компанию (помечена impersonator_id на бэке).","properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1EntityMaterial":{"description":"Материал при сущности: file|link|note. Незначащие для kind поля пусты\n(file_id для link/note; url для file/note; body для file/link).","properties":{"body":{"title":"kind=note (markdown)","type":"string"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"entity_id":{"type":"string"},"entity_type":{"title":"product|category|content_block|html_document|company","type":"string"},"file_id":{"title":"kind=file (uuid; section='material')","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"file|link|note","type":"string"},"path":{"title":"подпапка-алиас ('research/…', v2-UI)","type":"string"},"sort_order":{"format":"int32","type":"integer"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"url":{"title":"kind=link","type":"string"}},"type":"object"},"v1EntityMaterialCount":{"description":"Счётчик материалов одного узла дерева.","properties":{"count":{"format":"int32","type":"integer"},"entity_id":{"type":"string"},"entity_type":{"type":"string"}},"type":"object"},"v1ExportFormLeadsResponse":{"properties":{"csv":{"format":"byte","type":"string"},"rows":{"format":"int32","type":"integer"}},"type":"object"},"v1FieldAccessSettings":{"properties":{"audience_id":{"format":"int64","type":"string"},"show_admin_list":{"type":"boolean"},"show_admin_product":{"type":"boolean"},"show_api":{"type":"boolean"},"show_export":{"type":"boolean"},"show_storefront_card":{"type":"boolean"},"show_storefront_list":{"type":"boolean"},"version":{"format":"int64","readOnly":true,"title":"read-only","type":"string"},"visibility":{"type":"string"}},"title":"── Переиспользуемые ценовые поля (V2-3) ──","type":"object"},"v1File":{"properties":{"created_at":{"format":"date-time","type":"string"},"file_type":{"type":"string"},"id":{"type":"string"},"metadata":{"type":"object"},"original_name":{"type":"string"},"preview":{"$ref":"#/definitions/v1PreviewFile"},"public_path":{"type":"string"},"section":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_id":{"format":"int32","type":"integer"}},"type":"object"},"v1FiscalOption":{"description":"FiscalOption — строка справочника для выпадающего списка.\n\nСправочник отдаёт сервер, а не хранит фронт: ставки меняются законом (с 2026\nбазовая 22 %), и обновляться должно одно место, а не каждый интерфейс.","properties":{"label":{"type":"string"},"value":{"title":"код для vat_code приходит строкой числа","type":"string"}},"type":"object"},"v1FiscalSettings":{"description":"FiscalSettings — что уходит в чек от имени магазина.\n\nПустые значения допустимы и означают «не выбрано»: тогда касса подставит\nнастройку из своего кабинета. Это не ошибка, а состояние только что\nсозданного магазина, который ещё не подключал оплату.","properties":{"payment_subject":{"title":"commodity, service, job; \"\" — не выбран","type":"string"},"tax_system":{"title":"osn, usn_income, ... ; \"\" — не выбрана","type":"string"},"vat_code":{"format":"int32","title":"справочник ФНС 1..12; 0 — не выбрана","type":"integer"}},"type":"object"},"v1FiscalSettingsResponse":{"properties":{"payment_subjects":{"items":{"$ref":"#/definitions/v1FiscalOption"},"type":"array"},"result":{"$ref":"#/definitions/v1FiscalSettings"},"tax_systems":{"items":{"$ref":"#/definitions/v1FiscalOption"},"type":"array"},"vat_codes":{"items":{"$ref":"#/definitions/v1FiscalOption"},"type":"array"}},"type":"object"},"v1Form":{"description":"Лид-форма. schema — сырой JSON (конвенция №8: поля/оформление/тексты/\nconsent/submit одним аддитивным документом; глубокая валидация — в Go,\ndomain.ValidateFormSchema — строгий контур записи владельцем).","properties":{"code":{"description":"Машинный код; пустая строка в Edit = снять code.","type":"string"},"created_at":{"format":"date-time","readOnly":true,"title":"read-only аудит-поля","type":"string"},"id":{"format":"int64","type":"string"},"is_active":{"description":"Presence обязателен: Create без поля = активна (иначе агент, не знающий про\nфлаг, создавал бы формы, молча не принимающие заявки).","type":"boolean"},"name":{"type":"string"},"sandbox_id":{"description":"Песочница формы (0/absent = дефолтная; резолвится приложением). Контент:\nедет публикацией, живёт в оверлее. Без хард-FK — битый id трактуем как дефолт.","format":"int64","type":"string"},"schema":{"format":"byte","title":"raw JSON; пусто = '{}'","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1FormLead":{"description":"Заявка (владельческий вид). form_name — из snapshot (переживает удаление\nформы); ip показывается как есть — он уже усечён при записи (/24, /48).","properties":{"column_id":{"description":"Канбан песочницы: column_id — колонка; is_spam — антибот-флаг (ортогонален\nстадии); sandbox_id/column_label — джойн-поля для борда.","format":"int64","type":"string"},"column_label":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"form_id":{"format":"int64","type":"string"},"form_name":{"type":"string"},"id":{"format":"int64","type":"string"},"ip":{"type":"string"},"is_spam":{"type":"boolean"},"is_test":{"type":"boolean"},"page_url":{"type":"string"},"referer":{"type":"string"},"sandbox_id":{"format":"int64","type":"string"},"snapshot":{"format":"byte","type":"string"},"status":{"title":"legacy (new|in_progress|done|spam); источник правды — column_id/is_spam","type":"string"},"user_agent":{"type":"string"},"utm":{"format":"byte","type":"string"},"values":{"format":"byte","type":"string"}},"type":"object"},"v1FormLeadResponse":{"properties":{"result":{"$ref":"#/definitions/v1FormLead"}},"type":"object"},"v1FormListItem":{"description":"Строка списка форм: лёгкая проекция без схемы; счётчики для раздела —\nfields_count из схемы (поля-сборщики значений), new_leads из form_leads.","properties":{"code":{"title":"'' = не задан","type":"string"},"fields_count":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"is_active":{"type":"boolean"},"name":{"type":"string"},"new_leads":{"format":"int32","type":"integer"},"sandbox_id":{"format":"int64","title":"песочница формы (0 = дефолтная)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1FormResponse":{"properties":{"result":{"$ref":"#/definitions/v1Form"}},"type":"object"},"v1FormUsage":{"description":"Место использования формы: контент-блок (страница/зона), где она вставлена\nблоком или на который ведёт кнопка/пункт меню (form:\u003cid\u003e).","properties":{"entity_id":{"type":"string"},"entity_type":{"title":"content_block","type":"string"},"title":{"type":"string"}},"type":"object"},"v1Gallery":{"description":"Галерея — самостоятельный ресурс компании: именованный набор медиа по\nпорядку. Одна и та же галерея законно стоит на нескольких объектах\n(«взять галерею из другого товара» — следствие модели, а не фича).","properties":{"canvas_id":{"description":"Канвас-флоу М3: документ product-cards, ведущий элементы галереи\n(0 = флоу нет). Живой, свой, типа product-cards — иначе\nCANVAS_DOCUMENT_NOT_FOUND / CANVAS_TYPE_MISMATCH. Один документ ведёт\nмаксимум ОДНУ живую галерею компании → GALLERY_DUPLICATE_CANVAS.","format":"int64","type":"string"},"dev_dirty":{"description":"(dev/prod): галерея тронута в дев-черновике. В прод-контуре false.","type":"boolean"},"id":{"format":"int64","type":"string"},"items":{"items":{"$ref":"#/definitions/v1GalleryItem"},"type":"array"},"items_total":{"description":"Сколько элементов в галерее ВСЕГО — до проекции ответа\n(`GetProduct*?galleries=cover|active` отдаёт часть галерей одной обложкой).\nRead-only, на записи игнорируется. Без проекции равно длине items.\n\nПоле отдельное, а не «считайте items», потому что с проекцией длина items\nперестаёт быть числом кадров: счётчик «1 из 36» и решение «догружать ли\nгалерею целиком через GET /galleries/{id}» клиент обязан уметь принять,\nне зная, в каком режиме страница сделала запрос.","format":"int32","readOnly":true,"type":"integer"},"layout":{"description":"Тип отображения на витрине: \"\" | \"gallery\" (слайдер, дефолт) | \"spin\"\n(360-крутилка, кадры по порядку). Клиентское поле (в отличие от source,\nкоторый сервер выводит). Потолок элементов зависит от типа (spin шире) —\nчисло валидируется в Go по layout (max_items здесь — общий верхний 48).","type":"string"},"name":{"type":"string"},"source":{"description":"Режим: \"images\" | \"canvas\". На входе можно не слать — сервер выводит из\ncanvas_id (инвариант canvas ⇔ canvas_id!= 0).","type":"string"}},"type":"object"},"v1GalleryInput":{"description":"Тело CreateGallery. company_id не принимается НИКОГДА — тенант только из\nтокена.","properties":{"canvas_id":{"format":"int64","type":"string"},"items":{"items":{"$ref":"#/definitions/v1GalleryItem"},"type":"array"},"layout":{"description":"Тип отображения: \"\" | \"gallery\" (дефолт) | \"spin\". См. Gallery.layout.","type":"string"},"name":{"type":"string"}},"type":"object"},"v1GalleryItem":{"description":"Элемент галереи. kind — РОЛЬ ПОКАЗА, её выводит сервер из типа файла\n(image|video|audio); вручную задаётся только \"html\" (у него нет файла).\nПрисланная роль, не совпавшая с типом файла → GALLERY_ITEM_KIND_MISMATCH:\nтихой починки нет — она дала бы карточку, которая на витрине выглядит не\nтак, как в админке.","properties":{"caption":{"type":"string"},"file":{"$ref":"#/definitions/v1MiniFile"},"html":{"description":"Своя разметка элемента. Потолок — домовой стандарт свободного контента,\n64 КБ (домен MaxGalleryHTMLBytes, зеркало MaxContentBlockDataBytes и\n`schema` форм). Именно max_bytes, а не max_len: у string PGV считает\nmax_len в РУНАХ, и байтовый потолок домена расходился бы с транспортным\nна кириллице вдвое. Без потолка предел был бы 64 МБ на запрос.","type":"string"},"item_key":{"description":"СТАБИЛЬНЫЙ ключ элемента: пусто на входе → ставит сервер, присланный\nсохраняется. По нему элемент остаётся «тем же» при перестановке — это\nключ replace-set'а дев-контура и сопоставления при публикации.","type":"string"},"kind":{"description":"Роль ОТКРЫТАЯ: новое значение не ломает клиентов, поэтому whitelist\n«in» здесь намеренно не ставится (ср. canvas_documents.type).","type":"string"},"poster":{"$ref":"#/definitions/v1MiniFile"}},"type":"object"},"v1GalleryResponse":{"properties":{"result":{"$ref":"#/definitions/v1Gallery"}},"type":"object"},"v1GalleryUpdate":{"description":"Тело EditGallery (partial-update): не прислано → не трогаем; items непустой\n→ replace-set (ограничение proto3 repeated, ср. frames канваса).","properties":{"canvas_id":{"description":"Прислан → менять привязку канваса (0 = отвязать, бэкап элементов снова\nвиден); не прислан → не трогать.","format":"int64","type":"string"},"items":{"description":"Семантика — паттерн categories_replace/gallery_ids_replace: непустой\nсписок → replace-set; пустой список БЕЗ флага → не трогать (round-trip\nGET→PUT безопасен); пустой список С флагом items_replace=true → ОЧИСТИТЬ\nэлементы (галерея остаётся, элементов ноль). Без флага «удалить последний\nэлемент» через repeated не выражается вовсе.","items":{"$ref":"#/definitions/v1GalleryItem"},"type":"array"},"items_replace":{"type":"boolean"},"layout":{"description":"Прислан → сменить тип отображения (\"gallery\"|\"spin\"); не прислан → не трогать.","type":"string"},"name":{"type":"string"}},"type":"object"},"v1GalleryUsage":{"description":"Место использования галереи: объект-владелец (product|category|article) или\nнабор вариантов (variant). entity_id строкой — id владельцев разных типов.","properties":{"entity_id":{"type":"string"},"entity_type":{"type":"string"},"title":{"type":"string"}},"type":"object"},"v1GetArticleResponse":{"description":"Статья + её зоны-блоки + прикреплённые связанные (сиблинги, как GetProduct).","properties":{"content_blocks":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"},"design":{"$ref":"#/definitions/v1ResolvedDesign"},"modal_groups":{"items":{"$ref":"#/definitions/v1ResolvedModalGroup"},"type":"array"},"related":{"items":{"$ref":"#/definitions/v1Article"},"type":"array"},"result":{"$ref":"#/definitions/v1Article"}},"type":"object"},"v1GetAttributesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1AttributeDefinition"},"type":"array"}},"type":"object"},"v1GetCanvasDocumentUsageResponse":{"properties":{"total":{"format":"int32","type":"integer"},"usages":{"items":{"$ref":"#/definitions/v1CanvasDocumentUsage"},"type":"array"}},"type":"object"},"v1GetCartResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetCartResponseResult"}},"type":"object"},"v1GetCartResponseResult":{"properties":{"applied":{"description":"применённые акции для блока «Скидка −X» (названия + суммы).","items":{"$ref":"#/definitions/v1AppliedPromotion"},"type":"array"},"count":{"format":"int64","title":"суммарное количество единиц","type":"integer"},"currency":{"title":"валюта магазина","type":"string"},"current_page":{"format":"int64","type":"integer"},"discount_total":{"description":"суммарная скидка по корзине (товарные + заказная); 0 = скидок нет.","format":"int32","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1CartItem"},"type":"array"},"promo_code":{"description":"код, применённый к этой корзине (пусто = не применён).","type":"string"},"promo_rejected":{"description":"почему предъявленный код не сработал — КОД причины для витрины\n(NOT_FOUND | EXPIRED | EXHAUSTED | PER_CUSTOMER | RULE_INACTIVE |\nBELOW_THRESHOLD | NO_ELIGIBLE | NOT_STACKABLE | NO_EFFECT). Чужой именной\nкупон отдаётся как NOT_FOUND: отдельная причина подтверждала бы, что код\nсуществует. Пусто = код\nприменён либо не предъявлялся. Не ошибка запроса: корзина показывается\nвсегда, отказ объясняется строкой рядом с полем ввода.","type":"string"},"subtotal":{"format":"int32","title":"К ОПЛАТЕ (после скидок; поле-«итог», обратная совместимость)","type":"integer"},"subtotal_before":{"description":"subtotal ДО скидок (для зачёркнутого итога); == subtotal без акций.","format":"int32","type":"integer"},"total":{"format":"int64","title":"число позиций","type":"integer"}},"type":"object"},"v1GetCategoriesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Category"},"type":"array"}},"type":"object"},"v1GetCategoryAttributeValuesResponse":{"description":"Значения ТТХ категории.","properties":{"items":{"items":{"$ref":"#/definitions/v1CategoryValueView"},"type":"array"}},"type":"object"},"v1GetCategoryAttributesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CategoryAttribute"},"type":"array"}},"type":"object"},"v1GetCategoryBySlugResponse":{"description":"Категория + её зоны-блоки (сиблинг — зеркало GetProduct.content_blocks).","properties":{"content_blocks":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"},"design":{"$ref":"#/definitions/v1ResolvedDesign"},"modal_groups":{"items":{"$ref":"#/definitions/v1ResolvedModalGroup"},"type":"array"},"result":{"$ref":"#/definitions/v1Category"}},"type":"object"},"v1GetCategoryResponse":{"properties":{"content_blocks":{"description":"зоны-блоки категории по порядку привязки (сиблинг, как\ncontent_blocks в GetProduct; файлы резолвнуты). Аддитивно.","items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"},"design":{"$ref":"#/definitions/v1ResolvedDesign"},"modal_groups":{"description":"Готовые группы, на которые реально ссылаются публичные блоки ответа.","items":{"$ref":"#/definitions/v1ResolvedModalGroup"},"type":"array"},"result":{"$ref":"#/definitions/v1Category"}},"type":"object"},"v1GetCategorySpecResponse":{"description":"Эффективный набор характеристик категории (резолв по дереву).","properties":{"items":{"items":{"$ref":"#/definitions/v1ResolvedSpecItem"},"type":"array"}},"type":"object"},"v1GetCategorySpecSettingsResponse":{"description":"Режим набора и привязки узла (mode пуст = наследовать родителя).","properties":{"bindings":{"items":{"$ref":"#/definitions/v1CategorySpecBinding"},"type":"array"},"mode":{"title":"\"\" | append | replace | clear","type":"string"}},"type":"object"},"v1GetCollectionResponse":{"properties":{"result":{"$ref":"#/definitions/v1Collection"}},"type":"object"},"v1GetCollectionsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Collection"},"type":"array"}},"type":"object"},"v1GetCompanyDashboardResponse":{"description":"Мини-дашборд продавца (SQL-агрегаты по orders/products).","properties":{"result":{"$ref":"#/definitions/v1GetCompanyDashboardResponseResult"}},"type":"object"},"v1GetCompanyDashboardResponseResult":{"properties":{"avg_order_value":{"format":"int64","title":"средний чек done-заявок (целые единицы валюты,","type":"string"},"currency":{"title":"валюта магазина","type":"string"},"days":{"items":{"$ref":"#/definitions/v1DashboardDay"},"type":"array"},"orders_cancelled":{"format":"int32","type":"integer"},"orders_done":{"format":"int32","type":"integer"},"orders_new":{"format":"int32","type":"integer"},"orders_processing":{"format":"int32","type":"integer"},"products_published":{"format":"int32","type":"integer"},"products_total":{"format":"int32","title":"живые товары","type":"integer"},"revenue_done":{"format":"int64","title":"сумма items_total done-заявок (целые единицы валюты,","type":"string"}},"type":"object"},"v1GetContainerResponse":{"properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"result":{"$ref":"#/definitions/v1Container"}},"type":"object"},"v1GetContainersFromCollectionsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ContainerComplex"},"type":"array"}},"type":"object"},"v1GetContentBlockUsageResponse":{"properties":{"refs":{"items":{"$ref":"#/definitions/v1DesignUsageRef"},"title":"до 100 первых (для списка в диалоге)","type":"array"},"total":{"format":"int32","title":"всего привязок на блок","type":"integer"}},"type":"object"},"v1GetContentBlocksResponse":{"description":"Блоки компании (sort_order здесь не заполняется).","properties":{"result":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"}},"type":"object"},"v1GetDealsBadgeResponse":{"description":"Бейдж непрочитанных сделок.","properties":{"unread_orders":{"format":"int64","type":"integer"}},"type":"object"},"v1GetDesignBindingsResponse":{"properties":{"own":{"items":{"$ref":"#/definitions/v1DesignBinding"},"title":"свои привязки ресурса","type":"array"},"resolved":{"additionalProperties":{"$ref":"#/definitions/v1DesignResolution"},"title":"slot → разрешение цепочки","type":"object"}},"type":"object"},"v1GetDesignLinksBatchResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ProductZoneManifests"},"type":"array"}},"type":"object"},"v1GetEntityMaterialsSummaryResponse":{"description":"Сводка счётчиков материалов по сущностям.","properties":{"items":{"items":{"$ref":"#/definitions/v1EntityMaterialCount"},"type":"array"}},"type":"object"},"v1GetFileCollectionsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CollectionSearchResult"},"type":"array"}},"type":"object"},"v1GetFileResponse":{"properties":{"result":{"$ref":"#/definitions/v1File"}},"type":"object"},"v1GetFilesFromCollectionsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"}},"type":"object"},"v1GetFilesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1File"},"type":"array"},"total":{"description":"Общее число файлов под фильтром (для «показано X из N»); заполняется\nТОЛЬКО при заданном page в запросе.","format":"int64","type":"integer"}},"type":"object"},"v1GetFormUsageResponse":{"properties":{"total":{"format":"int32","type":"integer"},"usages":{"items":{"$ref":"#/definitions/v1FormUsage"},"type":"array"}},"type":"object"},"v1GetGalleryUsageResponse":{"properties":{"total":{"format":"int32","type":"integer"},"usages":{"items":{"$ref":"#/definitions/v1GalleryUsage"},"type":"array"}},"type":"object"},"v1GetGuestOrderConfigurationResponse":{"properties":{"created_at":{"format":"date-time","type":"string"},"data":{"type":"object"},"id":{"type":"string"},"session_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1GetHTMLDocumentContentResponse":{"properties":{"html":{"title":"санитизированный, well-formed","type":"string"},"level":{"format":"int32","title":"всегда 1 (level=2 → NotFound)","type":"integer"},"updated_at":{"format":"date-time","title":"версия документа для кэшей выше","type":"string"}},"type":"object"},"v1GetHTMLDocumentUsageResponse":{"properties":{"total":{"format":"int32","type":"integer"},"usages":{"items":{"$ref":"#/definitions/v1HTMLDocumentUsage"},"type":"array"}},"type":"object"},"v1GetLowStockResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1LowStockItem"},"type":"array"}},"type":"object"},"v1GetModerationQueueResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetModerationQueueResponseResult"}},"type":"object"},"v1GetModerationQueueResponseResult":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1ModerationItem"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1GetMyTariffResponse":{"description":"GetMyTariffResponse — обёртка result (как ждёт фронт-клиент).","properties":{"result":{"$ref":"#/definitions/v1MyTariff"}},"type":"object"},"v1GetMyUsageResponse":{"description":"GetMyUsageResponse — обёртка result (как ждёт фронт-клиент).","properties":{"result":{"$ref":"#/definitions/v1MyUsage"}},"type":"object"},"v1GetOrderResponse":{"properties":{"result":{"$ref":"#/definitions/v1Order"}},"type":"object"},"v1GetOrdersRequest":{"properties":{"filter":{"$ref":"#/definitions/v1GetOrdersRequestFilter"},"page":{"$ref":"#/definitions/apicatalogv1PageRequest"}},"type":"object"},"v1GetOrdersRequestFilter":{"properties":{"company_id":{"format":"int32","title":"задан → заказы магазина (продавцу); иначе свои (покупателю)","type":"integer"},"status":{"format":"int32","type":"integer"}},"type":"object"},"v1GetOrdersResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetOrdersResponseResult"}},"type":"object"},"v1GetOrdersResponseResult":{"properties":{"currentPage":{"description":"Текущая страница.","format":"int64","type":"integer"},"items":{"description":"Список.","items":{"$ref":"#/definitions/v1Order"},"type":"array"},"total":{"description":"Всего заказов.","format":"int64","type":"integer"}},"type":"object"},"v1GetOrgDomainResponse":{"description":"GetOrgDomainResponse — состояние вкладки «Домен» одним вызовом. domain не\nзадан (null) → домен не привязан. Ответ Bind/Verify — тоже это сообщение.","properties":{"allowed":{"title":"FeatureAllowed(custom_domain): false → фронт-апселл","type":"boolean"},"domain":{"$ref":"#/definitions/v1OrgDomain"},"slug_host":{"title":"готовый хост витрины по слагу (сервер собирает)","type":"string"}},"type":"object"},"v1GetOrgUsageResponse":{"properties":{"result":{"$ref":"#/definitions/v1OrgUsage"}},"type":"object"},"v1GetPlatformStatsResponse":{"properties":{"result":{"$ref":"#/definitions/v1PlatformStats"}},"type":"object"},"v1GetProductDesignLinksResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ProductDesignLink"},"type":"array"}},"type":"object"},"v1GetProductRelationsResponse":{"description":"Рёбра связей товара, сгруппированные по типу.","properties":{"groups":{"items":{"$ref":"#/definitions/v1ProductRelationGroup"},"type":"array"}},"type":"object"},"v1GetProductResponse":{"properties":{"attribute_sections":{"description":"Секции «О товаре» значения атрибутов, сгруппированные по section\n(cache-путь через products.attributes_cache).","items":{"$ref":"#/definitions/v1AttributeSection"},"type":"array"},"categories":{"items":{"$ref":"#/definitions/v1MiniCategories"},"type":"array"},"content_blocks":{"description":"Контент-блоки «Презентации» товара по порядку привязки, файлы резолвнуты).","items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"},"design":{"$ref":"#/definitions/v1ResolvedDesign"},"group_info":{"$ref":"#/definitions/v1GroupInfo"},"modal_groups":{"items":{"$ref":"#/definitions/v1ResolvedModalGroup"},"type":"array"},"publication":{"$ref":"#/definitions/v1PublicationInfo"},"result":{"$ref":"#/definitions/v1Product"},"reviews_summary":{"$ref":"#/definitions/v1ReviewsSummary"},"variants_info":{"$ref":"#/definitions/v1VariantsInfo"}},"type":"object"},"v1GetProductSpecResponse":{"description":"Эффективные характеристики объявления (набор модели + значения own\u003eмодель\u003e...).","properties":{"items":{"items":{"$ref":"#/definitions/v1ResolvedSpecItem"},"type":"array"}},"type":"object"},"v1GetProductStockHistoryResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1StockMovement"},"type":"array"}},"type":"object"},"v1GetProductsRequestFilter":{"properties":{"category_id":{"format":"int32","title":"фильтр товаров по категории (для дерева на «Товарах»)","type":"integer"},"company_id":{"format":"int32","type":"integer"},"containment":{"type":"string"},"ids":{"description":"ТЗ производительности (N+1 фронта): батч-чтение по списку id одним\nзапросом (группы/комбо/подборки/акции читали по товару в цикле).","items":{"format":"int32","type":"integer"},"type":"array"},"include_contained":{"type":"boolean"},"include_subtree":{"description":"Агрегация поддерева разделов: товары САМОГО раздела И всех вложенных\n(рекурсивный CTE по categories.parent_id, зеркало include_subtree ленты\nстатей. Нужен магазинам, где товары висят на листьях-брендах, а\nстраница раздела-родителя обязана показывать их все.\n\nПо умолчанию (false/не передан) — ТОЛЬКО прямая привязка, как было:\nадминский список «товары этой категории» и дерево на «Товарах» считают\nраздел буквально, и молчаливая смена их выдачи была бы регрессом.\nРаботает только вместе с category_id; сам по себе ничего не меняет.","type":"boolean"},"is_published":{"type":"boolean"},"is_show_menu":{"type":"boolean"},"max_price":{"format":"int32","type":"integer"},"min_price":{"format":"int32","type":"integer"},"parent_product_id":{"description":"Мультитовар (Б-Мультитовар §6): дети контейнера (parent_product_id),\nохват по типу (containment: all|plain|containers → WHERE kind), и\nпоказывать ли contained-товары в общих листингах (по умолчанию скрыты).","format":"int32","type":"integer"},"query":{"type":"string"}},"type":"object"},"v1GetProductsResponse":{"properties":{"filterable_attributes":{"description":"Публичный источник фильтруемых определений для витрины живые\nis_filterable-определения категории (с опциями — для чекбокс-групп),\nпорядок — привязки категории. Заполняется ТОЛЬКО когда в запросе задан\nfilter.category_id; для чужой/анонимной стороны — только если\nкомпания-владелец категории видима.","items":{"$ref":"#/definitions/v1AttributeDefinition"},"type":"array"},"result":{"$ref":"#/definitions/v1GetProductsResponseResult"}},"type":"object"},"v1GetProductsResponseResult":{"properties":{"currentPage":{"description":"Текущая страница.","format":"int64","type":"integer"},"items":{"description":"Список.","items":{"$ref":"#/definitions/v1ProductShort"},"type":"array"},"total":{"description":"Всего товаров.","format":"int64","type":"integer"}},"type":"object"},"v1GetProfileResponse":{"properties":{"result":{"$ref":"#/definitions/v1Profile"}},"type":"object"},"v1GetPromoLandscapeResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetPromoLandscapeResponseResult"}},"type":"object"},"v1GetPromoLandscapeResponseResult":{"properties":{"code_promotions":{"description":"Правила, которые ждут промокод: показывать их как «скидку» нельзя —\nбез кода её не будет. Отдаём отдельно и с признаком, чтобы агент мог\nчестно написать «по промокоду», а не пообещать скидку всем.","items":{"$ref":"#/definitions/v1Promotion"},"type":"array"},"promotions":{"description":"Активные правила магазина: то же, что отдаёт /promotions, но уже\nотфильтрованное по периоду и бюджету кампании.","items":{"$ref":"#/definitions/v1Promotion"},"type":"array"},"scanned_products":{"description":"Сколько товаров просмотрено и уперлись ли в потолок обхода. Без этих\nдвух чисел усечение выглядит как «в магазине больше нет скидок».","format":"int32","type":"integer"},"top_offers":{"description":"Лучшие предложения, ранжированные СЕРВЕРОМ: по проценту выгоды, при\nравенстве — по сумме, затем по id (детерминированно).","items":{"$ref":"#/definitions/v1PromoOffer"},"type":"array"},"truncated":{"type":"boolean"}},"type":"object"},"v1GetPublicFormResponse":{"properties":{"result":{"$ref":"#/definitions/v1PublicForm"}},"type":"object"},"v1GetPublishedSceneResponse":{"properties":{"artifact":{"description":"Снапшот PublishedArtifact как есть.","type":"object"},"files":{"description":"Резолв publication.file_ids → живые URL (CDN-подмена серверная).","items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"publication":{"$ref":"#/definitions/v1PublicationInfo"}},"type":"object"},"v1GetReferralDashboardResponse":{"properties":{"access":{"$ref":"#/definitions/v1ReferralAccess"},"code":{"title":"персональный код","type":"string"},"grace_until":{"description":"Докуда действует отсрочка (только для PAUSED): по ней рисуется отсчёт.","format":"date-time","type":"string"},"history":{"items":{"$ref":"#/definitions/v1ReferralRewardEntry"},"type":"array"},"levels":{"items":{"$ref":"#/definitions/v1ReferralLevelStat"},"type":"array"},"link":{"title":"готовая ссылка целиком","type":"string"},"locked_reason":{"description":"Что нужно, чтобы ссылка заработала (только для LOCKED).","type":"string"},"missed":{"$ref":"#/definitions/v1ReferralMissed"},"wallet":{"$ref":"#/definitions/v1ReferralWallet"}},"type":"object"},"v1GetReferralRatesResponse":{"properties":{"current":{"$ref":"#/definitions/v1ReferralRatesVersion"},"history":{"items":{"$ref":"#/definitions/v1ReferralRatesVersion"},"title":"от свежей к старой","type":"array"},"max_levels":{"format":"int32","title":"предел глубины цепочки","type":"integer"}},"type":"object"},"v1GetResolvedProductRelationsResponse":{"description":"Резолвнутые связи товара, сгруппированные по типу и направлению.","properties":{"groups":{"items":{"$ref":"#/definitions/v1ResolvedRelationGroup"},"type":"array"}},"type":"object"},"v1GetSceneArchiveResponse":{"properties":{"result":{"$ref":"#/definitions/v1Scene"}},"type":"object"},"v1GetSceneResponse":{"properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"publication":{"$ref":"#/definitions/v1PublicationInfo"},"result":{"$ref":"#/definitions/v1Scene"}},"type":"object"},"v1GetScenesResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetScenesResponseResult"}},"type":"object"},"v1GetScenesResponseResult":{"properties":{"current_page":{"format":"int32","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1SceneCard"},"type":"array"},"total":{"format":"int32","type":"integer"}},"type":"object"},"v1GetSpecTemplateItemsResponse":{"description":"Строки шаблона характеристик.","properties":{"items":{"items":{"$ref":"#/definitions/v1SpecTemplateItemView"},"type":"array"}},"type":"object"},"v1GetSpecTemplateLayoutResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1SpecTemplateLayoutItemView"},"type":"array"}},"type":"object"},"v1GetStatusResponse":{"description":"GetStatusResponse — статус оверлея + активная публикация.","properties":{"result":{"$ref":"#/definitions/v1GetStatusResponseResult"}},"type":"object"},"v1GetStatusResponseResult":{"description":"Result — тело ответа (обёртка result — конвенция фронта).","properties":{"active_publication":{"$ref":"#/definitions/v1SitePublication"},"conflicts":{"description":"conflicts — конфликтов с продом сейчас (детально — PreviewPublish).","format":"int64","type":"string"},"tables":{"items":{"$ref":"#/definitions/v1DevTableStatus"},"type":"array"},"total_deletes":{"format":"int64","type":"string"},"total_upserts":{"format":"int64","type":"string"}},"type":"object"},"v1GetSystemPageDesignResponse":{"description":"Только обвязка: в ResolvedPage заполнены header/footer и лейаут, тело и\nлента пусты — тело системной страницы рисует само приложение витрины.","properties":{"design":{"$ref":"#/definitions/v1ResolvedDesign"}},"type":"object"},"v1GetTariffLimitsResponse":{"description":"GetTariffLimitsResponse — лимиты плана с подписями реестра.","properties":{"result":{"items":{"$ref":"#/definitions/v1TariffLimit"},"type":"array"}},"type":"object"},"v1GetUserResponse":{"properties":{"result":{"$ref":"#/definitions/v1AdminUser"}},"type":"object"},"v1GetWishlistResponse":{"properties":{"result":{"$ref":"#/definitions/v1GetWishlistResponseResult"}},"type":"object"},"v1GetWishlistResponseResult":{"properties":{"current_page":{"description":"Текущая страница.","format":"int64","type":"integer"},"items":{"description":"Список.","items":{"$ref":"#/definitions/v1WishlistItem"},"type":"array"},"total":{"description":"Всего сущностей.","format":"int64","type":"integer"}},"type":"object"},"v1GiftPreview":{"description":"GiftPreview — мини-карточка товара-подарка в плашке акции.","properties":{"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"product_id":{"format":"int32","type":"integer"},"quantity":{"format":"int32","title":"сколько штук дарится","type":"integer"},"slug":{"title":"пустой = не публиковать ссылку","type":"string"},"value":{"format":"int32","title":"ценность подарка (base_price) — для зачёркивания","type":"integer"}},"type":"object"},"v1GroupAxis":{"description":"Ось группы (select-атрибут компании). code/name — read-only резолвы из\nопределения; display: text | icon | swatch | photo; пусто → text).","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"readOnly":true,"title":"read-only","type":"string"},"display":{"description":"Вид переключателя оси склейки.","enum":["","text","select","icon","swatch","photo"],"type":"string"},"name":{"readOnly":true,"title":"read-only","type":"string"},"sort_order":{"format":"int32","type":"integer"},"ui_settings":{"readOnly":true,"title":"read-only: passthrough из определения","type":"object"}},"type":"object"},"v1GroupInfo":{"description":"Сиблинг group_info карточки товара: switcher вариантов склейки.","properties":{"axes":{"items":{"$ref":"#/definitions/v1GroupInfoAxis"},"type":"array"},"group_id":{"format":"int64","type":"string"},"members":{"items":{"$ref":"#/definitions/v1GroupInfoMember"},"type":"array"},"name":{"type":"string"}},"type":"object"},"v1GroupInfoAxis":{"description":"Ось для витрины (сиблинг group_info): словарь опций select-атрибута целиком\n(недоступные комбинации switcher дизейблит сам; каскад image→color→label).","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"type":"string"},"display":{"title":"text|icon|swatch","type":"string"},"name":{"type":"string"},"options":{"items":{"$ref":"#/definitions/v1AttributeOption"},"title":"value/label/color_hex/image_id/image_url","type":"array"},"ui_settings":{"readOnly":true,"title":"read-only: passthrough из определения","type":"object"}},"type":"object"},"v1GroupInfoMember":{"description":"Опубликованный член склейки на витрине: значения по осям + маркер текущей\nкарточки (catalog_hidden НЕ исключает из склейки —. image_url —\nкартинка-в-связи члена, preview_url — главное фото товара (авто-каскад\n'photo' и фолбэк переключателя); image_id — сырой id для админ-пикеров.","properties":{"image_id":{"readOnly":true,"title":"read-only: id картинки-в-связи ('' = нет)","type":"string"},"image_url":{"readOnly":true,"title":"read-only: резолв image_id","type":"string"},"is_current":{"type":"boolean"},"preview_url":{"readOnly":true,"title":"read-only: главное фото товара","type":"string"},"product_id":{"format":"int32","type":"integer"},"slug":{"description":"read-only: слаг члена ('' = легаси-товар без слага). Витрина линкует чип\nпереключателя СРАЗУ на /product/{slug}: адрес по product_id канонизируется\n308-редиректом на слаг, а Next на редиректе теряет scroll={false} Link'а и\nпроматывает страницу наверх (новая навигация — уже не клик по ссылке).","readOnly":true,"type":"string"},"values":{"additionalProperties":{"type":"string"},"title":"code оси → value опции","type":"object"}},"type":"object"},"v1GroupMember":{"description":"Член группы склейки. product_name/is_published/catalog_hidden/values/\nimage_url/preview_url — read-only резолвы (для админ-редактора: матрица\n«член × оси», тумблер «В каталоге», превью-пикер); на запись учитываются\nproduct_id + sort_order + image_id. image_id — «картинка товара в связи»; '' = снять, авто-каскад); preview_url — главное фото товара.","properties":{"catalog_hidden":{"readOnly":true,"title":"read-only, tri-state ''|true|false","type":"string"},"image_id":{"title":"'' = снять","type":"string"},"image_url":{"readOnly":true,"title":"read-only: резолв image_id","type":"string"},"is_published":{"readOnly":true,"title":"read-only","type":"boolean"},"preview_url":{"readOnly":true,"title":"read-only: главное фото товара","type":"string"},"product_id":{"format":"int32","type":"integer"},"product_name":{"readOnly":true,"title":"read-only","type":"string"},"sort_order":{"format":"int32","type":"integer"},"values":{"additionalProperties":{"type":"string"},"readOnly":true,"title":"read-only: code оси → value опции","type":"object"}},"type":"object"},"v1HTMLAsset":{"description":"Ассет документа: файл (картинка/CSS/JS) под алиасом path внутри HTML.","properties":{"file":{"$ref":"#/definitions/v1MiniFile"},"file_id":{"type":"string"},"id":{"format":"int64","type":"string"},"path":{"type":"string"},"sort_order":{"format":"int32","readOnly":true,"title":"read-only: порядок = позиция в массиве при записи","type":"integer"}},"type":"object"},"v1HTMLDocument":{"description":"Именованный HTML-документ веб-кодера. Сама страница хранится ФАЙЛОМ (section\nhtml-source) — API гоняет только file_id, содержимое ходит через storage,\nБД не раздувается разметкой. Изоляция вывода — iframe (не разделение полей).","properties":{"active_release_id":{"description":"Активный релиз папки (0135) — read-only указатель на опубликованную\nверсию. Переключают его ТОЛЬКО ручки релизов (publish/rollback), поэтому\nна запись поле не читается. Пусто — релизов нет: у компонента это\n«вставить нечего», и по нему редактор отсеивает недоделанные документы,\nне спрашивая у каждого список релизов отдельным запросом.","format":"int64","readOnly":true,"type":"string"},"assets":{"items":{"$ref":"#/definitions/v1HTMLAsset"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"description":"Вид документа: widget (обычный HTML-проект, дефолт) | component (вёрстка\nсо схемой параметров `component.json`, Б-Компонент-с-параметрами).\nПусто при создании → widget. `theme` (служебная папка лейаута) СНАРУЖИ не\nсоздаётся: её единственный вход — ручки лейаута, и разрешить его здесь\nзначило бы дать способ завести «чужую» обвязку сайта обычным документом.\nRead-only после создания: сменить вид у документа с релизами нечем.","readOnly":true,"type":"string"},"level":{"description":"Уровень изоляции: 1=статик/санитайз (дефолт), 2=скрипт (iframe-изоляция,\nэтап 3.4). Пусто/0 при создании → 1. Whitelist в Go (domain.ValidHTMLLevel).","format":"int32","type":"integer"},"manifest":{"description":"СХЕМА ПАРАМЕТРОВ активного релиза (`component.json` после разбора при\nпубликации, 0142) СЫРЫМ JSON. Пусто у widget/theme и у компонента без\nактивного релиза.\n\nbytes, а не google.protobuf.Struct — конвенция №8 (CLAUDE.md): Struct\nхранит числа float64 и испортил бы целые `default`/`max` схемы.\n\nПоле ТОЛЬКО на чтение: схему задаёт файл в папке автора, правки её через\nAPI нет — иначе схема жила бы в двух местах и расходилась на первом же\nновом релизе. Читателю она нужна затем, чтобы нарисовать форму вставки,\nне ходя за `component.json` в шлюз файлов.","format":"byte","type":"string"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_file_id":{"type":"string"},"source":{"$ref":"#/definitions/v1MiniFile"},"source_file_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1HTMLDocumentResponse":{"properties":{"result":{"$ref":"#/definitions/v1HTMLDocument"}},"type":"object"},"v1HTMLDocumentUsage":{"description":"Место использования документа (пока только content_block с HTML-секцией на нём).","properties":{"entity_id":{"type":"string"},"entity_type":{"title":"content_block | product","type":"string"},"title":{"type":"string"}},"type":"object"},"v1HandoffCodeRequest":{"description":"HandoffCodeRequest — без параметров (компания/пользователь — из токена).","type":"object"},"v1HandoffCodeResponse":{"description":"HandoffCodeResponse — одноразовый код (TTL 60с, см. domain.DevHandoffTTL).","properties":{"code":{"type":"string"}},"type":"object"},"v1HandoffExchangeRequest":{"description":"HandoffExchangeRequest — код, полученный от HandoffCode.","properties":{"code":{"type":"string"}},"type":"object"},"v1HandoffExchangeResponse":{"description":"HandoffExchangeResponse — пара токенов пользователя, выдавшего код,\n+ slug компании (Next сверяет с текущим дев-хостом).","properties":{"access_token":{"type":"string"},"company_slug":{"type":"string"},"refresh_token":{"type":"string"}},"type":"object"},"v1InCombo":{"description":"комбо, в которое входит товар (блок «этот товар выгоднее в комбо»).\ncombo_price — витринная цена комбо; components_total — Σ витринных цен состава\n(× количество); benefit = components_total − combo_price (не ниже 0).","properties":{"benefit":{"format":"int32","type":"integer"},"combo_price":{"format":"int32","type":"integer"},"combo_product_id":{"format":"int32","type":"integer"},"components_total":{"format":"int32","type":"integer"},"item_price":{"format":"int32","title":"template: :4: missing value for command","type":"integer"},"item_regular_price":{"format":"int32","type":"integer"},"item_times_cheaper_x100":{"description":"Во сколько раз дешевле, ×100 (250 = «в 2,5 раза»). Целым, потому что деньги\nи доли у нас целые, а дробь на витрине неоткуда форматировать.\n0 = набор не даёт этому товару выгоды.","format":"int32","type":"integer"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"slug":{"type":"string"}},"type":"object"},"v1InstallStarterTemplateResponse":{"properties":{"block_ids":{"items":{"format":"int64","type":"string"},"type":"array"},"category_id":{"format":"int64","type":"string"},"repeated_call":{"title":"повтор по тому же ключу","type":"boolean"},"slug":{"title":"адрес созданной страницы","type":"string"}},"type":"object"},"v1InviteMemberResponse":{"properties":{"invite":{"$ref":"#/definitions/v1OrgInviteInfo"},"status":{"type":"string"}},"type":"object"},"v1LeaveOrgResponse":{"type":"object"},"v1LinkProviderRequest":{"properties":{"provider":{"type":"string"},"token":{"type":"string"}},"type":"object"},"v1LinkProviderResponse":{"properties":{"result":{"$ref":"#/definitions/v1Profile"}},"type":"object"},"v1LinkedProduct":{"properties":{"id":{"format":"int32","type":"integer"},"name":{"type":"string"}},"type":"object"},"v1ListAccessPoliciesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1AccessPolicy"},"type":"array"}},"type":"object"},"v1ListApiTokensResponse":{"description":"ListApiTokensResponse — токены компании, новые сверху.","properties":{"result":{"items":{"$ref":"#/definitions/v1ApiToken"},"type":"array"}},"type":"object"},"v1ListArticlesResponse":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1Article"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListAudiencesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Audience"},"type":"array"}},"type":"object"},"v1ListCanvasAssetsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CanvasAsset"},"type":"array"}},"type":"object"},"v1ListCanvasComponentsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CanvasComponent"},"type":"array"}},"type":"object"},"v1ListCanvasDocumentsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CanvasDocument"},"type":"array"}},"type":"object"},"v1ListCharGroupsResponse":{"description":"Список групп характеристик магазина.","properties":{"result":{"items":{"$ref":"#/definitions/v1CharGroupItem"},"type":"array"}},"type":"object"},"v1ListCommentsResponse":{"description":"Список вопросов/комментариев (ответы идут за своим корнем).","properties":{"result":{"$ref":"#/definitions/v1ListCommentsResponseResult"}},"type":"object"},"v1ListCommentsResponseResult":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1ProductComment"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListCompanyCustomersResponse":{"properties":{"result":{"$ref":"#/definitions/v1ListCompanyCustomersResponseResult"}},"type":"object"},"v1ListCompanyCustomersResponseResult":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1CompanyCustomer"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListCompanyRelationsResponse":{"description":"Страница рёбер связей компании.","properties":{"result":{"$ref":"#/definitions/v1ListCompanyRelationsResponseResult"}},"type":"object"},"v1ListCompanyRelationsResponseResult":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1CompanyRelation"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListCustomerRolesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CustomerRole"},"type":"array"}},"type":"object"},"v1ListEntityMaterialsResponse":{"description":"Материалы сущности + резолв file_id → живые URL (для превью в UI).","properties":{"files":{"items":{"$ref":"#/definitions/v1ShortFile"},"type":"array"},"items":{"items":{"$ref":"#/definitions/v1EntityMaterial"},"type":"array"}},"type":"object"},"v1ListFormLeadsRequestFilter":{"properties":{"column_id":{"format":"int64","type":"string"},"form_id":{"format":"int64","type":"string"},"from":{"format":"date-time","type":"string"},"include_test":{"description":"Тестовые сабмиты дев-контура скрыты по умолчанию.","type":"boolean"},"is_spam":{"type":"boolean"},"sandbox_id":{"description":"Борд песочницы: sandbox_id — все колонки песочницы; column_id — одна\nколонка; is_spam — лента спама (nil = не фильтруем).","format":"int64","type":"string"},"status":{"type":"string"},"to":{"format":"date-time","type":"string"},"utm_medium":{"type":"string"},"utm_source":{"description":"Метки кампании точное совпадение по КЛЮЧУ jsonb-узла utm,\nрегистр не учитывается («VK» и «vk» — один источник рекламы). Потолок\nдлины — зеркало ограничения значения метки при записи (≤200).\nПустая строка = фильтра нет (иначе `filter.utm_source=` не находил бы\nничего вместо «все»).","type":"string"}},"type":"object"},"v1ListFormLeadsResponse":{"properties":{"result":{"$ref":"#/definitions/v1ListFormLeadsResponseResult"}},"type":"object"},"v1ListFormLeadsResponseResult":{"properties":{"currentPage":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1FormLead"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListFormsResponse":{"description":"Ответ расширен ТОЛЬКО добавлением скаляров рядом с result: обернуть массив\nв {items,total,currentPage} значило бы сломать уже выкаченный кабинет,\nкоторый читает result как массив.","properties":{"currentPage":{"description":"Отданная страница (1-based) — эхо запроса после нормализации.","format":"int64","type":"integer"},"result":{"items":{"$ref":"#/definitions/v1FormListItem"},"type":"array"},"total":{"description":"Всего живых форм компании (не размер страницы).","format":"int64","type":"integer"}},"type":"object"},"v1ListGalleriesResponse":{"description":"Ответ расширен ТОЛЬКО добавлением скаляров рядом с result: обернуть массив в\n{items,…} значило бы сломать уже выкаченный пикер галерей админки, который\nчитает result как массив.","properties":{"currentPage":{"description":"Отданная страница (1-based) — эхо запроса после нормализации.","format":"int64","type":"integer"},"result":{"description":"Страница галерей ВМЕСТЕ с элементами: пикер выбирает галерею по картинке,\nбез элементов список бесполезен. Размер ответа поэтому ограничивает не\nчисло элементов, а число строк на странице (дефолт — galleriesPageDefaultLimit).","items":{"$ref":"#/definitions/v1Gallery"},"type":"array"},"total":{"description":"Всего живых галерей компании (не размер страницы).","format":"int64","type":"integer"}},"type":"object"},"v1ListHTMLDocumentsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1HTMLDocument"},"type":"array"}},"type":"object"},"v1ListInvitesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1OrgInviteInfo"},"type":"array"}},"type":"object"},"v1ListMembersResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Member"},"type":"array"}},"type":"object"},"v1ListMyCouponsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1MyCoupon"},"type":"array"}},"type":"object"},"v1ListMyInvitesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1OrgInviteInfo"},"type":"array"}},"type":"object"},"v1ListMyOrgsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1OrgMembership"},"type":"array"}},"type":"object"},"v1ListOrderMessagesResponse":{"description":"Лента переписки заказа (хронология, старые вперёд).","properties":{"result":{"$ref":"#/definitions/v1ListOrderMessagesResponseResult"}},"type":"object"},"v1ListOrderMessagesResponseResult":{"properties":{"currentPage":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1OrderMessage"},"type":"array"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListOrgMembersResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1OrgMember"},"type":"array"}},"type":"object"},"v1ListOrgsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1AdminOrg"},"type":"array"},"limit":{"format":"int32","type":"integer"},"page":{"format":"int32","type":"integer"},"total":{"format":"int64","type":"string"}},"type":"object"},"v1ListPriceFieldsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1PriceFieldDefinition"},"type":"array"}},"type":"object"},"v1ListPricingRulesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1PricingRule"},"type":"array"}},"type":"object"},"v1ListProductGroupsResponse":{"description":"Группы с членами (values по осям) и осями.","properties":{"result":{"items":{"$ref":"#/definitions/v1ProductGroup"},"type":"array"}},"type":"object"},"v1ListProductPriceFieldValuesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ProductPriceFieldValueState"},"type":"array"}},"type":"object"},"v1ListPromoCampaignsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1PromoCampaign"},"type":"array"}},"type":"object"},"v1ListPromoKeysResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1PromoKey"},"type":"array"}},"type":"object"},"v1ListPromotionsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Promotion"},"type":"array"}},"type":"object"},"v1ListPublicTariffPlansResponse":{"description":"ListPublicTariffPlansResponse — активные живые планы по sort.","properties":{"result":{"items":{"$ref":"#/definitions/v1PublicTariffPlan"},"type":"array"}},"type":"object"},"v1ListPublicationsResponse":{"description":"ListPublicationsResponse — история публикаций, новые сверху.","properties":{"result":{"items":{"$ref":"#/definitions/v1SitePublication"},"type":"array"}},"type":"object"},"v1ListRelationTypesResponse":{"description":"Список типов связей магазина.","properties":{"result":{"items":{"$ref":"#/definitions/v1RelationType"},"type":"array"}},"type":"object"},"v1ListResourceAccessBindingsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ResourceAccessBinding"},"type":"array"}},"type":"object"},"v1ListReviewsResponse":{"description":"Лента отзывов + сводка по выбранному скоупу.","properties":{"result":{"$ref":"#/definitions/v1ListReviewsResponseResult"}},"type":"object"},"v1ListReviewsResponseResult":{"properties":{"current_page":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1Review"},"type":"array"},"summary":{"$ref":"#/definitions/v1ReviewsSummary"},"total":{"format":"int64","type":"integer"}},"type":"object"},"v1ListSandboxesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Sandbox"},"type":"array"}},"type":"object"},"v1ListSceneArchiveResponse":{"properties":{"result":{"$ref":"#/definitions/v1ListSceneArchiveResponseResult"}},"type":"object"},"v1ListSceneArchiveResponseResult":{"properties":{"current_page":{"format":"int32","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1SceneArchiveShort"},"type":"array"},"total":{"format":"int32","type":"integer"}},"type":"object"},"v1ListScenePublicationsResponse":{"properties":{"items":{"description":"История публикаций (новые сверху), карточки без artifact, максимум 20.","items":{"$ref":"#/definitions/v1PublicationInfo"},"type":"array"}},"type":"object"},"v1ListSessionsResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Session"},"type":"array"}},"type":"object"},"v1ListSnapshotsResponse":{"description":"ListSnapshotsResponse — живые снапшоты компании, новые сверху.","properties":{"result":{"items":{"$ref":"#/definitions/v1CatalogSnapshot"},"type":"array"}},"type":"object"},"v1ListSpecTemplatesResponse":{"description":"Список шаблонов характеристик магазина.","properties":{"result":{"items":{"$ref":"#/definitions/v1SpecTemplateInfo"},"type":"array"}},"type":"object"},"v1ListStarterTemplateCategoriesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1StarterTemplateCategory"},"type":"array"}},"type":"object"},"v1ListStarterTemplatesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1StarterTemplate"},"type":"array"}},"type":"object"},"v1ListTariffPaymentsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1TariffPayment"},"type":"array"},"limit":{"format":"int32","type":"integer"},"page":{"format":"int32","type":"integer"},"total":{"format":"int64","type":"string"}},"type":"object"},"v1ListTariffPlansResponse":{"description":"ListTariffPlansResponse — живые планы по sort.","properties":{"result":{"items":{"$ref":"#/definitions/v1TariffPlan"},"type":"array"}},"type":"object"},"v1ListUsersResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1AdminUser"},"type":"array"},"limit":{"format":"int32","type":"integer"},"page":{"format":"int32","type":"integer"},"total":{"format":"int64","type":"string"}},"type":"object"},"v1ListWebhooksResponse":{"description":"ListWebhooksResponse — вебхуки компании, новые сверху.","properties":{"result":{"items":{"$ref":"#/definitions/v1Webhook"},"type":"array"}},"type":"object"},"v1LoginRequest":{"properties":{"email":{"type":"string"},"password":{"type":"string"}},"type":"object"},"v1LoginResponse":{"properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1Logo":{"properties":{"id":{"type":"string"},"url":{"type":"string"}},"type":"object"},"v1LogoutAllResponse":{"properties":{"revoked":{"format":"int32","type":"integer"}},"type":"object"},"v1LogoutRequest":{"properties":{"refresh_token":{"type":"string"}},"type":"object"},"v1LogoutResponse":{"type":"object"},"v1LowStockItem":{"description":"LowStockItem — товар, которого мало или не осталось.","properties":{"low_threshold":{"format":"int32","type":"integer"},"name":{"type":"string"},"product_id":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"}},"type":"object"},"v1MarkReviewHelpfulResponse":{"description":"Новое значение счётчика «полезно».","properties":{"helpful_count":{"format":"int32","type":"integer"}},"type":"object"},"v1Member":{"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"joined_at":{"format":"date-time","type":"string"},"last_name":{"type":"string"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"format":"int32","type":"integer"},"username":{"type":"string"}},"type":"object"},"v1MemberResponse":{"properties":{"result":{"$ref":"#/definitions/v1Member"}},"type":"object"},"v1MergeCartItem":{"properties":{"data":{"type":"object"},"key":{"type":"string"},"product_id":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"}},"type":"object"},"v1MergeCartRequest":{"properties":{"company_id":{"format":"int32","title":"магазин (витрина)","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1MergeCartItem"},"title":"позиции из localStorage","type":"array"}},"type":"object"},"v1MiniCategories":{"properties":{"id":{"format":"int64","type":"string"},"name":{"type":"string"},"parent_id":{"format":"int64","type":"string"},"root_id":{"format":"int64","type":"string"}},"type":"object"},"v1MiniFile":{"properties":{"draft":{"description":"Э0.2: файл принадлежит ЧЕРНОВИКУ (files.draft_release_id IS NOT NULL).\nКлиенту нужен, чтобы решить, можно ли заменять содержимое на месте\n(ReplaceFile) в дев-режиме: живой файл из дев-сессии заменять нельзя —\nсервер отдаёт FILE_CONTOUR_MISMATCH, клиент грузит НОВЫЙ файл.","type":"boolean"},"id":{"type":"string"},"original_name":{"type":"string"},"url":{"type":"string"}},"type":"object"},"v1ModerateCommentResponse":{"description":"Результат модерации (result пуст при action=delete).","properties":{"result":{"$ref":"#/definitions/v1ProductComment"}},"type":"object"},"v1ModerationItem":{"description":"Элемент очереди модерации: товар + магазин-владелец.","properties":{"company_id":{"format":"int32","type":"integer"},"company_name":{"type":"string"},"product":{"$ref":"#/definitions/v1ProductShort"}},"type":"object"},"v1MoveCategoryRequest":{"properties":{"from_id":{"format":"int64","type":"string"},"new_parent_id":{"format":"int64","type":"string"},"to_id":{"format":"int64","type":"string"},"type":{"title":"\"before\", \"after\", \"inside\"","type":"string"}},"type":"object"},"v1MoveCategoryResponse":{"type":"object"},"v1MyCoupon":{"properties":{"code":{"type":"string"},"description":{"type":"string"},"expired":{"title":"срок вышел","type":"boolean"},"expires_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"issued_by_order_id":{"format":"int32","type":"integer"},"name":{"description":"Что купон даёт — берётся из правила, которое он отпирает: имя, условия и\nоформление, те же, что покупатель видит в корзине.","type":"string"},"used":{"title":"погашен","type":"boolean"}},"type":"object"},"v1MyTariff":{"description":"MyTariff — текущий план продавца + его лимиты; plan не задан (null) =\nкомпания без плана = безлимит.","properties":{"limits":{"items":{"$ref":"#/definitions/v1TariffLimit"},"type":"array"},"plan":{"$ref":"#/definitions/v1TariffPlan"},"status":{"description":"Бакт (аддитивно): подписочный статус компании\n(active|trial|past_due|suspended|pending|blocked) — отображение\n«действует до», НЕ гейт (enforcement остаётся на лимитах плана, §5).","type":"string"},"valid_until":{"description":"Срок действия подписки; не задан (null) = бессрочно (free/corp/без плана).","format":"date-time","type":"string"}},"type":"object"},"v1MyUsage":{"description":"MyUsage — потребление для прогресс-баров («Хранилище 0.7/1 ГБ»,\n«Товары 14/20»); *_limit/products_max = 0 → безлимит (трактовка фронта).","properties":{"products_count":{"format":"int32","type":"integer"},"products_max":{"format":"int64","type":"string"},"status":{"description":"Бакт (аддитивно): статус подписки + «действует до» — чтобы экран\nпотребления показывал срок без второго запроса. Семантика — как в MyTariff.","type":"string"},"storage_limit_bytes":{"format":"int64","type":"string"},"storage_used_bytes":{"format":"int64","type":"string"},"valid_until":{"format":"date-time","type":"string"}},"type":"object"},"v1OAuthLoginRequest":{"properties":{"accept_marketing":{"type":"boolean"},"accept_personal_data":{"description":"Согласия — как в RegisterRequest. Пишутся в журнал ТОЛЬКО если этот вход\nсоздал новый аккаунт (source=oauth); для существующих игнорируются.","type":"boolean"},"accept_terms":{"type":"boolean"},"consent_doc_version":{"type":"string"},"provider":{"$ref":"#/definitions/v1OAuthProvider"},"token":{"type":"string"}},"type":"object"},"v1OAuthLoginResponse":{"properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1OAuthProvider":{"enum":["OAUTH_PROVIDER_GOOGLE","OAUTH_PROVIDER_YANDEX"],"type":"string"},"v1Offer":{"properties":{"background_color":{"type":"string"},"background_image":{"$ref":"#/definitions/v1Logo"},"description":{"type":"string"},"description_color":{"type":"string"},"name":{"type":"string"},"name_color":{"type":"string"}},"type":"object"},"v1Order":{"properties":{"address":{"type":"object"},"buyer_id":{"description":"Покупатель заказа. До этого наружу выходил только контакт (имя/телефон/\nпочта), и связать заказ с человеком внешняя система могла лишь по почте —\nто есть по полю, которое покупатель меняет и которое склеивает его между\nразными магазинами. Идентификатор в контракте нужен ДО накопления истории:\nзадним числом связь заказов с людьми не восстанавливается.\n\nГостевой заказ оставляет 0: заявку можно оформить без входа.","format":"int32","type":"integer"},"can_pay":{"description":"Можно ли платить прямо сейчас: касса магазина включена, заказ жив и ещё не\nоплачен. Считает сервер — фронту нечем это вывести, а показанная зря кнопка\nоплаты приводит покупателя на ошибку провайдера.","type":"boolean"},"comment":{"type":"string"},"company_id":{"format":"int32","type":"integer"},"company_name":{"type":"string"},"contact":{"$ref":"#/definitions/v1OrderContact"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"discount_total":{"description":"снимок суммарной скидки заказа (0 = скидок не было).","format":"int32","type":"integer"},"id":{"format":"int32","type":"integer"},"items":{"items":{"$ref":"#/definitions/v1OrderItem"},"type":"array"},"items_total":{"format":"int32","title":"К ОПЛАТЕ (после скидок)","type":"integer"},"payment_status":{"description":"Оплата. '' — платежей по заказу не было; pending — ссылка выдана, ответа\nпровайдера ещё нет; paid — оплачен; expired — срок ссылки вышел (платить\nможно снова); failed/cancelled — попытка не прошла.","type":"string"},"promotions":{"description":"снимок применённых акций (заказ не переигрывается при правке правил).","items":{"$ref":"#/definitions/v1AppliedPromotion"},"type":"array"},"receipt_sent":{"description":"Был ли по заказу фискализирован чек. Обещать покупателю чек, которого нет,\nхуже, чем не обещать ничего: он ждёт документ, а тот не приходит.","type":"boolean"},"status":{"format":"int32","title":"1 new | 2 processing | 3 done | 4 cancelled","type":"integer"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1OrderContact":{"properties":{"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"v1OrderItem":{"properties":{"base_unit_price":{"description":"снимок цены ДО скидки (0 = скидки не было).","format":"int32","type":"integer"},"catalog_unit_price":{"description":"Безопасная покупательская проекция снимка ценового решения. Внутренние\nid/code/name правила остаются только в неизменяемом снимке заказа на\nсервере и не выдаются через покупательский API.","format":"int32","type":"integer"},"data":{"title":"снимок 3D-конфигурации","type":"object"},"key":{"type":"string"},"line_total":{"format":"int32","type":"integer"},"name":{"title":"снимок названия на момент заказа","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"price_source":{"title":"catalog | configuration | combo | pricing_rule","type":"string"},"pricing_min_quantity":{"format":"int32","type":"integer"},"pricing_quantity_scope":{"title":"line | product","type":"string"},"product_id":{"format":"int32","type":"integer"},"promotion":{"$ref":"#/definitions/v1AppliedPromotion"},"promotion_locked":{"type":"boolean"},"quantity":{"format":"int32","type":"integer"},"unit_price":{"format":"int32","title":"снимок цены (со скидкой, если была)","type":"integer"}},"type":"object"},"v1OrderMessage":{"description":"Сообщение переписки заказа. author_role/kind — снимок, ставит сервер\n(1 buyer | 2 staff; 1 text | 2 system). meta (резерв под вложения/системные\nсобытия) пока НЕ экспонируется.","properties":{"author_role":{"format":"int32","title":"1 buyer | 2 staff","type":"integer"},"author_user_id":{"format":"int32","type":"integer"},"body":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"format":"int32","title":"1 text | 2 system","type":"integer"},"order_id":{"format":"int32","type":"integer"}},"type":"object"},"v1OrderSubtotalPriceTier":{"description":"Публичная точка цены от серверного каталожного subtotal заказа.\nВнутренние rule/field/audience id наружу не идут.","properties":{"condition_label":{"type":"string"},"label":{"type":"string"},"threshold_amount":{"format":"int64","type":"string"},"unit_price":{"format":"int32","type":"integer"}},"type":"object"},"v1OrgDomain":{"description":"OrgDomain — состояние привязанного домена.","properties":{"dns_records":{"items":{"$ref":"#/definitions/v1OrgDomainDnsRecord"},"type":"array"},"domain":{"type":"string"},"last_checked_at":{"format":"date-time","title":"null, если не проверяли","type":"string"},"last_error":{"title":"человекочитаемо","type":"string"},"status":{"title":"pending | active | error","type":"string"}},"type":"object"},"v1OrgDomainDnsRecord":{"description":"OrgDomainDnsRecord — строка таблицы DNS для UI (сервер формирует, фронт\nрендерит): тип + относительный host (как вводят у регистратора) + значение.","properties":{"host":{"title":"\"shop\" | \"@\" | \"_vizen-verify.shop\"","type":"string"},"type":{"title":"CNAME | A | TXT","type":"string"},"value":{"type":"string"}},"type":"object"},"v1OrgInviteInfo":{"description":"OrgInviteInfo — приглашение для UI. id — int64 (в JSON строка, фронт типизирует\nкак string). status может быть 'expired' (производный на чтении).","properties":{"company_id":{"format":"int32","type":"integer"},"company_logo_url":{"type":"string"},"company_name":{"type":"string"},"company_slug":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"email":{"type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"invited_by":{"type":"string"},"role":{"type":"string"},"status":{"type":"string"}},"type":"object"},"v1OrgMember":{"description":"OrgMember — участник компании для админ-карточки (поля как у org.Member,\nно сообщение своё: контракты admin и org эволюционируют независимо).","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"joined_at":{"format":"date-time","type":"string"},"last_name":{"type":"string"},"role":{"title":"owner | admin | editor","type":"string"},"status":{"title":"active | suspended","type":"string"},"user_id":{"format":"int32","type":"integer"},"username":{"type":"string"}},"type":"object"},"v1OrgMembership":{"properties":{"org":{"$ref":"#/definitions/v1Organization"},"role":{"title":"моя роль в этой org","type":"string"}},"type":"object"},"v1OrgResponse":{"properties":{"result":{"$ref":"#/definitions/v1Organization"}},"type":"object"},"v1OrgUsage":{"description":"OrgUsage — потребление/тариф компании глазами админа (зеркалит MyUsage из\ntariff.proto + план: карточке нужны code и человеческое имя одним запросом).","properties":{"company_id":{"format":"int32","type":"integer"},"plan_code":{"title":"\"\" = план не назначен (безлимит §5)","type":"string"},"plan_name":{"type":"string"},"products_count":{"format":"int32","type":"integer"},"products_max":{"format":"int64","title":"0 = безлимит (трактовка как в MyUsage)","type":"string"},"status":{"title":"подписочный статус компании (whitelist 0037)","type":"string"},"storage_limit_bytes":{"format":"int64","title":"0 = безлимит","type":"string"},"storage_used_bytes":{"format":"int64","type":"string"},"valid_until":{"format":"date-time","title":"не задан = бессрочно","type":"string"}},"type":"object"},"v1Organization":{"properties":{"address":{"type":"string"},"country":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"title":"основная настройка компании","type":"string"},"delete_after":{"description":"Когда магазин будет удалён окончательно. Пусто — удаление не запрошено.\nКак у аккаунта: запрос ставит отметку, а не сносит сразу.","format":"date-time","type":"string"},"description":{"type":"string"},"email":{"type":"string"},"id":{"format":"int32","type":"integer"},"logo":{"$ref":"#/definitions/v1Logo"},"max_total_discount_percent":{"description":"потолок суммарной скидки заказа, % (0 = без ограничения).","format":"int32","type":"integer"},"members_count":{"format":"int32","type":"integer"},"name":{"type":"string"},"owner_id":{"format":"int32","type":"integer"},"phone":{"type":"string"},"plan":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1PasswordSessionScope":{"description":"Что делать с сессиями после смены пароля. UNSPECIFIED = OTHERS: старые\nклиенты поля не шлют, а прежнее поведение — завершать остальные сессии.\n\nPASSWORD_SESSION_SCOPE_OTHERS: выйти везде, кроме текущего устройства\nPASSWORD_SESSION_SCOPE_KEEP: никого не выкидывать\nPASSWORD_SESSION_SCOPE_ALL: выйти вообще везде, включая это устройство","enum":["PASSWORD_SESSION_SCOPE_OTHERS","PASSWORD_SESSION_SCOPE_KEEP","PASSWORD_SESSION_SCOPE_ALL"],"type":"string"},"v1PaymentSettings":{"description":"PaymentSettings — как магазин принимает деньги.\n\nСекретов здесь нет и быть не может: ключи провайдера принадлежат продавцу и\nхранятся зашифрованными. Наружу отдаём только хвосты — четырёх символов\nхватает, чтобы узнать свой ключ, и не хватает, чтобы его подобрать.","properties":{"has_secret":{"description":"Ключи ЗАДАНЫ. Отдельно от хвостов: по хвосту наличие ключа не определить,\nи продавец с коротким паролем оказывался заперт на своей же настройке.","type":"boolean"},"has_secret2":{"type":"boolean"},"is_enabled":{"type":"boolean"},"is_test":{"type":"boolean"},"login":{"description":"Логин магазина у провайдера (публичная часть).","type":"string"},"payment_mode":{"description":"online — оплата при оформлении; offline — по договорённости с продавцом;\nboth — покупатель выбирает. \"\" = offline.","type":"string"},"provider":{"description":"robokassa | yookassa; \"\" — касса не подключена.","type":"string"},"secret2_tail":{"type":"string"},"secret_tail":{"description":"Хвосты ключей: подписи запроса и проверки уведомлений. ПОКАЗАТЕЛЬНЫЕ —\nсудить по ним о наличии ключа нельзя: у ключа короче пяти символов хвоста\nнет вовсе (показывать почти весь секрет мы не станем).","type":"string"},"webhook_url":{"description":"Адрес, который нужно указать в кабинете провайдера как Result URL.\nОтдаём сервером: продавец не должен собирать его руками и ошибаться.\nПУСТО = публичный адрес API на сервере не настроен; половину адреса\nотдавать нельзя — продавец молча вставит её в кабинет кассы.","type":"string"}},"type":"object"},"v1PaymentSettingsResponse":{"properties":{"result":{"$ref":"#/definitions/v1PaymentSettings"}},"type":"object"},"v1Payout":{"description":"Payout — заявка на партнёрскую выплату (денормализована почтой/именем партнёра).","properties":{"amount_kop":{"format":"int64","type":"string"},"comment":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"paid_at":{"format":"date-time","type":"string"},"payee_inn":{"type":"string"},"payee_kind":{"title":"self_employed | individual | company","type":"string"},"payee_name":{"type":"string"},"self_employed_check":{"description":"Проверка статуса самозанятого: \"\" не проводилась | \"ok\" | \"fail\".","type":"string"},"status":{"title":"pending | approved | paid | rejected | cancelled","type":"string"},"user_email":{"type":"string"},"user_id":{"format":"int32","type":"integer"},"user_name":{"type":"string"},"wave_at":{"format":"date-time","type":"string"}},"type":"object"},"v1PayoutActionResponse":{"description":"paid=true — заявка оплачена. false БЕЗ ошибки (только MarkPayoutPaid) —\nдоступных средств оказалось меньше заявленных, заявка отклонена. Для\napprove/reject поле не значимо (фронт перечитывает список).","properties":{"paid":{"type":"boolean"}},"type":"object"},"v1PayoutRequestItem":{"description":"PayoutRequestItem — заявка на выплату.","properties":{"amount_kop":{"format":"int64","type":"string"},"comment":{"description":"Причина отказа, если он был.","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"paid_at":{"format":"date-time","type":"string"},"payee_kind":{"type":"string"},"status":{"title":"pending | approved | paid | rejected | cancelled","type":"string"},"wave_at":{"description":"Дата волны, в которую заявка попадёт: партнёр видит её сразу и не гадает,\nкогда придут деньги.","format":"date-time","type":"string"}},"type":"object"},"v1PayoutResponse":{"properties":{"result":{"$ref":"#/definitions/v1PayoutRequestItem"}},"type":"object"},"v1PayoutSettings":{"properties":{"manual_approval":{"type":"boolean"}},"type":"object"},"v1PlatformStats":{"description":"Агрегаты платформы для дашборда. *_today — с начала суток UTC. Рантайм-метрики\n(goroutines/mem_alloc_bytes/uptime_seconds/go_version) — снимок процесса ядра.","properties":{"categories_today":{"format":"int64","type":"string"},"categories_total":{"format":"int64","type":"string"},"companies_active":{"format":"int64","type":"string"},"companies_today":{"format":"int64","type":"string"},"companies_total":{"format":"int64","type":"string"},"go_version":{"type":"string"},"goroutines":{"format":"int64","type":"string"},"leads_today":{"format":"int64","type":"string"},"leads_total":{"format":"int64","type":"string"},"mem_alloc_bytes":{"format":"int64","type":"string"},"orders_today":{"format":"int64","type":"string"},"orders_total":{"format":"int64","type":"string"},"products_today":{"format":"int64","type":"string"},"products_total":{"format":"int64","type":"string"},"uptime_seconds":{"format":"int64","type":"string"},"users_today":{"format":"int64","type":"string"},"users_total":{"format":"int64","type":"string"}},"type":"object"},"v1PostOrderMessageResponse":{"description":"Созданное сообщение переписки.","properties":{"result":{"$ref":"#/definitions/v1OrderMessage"}},"type":"object"},"v1PostReviewRequest":{"description":"Покупательский отзыв: product_id задан → на товар; пусто → на магазин\n(тогда company_id обязателен).","properties":{"body":{"type":"string"},"company_id":{"format":"int32","type":"integer"},"file_ids":{"items":{"type":"string"},"type":"array"},"order_id":{"format":"int32","title":"verified purchase","type":"integer"},"product_id":{"format":"int32","type":"integer"},"rating":{"format":"int32","type":"integer"}},"type":"object"},"v1PreviewFile":{"properties":{"id":{"type":"string"},"url":{"type":"string"}},"type":"object"},"v1PreviewPricingRulesRequest":{"properties":{"at":{"description":"Если не задано, сервер использует текущее время. Поле нужно для проверки\nбудущего starts_at/ends_at без изменения часов процесса.","format":"date-time","type":"string"},"targets":{"items":{"$ref":"#/definitions/v1PricingPreviewTarget"},"type":"array"}},"type":"object"},"v1PreviewPricingRulesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1PricingPreviewResult"},"type":"array"}},"type":"object"},"v1PreviewPublishRequest":{"description":"PreviewPublishRequest — без параметров (dry-run всего оверлея компании).","type":"object"},"v1PreviewPublishResponse":{"description":"PreviewPublishResponse — сводка dry-run.","properties":{"result":{"$ref":"#/definitions/v1PreviewPublishResponseResult"}},"type":"object"},"v1PreviewPublishResponseResult":{"description":"Result — тело ответа.","properties":{"conflicts":{"items":{"$ref":"#/definitions/v1PublishConflict"},"type":"array"},"tables":{"items":{"$ref":"#/definitions/v1PublishTableSummary"},"type":"array"},"unique_violations":{"description":"unique_violations — дубли slug/sku/code в финальном прод-виде:\nPublish с ними откажет ДО мутаций.","items":{"type":"string"},"type":"array"},"warnings":{"description":"warnings — недостаточные для отказа проблемы: сцены применяемых товаров\nбез активной публикации, прогноз квоты товаров и т.п.","items":{"type":"string"},"type":"array"}},"type":"object"},"v1PriceFieldBinding":{"properties":{"binding_type":{"type":"string"},"category_id":{"format":"int64","type":"string"},"include_descendants":{"type":"boolean"}},"type":"object"},"v1PriceFieldDefinition":{"properties":{"access":{"$ref":"#/definitions/v1FieldAccessSettings"},"active":{"type":"boolean"},"bindings":{"items":{"$ref":"#/definitions/v1PriceFieldBinding"},"type":"array"},"code":{"type":"string"},"condition_label":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"promotion_policy":{"type":"string"},"purpose":{"type":"string"},"system":{"readOnly":true,"title":"read-only","type":"boolean"},"trigger_metric":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int64","readOnly":true,"title":"read-only","type":"string"}},"type":"object"},"v1PriceFieldResponse":{"properties":{"result":{"$ref":"#/definitions/v1PriceFieldDefinition"}},"type":"object"},"v1PriceFieldValueExpectedVersion":{"properties":{"id":{"format":"int32","type":"integer"},"version":{"format":"int64","type":"string"}},"type":"object"},"v1PricingCandidateExplanation":{"properties":{"applicable":{"type":"boolean"},"code":{"type":"string"},"reason":{"type":"string"},"rule_id":{"format":"int32","type":"integer"}},"type":"object"},"v1PricingPreviewResult":{"properties":{"candidates":{"items":{"$ref":"#/definitions/v1PricingCandidateExplanation"},"type":"array"},"catalog_unit_price":{"format":"int32","type":"integer"},"effective_unit_price":{"format":"int32","type":"integer"},"product_id":{"format":"int32","type":"integer"},"promotion_locked":{"type":"boolean"},"quantity":{"format":"int32","type":"integer"},"source":{"type":"string"},"variant_id":{"format":"int64","type":"string"},"winning_rule_id":{"format":"int32","type":"integer"}},"type":"object"},"v1PricingPreviewTarget":{"properties":{"product_id":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"},"variant_id":{"format":"int64","type":"string"}},"type":"object"},"v1PricingRule":{"properties":{"active":{"readOnly":true,"title":"read-only: меняется только SetPricingRuleActive","type":"boolean"},"audience":{"description":"MVP-A принимает только all. customer_groups зарезервирован для аддитивного\nMVP-B и до появления membership-контура будет отклонён сервером.","type":"string"},"code":{"type":"string"},"collection_code":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"int32","type":"integer"},"min_quantity":{"format":"int32","type":"integer"},"name":{"type":"string"},"priority":{"format":"int32","type":"integer"},"product_id":{"format":"int32","type":"integer"},"quantity_scope":{"type":"string"},"starts_at":{"format":"date-time","type":"string"},"unit_price":{"format":"int32","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"variant_id":{"format":"int64","type":"string"},"version":{"format":"int64","readOnly":true,"title":"read-only optimistic version","type":"string"}},"title":"── Ценовые правила (MVP-A public quantity pricing) ──","type":"object"},"v1PricingRuleBatchItem":{"properties":{"expected_version":{"format":"int64","type":"string"},"id":{"description":"id=0/expected_version=0 creates an inactive rule. Positive values update\nan existing tenant-owned rule and must carry its exact current version.","format":"int32","type":"integer"},"item":{"$ref":"#/definitions/v1PricingRule"}},"type":"object"},"v1PricingRuleExpectedVersion":{"properties":{"id":{"format":"int32","type":"integer"},"version":{"format":"int64","type":"string"}},"type":"object"},"v1PricingRuleResponse":{"properties":{"result":{"$ref":"#/definitions/v1PricingRule"}},"type":"object"},"v1PricingRulesMutationResponse":{"properties":{"replayed":{"type":"boolean"},"result":{"items":{"$ref":"#/definitions/v1PricingRule"},"type":"array"}},"type":"object"},"v1Product":{"properties":{"card_template":{"title":"шаблон карточки витрины: simple|base|3d (B+)","type":"string"},"catalog_hidden":{"description":"скрытие из сеток витрины, tri-state '' = NULL (показывать).\n\n''|true|false\n\nСкрыть товар из сеток витрины. Тройное состояние СТРОКОЙ: `\"\"` — наследовать, `\"true\"`, `\"false\"`.","enum":["","true","false"],"type":"string"},"categories":{"items":{"format":"int32","type":"integer"},"type":"array"},"category_id":{"format":"int32","type":"integer"},"children_count":{"format":"int32","type":"integer"},"combo_items":{"description":"«Комбо-наборы» (только в GetProduct, НЕ в списках; аддитивно):\ncombo_items — состав, если товар является комбо (цены компонентов —\n витринные, с учётом акций; пусто = товар не комбо;\nin_combos — комбо, в состав которых входит товар (блок «этот товар\n выгоднее в комбо»); скрывает комбо с недоступным компонентом.","items":{"$ref":"#/definitions/v1ComboItem"},"type":"array"},"comments_enabled":{"description":"Комментарии к товару. Тройное состояние СТРОКОЙ: `\"\"` — наследовать, `\"true\"`, `\"false\"`.","enum":["","true","false"],"title":"''|true|false","type":"string"},"container":{"$ref":"#/definitions/v1ProductContainerRef"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apicatalogv1MiniUser"},"deleted_after":{"format":"date-time","type":"string"},"description":{"type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"galleries":{"items":{"$ref":"#/definitions/v1Gallery"},"type":"array"},"gallery_ids":{"description":"Б-Галереи (волна 3): ПРИВЯЗКИ объекта к галереям компании.\ngallery_ids — на ЗАПИСИ (CreateProduct): порядок показа; replace-set.\n Чужая/удалённая галерея → NotFound GALLERY_NOT_FOUND; больше 10 на\n объект → GALLERIES_TOO_MANY.\ngalleries — на ЧТЕНИИ: галереи по порядку привязки, с элементами\n (у canvas-галерей items уже подменены кадрами документа). Отдаются\n ТОЛЬКО в карточке (GetProduct/GetProductBySlug) и в ответах\n Create/EditProduct: в списках галереи не грузятся, там нужно превью.","items":{"format":"int64","type":"string"},"type":"array"},"id":{"format":"int32","type":"integer"},"in_combos":{"items":{"$ref":"#/definitions/v1InCombo"},"type":"array"},"in_stock":{"description":"Можно ли купить прямо сейчас: производное от остатка, считает сервер.\nВитрине незачем повторять правило «нет учёта = есть всегда» у себя.","type":"boolean"},"is_deleted":{"type":"boolean"},"is_published":{"type":"boolean"},"is_shared":{"type":"boolean"},"is_show_menu":{"type":"boolean"},"kind":{"description":"§9.1: тип товара (standard|combo), read-only. Управляется ТОЛЬКО\nсоставом (SetComboItems, авто-флип); клиент его не задаёт. Фронты/витрина\nпривязывают отображение к kind, а не к непустоте combo_items.","readOnly":true,"type":"string"},"likes":{"format":"int32","type":"integer"},"moderated_at":{"format":"date-time","type":"string"},"moderation_comment":{"readOnly":true,"title":"причина отклонения (read-only для владельца)","type":"string"},"moderation_status":{"description":"Модерация общего маркетплейса. is_shared (20) = намерение владельца;\nmoderation_status = решение платформы.\n\n0 none | 1 pending | 2 approved | 3 rejected","format":"int32","type":"integer"},"name":{"type":"string"},"preloader_id":{"title":"uuid file","type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_auto":{"description":"read-only: превью — фолбэк первой картинки первой группы, своего\npreview_id у товара нет. Админка при true не пишет это превью обратно в\npreview_id (иначе первая картинка галереи «переезжала» в превью — дубль).","readOnly":true,"type":"boolean"},"price":{"$ref":"#/definitions/v1ProductPrice"},"price_mode":{"description":"Ценовая полоса товара: catalog (серверный каталог/варианты/правила) или\nconfiguration (снимок 3D-конфигуратора в data.price.total). Публичная\nвыдача read-only; запись разрешена owner/admin через Create/EditProduct.","readOnly":true,"type":"string"},"product_promotions":{"description":".v1.1: активные акции, затрагивающие товар (для блока на карточке и раздела\n«Акции»). Только в GetProduct (карточка), НЕ в списках. Аддитивно.","items":{"$ref":"#/definitions/v1ProductPromotion"},"type":"array"},"questions_enabled":{"description":"Вопросы о товаре. Тройное состояние СТРОКОЙ: `\"\"` — наследовать, `\"true\"`, `\"false\"`.","enum":["","true","false"],"title":"''|true|false","type":"string"},"rating_avg":{"description":"read-кэш рейтинга + настройки контента карточки. Включатели и scope —\ntri-state строкой: '' = NULL (наследует категорию/витрину), иначе значение\n(прецедент tri-state: preview_id '' = снять).\n\nread-only (пересчёт в tx модерации отзыва)","format":"double","readOnly":true,"type":"number"},"rating_count":{"format":"int32","readOnly":true,"title":"read-only","type":"integer"},"reviews_scope":{"description":"Пусто = наследуется от настройки магазина.","enum":["","own","category","shop","off"],"title":"''|own|category|shop|off","type":"string"},"scene_id":{"format":"int32","type":"integer"},"seo":{"$ref":"#/definitions/v1Seo"},"sku":{"type":"string"},"status":{"type":"string"},"stock_low_threshold":{"format":"int32","type":"integer"},"stock_quantity":{"description":"Складской остаток. Отсутствие значения = учёт по товару НЕ ведётся\n(услуга, цифровой товар, изделие под заказ) — это НЕ ноль штук: без\nразличия каталог продавца, который склад не заводил, оказался бы целиком\nраспродан. Порог — с какого остатка предупреждать в кабинете.","format":"int32","type":"integer"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apicatalogv1MiniUser"},"video_id":{"title":"uuid file","type":"string"},"views":{"format":"int32","type":"integer"},"you":{"$ref":"#/definitions/v1YouReaction"}},"type":"object"},"v1ProductAttributeValue":{"description":"Значение атрибута товара. code/name/data_type/section/display — read-only\nрезолвы из определения (на запись учитываются только attribute_id + value).","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"type":"string"},"data_type":{"type":"string"},"display":{"type":"string"},"name":{"type":"string"},"section":{"type":"string"},"value":{}},"type":"object"},"v1ProductChildRef":{"description":"Строка состава: ребёнок + порядок.","properties":{"product_id":{"format":"int32","type":"integer"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1ProductComment":{"description":"Вопрос/комментарий к товару (parent_id — ответ, 1 уровень).","properties":{"author":{"$ref":"#/definitions/apicatalogv1MiniUser"},"body":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"question|comment","type":"string"},"parent_id":{"format":"int64","title":"0 = корневой","type":"string"},"product_id":{"format":"int32","type":"integer"},"status":{"title":"pending|approved|rejected","type":"string"}},"type":"object"},"v1ProductContainerRef":{"description":"Мультитовар (Б-Мультитовар §3) --------------------------------------------\nСсылка на товар-контейнер (read-only у ребёнка-объявления).","properties":{"id":{"format":"int32","type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"v1ProductContentBlockRef":{"description":"Привязка блока к товару.","properties":{"block_id":{"format":"int64","type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1ProductDesignLink":{"description":"Участник дизайн-группы (общие манифесты зон; связь без «родителя»).","properties":{"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"product_id":{"format":"int32","type":"integer"}},"type":"object"},"v1ProductGroup":{"description":"Группа склейки товаров (variant_group).","properties":{"axes":{"items":{"$ref":"#/definitions/v1GroupAxis"},"readOnly":true,"title":"read-only в Create/Edit (запись — SetGroupAxes)","type":"array"},"created_at":{"format":"date-time","type":"string"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"group_type":{"description":"Пусто = variant_group.","enum":["","variant_group"],"title":"пусто → variant_group (whitelist в хендлере)","type":"string"},"id":{"format":"int64","type":"string"},"members":{"items":{"$ref":"#/definitions/v1GroupMember"},"readOnly":true,"title":"read-only в Create/Edit (запись — SetGroupMembers)","type":"array"},"name":{"type":"string"}},"type":"object"},"v1ProductGroupResponse":{"description":"Группа (создание/редактирование/replace-set членов и осей).","properties":{"result":{"$ref":"#/definitions/v1ProductGroup"}},"type":"object"},"v1ProductMoneyValue":{"properties":{"amount":{"format":"int64","type":"string"},"created_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"effective_from":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"price_field_id":{"format":"int64","type":"string"},"product_id":{"format":"int32","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"variant_id":{"format":"int64","type":"string"}},"type":"object"},"v1ProductMoneyValueResponse":{"properties":{"result":{"$ref":"#/definitions/v1ProductMoneyValue"}},"type":"object"},"v1ProductPrice":{"properties":{"catalog_price":{"description":"R5 pricing: безопасное покупательское объяснение цены. Внутренние id/code/\nname правила намеренно не входят в публичную проекцию.\n\nцена до pricing rule и promotions","format":"int32","type":"integer"},"currency":{"description":"Валюта магазина. Значение из запроса игнорируется: источник истины — настройка магазина. Сменить её персональным ключом нельзя.","readOnly":true,"type":"string"},"old_price":{"format":"int32","title":"базовая цена при акции (перекрывает ручное base_old_price)","type":"integer"},"order_subtotal_prices":{"description":"Покупательская лестница фиксированных цен от суммы заказа. Порог — int64,\nпотому что сумма заказа не ограничена ценой одной позиции.","items":{"$ref":"#/definitions/v1OrderSubtotalPriceTier"},"type":"array"},"price":{"description":"Цена целым числом в валюте магазина.","format":"int32","minimum":0,"title":"цена со скидкой активной акции (без акции — базовая)","type":"integer"},"price_source":{"title":"catalog | configuration | combo | pricing_rule","type":"string"},"pricing_min_quantity":{"format":"int32","title":"0, если pricing rule не применилось","type":"integer"},"pricing_quantity_scope":{"title":"'' | line | product","type":"string"},"promotion_locked":{"title":"true = акции к этой цене не применяются","type":"boolean"},"promotion_name":{"description":"название активной товарной акции для бейджа витрины ('' = нет).","type":"string"},"quantity_prices":{"description":"Будущие публичные цены от количества (\u003e 1), по возрастанию порога.\nКаждая точка — фактический победитель ResolvePricing на этом количестве.","items":{"$ref":"#/definitions/v1QuantityPriceTier"},"type":"array"}},"type":"object"},"v1ProductPriceFieldValueState":{"properties":{"commercial_values":{"items":{"$ref":"#/definitions/v1CommercialPriceFieldValue"},"type":"array"},"current_money_values":{"description":"Latest effective value for each product/variant target. Historical rows\nremain in storage and are appended, never silently rewritten.","items":{"$ref":"#/definitions/v1ProductMoneyValue"},"type":"array"},"field":{"$ref":"#/definitions/v1PriceFieldDefinition"}},"type":"object"},"v1ProductPromotion":{"description":".v1.1: акция, затрагивающая товар (витринная подача для карточки). Без сумм —\nсписок для бейджей/раздела «Акции».","properties":{"description":{"title":"«Описание условий»","type":"string"},"gift":{"$ref":"#/definitions/v1GiftPreview"},"icon":{"type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"product_discount | order_discount | bundle | gift","type":"string"},"name":{"type":"string"},"theme":{"description":"Оформление акции на витрине (владелец 2026-08-05). ИМЕНА из наборов фронта,\nне hex и не файл: theme — цветовая гамма (terracotta|violet|olive|graphite|\nemerald), icon — имя из общего реестра иконок. Пусто = дефолт витрины\n(гамма по умолчанию, иконка по типу акции); неизвестное имя витрина гасит\nв дефолт, поэтому набор расширяется без ломки старых записей.","type":"string"},"trigger_categories":{"items":{"type":"string"},"type":"array"},"triggers":{"description":"ОБРАТНАЯ связь на карточке САМОГО подарка (решение владельца 2026-08-21):\n«этот товар — в подарок при покупке …» + мини-карточки товаров-триггеров.\nЗаполняется ТОЛЬКО когда карточка = товар-подарок правила; gift при этом\nпуст (самополосу «подарок показывает себя» заменяет обратная связь).\ntriggers ограничены потолком (12) — витрина показывает 2 инлайном, остальное\nв модалке «подробнее»; triggers_total — сколько триггеров ВСЕГО (для «ещё N»).\nУсловие по категории списком товаров не разворачивается — категория едет\nименем в trigger_categories («любой товар из категории …»).","items":{"$ref":"#/definitions/v1GiftPreview"},"type":"array"},"triggers_total":{"format":"int32","type":"integer"}},"type":"object"},"v1ProductRelation":{"description":"Ребро связи (на чтение). Источник и цель = товар XOR категория (0 = узел\nдругого вида).","properties":{"from_category_id":{"format":"int64","title":"0 = источник-товар","type":"string"},"from_product_id":{"format":"int64","title":"0 = источник-категория","type":"string"},"id":{"format":"int64","type":"string"},"note":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"to_category_id":{"format":"int64","title":"0 = цель-товар","type":"string"},"to_product_id":{"format":"int64","title":"0 = цель-категория","type":"string"},"type_id":{"format":"int64","type":"string"}},"type":"object"},"v1ProductRelationGroup":{"description":"Рёбра одного типа (группировка исходящих рёбер товара для редактора).","properties":{"code":{"type":"string"},"items":{"items":{"$ref":"#/definitions/v1ProductRelation"},"type":"array"},"label":{"type":"object"},"label_reverse":{"type":"object"},"symmetric":{"type":"boolean"},"type_id":{"format":"int64","type":"string"}},"type":"object"},"v1ProductRelationInput":{"description":"Ребро связи (на запись): ровно одна цель — to_product_id XOR to_category_id.","properties":{"note":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"to_category_id":{"format":"int64","title":"цель-категория (папка)","type":"string"},"to_product_id":{"format":"int64","title":"цель-товар (XOR to_category_id)","type":"string"},"type_id":{"format":"int64","type":"string"}},"type":"object"},"v1ProductShort":{"properties":{"admin_price_fields":{"description":"Закрытая управленческая проекция для таблицы товаров владельца. Сервер\nзаполняет её только для live non-PAT сессии своей компании; публичная\nвитрина и PAT с catalog:read всегда получают пустой список. Внутри только\nполя с access.show_admin_list=true, выбранные одним batch-запросом.","items":{"$ref":"#/definitions/v1ProductPriceFieldValueState"},"type":"array"},"catalog_hidden":{"title":"tri-state ''|true|false (бейдж «скрыт из каталога» в админке)","type":"string"},"category_id":{"description":"§2 (зеркало решения slug=14): ОСНОВНАЯ категория товара — по ней\nстроится КАНОНИЧЕСКИЙ древовидный путь `/{...цепочка}/{slug}`. Нужна\nкарточкам списков (главная/вишлист/маркетплейс) и ItemList JSON-LD, у\nкоторых нет контекста категории. 0 = товар вне дерева (лист корня).","format":"int32","type":"integer"},"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"id":{"format":"int32","type":"integer"},"in_stock":{"type":"boolean"},"is_published":{"description":"статус публикации для админ-списка владельца (Опубликован/Черновик).\nВ публичных выдачах безвредно: там фильтр is_published=true — поле всегда true.","type":"boolean"},"kind":{"description":"§9.1: тип товара (standard|combo), read-only — бейдж «Комбо-набор»\nв списке админки без похода за карточкой.","readOnly":true,"type":"string"},"likes":{"format":"int32","type":"integer"},"moderation_status":{"format":"int32","title":"0 none | 1 pending | 2 approved | 3 rejected (для бейджа в списке)","type":"integer"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"price":{"$ref":"#/definitions/v1ProductPrice"},"sku":{"type":"string"},"slug":{"description":"W3-prep: slug товара для ссылок листингов (/product/{slug}) без похода\nза полной карточкой. '' допустимо (старые товары без slug) — фронт\nфолбэчит на id.","type":"string"},"status":{"type":"string"},"stock_quantity":{"description":"Склад в списках. stock_quantity отсутствует = учёт по товару не ведётся\n(не ноль штук!). in_stock считает сервер: витрине незачем повторять у себя\nправило «нет учёта — есть всегда», а разойдись оно с правилом списания —\nпокупатель увидел бы «в наличии» у того, чего нет.","format":"int32","type":"integer"},"views":{"format":"int32","type":"integer"},"you":{"$ref":"#/definitions/v1YouReaction"}},"type":"object"},"v1ProductVariant":{"description":"Набор характеристик товара (вариант). values — значения по осям\n(attribute_id → value словаря опций). price/old_price — optional: не задано →\nCOALESCE(price, base_price) на витрине и в корзине/заказе. image_url —\nread-only резолв image_id.","properties":{"dev_dirty":{"description":"(dev/prod): объект изменён в дев-оверлее (COW). Заполняется ТОЛЬКО\nв дев-контуре (owner|admin своей компании с X-Vizen-Contour: dev);\nпрод-контур/аноним всегда получают false (zero-value).","type":"boolean"},"gallery_id":{"description":"Б-Галереи: галерея, которую покупатель видит в слайдере при выбранном\nнаборе. Любая ЖИВАЯ галерея КОМПАНИИ (решение 9 владельца — это и есть\n«взять галерею из другого товара»), 0 = привязки нет (показывается первая\nгалерея объекта). Независима от image_id (тот остаётся чипом/превью\nстроки корзины). Чужая/несуществующая на записи → NotFound\nGALLERY_NOT_FOUND; удалённая позже — на чтении отдаётся как 0.","format":"int64","type":"string"},"id":{"format":"int64","title":"0 при создании","type":"string"},"image_id":{"type":"string"},"image_url":{"readOnly":true,"title":"read-only","type":"string"},"is_active":{"type":"boolean"},"old_price":{"format":"int32","type":"integer"},"price":{"format":"int32","title":"не задано → base_price","type":"integer"},"sku":{"type":"string"},"sort_order":{"format":"int32","type":"integer"},"values":{"additionalProperties":{"type":"string"},"title":"attribute_id → value опции","type":"object"}},"type":"object"},"v1ProductVariantsResponse":{"description":"Оси + наборы товара (админ-редактор / хвост Set*).","properties":{"axes":{"items":{"$ref":"#/definitions/v1VariantAxis"},"type":"array"},"variants":{"items":{"$ref":"#/definitions/v1ProductVariant"},"type":"array"}},"type":"object"},"v1ProductZoneManifests":{"properties":{"manifest_ids":{"items":{"format":"int64","type":"string"},"type":"array"},"product_id":{"format":"int32","type":"integer"}},"type":"object"},"v1Profile":{"properties":{"age":{"format":"int32","type":"integer"},"auth_methods":{"additionalProperties":{"$ref":"#/definitions/v1AuthMethod"},"type":"object"},"avatar_url":{"type":"string"},"birth_date":{"type":"string"},"company_id":{"format":"int32","title":"активный тенант (0 = покупатель)","type":"integer"},"country":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"delete_after":{"format":"date-time","type":"string"},"email":{"type":"string"},"email_verified":{"type":"boolean"},"first_name":{"type":"string"},"id":{"format":"int32","type":"integer"},"language":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"pending_email":{"title":"активная заявка на смену email (или \"\")","type":"string"},"phone":{"type":"string"},"roles":{"items":{"type":"string"},"title":"платформенные роли","type":"array"},"status":{"type":"string"},"username":{"type":"string"},"username_available_at":{"description":"Когда имя пользователя снова можно менять (кулдаун 30 дней). Пусто —\nменять можно прямо сейчас. Нужно форме: без этого она молчит до отказа.","format":"date-time","type":"string"}},"type":"object"},"v1PromoCampaign":{"properties":{"active":{"type":"boolean"},"budget_kind":{"description":"none = просто группировка правил; spend = потолок по СУММЕ выданных скидок;\ncount = потолок по ЧИСЛУ погашений. Что раньше упрётся, то и выключит кампанию.","type":"string"},"budget_limit":{"format":"int64","title":"0 при budget_kind=none","type":"string"},"budget_used":{"description":"read-only: факт выданных скидок, а не настройка. Правка лимита не «прощает»\nуже потраченное — иначе бюджет перестал бы что-либо значить.","format":"int64","readOnly":true,"type":"string"},"budget_warned":{"description":"read-only: бюджет израсходован на 80% и больше. Кабинет показывает\nпредупреждение ДО того, как кампания встанет: узнавать постфактум поздно.","readOnly":true,"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"ends_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"promotions_count":{"description":"read-only: сколько правил ссылается на эту кампанию (для списка кабинета).","format":"int32","readOnly":true,"type":"integer"},"starts_at":{"format":"date-time","type":"string"}},"title":"── Кампании скидок ──","type":"object"},"v1PromoCampaignResponse":{"properties":{"result":{"$ref":"#/definitions/v1PromoCampaign"}},"type":"object"},"v1PromoKey":{"description":"── Ключи скидок «Промокоды и купоны») ──\nОДНА сущность на два раздела админки: промокод = ключ без владельца,\nкупон = ключ с владельцем (owner_user_id), сроком и лимитом 1.","properties":{"active":{"type":"boolean"},"code":{"description":"Код: буквы/цифры/дефис/подчёркивание, 3..64. Матч регистронезависимый.","type":"string"},"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","title":"отсутствует = по сроку акции","type":"string"},"id":{"format":"int64","type":"string"},"issued_by_order_id":{"format":"int32","title":"за какую покупку выдан (купон-награда)","type":"integer"},"owner_user_id":{"description":"Владелец: 0 = общий промокод; иначе именной купон (read-only в v1 —\nименные купоны выдаёт система за покупку, волна 2).","format":"int32","readOnly":true,"type":"integer"},"per_customer_limit":{"format":"int32","type":"integer"},"promotion_id":{"description":"Правило класса key, которое этот ключ отпирает (скидку задаёт правило).","format":"int64","type":"string"},"usage_limit":{"description":"Лимиты: 0 = без лимита.","format":"int32","type":"integer"},"used":{"description":"сколько раз погашен (живые погашения)","format":"int32","title":"read-only","type":"integer"}},"type":"object"},"v1PromoKeyResponse":{"properties":{"result":{"$ref":"#/definitions/v1PromoKey"}},"type":"object"},"v1PromoOffer":{"description":"Одно предложение витрины: товар со скидкой или комбо-набор с выгодой.","properties":{"benefit":{"description":"Выгода в деньгах и в процентах — ГОТОВЫМИ полями: в подстановках авторской\nвёрстки нет выражений, а второй счёт на клиенте разойдётся с корзиной.","format":"int32","type":"integer"},"benefit_percent":{"format":"int32","type":"integer"},"kind":{"description":"product | combo — что это: товар со скидкой акции или набор.","type":"string"},"name":{"type":"string"},"old_price":{"format":"int32","type":"integer"},"preview":{"$ref":"#/definitions/v1MiniFile"},"price":{"description":"Цена сейчас и цена без выгоды. Целые единицы валюты.","format":"int32","type":"integer"},"product_id":{"format":"int32","type":"integer"},"promotion_name":{"description":"Имя правила, которое дало скидку (для комбо пусто).","type":"string"},"slug":{"type":"string"}},"type":"object"},"v1Promotion":{"description":"── Акции «Скидки и акции v1») ──\nПравило акции магазина. condition/effect — bytes (raw JSON, конвенция №8):\nfloat64 Struct'а испортил бы целочисленные суммы/массивы id. Форма JSON —\nпо kind (см. domain.ValidatePromotion): product_discount cond\n{product_ids?,category_ids?,excluded_product_ids?} eff {percent}|{amount};\norder_discount cond {min_subtotal?,min_items?} eff {percent}|{amount}.","properties":{"active":{"type":"boolean"},"applies_to_discounted":{"title":"только class=key: считать базу и по строкам со скидкой","type":"boolean"},"audience_id":{"description":"Покупательская аудитория магазина. Не прислано при edit = сохранить\nпрежнее значение для старого клиента; явный 0 = сделать публичной.","format":"int64","type":"string"},"campaign_id":{"description":"кампания, чей бюджет ограничивает это правило (0 = без бюджета).\nИсчерпанная кампания выключает свои правила целиком — это потолок над\nгруппой акций, а не над каждой по отдельности.\nВАЖНО optional: правка акции — full-replace, а клиент, который про\nкампании не знает, поля не шлёт. Без has-семантики любая правка названия\nиз кабинета молча снимала бы бюджетный потолок, и купон продолжал бы\nработать без бюджета (HIGH-1 аудита 2026-08-20). Явный 0 = отвязать.","format":"int64","type":"string"},"class":{"description":"── «Фундамент ключей» ──\nclass — ступень лестницы применения: item (построчные) → order (заказная) →\nkey (скидка за промокод/купон). Пусто = класс, который этот kind имел до (product_discount/bundle/gift → item, order_discount → order), поэтому\nстарые интеграции не меняют смысл своих правил.","type":"string"},"condition":{"format":"byte","title":"raw JSON, форма по kind","type":"string"},"created_at":{"format":"date-time","readOnly":true,"title":"read-only аудит-поля","type":"string"},"description":{"description":"Б5.1: «Описание условий» акции — видит покупатель. Обязательность — на фронте;\nбэк ограничивает длину ≤ 2000.","type":"string"},"effect":{"format":"byte","title":"raw JSON, {percent}|{amount}","type":"string"},"ends_at":{"format":"date-time","title":"отсутствует = бессрочно","type":"string"},"exclude_combo":{"title":"акция НЕ действует на комбо-товары","type":"boolean"},"icon":{"type":"string"},"id":{"format":"int64","type":"string"},"kind":{"description":"v1: product_discount | order_discount (bundle/gift зарезервированы под v1.1).\nissue_key не скидка: правило ничего не считает в корзине, а ВЫДАЁТ\nпокупателю именной купон, когда его заказ довели до «выполнен».","type":"string"},"name":{"type":"string"},"priority":{"format":"int32","type":"integer"},"stack_with_key":{"description":"Матрица совместимости. До её не было: часть сочетаний работала «по\nумолчанию», а не по решению магазина.\nВАЖНО optional: дефолт в БД — TRUE, а zero-value proto3 у bool — false.\nБез has-семантики любой клиент, который поля не знает (развёрнутая админка),\nпри правке акции молча ставил бы «не сочетать с промокодом» — и промокоды\nглохли бы во всём магазине. Не прислали → колонку не трогаем.","type":"boolean"},"starts_at":{"format":"date-time","title":"отсутствует = сразу","type":"string"},"theme":{"description":"Оформление на витрине (владелец 2026-08-05): имя цветовой гаммы и имя\nиконки из наборов фронта (разбор — миграция 0076). Валидируется длиной, а\nне enum-списком: набор тем и иконок живёт во фронте и пополняется чаще\nконтракта, а неизвестное имя витрина гасит в дефолт.","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1PromotionResponse":{"properties":{"result":{"$ref":"#/definitions/v1Promotion"}},"type":"object"},"v1PublicForm":{"description":"Публичная проекция формы: схема УЖЕ очищена сервером (без submit; code —\nколонка и наружу не отдаётся). is_active=false виджет показывает как\n«приём закрыт». banner_url — серверный резолв banner.fileId → публичный URL.","properties":{"banner_url":{"type":"string"},"id":{"format":"int64","type":"string"},"is_active":{"type":"boolean"},"schema":{"format":"byte","type":"string"}},"type":"object"},"v1PublicTariffPlan":{"description":"PublicTariffPlan — публичная проекция плана для витрины цен полироль):\nТОЛЬКО витринные поля. Внутренних полей конструктора (is_active/created_at/\ncreated_by/updated_at) здесь НЕТ намеренно — ответ отдаётся анониму.","properties":{"code":{"title":"ключ для SelectPlan/регистрации","type":"string"},"limits":{"description":"Лимиты плана с подписями реестра (limit_code, value_int|value_bool,\nlabel, unit) — фронт строит строки-фичи карточки из них.","items":{"$ref":"#/definitions/v1TariffLimit"},"type":"array"},"name":{"type":"string"},"period":{"title":"month|year|none (none = «по договору»)","type":"string"},"price":{"format":"int64","title":"ЦЕЛЫЕ рубли; protojson отдаёт int64 строкой","type":"string"},"sort":{"format":"int64","type":"string"}},"type":"object"},"v1PublicationInfo":{"description":"Карточка активной публикации — без тяжёлого artifact.\nОтдаётся в GetScene (поле publication) и в ответах publish/published.","properties":{"hidden_at":{"description":"Момент скрытия владельцем (Popover v2); null — публикация видима.","format":"date-time","type":"string"},"publication_id":{"format":"int32","type":"integer"},"published_at":{"format":"date-time","type":"string"},"published_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"revoked_at":{"description":"Момент ревока (для карточек истории ListScenePublications); null — активная.","format":"date-time","type":"string"},"scene_version":{"description":"Версия сцены, из которой собран снапшот.","format":"int32","type":"integer"}},"type":"object"},"v1PublishConflict":{"description":"PublishConflict — конфликт «правили и в деве, и на проде после форка».\nkind: edit — двойная правка; delete — дев-удаление изменённого прода;\nset — расхождение набора junction-таблицы (id = id родителя набора).","properties":{"id":{"format":"int64","type":"string"},"kind":{"type":"string"},"label":{"description":"label — имя/метка сущности для UI (name/sku из дев-вида).","type":"string"},"table":{"type":"string"}},"type":"object"},"v1PublishRequest":{"description":"PublishRequest — заметка + решения по конфликтам.","properties":{"note":{"type":"string"},"resolutions":{"items":{"$ref":"#/definitions/v1ConflictResolution"},"type":"array"}},"type":"object"},"v1PublishResponse":{"description":"PublishResponse — созданная публикация + фактические счётчики.","properties":{"result":{"$ref":"#/definitions/v1PublishResponseResult"}},"type":"object"},"v1PublishResponseResult":{"description":"Result — тело ответа.","properties":{"applied_creates":{"format":"int64","type":"string"},"applied_deletes":{"format":"int64","type":"string"},"applied_updates":{"format":"int64","type":"string"},"publication":{"$ref":"#/definitions/v1SitePublication"},"warnings":{"description":"warnings — например, сцены применённых товаров без активной публикации.","items":{"type":"string"},"type":"array"}},"type":"object"},"v1PublishSceneResponse":{"properties":{"result":{"$ref":"#/definitions/v1PublicationInfo"}},"type":"object"},"v1PublishTableSummary":{"description":"PublishTableSummary — сводка публикации по одной таблице реестра.","properties":{"conflicts":{"format":"int64","type":"string"},"creates":{"format":"int64","type":"string"},"deletes":{"format":"int64","type":"string"},"prod_untouched":{"description":"prod_untouched — живых прод-строк, которых публикация не коснётся.","format":"int64","type":"string"},"table":{"type":"string"},"updates":{"format":"int64","type":"string"}},"type":"object"},"v1QuantityPriceTier":{"description":"Публичная точка лестницы цен. Объявлена после существующих сообщений, чтобы\nаддитивное расширение не меняло их descriptor indexes. Это намеренно не\nPricingRule: наружу выходят только условие количества и результат, без\nid/code/name, аудитории и иных внутренних настроек правила.","properties":{"condition_label":{"type":"string"},"label":{"description":"Buyer-safe presentation from a non-system reusable price field. Internal\nrule ids/codes/audiences remain hidden.","type":"string"},"min_quantity":{"format":"int32","type":"integer"},"quantity_scope":{"title":"line | product","type":"string"},"unit_price":{"format":"int32","type":"integer"}},"type":"object"},"v1QuoteCartRequest":{"properties":{"company_id":{"format":"int32","type":"integer"},"items":{"description":"Позиции из браузерной корзины гостя; тот же предел, что у merge.","items":{"$ref":"#/definitions/v1MergeCartItem"},"type":"array"},"promo_code":{"description":"Промокод для показа скидки гостю (пусто = нет). Только чтение: лимиты и\nвладение проверяются, счётчики не двигаются.","type":"string"}},"type":"object"},"v1ReferralAccess":{"description":"ReferralAccess — три состояния партнёрской ссылки.\n\nРазные состояния значат разное для человека, и слить их в «работает/не\nработает» нельзя: на паузе он ещё может всё вернуть, а при отсутствии права\nнужен другой тариф.\n\nREFERRAL_ACCESS_OPEN: Ссылка работает, вознаграждения начисляются.\nREFERRAL_ACCESS_PAUSED: Тариф кончился, идёт месяц на возвращение: начисления уже не идут, но сеть\nцела и ждёт. Показываем отсчёт.\nREFERRAL_ACCESS_LOCKED: Права нет: тариф не участвует в программе либо дерево уже распалось.\nСсылка под замком и не копируется.","enum":["REFERRAL_ACCESS_OPEN","REFERRAL_ACCESS_PAUSED","REFERRAL_ACCESS_LOCKED"],"type":"string"},"v1ReferralLevelStat":{"description":"ReferralLevelStat — колено сети: сколько всего и сколько из них платят.\nРазница между числами — честный ответ на «почему сеть большая, а начислений\nмало».","properties":{"level":{"format":"int32","type":"integer"},"paying":{"format":"int32","type":"integer"},"percent_bp":{"format":"int32","title":"ставка этого колена в действующей сетке","type":"integer"},"total":{"format":"int32","type":"integer"}},"type":"object"},"v1ReferralMissed":{"description":"ReferralMissed — упущенная выгода и её причина.","properties":{"by_reason":{"additionalProperties":{"format":"int64","type":"string"},"description":"Разбивка по причинам: no_plan | plan_without_referral | plan_tier_lower |\ngrace_expired.","type":"object"},"need_tier":{"description":"Ступень тарифа, которой не хватило (-1 = дело не в ступени). По ней\nкабинет предлагает конкретный тариф, а не абстрактное «поднимите».","format":"int32","type":"integer"},"total_kop":{"format":"int64","type":"string"}},"type":"object"},"v1ReferralRate":{"description":"ReferralRate — процент вознаграждения одного колена цепочки.","properties":{"level":{"format":"int32","title":"1..5, где 1 — тот, кто пригласил напрямую","type":"integer"},"percent_bp":{"format":"int32","title":"базисные пункты: 2000 = 20 %","type":"integer"}},"type":"object"},"v1ReferralRatesVersion":{"description":"ReferralRatesVersion — сетка целиком. История версий неизменяема: правка\nзаводит НОВУЮ версию, а начисления помнят ту, по которой прошли, — иначе\nпересчёт прошлого месяца дал бы другие цифры, чем человек уже видел.","properties":{"created_at":{"format":"date-time","type":"string"},"is_current":{"type":"boolean"},"rates":{"items":{"$ref":"#/definitions/v1ReferralRate"},"type":"array"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1ReferralRewardEntry":{"description":"ReferralRewardEntry — строка истории начислений.","properties":{"amount_kop":{"format":"int64","type":"string"},"available_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"kind":{"title":"referral_reward | reversal | withdrawal","type":"string"},"level":{"format":"int32","type":"integer"},"percent_bp":{"format":"int32","type":"integer"}},"type":"object"},"v1ReferralWallet":{"description":"ReferralWallet — три цифры кошелька.","properties":{"available_kop":{"format":"int64","title":"созревшее, доступное к выводу","type":"string"},"balance_kop":{"format":"int64","title":"всего заработано за вычетом выведенного","type":"string"},"pending_kop":{"format":"int64","title":"начислено, но ещё не созрело","type":"string"}},"type":"object"},"v1RefreshRequest":{"properties":{"refresh_token":{"type":"string"}},"type":"object"},"v1RefreshResponse":{"properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1RegisterRequest":{"properties":{"accept_marketing":{"type":"boolean"},"accept_personal_data":{"description":"Согласия с формы (152-ФЗ/оферта/реклама) → append-only журнал user_consents\n(0061). IP/User-Agent сервер берёт сам из метаданных запроса.","type":"boolean"},"accept_terms":{"type":"boolean"},"consent_doc_version":{"description":"Редакция документов, которую видел пользователь (CONSENT_DOC_VERSION фронта).","type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"password":{"type":"string"}},"type":"object"},"v1RegisterResponse":{"properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1RelationType":{"description":"Тип связи (на чтение).","properties":{"code":{"type":"string"},"id":{"format":"int64","type":"string"},"label":{"type":"object"},"label_reverse":{"type":"object"},"sort_order":{"format":"int32","type":"integer"},"symmetric":{"type":"boolean"}},"type":"object"},"v1RelationTypeInput":{"description":"Тип связи (на запись). symmetric=true → обратный ярлык не используется.","properties":{"code":{"type":"string"},"label":{"title":"i18n прямой ярлык («Дилеры»)","type":"object"},"label_reverse":{"title":"i18n обратный ярлык («Автомобили дилера»)","type":"object"},"sort_order":{"format":"int32","type":"integer"},"symmetric":{"type":"boolean"}},"type":"object"},"v1RemoveContainerFromCollectionRequest":{"properties":{"collection_id":{"format":"int64","type":"string"},"container_id":{"format":"int64","type":"string"}},"type":"object"},"v1RemoveContainerFromCollectionResponse":{"type":"object"},"v1RemoveFileFromCollectionRequest":{"properties":{"collection_id":{"format":"int64","type":"string"},"file_id":{"type":"string"}},"type":"object"},"v1RemoveFileFromCollectionResponse":{"type":"object"},"v1RemoveFromCartResponse":{"type":"object"},"v1RemoveFromWishlistResponse":{"type":"object"},"v1RemoveMemberResponse":{"type":"object"},"v1RemovePromoCodeRequest":{"properties":{"company_id":{"format":"int32","type":"integer"}},"type":"object"},"v1RenameFileResponse":{"properties":{"result":{"$ref":"#/definitions/v1File"}},"type":"object"},"v1ReorderCollectionItem":{"properties":{"collection_id":{"format":"int64","type":"string"},"order_index":{"format":"int32","type":"integer"}},"type":"object"},"v1ReorderCollectionsRequest":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ReorderCollectionItem"},"type":"array"}},"type":"object"},"v1ReorderCollectionsResponse":{"type":"object"},"v1ReorderColumnsResponse":{"type":"object"},"v1ReorderFilesInCollectionResponse":{"type":"object"},"v1ReorderItem":{"properties":{"file_id":{"type":"string"},"order_index":{"format":"int32","type":"integer"}},"type":"object"},"v1ReorderSandboxesRequest":{"properties":{"ids":{"items":{"format":"int64","type":"string"},"type":"array"}},"type":"object"},"v1ReorderSandboxesResponse":{"type":"object"},"v1ReorderTariffPlansRequest":{"description":"ReorderTariffPlansRequest — полный набор code ЖИВЫХ планов в новом порядке\n(включая неактивные: конструктор упорядочивает весь список).","properties":{"codes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1ReorderTariffPlansResponse":{"description":"ReorderTariffPlansResponse — итоговый admin-список планов в новом порядке\n(зеркалит ListTariffPlansResponse, включая companies_count).","properties":{"result":{"items":{"$ref":"#/definitions/v1TariffPlan"},"type":"array"}},"type":"object"},"v1ReplaceFileResponse":{"properties":{"result":{"$ref":"#/definitions/v1File"},"upload":{"$ref":"#/definitions/v1ReplaceFileResponseUpload"}},"type":"object"},"v1ReplaceFileResponseUpload":{"properties":{"id":{"type":"string"},"mode":{"title":"presign","type":"string"},"url":{"type":"string"}},"type":"object"},"v1ReplaceResourceAccessBindingsRequest":{"properties":{"policy_ids":{"items":{"format":"int64","type":"string"},"type":"array"},"resource_id":{"format":"int64","type":"string"},"resource_type":{"type":"string"}},"type":"object"},"v1RequestDeletionResponse":{"properties":{"delete_after":{"format":"date-time","type":"string"}},"type":"object"},"v1RequestEmailChangeRequest":{"properties":{"new_email":{"type":"string"}},"type":"object"},"v1RequestEmailChangeResponse":{"type":"object"},"v1RequestPasswordResetRequest":{"properties":{"email":{"type":"string"}},"type":"object"},"v1RequestPasswordResetResponse":{"type":"object"},"v1RequestPayoutRequest":{"properties":{"amount_kop":{"format":"int64","type":"string"},"payee_account":{"type":"string"},"payee_inn":{"type":"string"},"payee_kind":{"title":"self_employed | individual | company","type":"string"},"payee_name":{"type":"string"}},"type":"object"},"v1ResendEmailVerificationResponse":{"type":"object"},"v1ResolveSlugRedirectResponse":{"description":"Цель редиректа: сущность и её ТЕКУЩИЙ слаг (цепочки A-\u003eB-\u003eC схлопнуты).","properties":{"current_slug":{"type":"string"},"entity_id":{"format":"int64","type":"string"}},"type":"object"},"v1ResolveStorefrontResponse":{"properties":{"chrome":{"$ref":"#/definitions/v1ContentBlock"},"custom_domain":{"description":"Активный кастом-домен магазина (пусто — не привязан/не активен/тариф не\nпозволяет). Витрина использует для canonical-редиректа слаг-хоста (Б-домен §5).","type":"string"},"layout":{"$ref":"#/definitions/v1StorefrontLayout"},"org":{"$ref":"#/definitions/v1Organization"},"site_access_granted":{"description":"Пустил ли ЭТОГО посетителя закрытый сайт: true, если сайт опубликован ЛИБО\nпропуск из куки vz_store_access подтверждает действующую версию кода.\nСвойство ЗАПРОСА, а не магазина, — в отличие от storefront.site_published:\nвитрина по нему решает, показать страницу или окно ввода кода.","type":"boolean"},"storefront":{"$ref":"#/definitions/v1Storefront"},"theme_icons":{"description":"ИКОНКИ САЙТА из папки лейаута магазина (Э4 «Лейауты сайта»). Здесь, а не\nв резолве страницы, потому что фавиконка — свойство САЙТА: витрина ставит\nеё один раз в корневом layout, до того как узнает, какая страница\nоткрыта. Пусто — у лейаута магазина своих иконок нет, работает дефолт.","items":{"$ref":"#/definitions/v1ThemeIcon"},"type":"array"}},"type":"object"},"v1ResolvedDesign":{"description":"Содержимое самостоятельной модальной цели `modal:group:\u003cid\u003e`. В ответ\nпопадают только группы, упомянутые уже публичными блоками этого ресурса:\nпроизвольного чтения библиотеки дизайна по id нет.","properties":{"blocks":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"блоки layout-шаблона (файлы резолвнуты)","type":"array"},"chrome_kit":{"$ref":"#/definitions/v1ContentBlock"},"chrome_source":{"type":"string"},"composition":{"description":"Схема владельца 2026-08-08: упорядоченные СЛОИ страницы редактора —\n«бэк передаёт массив, чтобы было понятно, как собирать: что блокировать,\nа что редактировать». Аддитивно; фронт без поля живёт фолбэком по полям\nвыше. Данные слоёв не дублируются: layout → chrome_kit, template →\nblocks, zones — собственные content_blocks ресурса.","items":{"$ref":"#/definitions/v1DesignLayer"},"type":"array"},"layout_source":{"title":"own | category:\u003cid\u003e | shop | default","type":"string"},"page":{"$ref":"#/definitions/v1ResolvedPage"}},"type":"object"},"v1ResolvedModalGroup":{"description":"Содержимое самостоятельной модальной цели `modal:group:\u003cid\u003e`. В ответ\nпопадают только группы, упомянутые уже публичными блоками ресурса:\nпроизвольного чтения библиотеки дизайна по id нет.","properties":{"blocks":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"},"id":{"format":"int64","type":"string"},"name":{"type":"string"}},"type":"object"},"v1ResolvedPage":{"description":"Разрешённое оформление страницы (Ш-1 §5): что РИСОВАТЬ. content_blocks в\nответах ресурсов смысла не меняют (это СВОИ блоки — их правит редактор);\ndesign — результат цепочки наследования для витрины.\nResolvedPage — СОБРАННАЯ страница (модель групп 2026-08-21). Скелет ровно\nтакой, каким его нарисовал владелец: шапка · верх · тело · низ · футер.\n\nСобирает СЕРВЕР, а не клиент, и это главное отличие от прежней схемы. Раньше\nвитрина получала шаблон и блоки зон и сама сращивала их правилами\n«контекстный виджет замещает одноимённую секцию шаблона в её позиции» —\nлогика жила в двух местах (витрина и канва редактора) и расходилась.\n\nАддитивно: старые поля `blocks`/`chrome_kit` продолжают заполняться, пока\nфронт не переключён. Порядок выката поэтому безопасен в любую сторону.","properties":{"above":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"группы ленты ДО тела","type":"array"},"below":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"группы ленты ПОСЛЕ тела","type":"array"},"body":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"шаблон ресурса; пусто = тело скрыто","type":"array"},"body_source":{"description":"Откуда взято тело: own | category:\u003cid\u003e | shop | default. Нужен редактору,\nчтобы честно сказать «правка затронет все страницы этого типа».","type":"string"},"feed_source":{"type":"string"},"footer":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"группы слота футера","type":"array"},"footer_source":{"type":"string"},"header":{"items":{"$ref":"#/definitions/v1ContentBlock"},"title":"группы слота шапки","type":"array"},"header_source":{"description":"Источники остальных слотов — тем же словарём.\n\nВитрине они нужны, чтобы отличить ДВА разных «пусто»: слот погашен явно\n(источник own/shop/category, список пуст — рисуем НИЧЕГО) против «этой\nмодели у магазина ещё нет» (источник default — работает прежний хром).\nБез этого различия «скрыл шапку» на новой модели молча возвращало бы\nмагазинную шапку, а магазин переходного периода терял бы её вовсе.","type":"string"},"theme":{"$ref":"#/definitions/v1ThemeLayout"},"theme_id":{"description":"ЛЕЙАУТ страницы (Э1 «Лейауты сайта»): id группы-контейнера, чьи привязки\nзакрыли слоты, которых не оказалось ни у страницы, ни у её разделов.\n0 = лейаута нет (магазин до Э1) — слоты приехали прежней лестницей.\n\nНе слот скелета: рисовать лейаутом нечего, он отвечает на вопрос «откуда\nвзялось». Поэтому отдельные поля, а не ещё один repeated ContentBlock.","format":"int64","type":"string"},"theme_source":{"description":"own | category:\u003cid\u003e | shop | default — откуда взялся сам лейаут.","type":"string"}},"type":"object"},"v1ResolvedRelationGroup":{"description":"Группа резолвнутых связей: тип + направление + раскрытые товары.","properties":{"code":{"type":"string"},"direction":{"title":"forward | reverse","type":"string"},"label":{"title":"эффективный ярлык направления (прямой/обратный)","type":"object"},"symmetric":{"type":"boolean"},"targets":{"items":{"$ref":"#/definitions/v1ResolvedRelationTarget"},"type":"array"},"type_id":{"format":"int64","type":"string"}},"type":"object"},"v1ResolvedRelationTarget":{"description":"Раскрытая (резолвнутая) цель связи на витрине — всегда товар.","properties":{"note":{"type":"string"},"product_id":{"format":"int64","title":"связанный товар","type":"string"},"sort_order":{"format":"int32","type":"integer"},"source":{"title":"direct | reverse | category:\u003cid\u003e (папка-источник)","type":"string"}},"type":"object"},"v1ResolvedSpecItem":{"description":"Одна характеристика эффективного набора + источник наследования + значение.","properties":{"attr_sort":{"format":"int32","type":"integer"},"attribute_id":{"format":"int64","type":"string"},"char_group_id":{"format":"int64","type":"string"},"code":{"description":"Метаданные определения + эффективное значение (резолв ТТХ по дереву).","type":"string"},"data_type":{"type":"string"},"filterable_here":{"type":"boolean"},"group_sort":{"format":"int32","type":"integer"},"has_value":{"title":"false = значения нет (absent/clear)","type":"boolean"},"is_summary":{"type":"boolean"},"name":{"type":"string"},"source":{"title":"own/category:\u003cid\u003e — откуда пришла характеристика (набор)","type":"string"},"unit":{"type":"string"},"value":{"title":"при has_value=true"},"value_source":{"title":"product|category:\u003cid\u003e|template_default|definition_default","type":"string"}},"type":"object"},"v1ResourceAccessBinding":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"policy_id":{"format":"int64","type":"string"},"resource_id":{"format":"int64","type":"string"},"resource_type":{"type":"string"}},"type":"object"},"v1RestorePublicationResponse":{"properties":{"result":{"$ref":"#/definitions/v1PublicationInfo"}},"type":"object"},"v1RestoreResult":{"description":"RestoreResult — итог восстановления: warnings — битые ссылки на storage-слой\n(сцена/файл удалены после снятия снимка; restore при этом успешен, карточка\nдеградирует). pre_restore_id — автокопия состояния ДО restore (материал отката).","properties":{"pre_restore_id":{"format":"int64","type":"string"},"restored":{"type":"boolean"},"warnings":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1RestoreSnapshotResponse":{"description":"RestoreSnapshotResponse — обёртка result (как ждёт фронт).","properties":{"result":{"$ref":"#/definitions/v1RestoreResult"}},"type":"object"},"v1Review":{"description":"Отзыв на товар (product_id) или магазин (product_id = 0).","properties":{"author":{"$ref":"#/definitions/apicatalogv1MiniUser"},"author_name":{"title":"имя клиента (source=seller)","type":"string"},"body":{"type":"string"},"company_id":{"format":"int32","type":"integer"},"created_at":{"format":"date-time","type":"string"},"files":{"items":{"$ref":"#/definitions/v1MiniFile"},"title":"медиа отзыва (id+url)","type":"array"},"helpful_count":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"moderated_at":{"format":"date-time","type":"string"},"order_id":{"format":"int32","title":"verified purchase; 0 = без привязки","type":"integer"},"product_id":{"format":"int32","title":"0 = отзыв на магазин","type":"integer"},"rating":{"format":"int32","title":"1..5; 0 = без оценки","type":"integer"},"replied_at":{"format":"date-time","type":"string"},"seller_reply":{"type":"string"},"source":{"title":"buyer|seller","type":"string"},"status":{"title":"pending|approved|rejected","type":"string"}},"type":"object"},"v1ReviewResponse":{"description":"Отзыв (создание/модерация/ответ).","properties":{"result":{"$ref":"#/definitions/v1Review"}},"type":"object"},"v1ReviewsSummary":{"description":"Сводка approved-отзывов: средний рейтинг, число оценок, гистограмма\n(histogram[0] = «1 звезда» … histogram[4] = «5 звёзд»).","properties":{"histogram":{"items":{"format":"int32","type":"integer"},"type":"array"},"rating_avg":{"format":"double","type":"number"},"rating_count":{"format":"int32","type":"integer"}},"type":"object"},"v1RevokeApiTokenResponse":{"description":"RevokeApiTokenResponse — пустой (идемпотентно по уже отозванному — NotFound).","type":"object"},"v1RevokeInviteResponse":{"type":"object"},"v1RevokeSessionRequest":{"properties":{"session_id":{"type":"string"}},"type":"object"},"v1RevokeSessionResponse":{"type":"object"},"v1RollbackResponse":{"description":"RollbackResponse — новая активная запись + автокопия pre_restore.","properties":{"result":{"$ref":"#/definitions/v1RollbackResponseResult"}},"type":"object"},"v1RollbackResponseResult":{"description":"Result — тело ответа.","properties":{"pre_restore_snapshot_id":{"description":"pre_restore_snapshot_id — автокопия состояния прода ДО отката.","format":"int64","type":"string"},"publication":{"$ref":"#/definitions/v1SitePublication"},"warnings":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1Sandbox":{"description":"Песочница = группа форм И владелец упорядоченных колонок канбана её заявок.","properties":{"columns":{"items":{"$ref":"#/definitions/v1SandboxColumn"},"type":"array"},"id":{"format":"int64","type":"string"},"is_default":{"type":"boolean"},"name":{"type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1SandboxColumn":{"description":"── Песочницы форм + колонки канбана (Б-Формы, расширение) ──\nКолонка канбана песочницы: kind 'intake' (куда падают новые) | 'normal'.","properties":{"id":{"format":"int64","type":"string"},"kind":{"title":"intake | normal","type":"string"},"label":{"type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1SandboxColumnResponse":{"properties":{"result":{"$ref":"#/definitions/v1SandboxColumn"}},"type":"object"},"v1SandboxResponse":{"properties":{"result":{"$ref":"#/definitions/v1Sandbox"}},"type":"object"},"v1SaveCategoryAsStarterTemplateRequest":{"properties":{"category_id":{"format":"int64","title":"страница-источник","type":"string"},"id":{"format":"int64","title":"0 = создать новый","type":"string"},"name":{"type":"string"},"preview_file_id":{"type":"string"},"slug":{"type":"string"},"summary":{"type":"string"},"template_category_id":{"format":"int64","title":"узел библиотеки","type":"string"}},"type":"object"},"v1Scene":{"properties":{"camera_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"collection_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"company_id":{"format":"int32","type":"integer"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"data":{"type":"object"},"deleted_after":{"format":"date-time","type":"string"},"environment_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"file_ids":{"items":{"type":"string"},"type":"array"},"id":{"format":"int32","type":"integer"},"is_deleted":{"type":"boolean"},"light_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"material_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"model_file_id":{"type":"string"},"name":{"title":"имя сцены (Publish Platform B+, вкладка «3D-сцены»)","type":"string"},"texture_ids":{"items":{"format":"int32","type":"integer"},"type":"array"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1SceneArchiveShort":{"description":"Краткая карточка архивной версии — без тяжёлого поля data.\nКлиент качает data отдельно через GetSceneArchive при клике по строке.","properties":{"archived_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"created_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"model_file_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"updated_by":{"$ref":"#/definitions/apistoragev1MiniUser"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1SceneCard":{"description":"Лёгкая карточка сцены для админ-списка (без data).\npublication_status: 0 нет · 1 опубликована · 2 скрыта (hidden_at).","properties":{"id":{"format":"int32","type":"integer"},"name":{"type":"string"},"products":{"items":{"$ref":"#/definitions/v1LinkedProduct"},"type":"array"},"publication_scene_version":{"format":"int32","type":"integer"},"publication_status":{"format":"int32","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1SearchCollectionsResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CollectionSearchResult"},"type":"array"}},"type":"object"},"v1SelectPlanRequest":{"description":"SelectPlanRequest — код живого АКТИВНОГО плана. Поля company_id здесь НЕТ\nнамеренно: продавец меняет ТОЛЬКО свою компанию (тенант из токена).","properties":{"code":{"type":"string"},"period":{"description":"Период оплаты: month (по умолчанию) или year. Год — не отдельный тариф, а\nспособ оплатить месячный вперёд: платятся десять месяцев из двенадцати.","type":"string"}},"type":"object"},"v1SelectPlanResponse":{"description":"SelectPlanResponse — итоговый «мой тариф» после активации (фронт обновляет\nэкран одним ответом).","properties":{"result":{"$ref":"#/definitions/v1MyTariff"}},"type":"object"},"v1Seo":{"description":"Seo — каноничный SEO value-объект, переиспользуемый сущностями (витрина, товар, категория).","properties":{"meta_description":{"type":"string"},"meta_keywords":{"items":{"type":"string"},"type":"array"},"meta_title":{"title":"\u003ctitle\u003e/og:title","type":"string"},"nofollow":{"title":"\u003cmeta robots nofollow\u003e — не передавать вес ссылкам","type":"boolean"},"noindex":{"title":"\u003cmeta robots noindex\u003e — скрыть из поисковиков","type":"boolean"},"og_image_id":{"title":"uuid файла картинки для шеринга (на запись)","type":"string"},"og_image_url":{"title":"URL og:image (на чтение, резолвится из og_image_id)","type":"string"},"page_title":{"title":"H1 страницы","type":"string"},"slug":{"title":"ЧПУ, уникален в рамках тенанта","type":"string"}},"type":"object"},"v1Session":{"properties":{"created_at":{"format":"date-time","type":"string"},"current":{"type":"boolean"},"device":{"type":"string"},"id":{"type":"string"},"ip":{"type":"string"},"last_seen_at":{"format":"date-time","type":"string"}},"type":"object"},"v1SetArticleContentBlocksResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"}},"type":"object"},"v1SetArticleRelatedResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1Article"},"type":"array"}},"type":"object"},"v1SetCategoryAttributeValuesResponse":{"description":"Значения ТТХ категории после замены.","properties":{"items":{"items":{"$ref":"#/definitions/v1CategoryValueView"},"type":"array"}},"type":"object"},"v1SetCategoryAttributesResponse":{"properties":{"result":{"items":{"$ref":"#/definitions/v1CategoryAttribute"},"type":"array"}},"type":"object"},"v1SetCategoryContentBlocksResponse":{"description":"Прикреплённые блоки категории по порядку привязки.","properties":{"result":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"}},"type":"object"},"v1SetCategorySpecResponse":{"description":"Режим+привязки узла после установки.","properties":{"bindings":{"items":{"$ref":"#/definitions/v1CategorySpecBinding"},"type":"array"},"mode":{"type":"string"}},"type":"object"},"v1SetComboItemsResponse":{"description":"Состав комбо после записи (те же combo_items, что в GetProduct).","properties":{"combo_items":{"items":{"$ref":"#/definitions/v1ComboItem"},"type":"array"}},"type":"object"},"v1SetCompanyPlanResponse":{"description":"SetCompanyPlanResponse — пустой (план применяется сразу, кэш инвалидируется).","type":"object"},"v1SetDesignBindingsResponse":{"properties":{"own":{"items":{"$ref":"#/definitions/v1DesignBinding"},"type":"array"}},"type":"object"},"v1SetOrgTemplatePublisherResponse":{"properties":{"can_publish_templates":{"type":"boolean"}},"type":"object"},"v1SetPayoutModeRequest":{"properties":{"manual_approval":{"type":"boolean"}},"type":"object"},"v1SetProductAttributesResponse":{"properties":{"attribute_sections":{"items":{"$ref":"#/definitions/v1AttributeSection"},"type":"array"}},"type":"object"},"v1SetProductChildrenResponse":{"description":"Принятый состав по порядку (эхо replace-set).","properties":{"result":{"items":{"$ref":"#/definitions/v1ProductChildRef"},"type":"array"}},"type":"object"},"v1SetProductContentBlocksResponse":{"description":"Прикреплённые блоки по порядку привязки.","properties":{"result":{"items":{"$ref":"#/definitions/v1ContentBlock"},"type":"array"}},"type":"object"},"v1SetProductKindResponse":{"properties":{"id":{"format":"int32","type":"integer"},"kind":{"type":"string"}},"type":"object"},"v1SetProductRelationsResponse":{"description":"Рёбра после замены.","properties":{"items":{"items":{"$ref":"#/definitions/v1ProductRelation"},"type":"array"}},"type":"object"},"v1SetProductStockResponse":{"properties":{"in_stock":{"type":"boolean"},"low_threshold":{"format":"int32","type":"integer"},"quantity":{"format":"int32","type":"integer"}},"type":"object"},"v1SetPublicationVisibilityResponse":{"properties":{"result":{"$ref":"#/definitions/v1PublicationInfo"}},"type":"object"},"v1SetReferralRatesRequest":{"description":"SetReferralRatesRequest — завести новую версию сетки.","properties":{"rates":{"items":{"$ref":"#/definitions/v1ReferralRate"},"type":"array"}},"type":"object"},"v1SetReferralRatesResponse":{"properties":{"result":{"$ref":"#/definitions/v1ReferralRatesVersion"}},"type":"object"},"v1SetSitePublicationRequest":{"properties":{"pin":{"description":"PIN посетителя: цифры, 3–6 знаков (в кабинете подсказка «3–4 цифры» —\nстолько владелец диктует заказчику в норме). Обязателен при\npublished=false; при published=true игнорируется (сохранённый PIN\nостаётся).\n\nФормат проверяет ХЕНДЛЕР (domain.ValidateSitePin), а не validate-правило:\nнужен машинный код SITE_PASSWORD_FORMAT, по которому кабинет и внешний\nклиент отличают «не тот формат» от прочих отказов, а generated-валидатор\nотдаёт человекочитаемый текст про regex и до хендлера не доходит. Потолок\nдлины здесь остаётся — чтобы мегабайт в этом поле не доехал до ядра.","type":"string"},"published":{"description":"false — закрыть сайт PIN-кодом (pin обязателен), true — открыть.","type":"boolean"}},"type":"object"},"v1SetSpecTemplateItemsResponse":{"description":"Строки шаблона после замены.","properties":{"items":{"items":{"$ref":"#/definitions/v1SpecTemplateItemView"},"type":"array"}},"type":"object"},"v1SetTariffLimitsResponse":{"description":"SetTariffLimitsResponse — итоговый набор лимитов.","properties":{"result":{"items":{"$ref":"#/definitions/v1TariffLimit"},"type":"array"}},"type":"object"},"v1ShortFile":{"properties":{"id":{"type":"string"},"order_index":{"format":"int32","title":"позиция файла в коллекции","type":"integer"},"original_name":{"type":"string"},"preview":{"$ref":"#/definitions/v1PreviewFile"},"url":{"type":"string"}},"type":"object"},"v1SitePublication":{"description":"SitePublication — карточка публикации витрины (зеркало site_publications).","properties":{"active":{"description":"active — публикация сейчас активна (revoked_at пуст).","type":"boolean"},"id":{"format":"int32","type":"integer"},"note":{"type":"string"},"published_at":{"format":"date-time","type":"string"},"published_by":{"format":"int64","type":"string"},"revoked_at":{"description":"revoked_at/by — пусты у активной публикации.","format":"date-time","type":"string"},"revoked_by":{"format":"int64","type":"string"},"scene_publication_ids":{"description":"Пин активных публикаций сцен на момент publish (материал возврата отката).","items":{"format":"int32","type":"integer"},"type":"array"},"snapshot_id":{"description":"Пре-публикационный снапшот прода (kind=publish) — цель отката.","format":"int64","type":"string"}},"type":"object"},"v1SitePublicationResponse":{"properties":{"pin":{"description":"PIN ОТКРЫТЫМ ТЕКСТОМ — так и задумано: это временная защита на время\nсборки сайта, и владелец обязан прочитать её обратно (скопировать,\nпродиктовать). Доступно только владельцу/админу магазина и ключу со\nскоупом access:read; в публичный ResolveStorefront PIN не попадает НИКОГДА\nвитрине достаточно storefront.site_published.\nПусто — PIN ещё не задавали (сайт никогда не закрывали).","type":"string"},"published":{"type":"boolean"}},"type":"object"},"v1Sort":{"properties":{"field":{"title":"dateTill","type":"string"},"order":{"title":"ASC / DESC","type":"string"}},"type":"object"},"v1SpecTemplateInfo":{"description":"Шаблон характеристик (краткая карточка).","properties":{"code":{"type":"string"},"id":{"format":"int64","type":"string"},"name":{"type":"string"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1SpecTemplateInput":{"description":"Данные шаблона характеристик (создание).","properties":{"applies_to":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1SpecTemplateItemInput":{"description":"Строка шаблона характеристик (на запись).","properties":{"attribute_id":{"format":"int64","type":"string"},"attribute_sort_order":{"format":"int32","type":"integer"},"char_group_id":{"format":"int64","type":"string"},"default_value":{},"filterable_here":{"type":"boolean"},"group_sort_order":{"format":"int32","type":"integer"},"is_required_override":{"type":"boolean"},"is_summary":{"type":"boolean"}},"type":"object"},"v1SpecTemplateItemView":{"description":"Строка шаблона характеристик (на чтение).","properties":{"attribute_id":{"format":"int64","type":"string"},"attribute_sort_order":{"format":"int32","type":"integer"},"char_group_id":{"format":"int64","type":"string"},"filterable_here":{"type":"boolean"},"group_sort_order":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"is_required_override":{"type":"boolean"},"is_summary":{"type":"boolean"}},"type":"object"},"v1SpecTemplateLayoutItemInput":{"description":"Аддитивные V3-сообщения также находятся после всех опубликованных типов:\nэто сохраняет descriptor indexes старого контракта.","properties":{"char_group_id":{"format":"int64","type":"string"},"default_value":{"title":"только attribute"},"display":{"title":"только commerce"},"field_id":{"format":"int64","type":"string"},"field_sort_order":{"format":"int32","type":"integer"},"field_type":{"type":"string"},"filterable_here":{"title":"только attribute","type":"boolean"},"group_sort_order":{"format":"int32","type":"integer"},"is_required_override":{"title":"только attribute","type":"boolean"},"is_summary":{"type":"boolean"}},"type":"object"},"v1SpecTemplateLayoutItemView":{"properties":{"char_group_id":{"format":"int64","type":"string"},"default_value":{},"display":{},"field_id":{"format":"int64","type":"string"},"field_sort_order":{"format":"int32","type":"integer"},"field_type":{"type":"string"},"filterable_here":{"type":"boolean"},"group_sort_order":{"format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"is_required_override":{"type":"boolean"},"is_summary":{"type":"boolean"},"row_version":{"format":"int64","type":"string"}},"type":"object"},"v1StartOrderPaymentResponse":{"properties":{"pay_url":{"description":"Адрес формы оплаты: покупателя уводим на него. Собран и подписан сервером —\nфронт не участвует в подписи, иначе ключ магазина оказался бы в браузере.","type":"string"}},"type":"object"},"v1StarterTemplate":{"description":"Карточка шаблона: то, что видно в галерее. Содержимого (снимка страницы) на\nпроводе нет — оно нужно только установщику на сервере.","properties":{"ai_purpose":{"type":"string"},"blocks":{"format":"int32","title":"блоков в снимке","type":"integer"},"category_id":{"format":"int64","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"string"},"installs":{"format":"int32","type":"integer"},"kind":{"title":"срез v1: page","type":"string"},"lock_reason":{"type":"string"},"locked":{"title":"недоступен по тарифу","type":"boolean"},"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"preview_file_id":{"type":"string"},"required_feature_code":{"title":"bool-лимит тарифа","type":"string"},"slug":{"type":"string"},"summary":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"format":"int32","title":"версия снимка","type":"integer"},"visibility":{"title":"hidden | public","type":"string"}},"type":"object"},"v1StarterTemplateCategory":{"description":"─── Библиотека шаблонов страниц ─────────────────────────────────────────────\nУзел дерева библиотеки. В базе имена двуязычны ({\"ru\":…,\"en\":…}), на провод\nуходит строка на языке вызывающего — фронту разбирать словарь незачем.","properties":{"id":{"format":"int64","type":"string"},"name":{"type":"string"},"parent_id":{"format":"int64","title":"0 = корень","type":"string"},"slug":{"type":"string"},"sort":{"format":"int32","type":"integer"}},"type":"object"},"v1StarterTemplateCategoryResponse":{"properties":{"result":{"$ref":"#/definitions/v1StarterTemplateCategory"}},"type":"object"},"v1StarterTemplateResponse":{"properties":{"result":{"$ref":"#/definitions/v1StarterTemplate"}},"type":"object"},"v1StockMovement":{"description":"StockMovement — строка журнала движений.","properties":{"balance_after":{"description":"Остаток ПОСЛЕ движения: разбор расхождения не требует пересчёта истории.","format":"int32","type":"integer"},"comment":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"delta":{"description":"Со знаком: минус — ушло со склада, плюс — вернулось.","format":"int32","type":"integer"},"id":{"format":"int64","type":"string"},"order_id":{"format":"int32","type":"integer"},"reason":{"title":"order | cancel | return | manual | import","type":"string"}},"type":"object"},"v1Storefront":{"properties":{"comments_enabled":{"type":"string"},"currency":{"type":"string"},"ga_id":{"description":"Google Analytics (G-XXXXXXX); валидация мягкая (решение владельца).","type":"string"},"home_image":{"$ref":"#/definitions/v1Logo"},"home_text":{"type":"string"},"language":{"description":"W3-prep: язык витрины (companies.language), витрина одноязычна по\nкомпании. Пока read-only — записи через UpdateOrg/UpdateStorefront нет\n(ни один эндпоинт язык компании не редактирует на момент добавления).","readOnly":true,"type":"string"},"logo":{"$ref":"#/definitions/v1Logo"},"metrika_id":{"description":"(SEO): счётчики аналитики витрины ('' = снять). Optional-семантика поле не прислано → не трогаем (старая админка PUT'ом витрины счётчик\nне сбросит). Публично уезжают в ResolveStorefront.\nЯндекс.Метрика — только цифры.","type":"string"},"offer":{"$ref":"#/definitions/v1Offer"},"payment_mode":{"description":"Как магазин принимает деньги: offline | online | both. Витрине это нужно,\nчтобы честно называть происходящее ДО нажатия кнопки: раньше страница\nоформления безусловно обещала «заявку без онлайн-оплаты» и тут же уводила\nна форму банка. Ключи и реквизиты сюда не входят — только режим.\nПУСТО = «по договорённости»: магазин без кассы продаёт как раньше.","type":"string"},"questions_enabled":{"type":"string"},"reviews_scope_default":{"description":"дефолты контента карточек магазина, tri-state строкой: '' = NULL —\nплатформенный дефолт (scope own, включатели true). На запись: поле не\nприслано → не трогаем (аддитивно для старых клиентов).","type":"string"},"seo":{"$ref":"#/definitions/v1Seo"},"site_published":{"description":"Опубликован ли САЙТ магазина (read-only, UpdateStorefront его не принимает\nпереключает отдельная пара Catalog/Get|SetSitePublication). false —\nвитрина закрыта кодом и не индексируется: robots.txt отдаёт Disallow: /,\nответы получают X-Robots-Tag: noindex. Вычисляется из наличия активной\nсистемной политики доступа на ресурс `shop`; отдельного хранимого флага\nнет намеренно (два источника истины разъехались бы).","readOnly":true,"type":"boolean"},"use_logo_without_name":{"type":"boolean"}},"type":"object"},"v1StorefrontLayout":{"description":"StorefrontLayout — «в какую страницу встраивается твой HTML». HTML-блок\nрендерится ЧАСТЬЮ страницы (Shadow DOM, не iframe): контейнер, отступы и\nбрейкпоинты общие с сайтом, шрифт и цвет наследуются. Здесь — все числа,\nнужные, чтобы сверстать блок под этот макет.","properties":{"base_font_size_px":{"format":"int32","type":"integer"},"breakpoint_desktop_from_px":{"format":"int32","type":"integer"},"breakpoint_tablet_from_px":{"description":"Границы слоёв адаптива, px: mobile \u003c tablet_from \u003c= tablet \u003c desktop_from.","format":"int32","type":"integer"},"container_padding_desktop_px":{"format":"int32","type":"integer"},"container_padding_mobile_px":{"description":"Боковой отступ контейнера по ступеням, px: \u003c640 / 640..1023 / \u003e=1024.","format":"int32","type":"integer"},"container_padding_tablet_px":{"format":"int32","type":"integer"},"content_box_max_px":{"description":"Максимальная ширина полезного контента на самом широком экране, px:\ncontent_max - 2*padding_desktop. Ориентир для блока «во всю ширину»:\nфон тянется до краёв, а текст/сетку держи в этой коробке.","format":"int32","type":"integer"},"content_max_px":{"description":"Максимальная ширина КОНТЕНТА сайта, px (CSS --store-content-max).","format":"int32","type":"integer"},"font_family":{"description":"Типографика страницы: наследуется внутрь блока, если не переопределять.","type":"string"},"margin_x_presets_px":{"description":"Пресеты панели блока (те же значения, что видит владелец): боковой отступ\nи радиус — «Нет/S/M/L».","items":{"format":"int32","type":"integer"},"type":"array"},"radius_default_px":{"format":"int32","type":"integer"},"radius_presets_px":{"items":{"format":"int32","type":"integer"},"type":"array"}},"type":"object"},"v1StorefrontResponse":{"properties":{"result":{"$ref":"#/definitions/v1Storefront"}},"type":"object"},"v1SubmitFormLeadRequest":{"description":"Приём заявки (аноним). values — raw JSON-объект «ключ поля → строка»;\nutm — raw JSON меток (whitelist на сервере); hp — honeypot (непустой =\nбот); elapsed_ms — время заполнения по часам клиента (анти-спам сигнал).","properties":{"elapsed_ms":{"format":"int64","type":"string"},"form_id":{"format":"int64","type":"string"},"hp":{"type":"string"},"page_url":{"type":"string"},"referer":{"type":"string"},"utm":{"format":"byte","type":"string"},"values":{"format":"byte","type":"string"}},"type":"object"},"v1SubmitFormLeadResponse":{"properties":{"ok":{"type":"boolean"},"success_text":{"type":"string"}},"type":"object"},"v1SwitchOrgRequest":{"properties":{"org_id":{"format":"int32","type":"integer"}},"type":"object"},"v1SwitchOrgResponse":{"properties":{"tokens":{"$ref":"#/definitions/v1AuthTokens"}},"type":"object"},"v1TariffLimit":{"description":"TariffLimit — значение лимита плана: заполняется ровно одно из value_*\nпо типу кода в реестре (int|bool). Отсутствие лимита в наборе = безлимит.","properties":{"is_set":{"description":"Задан ли лимит у этого плана. Отсутствие значения = безлимит, и это НЕ то\nже самое, что заданный ноль: без флага их не различить.","type":"boolean"},"kind":{"description":"Тип значения: int|bool. Отдаём, чтобы конструктор не держал свой список\nкодов — он однажды уже разошёлся с реестром, и включатель реферальной\nпрограммы просто не отображался в интерфейсе.","type":"string"},"label":{"readOnly":true,"title":"человеческая подпись из реестра (read-only, в запросах игнорируется)","type":"string"},"limit_code":{"description":"Код реестра: storage_bytes|products_max|users_max|custom_domain|\ndev_snapshots|site_publish|referral_program.","type":"string"},"unit":{"readOnly":true,"title":"единица int-лимита из реестра (read-only)","type":"string"},"value_bool":{"title":"boolean-фичегейты","type":"boolean"},"value_int":{"format":"int64","title":"int-лимиты (байты/штуки)","type":"string"}},"type":"object"},"v1TariffPayment":{"description":"TariffPayment — платёж за подписку (денормализован: имя магазина + почта\nплательщика join'ятся на чтении для читаемости строки).","properties":{"amount_kop":{"format":"int64","type":"string"},"company_id":{"format":"int32","type":"integer"},"company_name":{"type":"string"},"id":{"format":"int64","type":"string"},"paid_at":{"format":"date-time","type":"string"},"payer_email":{"type":"string"},"period":{"type":"string"},"plan_code":{"type":"string"},"provider":{"type":"string"},"receipt_url":{"type":"string"},"status":{"title":"paid | refunded","type":"string"}},"type":"object"},"v1TariffPlan":{"description":"TariffPlan — тариф конструктора владельца платформы (ключ — code).","properties":{"code":{"title":"машинный идентификатор, ключ companies.plan","type":"string"},"companies_count":{"description":"Живых компаний на плане полироль, аддитивно): заполняется ТОЛЬКО в\nadmin-списке ListTariffPlans/ReorderTariffPlans; в остальных ответах 0\n(protojson нули опускает — контракт прежних потребителей не меняется).","format":"int64","type":"string"},"created_at":{"format":"date-time","type":"string"},"is_active":{"type":"boolean"},"name":{"type":"string"},"period":{"title":"month|year|none","type":"string"},"price":{"format":"int64","title":"ЦЕЛЫЕ рубли, int64","type":"string"},"sort":{"format":"int64","type":"string"},"vat_code":{"description":"Ставка НДС нашего чека за подписку по справочнику ФНС (1..12). Зависит от\nрежима ПЛОЩАДКИ, а не от магазина покупателя: продавец подписки — мы.","format":"int32","type":"integer"}},"type":"object"},"v1TelegramSettings":{"description":"TelegramSettings — состояние бота магазина.\n\nСамого токена здесь нет и не будет: вернувшийся секрет неизбежно оседает в\nлогах прокси, истории браузера и состоянии фронта. Владельцу достаточно\nзнать, что бот подключён, и по маске убедиться, что это тот самый бот.","properties":{"connected":{"title":"подключён ли бот","type":"boolean"},"token_mask":{"title":"\"\u003cid бота\u003e:***\u003c4 символа\u003e\"; \"\" — бот не подключён","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"},"v1TelegramSettingsResponse":{"properties":{"result":{"$ref":"#/definitions/v1TelegramSettings"}},"type":"object"},"v1TestWebhookResponse":{"description":"TestWebhookResponse — результат синхронного пинга.","properties":{"error":{"title":"текст ошибки, если не 2xx","type":"string"},"status":{"format":"int32","title":"HTTP-код приёмника; 0 = сетевая ошибка","type":"integer"}},"type":"object"},"v1ThemeHeadNode":{"properties":{"attrs":{"additionalProperties":{"type":"string"},"title":"атрибуты как в разметке","type":"object"},"inner":{"title":"текст узла (CSS у \u003cstyle\u003e)","type":"string"},"tag":{"title":"meta | link | style","type":"string"}},"type":"object"},"v1ThemeIcon":{"description":"ThemeIcon — иконка сайта. Автор кладёт в папку один icon.png, остальные\nразмеры и favicon.ico платформа догенерирует при публикации.","properties":{"href":{"title":"адрес на шлюзе /_html/{doc}/{rid}/…","type":"string"},"rel":{"title":"icon | apple-touch-icon | shortcut icon","type":"string"},"sizes":{"title":"32x32 | 180x180 | …","type":"string"},"type":{"title":"image/png | image/svg+xml | image/x-icon","type":"string"}},"type":"object"},"v1ThemeLayout":{"description":"ThemeLayout — обвязка, которую лейаут добавляет КАЖДОЙ странице сайта.\nСобрана сервером ОДИН раз (при публикации релиза) и лежит в строке релиза:\nвитрина получает готовое и HTML не парсит.","properties":{"base":{"description":"Корень файлов релиза на шлюзе: `/_html/{document_id}/{release_id}/`.\nЕго же скрипты лейаута получают как window.VZ_THEME_BASE.","type":"string"},"body_class":{"description":"Классы с \u003cbody\u003e скелета → на корень страницы (рядом со scope_class).","type":"string"},"document_id":{"format":"int64","title":"служебный html-документ папки","type":"string"},"foot_html":{"description":"Содержимое \u003cbody\u003e скелета — код перед \u003c/body\u003e каждой страницы.","type":"string"},"head":{"description":"Узлы \u003chead\u003e СТРУКТУРНО (meta/link/style): витрина ставит их настоящими\nтегами — React/Next принимают атрибуты, а не строку разметки.","items":{"$ref":"#/definitions/v1ThemeHeadNode"},"type":"array"},"head_html":{"description":"script/noscript из \u003chead\u003e сырым HTML: у них тело и произвольные атрибуты.","type":"string"},"icons":{"items":{"$ref":"#/definitions/v1ThemeIcon"},"type":"array"},"release_id":{"format":"int64","title":"активный релиз (в контуре читателя)","type":"string"},"scope_class":{"description":"Класс КОРНЯ СТРАНИЦЫ (`vz-theme-{document_id}`): витрина ставит его на\nкорневой элемент, шлюз на него же переписывает html/body/:root в CSS\nлейаута. Без класса стили лейаута ни к чему не приложатся.","type":"string"},"theme_id":{"format":"int64","title":"группа-лейаут, чья это папка","type":"string"}},"type":"object"},"v1UnlinkProviderRequest":{"properties":{"provider":{"type":"string"}},"type":"object"},"v1UnlinkProviderResponse":{"properties":{"result":{"$ref":"#/definitions/v1Profile"}},"type":"object"},"v1UnpublishSceneResponse":{"type":"object"},"v1UpdateCartItemResponse":{"type":"object"},"v1UpdateProfileRequest":{"properties":{"avatar_id":{"type":"string"},"birth_date":{"type":"string"},"country":{"type":"string"},"first_name":{"type":"string"},"language":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"v1UpdateProfileResponse":{"properties":{"result":{"$ref":"#/definitions/v1Profile"}},"type":"object"},"v1VariantAxis":{"description":"Ось вариантов товара (select-атрибут компании). code/name — read-only резолвы\nиз определения; display: text | icon | swatch (пусто → text). Зеркало\nGroupAxis, но привязана к товару, а не к группе.","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"readOnly":true,"title":"read-only","type":"string"},"display":{"type":"string"},"name":{"readOnly":true,"title":"read-only","type":"string"},"sort_order":{"format":"int32","type":"integer"}},"type":"object"},"v1VariantInfoAxis":{"description":"Ось для витрины (сиблинг variants_info): словарь опций select-атрибута целиком\n(недоступные комбинации switcher дизейблит сам; каскад image→color→label).","properties":{"attribute_id":{"format":"int64","type":"string"},"code":{"type":"string"},"display":{"title":"text|icon|swatch","type":"string"},"name":{"type":"string"},"options":{"items":{"$ref":"#/definitions/v1AttributeOption"},"title":"value/label/color_hex/image_id/image_url","type":"array"},"ui_settings":{"readOnly":true,"title":"read-only: passthrough из определения","type":"object"}},"type":"object"},"v1VariantInfoItem":{"description":"Набор на витрине: значения по осям (code→value) + резолвнутая цена\n(COALESCE(price, base_price)) и картинка. Неактивные не отдаются не-владельцу.","properties":{"catalog_price":{"description":"R5: тот же безопасный price projection, что у ProductPrice. Вариантные\nправила считаются от его resolved catalog price, а не от цены товара.","format":"int32","type":"integer"},"gallery_id":{"description":"Б-Галереи: id галереи из result.galleries, чьи элементы витрина\nпоказывает в слайдере при этом наборе; 0 — первая галерея объекта\n(ссылка не задана либо галерея уже удалена).","format":"int64","type":"string"},"id":{"format":"int64","type":"string"},"image_id":{"type":"string"},"image_url":{"type":"string"},"is_active":{"type":"boolean"},"old_price":{"format":"int32","type":"integer"},"order_subtotal_prices":{"items":{"$ref":"#/definitions/v1OrderSubtotalPriceTier"},"type":"array"},"price":{"format":"int32","title":"резолвнутая: COALESCE(price, base_price)","type":"integer"},"price_source":{"type":"string"},"pricing_min_quantity":{"format":"int32","type":"integer"},"pricing_quantity_scope":{"type":"string"},"promotion_locked":{"type":"boolean"},"promotion_name":{"description":"акция, сработавшая на этот набор. Цена варианта — та же, что положит\nкорзина: price = со скидкой, old_price = до неё. Без этого карточка\nпоказывала набор дороже, чем он ложится в корзину, и «дешевле, чем на\nвитрине» покупатель замечал уже после добавления.","type":"string"},"quantity_prices":{"items":{"$ref":"#/definitions/v1QuantityPriceTier"},"type":"array"},"sku":{"type":"string"},"values":{"additionalProperties":{"type":"string"},"title":"code оси → value опции","type":"object"}},"type":"object"},"v1VariantsInfo":{"description":"Сиблинг variants_info карточки товара: switcher наборов без навигации.","properties":{"axes":{"items":{"$ref":"#/definitions/v1VariantInfoAxis"},"type":"array"},"variants":{"items":{"$ref":"#/definitions/v1VariantInfoItem"},"type":"array"}},"type":"object"},"v1VerifyEmailRequest":{"properties":{"token":{"type":"string"}},"type":"object"},"v1VerifyEmailResponse":{"type":"object"},"v1Webhook":{"description":"Webhook — подписка на события + последний результат доставки (без журнала).","properties":{"created_at":{"format":"date-time","type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"format":"int64","type":"string"},"is_active":{"type":"boolean"},"last_delivered_at":{"format":"date-time","title":"последняя успешная доставка","type":"string"},"last_error":{"type":"string"},"last_status":{"format":"int32","title":"HTTP-код последней доставки; 0 = не было/сетевая ошибка","type":"integer"},"secret":{"title":"ключ HMAC-SHA256 (X-Vizen-Signature)","type":"string"},"url":{"type":"string"}},"type":"object"},"v1WishlistItem":{"properties":{"name":{"type":"string"},"preview":{"$ref":"#/definitions/v1MiniFile"},"product":{"$ref":"#/definitions/v1ProductShort"},"product_id":{"description":"⚠️ Плоские поля 1-3 — ЛЕГАСИ (читает старая SPA-витрина): не удалять и не\nпереименовывать, они дублируют product.{id,preview,name}.","format":"int32","type":"integer"}},"type":"object"},"v1YouReaction":{"properties":{"liked":{"type":"boolean"}},"type":"object"},"vizenError":{"description":"Ошибка API. Машинный код — первое слово после `desc = ` (например `PAT_SCOPE_MISSING`, `INVALID_WIDGET`).","properties":{"error":{"example":"rpc error: code = InvalidArgument desc = INVALID_WIDGET","type":"string"}},"type":"object"},"vizenPathNotFound":{"description":"Вторая форма ошибки: путь не сопоставлен ни одной операции. Отличается наличием поля `path`.","properties":{"docs":{"type":"string"},"error":{"example":"not_found","type":"string"},"hint":{"type":"string"},"path":{"type":"string"}},"type":"object"},"vizenTokenCapabilities":{"description":"Что ключ реально может. Считается по действующей карте доступа: наличие тематического права ещё не значит, что метод открыт ключу.","properties":{"catalog_read":{"type":"boolean"},"catalog_write":{"type":"boolean"},"domain_write":{"type":"boolean"},"forms_read":{"type":"boolean"},"leads_read":{"type":"boolean"},"orders_read":{"type":"boolean"},"orders_write":{"type":"boolean"},"promotions_write":{"type":"boolean"},"publish_dev":{"type":"boolean"},"stats_read":{"type":"boolean"},"storage_read":{"type":"boolean"},"storage_write":{"type":"boolean"},"store_settings_write":{"type":"boolean"}},"type":"object"},"vizenTokenInfo":{"properties":{"api_base":{"type":"string"},"capabilities":{"$ref":"#/definitions/vizenTokenCapabilities"},"company_id":{"format":"int32","type":"integer"},"contour":{"description":"Свойство самого ключа; заголовком не переключается.","enum":["prod","dev"],"type":"string"},"dev_header_allowed":{"type":"boolean"},"docs_url":{"type":"string"},"expires_at":{"description":"null — ключ бессрочный.","format":"date-time","type":"string"},"guides":{"type":"object"},"live_operations_denied":{"items":{"type":"string"},"type":"array"},"prod_sensitive_methods_denied":{"description":"Живые ПДн/закрытые методы, недоступные dev-PAT даже на чтение.","items":{"type":"string"},"type":"array"},"publish_allowed":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":"array"},"store":{"$ref":"#/definitions/vizenTokenStore"},"warnings":{"description":"Что агент обязан сказать владельцу до массовой записи.","items":{"type":"string"},"type":"array"},"writes_to_live":{"description":"true — записи сразу видны посетителям витрины.","type":"boolean"}},"type":"object"},"vizenTokenStore":{"description":"Магазин ключа.","properties":{"currency":{"description":"Валюта магазина. Цена товара пишется целым числом в ней; поле price.currency в запросе игнорируется.","type":"string"},"custom_domain":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"storefront_url":{"type":"string"}},"type":"object"}},"info":{"description":"API магазина Vizen.\n\nАутентификация — персональный ключ (PAT): `Authorization: Bearer vz_pat_…`.\nМагазин определяется самим ключом; параметр company_id в запросе игнорируется.\n\nПеред первой записью вызовите `GET /v1/account/token` — он вернёт контур ключа (пишет в живой сайт или в черновик), валюту магазина, адрес витрины и список того, что ключ реально может.\n\nГайды: `/docs/catalog-import` (данные каталога), `/docs/webcoding` (вёрстка страниц).\n\nКаждой операции проставлены `x-vizen-required-scope` (какое право её открывает) и `x-vizen-pat-access` (доступна ли она ключу вообще). Эти поля вычисляются из действующей карты доступа сервера, а не пишутся руками.","title":"Vizen API","version":"1"},"paths":{"/access-policies":{"get":{"operationId":"Catalog_ListAccessPolicies","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListAccessPoliciesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Доступ к ресурсам (V2-5) ──\nПолитики переиспользуются товарами, категориями, страницами и ресурсами.\nОни live-operational и не входят в dev/prod COW; цель привязки при этом\nпроверяется в текущем contour.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListAccessPolicies","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:read"},"post":{"operationId":"Catalog_CreateAccessPolicy","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateAccessPolicyRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AccessPolicyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Access Policy","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateAccessPolicy","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:write"}},"/access-policies/{id}":{"delete":{"operationId":"Catalog_DeleteAccessPolicy","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteAccessPolicyBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteAccessPolicyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Access Policy","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteAccessPolicy","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:write"},"get":{"operationId":"Catalog_GetAccessPolicy","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AccessPolicyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Access Policy","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetAccessPolicy","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:read"},"put":{"operationId":"Catalog_EditAccessPolicy","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditAccessPolicyBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AccessPolicyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Access Policy","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditAccessPolicy","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:write"}},"/api-tokens":{"get":{"operationId":"ApiAccess_ListApiTokens","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListApiTokensResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список токенов компании: имя/scopes/маска/last_used; без plaintext.","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/ListApiTokens","x-vizen-pat-access":"forbidden"},"post":{"operationId":"ApiAccess_CreateApiToken","parameters":[{"description":"CreateApiTokenRequest — имя + scopes (whitelist domain.ValidScope).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateApiTokenRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateApiTokenResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Выпустить токен: plaintext `token` (vz_pat_\u003chex32\u003e) — в ответе ОДИН раз.","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/CreateApiToken","x-vizen-pat-access":"forbidden"}},"/api-tokens/{id}":{"delete":{"operationId":"ApiAccess_RevokeApiToken","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/ApiAccessRevokeApiTokenBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RevokeApiTokenResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отозвать токен (revoked_at; ротация = отзыв + новый выпуск).","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/RevokeApiToken","x-vizen-pat-access":"forbidden"}},"/articles":{"get":{"operationId":"Catalog_ListArticles","parameters":[{"description":"0 → компания токена (владелец)","format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"0 → все news-статьи компании","format":"int32","in":"query","name":"category_id","required":false,"type":"integer"},{"description":"агрегировать поддерево рубрик","in":"query","name":"include_subtree","required":false,"type":"boolean"},{"description":"recent|popular (пусто = recent)","in":"query","name":"sort","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListArticlesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Статьи/Новости» ---------------------------------------------------\nЛента статей рубрики (public: только опубликованные; владелец видит все).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListArticles","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateArticle","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateArticleRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetArticleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать статью (только в news-категорию; создаёт дефолтный шаблон-сборку).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateArticle","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/articles/by-slug/{slug}":{"get":{"operationId":"Catalog_GetArticleBySlug","parameters":[{"in":"path","name":"slug","required":true,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetArticleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Публичный слаг-резолв статьи (Next-витрина, 404-маска; +views инкремент).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetArticleBySlug","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/articles/{id}":{"delete":{"operationId":"Catalog_DeleteArticle","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteArticleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteArticleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить статью (soft-delete окно).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteArticle","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"get":{"operationId":"Catalog_GetArticle","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetArticleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Статья по id (владелец; content_blocks + related в ответе).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetArticle","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditArticle","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditArticleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetArticleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать статью (partial-update, паттерн EditCategory).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditArticle","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/articles/{id}/content-blocks":{"put":{"operationId":"Catalog_SetArticleContentBlocks","parameters":[{"description":"article id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetArticleContentBlocksBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetArticleContentBlocksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set зон-блоков статьи (зеркало SetCategoryContentBlocks).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetArticleContentBlocks","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/articles/{id}/related":{"put":{"operationId":"Catalog_SetArticleRelated","parameters":[{"description":"article id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetArticleRelatedBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetArticleRelatedResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set связанных статей «Читайте также» (виджет сайдбара related).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetArticleRelated","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/attributes":{"get":{"operationId":"Catalog_GetAttributes","parameters":[{"description":"отдать и soft-deleted","in":"query","name":"with_deleted","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetAttributesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"-- Характеристики + фасет-фильтры --\nСписок определений атрибутов компании (+удалённые опционально).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetAttributes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateAttribute","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateAttributeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateAttributeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать определение атрибута (+опции select/multiselect).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateAttribute","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/attributes/{id}":{"delete":{"operationId":"Catalog_DeleteAttribute","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteAttributeBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteAttributeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить определение (deleted_after).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteAttribute","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditAttribute","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditAttributeBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditAttributeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать определение (опции — replace-set, если присланы).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditAttribute","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/attributes/{id}/access":{"get":{"operationId":"Catalog_GetAttributeFieldAccess","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AttributeFieldAccessResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Attribute Field Access","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetAttributeFieldAccess","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetAttributeFieldAccess","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetAttributeFieldAccessBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AttributeFieldAccessResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Attribute Field Access","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetAttributeFieldAccess","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/audiences":{"get":{"operationId":"Catalog_ListAudiences","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListAudiencesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Audiences","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListAudiences","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:read"},"post":{"operationId":"Catalog_CreateAudience","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateAudienceRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AudienceResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Audience","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateAudience","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/audiences/{id}":{"put":{"operationId":"Catalog_EditAudience","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditAudienceBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AudienceResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Audience","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditAudience","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/canvas-assets":{"get":{"operationId":"Catalog_ListCanvasAssets","parameters":[{"description":"Поиск по имени (ILIKE %q%); пусто = вся видимая библиотека.","in":"query","name":"q","required":false,"type":"string"},{"description":"Фильтры-сужения: пусто = без сужения. owner_scope='global' — только\nплатформенные, 'company' — только свои (по умолчанию отдаются обе половины).","in":"query","name":"category","required":false,"type":"string"},{"in":"query","name":"owner_scope","required":false,"type":"string"},{"in":"query","name":"visibility","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCanvasAssetsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Canvas Assets","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCanvasAssets","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_CreateCanvasAsset","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCanvasAssetRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasAssetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Canvas Asset","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCanvasAsset","x-vizen-pat-access":"forbidden"}},"/canvas-assets/{id}":{"delete":{"operationId":"Catalog_DeleteCanvasAsset","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteCanvasAssetBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCanvasAssetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Canvas Asset","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCanvasAsset","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Catalog_GetCanvasAsset","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasAssetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Canvas Asset","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCanvasAsset","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Catalog_EditCanvasAsset","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCanvasAssetBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasAssetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Canvas Asset","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCanvasAsset","x-vizen-pat-access":"forbidden"}},"/canvas-components":{"get":{"operationId":"Catalog_ListCanvasComponents","parameters":[{"description":"Поиск по имени (ILIKE %q%); пусто = все компоненты компании.","in":"query","name":"q","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCanvasComponentsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Canvas Components","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCanvasComponents","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_CreateCanvasComponent","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCanvasComponentRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasComponentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Canvas Component","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCanvasComponent","x-vizen-pat-access":"forbidden"}},"/canvas-components/{id}":{"delete":{"operationId":"Catalog_DeleteCanvasComponent","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteCanvasComponentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCanvasComponentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Canvas Component","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCanvasComponent","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Catalog_GetCanvasComponent","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasComponentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Canvas Component","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCanvasComponent","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Catalog_EditCanvasComponent","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCanvasComponentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasComponentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Canvas Component","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCanvasComponent","x-vizen-pat-access":"forbidden"}},"/canvas-documents":{"get":{"operationId":"Catalog_ListCanvasDocuments","parameters":[{"in":"query","name":"type","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCanvasDocumentsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список документов компании (лёгкий: без сцены; фреймы и превью включены).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCanvasDocuments","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_CreateCanvasDocument","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCanvasDocumentRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать документ (сцена уже загружена файлом → source_file_id).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCanvasDocument","x-vizen-pat-access":"forbidden"}},"/canvas-documents/{id}":{"delete":{"operationId":"Catalog_DeleteCanvasDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteCanvasDocumentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCanvasDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить; используемый документ (баннер-блоки, галереи товаров) →\nDOCUMENT_IN_USE.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCanvasDocument","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Catalog_GetCanvasDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Документ + фреймы (+резолв source/preview файлов).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCanvasDocument","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Catalog_EditCanvasDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCanvasDocumentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CanvasDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать (frames непустой → replace-set, ср. sections).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCanvasDocument","x-vizen-pat-access":"forbidden"}},"/canvas-documents/{id}/usage":{"get":{"operationId":"Catalog_GetCanvasDocumentUsage","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCanvasDocumentUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Где используется документ: СТРАНИЦЫ, на которых стоит блок-баннер с ним\n(товар/раздел/статья/лейаут/системная), галереи и товары с канвас-галереей\n(М3), плюс блоки-сироты, которые никуда не поставлены.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCanvasDocumentUsage","x-vizen-pat-access":"forbidden"}},"/cart/confirm":{"post":{"operationId":"Catalog_ConfirmCart","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ConfirmCartRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ConfirmCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Оформить заявку из корзины магазина (контакты+коммент+адрес) → заказ, корзина очищается.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ConfirmCart","x-vizen-pat-access":"allowed","x-vizen-required-scope":"orders:write"}},"/cart/items":{"get":{"operationId":"Catalog_GetCart","parameters":[{"description":"корзина магазина (витрины)","format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Cart","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCart","x-vizen-pat-access":"forbidden"}},"/cart/items/{product_id}/{key}":{"delete":{"operationId":"Catalog_RemoveFromCart","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"path","name":"key","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogRemoveFromCartBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RemoveFromCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove From Cart","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/RemoveFromCart","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_AddToCart","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"path","name":"key","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogAddToCartBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AddToCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Add To Cart","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/AddToCart","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Catalog_UpdateCartItem","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"path","name":"key","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogUpdateCartItemBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1UpdateCartItemResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Изменить количество позиции.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/UpdateCartItem","x-vizen-pat-access":"forbidden"}},"/cart/merge":{"post":{"operationId":"Catalog_MergeCart","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1MergeCartRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Слить локальную (анонимную) корзину магазина при входе.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/MergeCart","x-vizen-pat-access":"forbidden"}},"/cart/promo":{"delete":{"operationId":"Catalog_RemovePromoCode","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RemovePromoCodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove Promo Code","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/RemovePromoCode","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_ApplyPromoCode","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ApplyPromoCodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Покупательские: применить код к своей корзине магазина и снять его.\nОтвет — та же корзина, что и GetCart: фронт не собирает цену сам.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ApplyPromoCode","x-vizen-pat-access":"forbidden"}},"/cart/quote":{"post":{"description":"Зачем: у гостя корзина живёт в браузере, а движок скидок — на сервере.\nБез этой ручки гость не видел ни подарочной строки, ни заказной скидки до\nсамого входа — продающий аргумент исчезал ровно в момент решения о покупке\n(репорт владельца 2026-08-21, подарок к стеллажу на живом магазине).\nДублировать движок в браузере нельзя: два расчёта одной цены расходятся —\nэтот класс дефектов уже ловили пять раз за один день.\n\nРасчёт идёт ТЕМ ЖЕ конвейером, что GetCart вошедшего (цены, варианты,\nкомбо, акции, подарки); ничего не пишется. Промокод можно приложить —\nгостю покажется скидка, а ПОГАШЕНИЕ всё равно случится только в заказе.","operationId":"Catalog_QuoteCart","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1QuoteCartRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCartResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Посчитать корзину БЕЗ входа и без сохранения — публичная витринная ручка.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/QuoteCart","x-vizen-pat-access":"public"}},"/categories":{"get":{"operationId":"Catalog_GetCategories","parameters":[{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"отдать и soft-deleted (вкладка «показывать удалённые»)","in":"query","name":"with_deleted","required":false,"type":"boolean"},{"description":"Проекция ответа: \"\"|\"full\" — полный Category (ДЕФОЛТ: без параметра ответ\nпрежний байт-в-байт, админка/PAT/интеграции не трогаем); \"menu\" — только\nполя, которыми живут меню, крошки и резолв пути.\n\nСостав \"menu\" (зеркало storefront/src/blocks/WidgetSections.tsx\nchromeCategory + серверных читателей витрины):\n id, name, seo.slug, parent_id, order, type,\n is_published, is_show_menu, is_home, is_deleted,\n preview.url (иконка пункта меню),\n count_articles + sidebar_config (лента и сайдбар news-рубрик).\nВсё прочее приходит ПУСТЫМ/нулевым: description, остальной seo\n(page_title/meta_*/og_image_id/noindex/nofollow), preview_id,\ncount_products, created_at/updated_at, created_by/updated_by,\ndeleted_after, comments_enabled/questions_enabled, page_template,\nroot_id, gallery_ids, galleries, dev_dirty.\nОписание и SEO ОДНОГО раздела (того, что открыт) витрина берёт из\nGetCategoryBySlug — она его и так запрашивает ради блоков и оформления.\n\nИное значение → 400 CATEGORIES_VIEW_UNKNOWN: тихого фолбэка на full нет по\nтой же причине, что у проекции галерей, — «параметр поставил, вес не\nизменился» отладить нечем.","in":"query","name":"view","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategoriesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить список категорий","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategories","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateCategory","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCategoryRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать категорию","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCategory","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/by-slug/{slug}":{"get":{"operationId":"Catalog_GetCategoryBySlug","parameters":[{"in":"path","name":"slug","required":true,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategoryBySlugResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"(Next-витрина): публичный слаг-резолв категории. Ответ несёт зоны-блоки\nкатегории сиблингом (как content_blocks в GetProduct). 404-маска.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategoryBySlug","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/categories/move":{"post":{"operationId":"Catalog_MoveCategory","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1MoveCategoryRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1MoveCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Move Category","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/MoveCategory","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}":{"delete":{"operationId":"Catalog_DeleteCategory","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteCategoryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Category","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCategory","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"get":{"operationId":"Catalog_GetCategory","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить категорию","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategory","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditCategory","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCategoryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать категорию","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCategory","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}/attributes":{"get":{"operationId":"Catalog_GetCategoryAttributes","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategoryAttributesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Привязки атрибутов категории (чтение для админки; code/name/data_type — из определения).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategoryAttributes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetCategoryAttributes","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCategoryAttributesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetCategoryAttributesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set привязок атрибутов к категории (+required/default/sort).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCategoryAttributes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}/content-blocks":{"put":{"operationId":"Catalog_SetCategoryContentBlocks","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCategoryContentBlocksBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetCategoryContentBlocksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"replace-set привязок контент-блоков к категории (зоны страницы\nкатегории/главной — зеркало SetProductContentBlocks).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCategoryContentBlocks","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}/relations":{"get":{"operationId":"Catalog_GetCategoryRelations","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Исходящие рёбра связей категории-источника (редактор связей категории).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategoryRelations","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetCategoryRelations","parameters":[{"description":"from category id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCategoryRelationsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Заменить рёбра связей категории (replace-set исходящих рёбер from_category).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCategoryRelations","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}/spec":{"get":{"operationId":"Catalog_GetCategorySpec","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategorySpecResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Эффективный набор характеристик категории-модели (резолв по дереву).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategorySpec","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/categories/{id}/spec-settings":{"get":{"operationId":"Catalog_GetCategorySpecSettings","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategorySpecSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Режим набора и привязки шаблонов узла (наследование/replace/clear).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategorySpecSettings","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetCategorySpec","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCategorySpecBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetCategorySpecResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Задать режим набора + привязки шаблонов к узлу (replace-set).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCategorySpec","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/categories/{id}/values":{"get":{"operationId":"Catalog_GetCategoryAttributeValues","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCategoryAttributeValuesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Значения ТТХ категории-модели (собственные, tri-state).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCategoryAttributeValues","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetCategoryAttributeValues","parameters":[{"description":"category id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCategoryAttributeValuesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetCategoryAttributeValuesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Заменить значения ТТХ категории-модели (replace-set, tri-state).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCategoryAttributeValues","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/char-groups":{"get":{"operationId":"Catalog_ListCharGroups","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCharGroupsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список групп характеристик магазина (справочник хаба «Характеристики»).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCharGroups","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateCharGroup","parameters":[{"description":"Запрос создания группы характеристик.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCharGroupRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateCharGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать группу характеристик.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCharGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/char-groups/{id}":{"delete":{"operationId":"Catalog_DeleteCharGroup","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCharGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить группу характеристик (soft-delete).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCharGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditCharGroup","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCharGroupBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditCharGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Изменить группу характеристик.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCharGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/comments/{id}/moderate":{"put":{"operationId":"Catalog_ModerateComment","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogModerateCommentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ModerateCommentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Модерация комментария продавцом: approve|reject|delete (delete — hard,.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ModerateComment","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/content-blocks":{"get":{"operationId":"Catalog_GetContentBlocks","parameters":[{"description":"отдать и soft-deleted","in":"query","name":"with_deleted","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetContentBlocksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список контент-блоков «Презентации» компании.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetContentBlocks","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateContentBlock","parameters":[{"description":"Новый блок.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateContentBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ContentBlockResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать переиспользуемый контент-блок.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateContentBlock","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/content-blocks/{id}":{"delete":{"operationId":"Catalog_DeleteContentBlock","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteContentBlockBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteContentBlockResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить блок (deleted_after; привязки скрываются JOIN'ом).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteContentBlock","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditContentBlock","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditContentBlockBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ContentBlockResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать блок (секции — replace-set, если присланы).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditContentBlock","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/content-blocks/{id}/usage":{"get":{"operationId":"Catalog_GetContentBlockUsage","parameters":[{"description":"block id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetContentBlockUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Охват блока привязками: предупреждение «затронет N страниц» перед правкой/\nпубликацией и удаление с показом охвата (решения владельца §0.6-0.7).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetContentBlockUsage","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/customer-roles":{"get":{"operationId":"Catalog_ListCustomerRoles","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCustomerRolesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Customer Roles","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCustomerRoles","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:read"},"post":{"operationId":"Catalog_CreateCustomerRole","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCustomerRoleRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CustomerRoleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Customer Role","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateCustomerRole","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/customer-roles/{id}":{"delete":{"operationId":"Catalog_DeleteCustomerRole","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteCustomerRoleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCustomerRoleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Customer Role","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteCustomerRole","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"},"put":{"operationId":"Catalog_EditCustomerRole","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditCustomerRoleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CustomerRoleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Customer Role","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditCustomerRole","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/customers":{"get":{"operationId":"Catalog_ListCompanyCustomers","parameters":[{"in":"query","name":"query","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCompanyCustomersResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Клиенты магазина, покупательские роли и аудитории (V2-1) ──\nЭто НЕ staff memberships и НЕ платформенные роли. Все методы приватны,\ntenant берётся из токена; handler и repository требуют owner|admin.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCompanyCustomers","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:read"},"post":{"operationId":"Catalog_AddCompanyCustomer","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AddCompanyCustomerRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CompanyCustomerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Точное добавление уже известного владельцу email. Глобального поиска\nпользователей нет; любой отказ маскируется одним ответом.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/AddCompanyCustomer","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/customers/{id}/roles":{"put":{"operationId":"Catalog_ReplaceCompanyCustomerRoles","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogReplaceCompanyCustomerRolesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CompanyCustomerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace Company Customer Roles","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReplaceCompanyCustomerRoles","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/customers/{id}/status":{"post":{"operationId":"Catalog_SetCompanyCustomerStatus","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetCompanyCustomerStatusBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CompanyCustomerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Company Customer Status","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetCompanyCustomerStatus","x-vizen-pat-access":"allowed","x-vizen-required-scope":"customers:write"}},"/dashboard":{"get":{"operationId":"Catalog_GetCompanyDashboard","parameters":[{"description":"YYYY-MM-DD; пусто = 6 дней назад (неделя с сегодня)","in":"query","name":"from","required":false,"type":"string"},{"description":"YYYY-MM-DD; пусто = сегодня","in":"query","name":"to","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCompanyDashboardResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мини-дашборд продавца: заявки по статусам/выручка done/AOV/товары + по дням.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetCompanyDashboard","x-vizen-pat-access":"allowed","x-vizen-required-scope":"stats:read"}},"/deals/badge":{"get":{"operationId":"Catalog_GetDealsBadge","parameters":[{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetDealsBadgeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Бейдж непрочитанных сделок: с company_id — персонал магазина, без — покупатель.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetDealsBadge","x-vizen-pat-access":"forbidden"}},"/design/bindings/{resource_type}/{resource_id}":{"get":{"operationId":"Catalog_GetDesignBindings","parameters":[{"in":"path","name":"resource_type","required":true,"type":"string"},{"description":"0 только для shop","format":"int64","in":"path","name":"resource_id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetDesignBindingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Ш-1: ПРИВЯЗКИ ОФОРМЛЕНИЯ (ресурс → блок/комплект из библиотеки; техплан\nvizen-market/app/docs/компоненты/ТЗ-ШАБЛОНЫ-РЕСУРСОВ.md §6). Чтение отдаёт\nи свои привязки, и разрешение цепочки наследования (для UI «унаследовано\nот…»). Запись — replace-set слотов ресурса.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetDesignBindings","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetDesignBindings","parameters":[{"in":"path","name":"resource_type","required":true,"type":"string"},{"format":"int64","in":"path","name":"resource_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetDesignBindingsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetDesignBindingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Design Bindings","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetDesignBindings","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/design/system/{code}":{"get":{"operationId":"Catalog_GetSystemPageDesign","parameters":[{"in":"path","name":"code","required":true,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSystemPageDesignResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Э1 «Лейауты сайта»: оформление СИСТЕМНОЙ страницы витрины (корзина,\nоформление заказа, кабинет…). Публичная, как слаг-резолв карточки: витрина\nрисует эти страницы сама, но обвязку (шапку и футер) обязана взять по той\nже лестнице, иначе корзина выглядит чужой страницей.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetSystemPageDesign","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/dev/handoff-exchange":{"post":{"operationId":"DevPublish_HandoffExchange","parameters":[{"description":"HandoffExchangeRequest — код, полученный от HandoffCode.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1HandoffExchangeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1HandoffExchangeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ПУБЛИЧНЫЙ обмен кода хэндоффа на пару токенов пользователя, выдавшего\nкод (+ company_slug — Next сверяет с текущим хостом). Одноразово (UseOTT\nатомарен), TTL domain.DevHandoffTTL. Неверный/истёкший/повторный код —\nединая 404-маска (причина не палится). Путь БЕЗ /v1 — как остальные\nпубличные ручки каталога (Next дев-хоста ходит сюда напрямую, без сессии).","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/HandoffExchange","x-vizen-pat-access":"public"}},"/form-leads":{"get":{"operationId":"Catalog_ListFormLeads","parameters":[{"format":"int64","in":"query","name":"filter.form_id","required":false,"type":"string"},{"in":"query","name":"filter.status","required":false,"type":"string"},{"format":"date-time","in":"query","name":"filter.from","required":false,"type":"string"},{"format":"date-time","in":"query","name":"filter.to","required":false,"type":"string"},{"description":"Тестовые сабмиты дев-контура скрыты по умолчанию.","in":"query","name":"filter.include_test","required":false,"type":"boolean"},{"description":"Метки кампании точное совпадение по КЛЮЧУ jsonb-узла utm,\nрегистр не учитывается («VK» и «vk» — один источник рекламы). Потолок\nдлины — зеркало ограничения значения метки при записи (≤200).\nПустая строка = фильтра нет (иначе `filter.utm_source=` не находил бы\nничего вместо «все»).","in":"query","name":"filter.utm_source","required":false,"type":"string"},{"in":"query","name":"filter.utm_medium","required":false,"type":"string"},{"description":"Борд песочницы: sandbox_id — все колонки песочницы; column_id — одна\nколонка; is_spam — лента спама (nil = не фильтруем).","format":"int64","in":"query","name":"filter.sandbox_id","required":false,"type":"string"},{"format":"int64","in":"query","name":"filter.column_id","required":false,"type":"string"},{"in":"query","name":"filter.is_spam","required":false,"type":"boolean"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListFormLeadsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Заявки компании (фильтр форма/статус/период; тестовые скрыты по умолчанию).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListFormLeads","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:read"},"post":{"operationId":"Catalog_SubmitFormLead","parameters":[{"description":"Приём заявки (аноним). values — raw JSON-объект «ключ поля → строка»;\nutm — raw JSON меток (whitelist на сервере); hp — honeypot (непустой =\nбот); elapsed_ms — время заполнения по часам клиента (анти-спам сигнал).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SubmitFormLeadRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SubmitFormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ПУБЛИЧНЫЙ приём заявки (аноним): company_id — ИЗ ФОРМЫ, в запросе его нет;\nwhitelist ключей values по схеме; honeypot/elapsed — тихий спам-путь.\nОтвет без id заявки — наружу только ok + текст.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SubmitFormLead","x-vizen-pat-access":"public"}},"/form-leads/bulk/column":{"post":{"operationId":"Catalog_BulkSetLeadColumn","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1BulkSetLeadColumnRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1BulkLeadsResult"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Bulk Set Lead Column","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/BulkSetLeadColumn","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/form-leads/bulk/delete":{"post":{"operationId":"Catalog_BulkDeleteLeads","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1BulkDeleteLeadsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1BulkLeadsResult"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Bulk Delete Leads","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/BulkDeleteLeads","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/form-leads/export":{"get":{"operationId":"Catalog_ExportFormLeads","parameters":[{"format":"int64","in":"query","name":"filter.form_id","required":false,"type":"string"},{"in":"query","name":"filter.status","required":false,"type":"string"},{"format":"date-time","in":"query","name":"filter.from","required":false,"type":"string"},{"format":"date-time","in":"query","name":"filter.to","required":false,"type":"string"},{"description":"Тестовые сабмиты дев-контура скрыты по умолчанию.","in":"query","name":"filter.include_test","required":false,"type":"boolean"},{"description":"Метки кампании точное совпадение по КЛЮЧУ jsonb-узла utm,\nрегистр не учитывается («VK» и «vk» — один источник рекламы). Потолок\nдлины — зеркало ограничения значения метки при записи (≤200).\nПустая строка = фильтра нет (иначе `filter.utm_source=` не находил бы\nничего вместо «все»).","in":"query","name":"filter.utm_source","required":false,"type":"string"},{"in":"query","name":"filter.utm_medium","required":false,"type":"string"},{"description":"Борд песочницы: sandbox_id — все колонки песочницы; column_id — одна\nколонка; is_spam — лента спама (nil = не фильтруем).","format":"int64","in":"query","name":"filter.sandbox_id","required":false,"type":"string"},{"format":"int64","in":"query","name":"filter.column_id","required":false,"type":"string"},{"in":"query","name":"filter.is_spam","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ExportFormLeadsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Экспорт заявок в CSV (BOM UTF-8, ';', ≤10 000 строк). Статик-сегмент\n/export сосуществует с параметрическим /form-leads/{id}: chi матчит\nточное совпадение раньше параметра.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ExportFormLeads","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:read"}},"/form-leads/manual":{"post":{"operationId":"Catalog_CreateFormLead","parameters":[{"description":"Ручная заявка (кабинет): контакт вне формы. sandbox_id — куда положить\n(падает в intake этой песочницы); хотя бы одно из name/phone/email непусто.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateFormLeadRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Ручная заявка из кабинета (продавец заносит контакт вне формы). Тенант — из\nтокена; заявка не привязана к форме, падает в intake выбранной песочницы.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateFormLead","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/form-leads/{id}":{"delete":{"operationId":"Catalog_DeleteFormLead","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteFormLeadBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteFormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Жёсткое удаление заявки (ПДн: по запросу субъекта данные исчезают сразу,\nокна отсрочки нет — см. репозиторий).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteFormLead","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"},"get":{"operationId":"Catalog_GetFormLead","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Карточка заявки.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetFormLead","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:read"},"patch":{"operationId":"Catalog_SetFormLeadStatus","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetFormLeadStatusBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Смена статуса заявки (whitelist new/in_progress/done/spam).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetFormLeadStatus","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/form-leads/{id}/column":{"patch":{"operationId":"Catalog_SetLeadColumn","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetLeadColumnBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Перенос заявки в колонку (заменяет SetFormLeadStatus; колонка обязана\nпринадлежать песочнице заявки).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetLeadColumn","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/form-leads/{id}/spam":{"post":{"operationId":"Catalog_SetLeadSpam","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetLeadSpamBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Пометить/снять спам у заявки — реверсивный флаг (антибот-вердикт не приговор:\nложный спам возвращают, а пропущенный — помечают вручную).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetLeadSpam","x-vizen-pat-access":"allowed","x-vizen-required-scope":"leads:write"}},"/forms":{"get":{"operationId":"Catalog_ListForms","parameters":[{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListFormsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список форм компании (лёгкая проекция + счётчик новых заявок), страницами.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListForms","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:read"},"post":{"operationId":"Catalog_CreateForm","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateFormRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать форму (schema опциональна → пустая; тарифный гейт forms_max).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateForm","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/forms/{form_id}/test-lead":{"post":{"operationId":"Catalog_SendTestFormLead","parameters":[{"format":"int64","in":"path","name":"form_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSendTestFormLeadBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SubmitFormLeadResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Тестовая заявка (аутентифицированный владелец/редактор своей формы): кладёт\nis_test-лид в intake И шлёт уведомления (почта/Telegram/вебхук/подтверждение)\nс меткой [ТЕСТ] — чтобы проверить доставку и попадание на канбан ДО\nпубликации. В счётчики/экспорт/дедуп не идёт (is_test), потолок не съедает.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SendTestFormLead","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/forms/{id}":{"delete":{"operationId":"Catalog_DeleteForm","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteFormBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteFormResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить (окно 30 дней; заявки живут дальше — имя формы в их snapshot).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteForm","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"},"get":{"operationId":"Catalog_GetForm","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Форма целиком (schema как есть).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetForm","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:read"},"put":{"operationId":"Catalog_EditForm","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditFormBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FormResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать (partial, эталон EditHTMLDocument).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditForm","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/forms/{id}/public":{"get":{"operationId":"Catalog_GetPublicForm","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetPublicFormResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ПУБЛИЧНАЯ схема формы для виджета витрины: очищенная (без submit; code —\nколонка, наружу не отдаётся) + is_active («приём закрыт») + резолв URL\nбаннера. Гейт видимости компании; 404-маска (П8).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetPublicForm","x-vizen-pat-access":"public","x-vizen-required-scope":"forms:read"}},"/forms/{id}/usage":{"get":{"operationId":"Catalog_GetFormUsage","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetFormUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Где используется форма (для диалога удаления): контент-блоки, где стоит блок\nформы (props.form.formId) либо кнопка/меню со ссылкой form:\u003cid\u003e. Информативно —\nудаление НЕ блокирует, лишь показывает, откуда форма пропадёт.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetFormUsage","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:read"}},"/galleries":{"get":{"operationId":"Catalog_ListGalleries","parameters":[{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListGalleriesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Живые галереи компании, свежие сверху; элементы включены (нужны пикеру).\nСтраницами (page.number/page.limit); без page — первая страница дефолтного\nразмера: размер ответа задаёт сервер, а не объём данных тенанта.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListGalleries","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateGallery","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateGalleryRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GalleryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать галерею вместе с элементами (одна транзакция).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateGallery","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/galleries/{id}":{"delete":{"operationId":"Catalog_DeleteGallery","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteGalleryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteGalleryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить (окно 30 дней); занятая галерея → GALLERY_IN_USE.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteGallery","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"get":{"operationId":"Catalog_GetGallery","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GalleryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Галерея + элементы; чужая/удалённая → NotFound GALLERY_NOT_FOUND.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetGallery","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditGallery","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditGalleryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GalleryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Partial-update; items непустой → replace-set (ср. фреймы канваса).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditGallery","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/galleries/{id}/usage":{"get":{"operationId":"Catalog_GetGalleryUsage","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetGalleryUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Где используется галерея: объекты-владельцы и наборы вариантов.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetGalleryUsage","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/guest/order_configuration":{"post":{"operationId":"Catalog_CreateOrderConfiguration","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateOrderConfigurationRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateOrderConfigurationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Order Configuration","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateOrderConfiguration","x-vizen-pat-access":"public"}},"/guest/order_configuration/{id}":{"get":{"operationId":"Catalog_GetGuestOrderConfiguration","parameters":[{"in":"path","name":"id","required":true,"type":"string"},{"description":", IDOR): чтение — только предъявителю grant_key,\nвыданного CreateOrderConfiguration (Edit требует его с рождения ручки).\nEnforce сразу, без staged: сайт за basic_auth, живых гостевых ссылок нет.","in":"query","name":"grant_key","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetGuestOrderConfigurationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Guest Order Configuration","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetGuestOrderConfiguration","x-vizen-pat-access":"public"}},"/guest/order_configuration/{id}/{grant_key}":{"put":{"operationId":"Catalog_EditOrderConfiguration","parameters":[{"in":"path","name":"id","required":true,"type":"string"},{"in":"path","name":"grant_key","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditOrderConfigurationBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditOrderConfigurationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Order Configuration","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditOrderConfiguration","x-vizen-pat-access":"public"}},"/html-documents":{"get":{"operationId":"Catalog_ListHTMLDocuments","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListHTMLDocumentsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список HTML-документов компании (лёгкий: без содержимого страницы; ассеты и\nпревью включены).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListHTMLDocuments","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateHTMLDocument","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateHTMLDocumentRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1HTMLDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать документ (HTML уже загружен файлом → source_file_id).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateHTMLDocument","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/html-documents/{id}":{"delete":{"operationId":"Catalog_DeleteHTMLDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteHTMLDocumentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteHTMLDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить; используемый блоками документ → DOCUMENT_IN_USE.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteHTMLDocument","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"get":{"operationId":"Catalog_GetHTMLDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1HTMLDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Документ + ассеты (+резолв source/preview файлов).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetHTMLDocument","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditHTMLDocument","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditHTMLDocumentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1HTMLDocumentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать (assets непустой → replace-set, ср. frames).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditHTMLDocument","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/html-documents/{id}/content":{"get":{"operationId":"Catalog_GetHTMLDocumentContent","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"description":"Публичная ручка: тенант ИЗ ЗАПРОСА (не из токена) — как у витринных чтений.","format":"int64","in":"query","name":"company_id","required":false,"type":"string"},{"description":"Статический режим (Э2 «Лейауты сайта»): уровень 3 отдаётся БЕЗ авторского\nкода — скрипты, обработчики on*, javascript:-ссылки, iframe/object/embed\nвырезаны тем же санитайзом, что у уровня 1. Витрина просит его для шапки/\nфутера на страницах оплаты, корзины и кабинета: гарантия «на оплате чужой\nкод не исполняется» живёт на сервере, а не в регулярке клиента.","in":"query","name":"static","required":false,"type":"boolean"},{"description":"ЗНАЧЕНИЯ ПАРАМЕТРОВ вставки для документа kind=component: JSON-объект\n`{\"key\": value}` строкой (в GET уезжает URL-кодированным). Ключи и типы —\nиз `component.json` активного релиза; неизвестный ключ игнорируется,\nотсутствующий берётся из default. Для widget/theme поле не читается.\n\nСтрокой, а не Struct: это query-параметр GET, и он же участвует в ключе\nкэша — адрес обязан однозначно определять ответ.","in":"query","name":"params","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetHTMLDocumentContentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ПУБЛИЧНЫЙ санитизированный контент документа УРОВНЯ 1 — SSR-инлайн витрины\n(SEO, техпаспорт М1). Тенант из запроса + гейт видимости компании (эталон\nListReviews), guard: public-роль БЕЗ PAT-скоупа. Отдаёт ТОЛЬКО документы,\nпривязанные к живому content-block (черновики перебором id не читаются);\nlevel=2 и любое «нет» → единая NotFound-маска (П8).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetHTMLDocumentContent","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/html-documents/{id}/usage":{"get":{"operationId":"Catalog_GetHTMLDocumentUsage","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetHTMLDocumentUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Где используется документ (контент-блоки с HTML-секцией на нём).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetHTMLDocumentUsage","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/marketplace/products":{"get":{"operationId":"Catalog_GetMarketplaceProducts","parameters":[{"in":"query","name":"query","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"},{"description":"dateTill","in":"query","name":"sort.field","required":false,"type":"string"},{"description":"ASC / DESC","in":"query","name":"sort.order","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"--- Общий маркетплейс / модерация ---\nПубличный фид общего маркетплейса (одобренные товары всех магазинов).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetMarketplaceProducts","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/moderation/products":{"get":{"operationId":"Catalog_GetModerationQueue","parameters":[{"description":"Статус для фильтра: 1 pending (по умолчанию) | 2 approved | 3 rejected.","format":"int32","in":"query","name":"status","required":false,"type":"integer"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetModerationQueueResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Очередь модерации (по умолчанию pending по всем компаниям) — модератор/суперадмин.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetModerationQueue","x-vizen-pat-access":"forbidden"}},"/moderation/products/{id}":{"post":{"operationId":"Catalog_ModerateProduct","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogModerateProductBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Решение модератора: approve / reject (+комментарий).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ModerateProduct","x-vizen-pat-access":"forbidden"}},"/my-coupons":{"get":{"operationId":"Catalog_ListMyCoupons","parameters":[{"description":"магазин (витрина)","format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"показать погашенные и истёкшие","in":"query","name":"include_used","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListMyCouponsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"купоны покупателя («Мои купоны» в кабинете витрины). Именные ключи\nТОЛЬКО свои — чужие не видны и не перечисляются.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListMyCoupons","x-vizen-pat-access":"forbidden"}},"/orders":{"post":{"operationId":"Catalog_GetOrders","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1GetOrdersRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrdersResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Orders","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetOrders","x-vizen-pat-access":"allowed","x-vizen-required-scope":"orders:read"}},"/orders/{id}":{"get":{"operationId":"Catalog_GetOrder","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrderResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Order","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetOrder","x-vizen-pat-access":"allowed","x-vizen-required-scope":"orders:read"}},"/orders/{id}/pay":{"post":{"operationId":"Catalog_StartOrderPayment","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogStartOrderPaymentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StartOrderPaymentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Оплата заказа покупателем: заводит платёж и возвращает адрес формы кассы\nМАГАЗИНА. Площадка денег не касается — ссылка подписана ключами продавца,\nи деньги идут по его договору с провайдером.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/StartOrderPayment","x-vizen-pat-access":"forbidden"}},"/orders/{id}/refund":{"post":{"operationId":"Catalog_MarkOrderRefunded","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogMarkOrderRefundedBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrderResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Смена статуса заявки продавцом (new→processing→done/cancelled).\nОтметить возврат по заказу (продавец, офлайн/ручной): переводит оплаченный\nплатёж в 'refunded'. Разблокирует отмену оплаченного заказа (гейт REFUND_REQUIRED).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/MarkOrderRefunded","x-vizen-pat-access":"allowed","x-vizen-required-scope":"orders:write"}},"/orders/{id}/status":{"put":{"operationId":"Catalog_UpdateOrderStatus","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogUpdateOrderStatusBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrderResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Order Status","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/UpdateOrderStatus","x-vizen-pat-access":"allowed","x-vizen-required-scope":"orders:write"}},"/orders/{order_id}/messages":{"get":{"operationId":"Catalog_ListOrderMessages","parameters":[{"format":"int32","in":"path","name":"order_id","required":true,"type":"integer"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListOrderMessagesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Сделки 2.0» (чат заказа): лента переписки. Доступ — покупатель заказа ИЛИ\nперсонал магазина (членство owner|admin|editor); чужой → 404-маска.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListOrderMessages","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_PostOrderMessage","parameters":[{"format":"int32","in":"path","name":"order_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogPostOrderMessageBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PostOrderMessageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отправить сообщение в переписку по заказу. author_role ставит СЕРВЕР по\nфакту доступа (из клиента не принимается).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/PostOrderMessage","x-vizen-pat-access":"forbidden"}},"/orders/{order_id}/seen":{"post":{"operationId":"Catalog_MarkOrderSeen","parameters":[{"format":"int32","in":"path","name":"order_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogMarkOrderSeenBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отметить переписку заказа прочитанной (гасит бейдж; сторона — по роли доступа).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/MarkOrderSeen","x-vizen-pat-access":"forbidden"}},"/price-fields":{"get":{"operationId":"Catalog_ListPriceFields","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPriceFieldsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Переиспользуемые ценовые поля (V2-3) ──","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListPriceFields","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"},"post":{"operationId":"Catalog_CreatePriceField","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreatePriceFieldRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PriceFieldResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Price Field","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreatePriceField","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/price-fields/{id}":{"delete":{"operationId":"Catalog_DeletePriceField","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeletePriceFieldBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeletePriceFieldResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Price Field","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeletePriceField","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"},"put":{"operationId":"Catalog_EditPriceField","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditPriceFieldBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PriceFieldResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Price Field","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditPriceField","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules":{"get":{"operationId":"Catalog_ListPricingRules","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPricingRulesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Ценовые правила (MVP-A): фиксированная цена по количеству ──\nЭто не акция: выигравшее правило жёстко блокирует promotion engine для\nстроки. Операционка только prod; PAT требует отдельный sensitive scope.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListPricingRules","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"},"post":{"operationId":"Catalog_CreatePricingRule","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreatePricingRuleRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRuleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Pricing Rule","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreatePricingRule","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules/batch":{"post":{"operationId":"Catalog_BatchUpsertPricingRules","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1BatchUpsertPricingRulesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRulesMutationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Batch Upsert Pricing Rules","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/BatchUpsertPricingRules","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules/collections/{collection_code}":{"put":{"operationId":"Catalog_ReplacePricingCollection","parameters":[{"in":"path","name":"collection_code","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogReplacePricingCollectionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRulesMutationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace Pricing Collection","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReplacePricingCollection","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules/collections/{collection_code}/active":{"post":{"operationId":"Catalog_SetPricingCollectionActive","parameters":[{"in":"path","name":"collection_code","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetPricingCollectionActiveBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRulesMutationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Pricing Collection Active","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetPricingCollectionActive","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules/preview":{"post":{"operationId":"Catalog_PreviewPricingRules","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1PreviewPricingRulesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PreviewPricingRulesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Preview Pricing Rules","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/PreviewPricingRules","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"}},"/pricing-rules/{id}":{"delete":{"operationId":"Catalog_DeletePricingRule","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeletePricingRuleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeletePricingRuleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Pricing Rule","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeletePricingRule","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"},"get":{"operationId":"Catalog_GetPricingRule","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRuleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Pricing Rule","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetPricingRule","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"},"put":{"operationId":"Catalog_EditPricingRule","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditPricingRuleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRuleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Pricing Rule","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditPricingRule","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/pricing-rules/{id}/active":{"post":{"operationId":"Catalog_SetPricingRuleActive","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetPricingRuleActiveBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PricingRuleResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Pricing Rule Active","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetPricingRuleActive","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/product-groups":{"get":{"operationId":"Catalog_ListProductGroups","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListProductGroupsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"-- Склейки товаров --\nСписок живых variant-групп компании (с членами/осями — админ-редактор\nодним вызовом).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListProductGroups","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateProductGroup","parameters":[{"description":"Новая группа (учитываются name + group_type).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateProductGroupRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать группу склейки (пока только variant_group).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateProductGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/product-groups/{id}":{"delete":{"operationId":"Catalog_DeleteProductGroup","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteProductGroupBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteProductGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить группу (deleted_after; членство/оси чистятся в той же tx —\nтовары сразу свободны для новой склейки).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteProductGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditProductGroup","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditProductGroupBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать группу (name).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditProductGroup","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/product-groups/{id}/axes":{"put":{"operationId":"Catalog_SetGroupAxes","parameters":[{"description":"group id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetGroupAxesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set осей группы (только select-атрибуты компании).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetGroupAxes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/product-groups/{id}/members":{"put":{"operationId":"Catalog_SetGroupMembers","parameters":[{"description":"group id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetGroupMembersBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductGroupResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set членов группы (ownership всех товаров; товар — максимум\nв одной группе).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetGroupMembers","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products":{"get":{"operationId":"Catalog_GetProducts","parameters":[{"in":"query","name":"filter.query","required":false,"type":"string"},{"in":"query","name":"filter.is_published","required":false,"type":"boolean"},{"in":"query","name":"filter.is_show_menu","required":false,"type":"boolean"},{"format":"int32","in":"query","name":"filter.min_price","required":false,"type":"integer"},{"format":"int32","in":"query","name":"filter.max_price","required":false,"type":"integer"},{"format":"int32","in":"query","name":"filter.company_id","required":false,"type":"integer"},{"description":"фильтр товаров по категории (для дерева на «Товарах»)","format":"int32","in":"query","name":"filter.category_id","required":false,"type":"integer"},{"collectionFormat":"multi","description":"ТЗ производительности (N+1 фронта): батч-чтение по списку id одним\nзапросом (группы/комбо/подборки/акции читали по товару в цикле).","in":"query","items":{"format":"int32","type":"integer"},"name":"filter.ids","required":false,"type":"array"},{"description":"Мультитовар (Б-Мультитовар §6): дети контейнера (parent_product_id),\nохват по типу (containment: all|plain|containers → WHERE kind), и\nпоказывать ли contained-товары в общих листингах (по умолчанию скрыты).","format":"int32","in":"query","name":"filter.parent_product_id","required":false,"type":"integer"},{"in":"query","name":"filter.containment","required":false,"type":"string"},{"in":"query","name":"filter.include_contained","required":false,"type":"boolean"},{"description":"Агрегация поддерева разделов: товары САМОГО раздела И всех вложенных\n(рекурсивный CTE по categories.parent_id, зеркало include_subtree ленты\nстатей. Нужен магазинам, где товары висят на листьях-брендах, а\nстраница раздела-родителя обязана показывать их все.\n\nПо умолчанию (false/не передан) — ТОЛЬКО прямая привязка, как было:\nадминский список «товары этой категории» и дерево на «Товарах» считают\nраздел буквально, и молчаливая смена их выдачи была бы регрессом.\nРаботает только вместе с category_id; сам по себе ничего не меняет.","in":"query","name":"filter.include_subtree","required":false,"type":"boolean"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"},{"description":"dateTill","in":"query","name":"sort.field","required":false,"type":"string"},{"description":"ASC / DESC","in":"query","name":"sort.order","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить список","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProducts","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateProduct","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateProductRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateProduct","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/batch":{"post":{"operationId":"Catalog_CreateProductsBatch","parameters":[{"description":"п.3: пакетное создание товаров (импорт каталога).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateProductsBatchRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateProductsBatchResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ТЗ производительности п.3 — пакетное создание для импортёров:\nодна ходка вместо N (прогон каталога TOPLOFT — 374 товара). ЧАСТИЧНЫЙ\nУСПЕХ: каждая позиция проходит ТЕ ЖЕ гейты, что одиночный CreateProduct\n(общий createProductCore), и падает независимо — плохая строка импорта не\nвалит пачку. Транзакция НЕ растянута на пачку (по позиции), чтобы 100\nтоваров не держали один длинный lock.\nПуть статический, как /products/by-slug и /products/design-links-batch —\nchi ставит статический узел выше /products/{id}.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateProductsBatch","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/by-slug/{slug}":{"get":{"operationId":"Catalog_GetProductBySlug","parameters":[{"in":"path","name":"slug","required":true,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"Проекция галерей: \"\"|\"full\" (дефолт, ответ как раньше) | \"cover\" (у каждой\nгалереи только обложка) | \"active\" (полной приезжает галерея выбранного\nнабора, остальные обложкой). Иное → 400 GALLERIES_PROJECTION_UNKNOWN.\nПодробности и мотивация — у одноимённого поля GetProductRequest.","in":"query","name":"galleries","required":false,"type":"string"},{"description":"Ключ выбранного набора для galleries=active: sku, при пустом sku — id\nстрокой (`?v=` витрины). См. GetProductRequest.variant.","in":"query","name":"variant","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"(Next-витрина): публичный слаг-резолв товара (company_id + slug),\nответ идентичен GetProduct. 404-маска.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductBySlug","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/products/design-links-batch":{"get":{"operationId":"Catalog_GetDesignLinksBatch","parameters":[{"collectionFormat":"multi","in":"query","items":{"format":"int32","type":"integer"},"name":"ids","required":false,"type":"array"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetDesignLinksBatchResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Батч для единого диалога связей: manifest-блоки зон каждого товара\n(связаны ⇔ множества пересекаются). ids повторяемым query-параметром.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetDesignLinksBatch","x-vizen-pat-access":"forbidden"}},"/products/low-stock":{"get":{"operationId":"Catalog_GetLowStock","parameters":[{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetLowStockResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Что кончается: список для кабинета продавца.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetLowStock","x-vizen-pat-access":"forbidden"}},"/products/{id}":{"delete":{"operationId":"Catalog_DeleteProduct","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteProductBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteProduct","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"get":{"operationId":"Catalog_GetProduct","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"description":"Quick view: id группы product для слота body. 0 = обычная лестница.","format":"int64","in":"query","name":"template_id","required":false,"type":"string"},{"description":"Проекция галерей: \"\"|\"full\" — все галереи со всеми элементами (ДЕФОЛТ:\nбез параметра ответ прежний, старые интеграции не трогаем); \"cover\" — у\nКАЖДОЙ галереи только первый элемент (обложка); \"active\" — полные\nэлементы у галереи выбранного набора (см. variant), остальные обложкой.\nИное значение → 400 GALLERIES_PROJECTION_UNKNOWN: тихого фолбэка на full\nнет, «параметр поставил, вес не изменился» — худший из отказов.","in":"query","name":"galleries","required":false,"type":"string"},{"description":"Выбранный набор вариантов для galleries=active: sku набора, а при пустом\nsku — его id строкой (тот же ключ, что витрина ставит в `?v=`). Пусто либо\nне найден → активной считается галерея ПЕРВОГО активного набора, а нет и\nеё — первая ПРИВЯЗАННАЯ галерея товара (зеркало витрины:\nstorefront/src/lib/variant.ts pickVariant + shownGallery).","in":"query","name":"variant","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProduct","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditProduct","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditProductBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditProduct","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/attributes":{"put":{"operationId":"Catalog_SetProductAttributes","parameters":[{"description":"product id (products.id = int4)","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductAttributesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductAttributesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set значений атрибутов товара (+пересчёт attributes_cache в tx).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductAttributes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/children":{"put":{"operationId":"Catalog_SetProductChildren","parameters":[{"description":"parent (container) product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductChildrenBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductChildrenResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мультитовар (Б-Мультитовар §3): replace-set состава товара-контейнера\n(kind='multi'). Гейты: родитель multi, ребёнок standard, один контейнер.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductChildren","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/comments":{"get":{"operationId":"Catalog_ListComments","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"query","name":"kind","required":false,"type":"string"},{"description":"Фильтр статуса — учитывается только для member своей компании.","in":"query","name":"status","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCommentsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Публичный список вопросов/комментариев товара (не-member — только approved).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListComments","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_PostComment","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogPostCommentBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CommentResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Оставить вопрос/комментарий (ответ — parent_id, 1 уровень; member — сразу approved).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/PostComment","x-vizen-pat-access":"forbidden"}},"/products/{id}/content-blocks":{"put":{"operationId":"Catalog_SetProductContentBlocks","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductContentBlocksBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductContentBlocksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set привязок блоков к товару (ремодерация Т10 для is_shared).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductContentBlocks","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/copy":{"post":{"operationId":"Catalog_CopyProduct","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogCopyProductBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CopyProductResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Скопировать","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CopyProduct","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/design-links":{"get":{"operationId":"Catalog_GetProductDesignLinks","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductDesignLinksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Дизайн-группа товара этап 4): товары, делящие манифесты зон с данным.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductDesignLinks","x-vizen-pat-access":"forbidden"}},"/products/{id}/kind":{"put":{"operationId":"Catalog_SetProductKind","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductKindBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductKindResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мультитовар (Б-Мультитовар §1): переключатель типа товара владельцем.\nstandard↔multi с гвардами (multi→standard — только при пустом составе);\ncombo не участвует (его тип задаёт состав комбо).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductKind","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/relations":{"get":{"operationId":"Catalog_GetProductRelations","parameters":[{"description":"product id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Рёбра связей товара, сгруппированные по типу (для редактора).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductRelations","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetProductRelations","parameters":[{"description":"from product id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductRelationsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Заменить рёбра связей товара (replace-set исходящих рёбер from_product).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductRelations","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/relations/resolved":{"get":{"operationId":"Catalog_GetResolvedProductRelations","parameters":[{"description":"product id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetResolvedProductRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Резолв связей товара для витрины (прямые+обратные+папочные-с-наследованием).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetResolvedProductRelations","x-vizen-pat-access":"forbidden"}},"/products/{id}/spec":{"get":{"operationId":"Catalog_GetProductSpec","parameters":[{"description":"product id (products.id = int4)","format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductSpecResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Эффективные характеристики объявления (унаследованные от модели + свои).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductSpec","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/products/{id}/stock":{"put":{"operationId":"Catalog_SetProductStock","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductStockBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetProductStockResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Складской остаток правится ОТДЕЛЬНО от карточки: он меняется продажами, и\nзапись его из формы товара затёрла бы всё, что продалось с момента её\nоткрытия. Здесь остаток берётся под замок и в журнал пишется движение.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductStock","x-vizen-pat-access":"forbidden"}},"/products/{id}/stock/history":{"get":{"operationId":"Catalog_GetProductStockHistory","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProductStockHistoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Движения по товару: ответ на вопрос «куда делись пять штук».","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductStockHistory","x-vizen-pat-access":"forbidden"}},"/products/{id}/variant-axes":{"put":{"operationId":"Catalog_SetProductVariantAxes","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductVariantAxesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductVariantsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"-- Варианты внутри товара --\nReplace-set осей вариантов товара (только select-атрибуты компании; ось не\nможет быть одновременно осью склейки этого товара —.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductVariantAxes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{id}/variants":{"get":{"operationId":"Catalog_GetProductVariants","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductVariantsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Оси + наборы товара для админки (владелец; отдаёт и неактивные наборы).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetProductVariants","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetProductVariants","parameters":[{"description":"product id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetProductVariantsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductVariantsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set наборов товара (значения по осям + цена/картинка/sku/активность;\nсервер валидирует values по словарю осей, считает combo_hash, дубль → отказ).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetProductVariants","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{product_id}/combo-items":{"put":{"operationId":"Catalog_SetComboItems","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetComboItemsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetComboItemsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Комбо-наборы»: replace-set состава комбо-набора (паттерн\nSetGroupMembers). Пустой список = товар перестаёт быть комбо. sort_order\nвыводится из порядка массива. Состав и членство («выгоднее в комбо»)\nчитаются из GetProduct (combo_items/in_combos) — отдельной GET-ручки нет.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetComboItems","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/products/{product_id}/price-field-values":{"get":{"operationId":"Catalog_ListProductPriceFieldValues","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListProductPriceFieldValuesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Полная админская проекция формы товара: определения плюс сохранённые\nступени коммерческих цен и текущие внутренние денежные значения.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListProductPriceFieldValues","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"}},"/products/{product_id}/price-fields":{"get":{"operationId":"Catalog_ListProductPriceFields","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPriceFieldsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Админская проекция: определения, которые должны появиться в форме\nконкретного товара после shop/category inheritance.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListProductPriceFields","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"}},"/products/{product_id}/price-fields/{price_field_id}/commercial-values":{"put":{"operationId":"Catalog_ReplaceProductCommercialPriceValues","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"format":"int64","in":"path","name":"price_field_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogReplaceProductCommercialPriceValuesBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CommercialPriceFieldValuesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set одной переиспользуемой ценовой линии для одного товара.\nexpected_versions — точный pre-image; idempotency_key безопасен для PAT,\nwebhook и повторов сети.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReplaceProductCommercialPriceValues","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/products/{product_id}/price-fields/{price_field_id}/money-values":{"post":{"operationId":"Catalog_AppendProductMoneyValue","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"format":"int64","in":"path","name":"price_field_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogAppendProductMoneyValueBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ProductMoneyValueResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Внутренние суммы не перезаписываются: новая запись начинает следующий\nпериод истории effective_from и никогда не попадает в buyer API.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/AppendProductMoneyValue","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/promo-campaigns":{"get":{"operationId":"Catalog_ListPromoCampaigns","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPromoCampaignsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Кампании скидок бюджет над правилами ──\nПродавец задаёт потолок «выпустили на N рублей» или «на N штук»; когда\nлимит выбран, правила кампании перестают срабатывать сами.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListPromoCampaigns","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:read"},"post":{"operationId":"Catalog_CreatePromoCampaign","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreatePromoCampaignRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromoCampaignResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Promo Campaign","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreatePromoCampaign","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/promo-campaigns/{id}":{"delete":{"operationId":"Catalog_DeletePromoCampaign","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeletePromoCampaignBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeletePromoCampaignResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Promo Campaign","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeletePromoCampaign","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"},"put":{"operationId":"Catalog_EditPromoCampaign","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditPromoCampaignBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromoCampaignResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Promo Campaign","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditPromoCampaign","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/promo-keys":{"get":{"operationId":"Catalog_ListPromoKeys","parameters":[{"description":"0 = все правила магазина","format":"int64","in":"query","name":"promotion_id","required":false,"type":"string"},{"description":"включить именные купоны (по умолчанию только промокоды)","in":"query","name":"with_coupons","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPromoKeysResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Ключи скидок промокоды и купоны ──\nКлюч САМ скидки не задаёт — он отпирает правило класса key. Промокод и\nкупон различаются одним полем owner_user_id (пусто = общий промокод).\nCRUD — приватный (тенант из токена, PAT-скоуп promotions:*).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListPromoKeys","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:read"},"post":{"operationId":"Catalog_CreatePromoKey","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreatePromoKeyRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromoKeyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Promo Key","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreatePromoKey","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/promo-keys/{id}":{"delete":{"operationId":"Catalog_DeletePromoKey","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeletePromoKeyBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeletePromoKeyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Promo Key","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeletePromoKey","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"},"put":{"operationId":"Catalog_EditPromoKey","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditPromoKeyBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromoKeyResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Promo Key","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditPromoKey","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/promotions":{"get":{"operationId":"Catalog_ListPromotions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPromotionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Акции «Скидки и акции v1»): CRUD правил магазина ──\nПриватные (wildcard Catalog/* = RoleUser + requireCompanyUser); тенант —\nтолько из токена. condition/effect — bytes (raw JSON, конвенция №8).\nСписок правил компании (из токена).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListPromotions","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:read"},"post":{"operationId":"Catalog_CreatePromotion","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreatePromotionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromotionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать правило (whitelist-валидация kind/condition/effect).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreatePromotion","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/promotions/landscape":{"get":{"operationId":"Catalog_GetPromoLandscape","parameters":[{"description":"Сколько лучших предложений вернуть (по умолчанию 24, максимум 100).","format":"int32","in":"query","name":"limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetPromoLandscapeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"+: общая картина скидок магазина одним запросом линии agent-api).\nРанжирует СЕРВЕР: только он знает лестницу item→order→key и пересечения\nмеханик, поэтому «лучшие предложения», собранные клиентом, ошибутся на\nпервом же товаре, у которого две акции.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetPromoLandscape","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:read"}},"/promotions/{id}":{"delete":{"operationId":"Catalog_DeletePromotion","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeletePromotionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeletePromotionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить (deleted_after).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeletePromotion","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"},"get":{"operationId":"Catalog_GetPromotion","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromotionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Одно правило; чужое/несуществующее → NotFound (404-маска тенанта).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetPromotion","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:read"},"put":{"operationId":"Catalog_EditPromotion","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditPromotionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PromotionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Правка целиком.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditPromotion","x-vizen-pat-access":"allowed","x-vizen-required-scope":"promotions:write"}},"/relation-types":{"get":{"operationId":"Catalog_ListRelationTypes","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListRelationTypesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список типов связей магазина (справочник).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListRelationTypes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateRelationType","parameters":[{"description":"Запрос создания типа связи.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateRelationTypeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateRelationTypeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать тип связи.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateRelationType","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/relation-types/{id}":{"delete":{"operationId":"Catalog_DeleteRelationType","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteRelationTypeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить тип связи (soft-delete).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteRelationType","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditRelationType","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditRelationTypeBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditRelationTypeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Изменить тип связи (partial).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditRelationType","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/relations":{"get":{"operationId":"Catalog_ListCompanyRelations","parameters":[{"format":"int64","in":"query","name":"type_id","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListCompanyRelationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Центральный раздел: все рёбра связей компании (фильтр по типу, пагинация,\nрезолв имён узлов). Владелец-only.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListCompanyRelations","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/relations/{id}":{"delete":{"operationId":"Catalog_DeleteProductRelation","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteProductRelationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить одно ребро связи по id (точечно из центрального раздела). Владелец-only.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteProductRelation","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/resource-access-bindings":{"get":{"operationId":"Catalog_ListResourceAccessBindings","parameters":[{"in":"query","name":"resource_type","required":false,"type":"string"},{"format":"int64","in":"query","name":"resource_id","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListResourceAccessBindingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Resource Access Bindings","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListResourceAccessBindings","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:read"},"put":{"operationId":"Catalog_ReplaceResourceAccessBindings","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ReplaceResourceAccessBindingsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListResourceAccessBindingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace Resource Access Bindings","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReplaceResourceAccessBindings","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:write"}},"/reviews":{"get":{"operationId":"Catalog_ListReviews","parameters":[{"format":"int32","in":"query","name":"product_id","required":false,"type":"integer"},{"format":"int64","in":"query","name":"category_id","required":false,"type":"string"},{"description":"shop-скоуп (StoreHome)","format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"in":"query","name":"sort","required":false,"type":"string"},{"description":"Фильтр статуса — учитывается только для member своей компании (pending-лента\nадминки); остальным принудительно approved.","in":"query","name":"status","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListReviewsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Публичная лента отзывов: скоуп товара (резолв reviews_scope)/категории/\nмагазина; не-member видит только approved; сорт new|helpful|with_media.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListReviews","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_PostReview","parameters":[{"description":"Покупательский отзыв: product_id задан → на товар; пусто → на магазин\n(тогда company_id обязателен).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1PostReviewRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReviewResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Оставить отзыв покупателем (source=buyer; один живой отзыв на товар).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/PostReview","x-vizen-pat-access":"forbidden"}},"/reviews/seller":{"post":{"operationId":"Catalog_CreateSellerReview","parameters":[{"description":"Отзыв от продавца (оффлайн-клиент): product_id пусто = отзыв на магазин.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateSellerReviewRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReviewResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Добавить отзыв продавцом (source=seller, author_name; сразу approved).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateSellerReview","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/reviews/{id}":{"delete":{"operationId":"Catalog_DeleteReview","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteReviewBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteReviewResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мягко удалить отзыв (продавец; deleted_after + пересчёт рейтинга).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteReview","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/reviews/{id}/helpful":{"post":{"operationId":"Catalog_MarkReviewHelpful","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogMarkReviewHelpfulBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1MarkReviewHelpfulResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Полезно» +1 (счётчик без анти-накрутки — лайт-срез.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/MarkReviewHelpful","x-vizen-pat-access":"forbidden"}},"/reviews/{id}/moderate":{"put":{"operationId":"Catalog_ModerateReview","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogModerateReviewBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReviewResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Решение продавца по отзыву: approve/reject (+пересчёт рейтинга товара в tx).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ModerateReview","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/reviews/{id}/reply":{"put":{"operationId":"Catalog_ReplyReview","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogReplyReviewBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReviewResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Ответ продавца на отзыв ('' = снять ответ).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReplyReview","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/sandbox-columns/{id}":{"delete":{"operationId":"Catalog_DeleteColumn","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteColumnBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteColumnResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"intake и последнюю удалить нельзя; заявки колонки → intake песочницы.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteColumn","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"},"put":{"operationId":"Catalog_EditColumn","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditColumnBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SandboxColumnResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Column","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditColumn","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/sandboxes":{"get":{"operationId":"Catalog_ListSandboxes","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListSandboxesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Песочницы + колонки канбана заявок (Б-Формы, ──\nПесочницы компании с их колонками (один запрос рисует борды).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListSandboxes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:read"},"post":{"operationId":"Catalog_CreateSandbox","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateSandboxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SandboxResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Sandbox","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateSandbox","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/sandboxes/reorder":{"post":{"operationId":"Catalog_ReorderSandboxes","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ReorderSandboxesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReorderSandboxesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Полный набор в новом порядке (эталон ReorderTariffPlans). Статик-сегмент\n/reorder матчится chi раньше параметрического /sandboxes/{id}.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReorderSandboxes","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/sandboxes/{id}":{"delete":{"operationId":"Catalog_DeleteSandbox","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteSandboxBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteSandboxResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Дефолтную удалить нельзя; формы → дефолт, заявки → intake дефолта.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteSandbox","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"},"put":{"operationId":"Catalog_EditSandbox","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditSandboxBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SandboxResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Sandbox","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditSandbox","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/sandboxes/{sandbox_id}/columns":{"post":{"operationId":"Catalog_CreateColumn","parameters":[{"format":"int64","in":"path","name":"sandbox_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogCreateColumnBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SandboxColumnResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Column","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateColumn","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/sandboxes/{sandbox_id}/columns/reorder":{"post":{"operationId":"Catalog_ReorderColumns","parameters":[{"format":"int64","in":"path","name":"sandbox_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogReorderColumnsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReorderColumnsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Reorder Columns","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ReorderColumns","x-vizen-pat-access":"allowed","x-vizen-required-scope":"forms:write"}},"/site-publication":{"get":{"operationId":"Catalog_GetSitePublication","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SitePublicationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"── Публикация сайта ──\nОбёртка над политиками доступа, а не отдельная механика: «не опубликован» =\nактивная СИСТЕМНАЯ политика с паролем на ресурс `shop` (её не видно в\nListAccessPolicies и нельзя править общими RPC). Роли owner|admin, скоупы\naccess:read / access:write.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetSitePublication","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:read"},"put":{"operationId":"Catalog_SetSitePublication","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SetSitePublicationRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SitePublicationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Site Publication","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetSitePublication","x-vizen-pat-access":"allowed","x-vizen-required-scope":"access:write"}},"/slug-redirects/resolve":{"get":{"operationId":"Catalog_ResolveSlugRedirect","parameters":[{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"in":"query","name":"entity_type","required":false,"type":"string"},{"in":"query","name":"slug","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ResolveSlugRedirectResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"резолв SEO-редиректа слага (журнал slug_redirects, live-first):\n{entity_id, current_slug} для 301/308 витрины. 404-маска.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ResolveSlugRedirect","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/spec-templates":{"get":{"operationId":"Catalog_ListSpecTemplates","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListSpecTemplatesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список шаблонов характеристик магазина (переиспользуемые наборы).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListSpecTemplates","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateSpecTemplate","parameters":[{"description":"Запрос создания шаблона характеристик.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateSpecTemplateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateSpecTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать шаблон характеристик.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateSpecTemplate","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/spec-templates/{id}":{"delete":{"operationId":"Catalog_DeleteSpecTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteSpecTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить шаблон характеристик (soft-delete).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteSpecTemplate","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"},"put":{"operationId":"Catalog_EditSpecTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditSpecTemplateBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditSpecTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Изменить шаблон характеристик.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditSpecTemplate","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/spec-templates/{id}/items":{"get":{"operationId":"Catalog_GetSpecTemplateItems","parameters":[{"description":"template id","format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSpecTemplateItemsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Строки шаблона характеристик (группы+атрибуты+порядок+флаги).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetSpecTemplateItems","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_SetSpecTemplateItems","parameters":[{"description":"template id","format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetSpecTemplateItemsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetSpecTemplateItemsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Заменить строки шаблона характеристик (replace-set).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetSpecTemplateItems","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/spec-templates/{id}/layout":{"get":{"operationId":"Catalog_GetSpecTemplateLayout","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSpecTemplateLayoutResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Аддитивные V3-методы оставлены в конце service, чтобы не менять descriptor\nindexes уже опубликованных RPC.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetSpecTemplateLayout","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:read"},"put":{"operationId":"Catalog_SetSpecTemplateLayout","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogSetSpecTemplateLayoutBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSpecTemplateLayoutResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Spec Template Layout","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SetSpecTemplateLayout","x-vizen-pat-access":"allowed","x-vizen-required-scope":"pricing:write"}},"/starter-template-categories":{"get":{"description":"⚠️ У Catalog/* в guard стоит wildcard RoleUser — пропущенная ТОЧНАЯ запись\nне уронит старт, а молча откроет запись в общую библиотеку всем.","operationId":"Catalog_ListStarterTemplateCategories","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListStarterTemplateCategoriesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"─── Библиотека шаблонов страниц (паспорт Б-Шаблоны-страниц) ───────────────\nГотовая страница, собранная суперадмином, которую владелец магазина ставит\nсебе целиком. Шаблон — это СНИМОК обычной страницы (те же блоки-виджеты,\nчто рисует конструктор), поэтому установка = обычное создание раздела с\nблоками, а не отдельный движок.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListStarterTemplateCategories","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"post":{"operationId":"Catalog_CreateStarterTemplateCategory","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateStarterTemplateCategoryRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StarterTemplateCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Starter Template Category","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/CreateStarterTemplateCategory","x-vizen-pat-access":"forbidden"}},"/starter-template-categories/{id}":{"delete":{"operationId":"Catalog_DeleteStarterTemplateCategory","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteStarterTemplateCategoryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteStarterTemplateCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Starter Template Category","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteStarterTemplateCategory","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Catalog_EditStarterTemplateCategory","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditStarterTemplateCategoryBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StarterTemplateCategoryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Starter Template Category","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditStarterTemplateCategory","x-vizen-pat-access":"forbidden"}},"/starter-templates":{"get":{"operationId":"Catalog_ListStarterTemplates","parameters":[{"description":"0 = вся библиотека","format":"int64","in":"query","name":"category_id","required":false,"type":"string"},{"in":"query","name":"kind","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListStarterTemplatesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Галерея: карточки БЕЗ содержимого (магазину документ не нужен и не отдаётся).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/ListStarterTemplates","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"}},"/starter-templates/from-category":{"post":{"operationId":"Catalog_SaveCategoryAsStarterTemplate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SaveCategoryAsStarterTemplateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StarterTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Сохранить страницу как шаблон»: снимок зон и блоков указанной страницы\nмагазина-источника. id=0 — новый шаблон, иначе обновляется снимок.","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/SaveCategoryAsStarterTemplate","x-vizen-pat-access":"forbidden"}},"/starter-templates/{id}":{"delete":{"operationId":"Catalog_DeleteStarterTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogDeleteStarterTemplateBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteStarterTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Starter Template","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/DeleteStarterTemplate","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Catalog_GetStarterTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StarterTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Starter Template","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetStarterTemplate","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:read"},"put":{"operationId":"Catalog_EditStarterTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogEditStarterTemplateBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StarterTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Edit Starter Template","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/EditStarterTemplate","x-vizen-pat-access":"forbidden"}},"/starter-templates/{id}/install":{"post":{"operationId":"Catalog_InstallStarterTemplate","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogInstallStarterTemplateBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1InstallStarterTemplateResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Установка в СВОЙ магазин: создаёт раздел-страницу и блоки снимка. Пишет тем\nже путём и в тот же контур, что обычное создание раздела (dev → оверлей).","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/InstallStarterTemplate","x-vizen-pat-access":"allowed","x-vizen-required-scope":"catalog:write"}},"/tariff":{"get":{"operationId":"Tariff_GetMyTariff","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetMyTariffResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Мой тариф: план компании + лимиты; plan пуст = безлимит.","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/GetMyTariff","x-vizen-pat-access":"forbidden"}},"/tariff/plans":{"get":{"operationId":"Tariff_ListPublicTariffPlans","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPublicTariffPlansResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"полироль: ПУБЛИЧНАЯ витрина цен (лендинг + выбор плана продавцом) —\nтолько активные живые планы по sort, каждый с лимитами; БЕЗ внутренних\nполей конструктора (is_active/created_*/updated_*). Guard: явный public\n«{}» (Т7) — аноним допущен осознанно; catalog-стиль без /v1.","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/ListPublicTariffPlans","x-vizen-pat-access":"public"}},"/tariff/select":{"post":{"operationId":"Tariff_SelectPlan","parameters":[{"description":"SelectPlanRequest — код живого АКТИВНОГО плана. Поля company_id здесь НЕТ\nнамеренно: продавец меняет ТОЛЬКО свою компанию (тенант из токена).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SelectPlanRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SelectPlanResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Бакт: продавец сам выбирает план своей компании (owner-поверхность;\ncompany — ТОЛЬКО из токена, в запросе её нет). МОК-активация до платёжного\nшлюза: план применяется сразу, без оплаты (см. select_plan.go).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/SelectPlan","x-vizen-pat-access":"forbidden"}},"/tariff/usage":{"get":{"operationId":"Tariff_GetMyUsage","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetMyUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Моё потребление: хранилище/товары + потолки для UI-баров (0 = безлимит).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/GetMyUsage","x-vizen-pat-access":"forbidden"}},"/v1/account/delete":{"post":{"operationId":"Account_RequestDeletion","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RequestDeletionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Request Deletion","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/RequestDeletion","x-vizen-pat-access":"forbidden"}},"/v1/account/delete/cancel":{"post":{"operationId":"Account_CancelDeletion","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CancelDeletionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Cancel Deletion","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/CancelDeletion","x-vizen-pat-access":"forbidden"}},"/v1/account/email/confirm":{"post":{"operationId":"Account_ConfirmEmailChange","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ConfirmEmailChangeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ConfirmEmailChangeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Confirm Email Change","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ConfirmEmailChange","x-vizen-pat-access":"forbidden"}},"/v1/account/email/request":{"post":{"operationId":"Account_RequestEmailChange","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RequestEmailChangeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RequestEmailChangeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Request Email Change","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/RequestEmailChange","x-vizen-pat-access":"forbidden"}},"/v1/account/email/verify/resend":{"post":{"operationId":"Account_ResendEmailVerification","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ResendEmailVerificationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Повторно отправить письмо для подтверждения ТЕКУЩЕГО email (если не подтверждён).","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ResendEmailVerification","x-vizen-pat-access":"forbidden"}},"/v1/account/password":{"post":{"operationId":"Account_ChangePassword","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ChangePasswordRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ChangePasswordResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Change Password","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ChangePassword","x-vizen-pat-access":"forbidden"}},"/v1/account/profile":{"get":{"operationId":"Account_GetProfile","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetProfileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Profile","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/GetProfile","x-vizen-pat-access":"forbidden"},"patch":{"operationId":"Account_UpdateProfile","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1UpdateProfileRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1UpdateProfileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Profile","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/UpdateProfile","x-vizen-pat-access":"forbidden"}},"/v1/account/providers/link":{"post":{"operationId":"Account_LinkProvider","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1LinkProviderRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1LinkProviderResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Link Provider","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/LinkProvider","x-vizen-pat-access":"forbidden"}},"/v1/account/providers/unlink":{"post":{"operationId":"Account_UnlinkProvider","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1UnlinkProviderRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1UnlinkProviderResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Unlink Provider","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/UnlinkProvider","x-vizen-pat-access":"forbidden"}},"/v1/account/referral":{"get":{"operationId":"Account_GetReferralDashboard","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetReferralDashboardResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Партнёрская программа человека: ссылка, состояние доступа, кошелёк,\nупущенная выгода и структура сети. Живёт у аккаунта, а не у магазина:\nприглашает человек, а не компания.","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/GetReferralDashboard","x-vizen-pat-access":"forbidden"}},"/v1/account/referral/payouts":{"get":{"operationId":"Account_ListPayouts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiaccountv1ListPayoutsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Payouts","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ListPayouts","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Account_RequestPayout","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RequestPayoutRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Выплаты партнёрских вознаграждений: заявка, отмена, список. Три волны в\nмесяц — дату ближайшей сервер считает сам и возвращает в заявке.","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/RequestPayout","x-vizen-pat-access":"forbidden"}},"/v1/account/referral/payouts/cancel":{"post":{"operationId":"Account_CancelPayout","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CancelPayoutRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CancelPayoutResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Cancel Payout","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/CancelPayout","x-vizen-pat-access":"forbidden"}},"/v1/account/sessions":{"get":{"operationId":"Account_ListSessions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListSessionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Sessions","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ListSessions","x-vizen-pat-access":"forbidden"}},"/v1/account/sessions/revoke":{"post":{"operationId":"Account_RevokeSession","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RevokeSessionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RevokeSessionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Revoke Session","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/RevokeSession","x-vizen-pat-access":"forbidden"}},"/v1/account/token":{"get":{"description":"Первый вызов интеграции. Возвращает контур ключа (`writes_to_live` — попадут ли записи сразу на живую витрину), магазин, его валюту и адрес, а также `capabilities` — что ключ реально может. Отдаёт данные только о самом предъявленном ключе.","operationId":"Account_IntrospectToken","produces":["application/json"],"responses":{"200":{"description":"Паспорт ключа","schema":{"$ref":"#/definitions/vizenTokenInfo"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Паспорт предъявленного ключа","tags":["Account"],"x-vizen-pat-access":"allowed","x-vizen-required-scope":""}},"/v1/account/username":{"post":{"operationId":"Account_ChangeUsername","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ChangeUsernameRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ChangeUsernameResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Change Username","tags":["Account"],"x-vizen-grpc-method":"/vizenpro.api.account.v1.Account/ChangeUsername","x-vizen-pat-access":"forbidden"}},"/v1/admin/companies/{company_id}/plan":{"post":{"operationId":"Tariff_SetCompanyPlan","parameters":[{"format":"int32","in":"path","name":"company_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/TariffSetCompanyPlanBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetCompanyPlanResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Назначить план компании — писатель companies.plan (валидация кода по\nживым активным планам; пустой code = снять план → безлимит).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/SetCompanyPlan","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs":{"get":{"operationId":"Admin_ListOrgs","parameters":[{"format":"int32","in":"query","name":"page","required":false,"type":"integer"},{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"},{"description":"поиск по name/slug","in":"query","name":"query","required":false,"type":"string"},{"in":"query","name":"status","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListOrgsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"организации (платформенный обзор)","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ListOrgs","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}":{"get":{"operationId":"Admin_GetOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/GetOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/block":{"post":{"operationId":"Admin_BlockOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminBlockOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Block Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/BlockOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/delete":{"post":{"operationId":"Admin_DeleteOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AdminDeleteOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminDeleteOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/DeleteOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/enter":{"post":{"operationId":"Admin_EnterOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminEnterOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EnterOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Войти как магазин» (impersonation, superadmin-only): выдать суперадмину\nсессию на эту компанию, минуя членство. Сессия помечена как суперадминская.","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/EnterOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/members":{"get":{"operationId":"Admin_ListOrgMembers","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListOrgMembersResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Org Members","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ListOrgMembers","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/suspend":{"post":{"operationId":"Admin_SuspendOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminSuspendOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Suspend Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/SuspendOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/template-publisher":{"post":{"operationId":"Admin_SetOrgTemplatePublisher","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminSetOrgTemplatePublisherBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetOrgTemplatePublisherResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Разрешить или запретить магазину публиковать ресурсы как шаблоны.\nПлатформенный флаг переключает только superadmin (exact guard).","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/SetOrgTemplatePublisher","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/unblock":{"post":{"operationId":"Admin_UnblockOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminUnblockOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Unblock Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/UnblockOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/unsuspend":{"post":{"operationId":"Admin_UnsuspendOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminUnsuspendOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Unsuspend Org","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/UnsuspendOrg","x-vizen-pat-access":"forbidden"}},"/v1/admin/orgs/{id}/usage":{"get":{"operationId":"Admin_GetOrgUsage","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrgUsageResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"админ «Карточка компании» (аддитивно): потребление, участники,\nмягкая приостановка и оффбординг. Роли — guard (admin/superadmin;\nDeleteOrg — только superadmin).","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/GetOrgUsage","x-vizen-pat-access":"forbidden"}},"/v1/admin/payout-settings":{"get":{"operationId":"Admin_GetPayoutSettings","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutSettings"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Режим одобрения выплат: чтение (admin+superadmin) + переключение (superadmin).\nmanual_approval=false (дефолт) — воркер платит автоматически; true — ручной гейт.","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/GetPayoutSettings","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Admin_SetPayoutMode","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SetPayoutModeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutSettings"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Payout Mode","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/SetPayoutMode","x-vizen-pat-access":"forbidden"}},"/v1/admin/payouts":{"get":{"operationId":"Admin_ListPayouts","parameters":[{"format":"int32","in":"query","name":"page","required":false,"type":"integer"},{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"},{"in":"query","name":"status","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiadminv1ListPayoutsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Payouts","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ListPayouts","x-vizen-pat-access":"forbidden"}},"/v1/admin/payouts/{id}/approve":{"post":{"operationId":"Admin_ApprovePayout","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminApprovePayoutBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutActionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Approve Payout","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ApprovePayout","x-vizen-pat-access":"forbidden"}},"/v1/admin/payouts/{id}/pay":{"post":{"operationId":"Admin_MarkPayoutPaid","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminMarkPayoutPaidBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutActionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Mark Payout Paid","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/MarkPayoutPaid","x-vizen-pat-access":"forbidden"}},"/v1/admin/payouts/{id}/reject":{"post":{"operationId":"Admin_RejectPayout","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminRejectPayoutBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PayoutActionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Reject Payout","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/RejectPayout","x-vizen-pat-access":"forbidden"}},"/v1/admin/stats":{"get":{"operationId":"Admin_GetPlatformStats","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetPlatformStatsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Дашборд платформы: агрегаты (магазины/товары/категории/юзеры/заказы/заявки —\nвсего и за сегодня) + серверные рантайм-метрики.","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/GetPlatformStats","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariff-payments":{"get":{"operationId":"Admin_ListTariffPayments","parameters":[{"format":"int32","in":"query","name":"page","required":false,"type":"integer"},{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"},{"in":"query","name":"status","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListTariffPaymentsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"-- Вкладка «Оплаты» ---\nA (наблюдение): платежи за подписки всех магазинов + заявки на партнёрские\nвыплаты всех партнёров. B (ручной гейт выплат, только superadmin): одобрить\n(уйдёт в волну), отклонить, выплатить сейчас. Авто-воркер платит только\napproved — до одобрения деньги не уходят.","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ListTariffPayments","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariffs":{"get":{"operationId":"Tariff_ListTariffPlans","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListTariffPlansResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список планов конструктора: живые, включая неактивные (лимиты — отдельной\nручкой GetTariffLimits, как ждёт фронт).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/ListTariffPlans","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Tariff_CreateTariffPlan","parameters":[{"description":"CreateTariffPlanRequest — новый план; code — машинный slug.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateTariffPlanRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateTariffPlanResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать план (superadmin). Лимиты — отдельным SetTariffLimits.","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/CreateTariffPlan","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariffs/referral-rates":{"get":{"operationId":"Tariff_GetReferralRates","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetReferralRatesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Сетка реферальных процентов по коленьям. Отдельно от планов: она общая\nдля всей площадки, а участие конкретного тарифа включается его лимитом\nreferral_program.","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/GetReferralRates","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Tariff_SetReferralRates","parameters":[{"description":"SetReferralRatesRequest — завести новую версию сетки.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SetReferralRatesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetReferralRatesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set Referral Rates","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/SetReferralRates","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariffs/reorder":{"post":{"operationId":"Tariff_ReorderTariffPlans","parameters":[{"description":"ReorderTariffPlansRequest — полный набор code ЖИВЫХ планов в новом порядке\n(включая неактивные: конструктор упорядочивает весь список).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ReorderTariffPlansRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReorderTariffPlansResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"полироль: batch-переупорядочивание планов конструктора — полный набор\ncode ЖИВЫХ планов в новом порядке, sort_order = позиция (superadmin).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/ReorderTariffPlans","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariffs/{code}":{"delete":{"operationId":"Tariff_DeleteTariffPlan","parameters":[{"in":"path","name":"code","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/TariffDeleteTariffPlanBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteTariffPlanResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Soft-delete плана; запрещён, пока план назначен хоть одной живой компании.","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/DeleteTariffPlan","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Tariff_EditTariffPlan","parameters":[{"in":"path","name":"code","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/TariffEditTariffPlanBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditTariffPlanResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Полное редактирование плана по code (фронт шлёт весь input); code — ключ,\nнеизменяем (на него ссылаются companies.plan).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/EditTariffPlan","x-vizen-pat-access":"forbidden"}},"/v1/admin/tariffs/{code}/limits":{"get":{"operationId":"Tariff_GetTariffLimits","parameters":[{"in":"path","name":"code","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetTariffLimitsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Лимиты плана (значения по реестру limit_code + подписи).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/GetTariffLimits","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Tariff_SetTariffLimits","parameters":[{"in":"path","name":"code","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/TariffSetTariffLimitsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetTariffLimitsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Replace-set лимитов плана: пустой список = снять все лимиты (безлимит).","tags":["Tariff"],"x-vizen-grpc-method":"/vizenpro.api.tariff.v1.Tariff/SetTariffLimits","x-vizen-pat-access":"forbidden"}},"/v1/admin/users":{"get":{"operationId":"Admin_ListUsers","parameters":[{"format":"int32","in":"query","name":"page","required":false,"type":"integer"},{"format":"int32","in":"query","name":"limit","required":false,"type":"integer"},{"in":"query","name":"query","required":false,"type":"string"},{"in":"query","name":"status","required":false,"type":"string"},{"in":"query","name":"role","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListUsersResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List Users","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/ListUsers","x-vizen-pat-access":"forbidden"}},"/v1/admin/users/{id}":{"get":{"operationId":"Admin_GetUser","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetUserResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get User","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/GetUser","x-vizen-pat-access":"forbidden"},"patch":{"operationId":"Admin_UpdateUser","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminUpdateUserBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminUserResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update User","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/UpdateUser","x-vizen-pat-access":"forbidden"}},"/v1/admin/users/{id}/block":{"post":{"operationId":"Admin_BlockUser","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminBlockUserBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminUserResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Block User","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/BlockUser","x-vizen-pat-access":"forbidden"}},"/v1/admin/users/{id}/role":{"post":{"operationId":"Admin_SetUserRole","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminSetUserRoleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminUserResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Set User Role","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/SetUserRole","x-vizen-pat-access":"forbidden"}},"/v1/admin/users/{id}/unblock":{"post":{"operationId":"Admin_UnblockUser","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/AdminUnblockUserBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AdminUserResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Unblock User","tags":["Admin"],"x-vizen-grpc-method":"/vizenpro.api.admin.v1.Admin/UnblockUser","x-vizen-pat-access":"forbidden"}},"/v1/auth/login":{"post":{"operationId":"Auth_Login","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1LoginRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1LoginResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Login","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/Login","x-vizen-pat-access":"public"}},"/v1/auth/logout":{"post":{"operationId":"Auth_Logout","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1LogoutRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1LogoutResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Logout","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/Logout","x-vizen-pat-access":"public"}},"/v1/auth/logout_all":{"post":{"operationId":"Auth_LogoutAll","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1LogoutAllResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Logout All","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/LogoutAll","x-vizen-pat-access":"forbidden"}},"/v1/auth/oauth":{"post":{"operationId":"Auth_OAuthLogin","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1OAuthLoginRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OAuthLoginResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"O Auth Login","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/OAuthLogin","x-vizen-pat-access":"public"}},"/v1/auth/password_reset/confirm":{"post":{"operationId":"Auth_ConfirmPasswordReset","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ConfirmPasswordResetRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ConfirmPasswordResetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Confirm Password Reset","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/ConfirmPasswordReset","x-vizen-pat-access":"public"}},"/v1/auth/password_reset/request":{"post":{"operationId":"Auth_RequestPasswordReset","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RequestPasswordResetRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RequestPasswordResetResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Request Password Reset","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/RequestPasswordReset","x-vizen-pat-access":"public"}},"/v1/auth/refresh":{"post":{"operationId":"Auth_Refresh","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RefreshRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RefreshResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Refresh","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/Refresh","x-vizen-pat-access":"public"}},"/v1/auth/register":{"post":{"operationId":"Auth_Register","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RegisterRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RegisterResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Register","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/Register","x-vizen-pat-access":"public"}},"/v1/auth/verify_email":{"post":{"operationId":"Auth_VerifyEmail","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1VerifyEmailRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1VerifyEmailResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Verify Email","tags":["Auth"],"x-vizen-grpc-method":"/vizenpro.api.auth.v1.Auth/VerifyEmail","x-vizen-pat-access":"public"}},"/v1/dev/discard":{"post":{"operationId":"DevPublish_DiscardDev","parameters":[{"description":"DiscardDevRequest — без параметров (сбрасывается весь оверлей компании).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1DiscardDevRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DiscardDevResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"«Отмена разработки»: полный сброс дев-оверлея компании без публикации.","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/DiscardDev","x-vizen-pat-access":"forbidden"}},"/v1/dev/handoff-code":{"post":{"operationId":"DevPublish_HandoffCode","parameters":[{"description":"HandoffCodeRequest — без параметров (компания/пользователь — из токена).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1HandoffCodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1HandoffCodeResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"одноразовый короткоживущий код хэндоффа на дев-поддомен (владелец\nжмёт кнопку в админке; Next дев-хоста обменяет код на Bearer server-side,\nHandoffExchange). Компания — из токена, роль owner|admin — в хендлере.","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/HandoffCode","x-vizen-pat-access":"forbidden"}},"/v1/dev/publications":{"get":{"operationId":"DevPublish_ListPublications","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListPublicationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"История публикаций витрины компании, новые сверху (включая revoked).","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/ListPublications","x-vizen-pat-access":"forbidden"}},"/v1/dev/publications/{id}/rollback":{"post":{"operationId":"DevPublish_Rollback","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/DevPublishRollbackBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RollbackResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Откат прода к состоянию публикации: RestoreCatalogSnapshot её снапшота\n(даст автокопию pre_restore) + возврат активных публикаций сцен на\nзапиненные + revoke+insert новой активной записи site_publications.\nДев-оверлей НЕ трогается. Чужой id → NotFound.","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/Rollback","x-vizen-pat-access":"forbidden"}},"/v1/dev/publish":{"post":{"operationId":"DevPublish_Publish","parameters":[{"description":"PublishRequest — заметка + решения по конфликтам.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1PublishRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PublishResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Публикация: одна транзакция под advisory-lock — пре-снапшот прода\n(kind=publish), пер-ресурсный накат оверлея (upsert/soft-delete/replace-set),\nsetval, ремодерация shared-товаров, revoke+insert site_publications, очистка\nоверлея. Каждый конфликт ОБЯЗАН иметь resolution (take_dev|keep_prod),\nиначе FailedPrecondition PUBLISH_CONFLICTS_UNRESOLVED со списком.","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/Publish","x-vizen-pat-access":"allowed","x-vizen-required-scope":"publish:write"}},"/v1/dev/publish/preview":{"post":{"operationId":"DevPublish_PreviewPublish","parameters":[{"description":"PreviewPublishRequest — без параметров (dry-run всего оверлея компании).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1PreviewPublishRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PreviewPublishResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Dry-run публикации: сводка create/update/delete/conflict по таблицам,\nсписок конфликтов (нужны resolution в Publish), warnings (уникальность,\nквота товаров, сцены без активной публикации). Ничего не мутирует.","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/PreviewPublish","x-vizen-pat-access":"forbidden"}},"/v1/dev/status":{"get":{"operationId":"DevPublish_GetStatus","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetStatusResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Статус оверлея: per-table счётчики правок, число конфликтов с продом,\nактивная публикация витрины (если была).","tags":["DevPublish"],"x-vizen-grpc-method":"/vizenpro.api.devpublish.v1.DevPublish/GetStatus","x-vizen-pat-access":"forbidden"}},"/v1/orgs":{"get":{"operationId":"Org_ListMyOrgs","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListMyOrgsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"List My Orgs","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/ListMyOrgs","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Org_CreateOrg","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateOrgRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Create Org","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/CreateOrg","x-vizen-pat-access":"forbidden"}},"/v1/orgs/current":{"get":{"operationId":"Org_GetCurrent","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Current","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetCurrent","x-vizen-pat-access":"allowed","x-vizen-required-scope":"domain:read"}},"/v1/orgs/invites/accept":{"post":{"operationId":"Org_AcceptInvite","parameters":[{"description":"AcceptInviteRequest — принять приглашение. Ровно ОДНО из полей (email-путь и\nin-app по id); «ровно одно» проверяет хендлер (min_len с token снят, иначе\nValidateAll резал бы in-app вызов без токена).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AcceptInviteRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Accept Invite","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/AcceptInvite","x-vizen-pat-access":"forbidden"}},"/v1/orgs/invites/decline":{"post":{"operationId":"Org_DeclineInvite","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1DeclineInviteRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeclineInviteResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отклонить своё приглашение (только владелец email; анти-IDOR — предикат в UPDATE).","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/DeclineInvite","x-vizen-pat-access":"forbidden"}},"/v1/orgs/invites/my":{"get":{"operationId":"Org_ListMyInvites","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListMyInvitesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Инбокс приглашённого: живые pending на его email (адресация по токену — email).","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/ListMyInvites","x-vizen-pat-access":"forbidden"}},"/v1/orgs/switch":{"post":{"operationId":"Org_SwitchOrg","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SwitchOrgRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SwitchOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Switch Org","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/SwitchOrg","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}":{"delete":{"operationId":"Org_DeleteOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Org","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/DeleteOrg","x-vizen-pat-access":"forbidden"},"patch":{"operationId":"Org_UpdateOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdateOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Org","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdateOrg","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/cancel-deletion":{"post":{"operationId":"Org_CancelOrgDeletion","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgCancelOrgDeletionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"CancelOrgDeletion отменяет запрошенное удаление магазина.","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/CancelOrgDeletion","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/domain":{"delete":{"operationId":"Org_DeleteOrgDomain","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteOrgDomainResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Delete Org Domain","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/DeleteOrgDomain","x-vizen-pat-access":"allowed","x-vizen-required-scope":"domain:write"},"get":{"operationId":"Org_GetOrgDomain","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrgDomainResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"кастомные домены магазина (Б-домен). Роли owner|admin — бизнес-requireRole\nв хендлере; company_id строго из пути с проверкой членства (как UpdateOrg).","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetOrgDomain","x-vizen-pat-access":"allowed","x-vizen-required-scope":"domain:read"},"post":{"operationId":"Org_BindOrgDomain","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgBindOrgDomainBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrgDomainResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Bind Org Domain","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/BindOrgDomain","x-vizen-pat-access":"allowed","x-vizen-required-scope":"domain:write"}},"/v1/orgs/{id}/domain/verify":{"post":{"operationId":"Org_VerifyOrgDomain","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgVerifyOrgDomainBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetOrgDomainResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Verify Org Domain","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/VerifyOrgDomain","x-vizen-pat-access":"allowed","x-vizen-required-scope":"domain:write"}},"/v1/orgs/{id}/fiscal":{"get":{"operationId":"Org_GetFiscalSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FiscalSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Фискальные реквизиты чека. Отдельной парой вызовов, а не полями UpdateOrg:\nза них продавец отвечает перед налоговой, у них свой справочник значений и\nрядом встанут ключи платёжных провайдеров, которые в общий PATCH не\nположишь.","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetFiscalSettings","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Org_UpdateFiscalSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdateFiscalSettingsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1FiscalSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Fiscal Settings","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdateFiscalSettings","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/invites":{"get":{"operationId":"Org_ListInvites","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListInvitesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Исходящие приглашения компании (owner|admin — requireRole в хендлере).","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/ListInvites","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/invites/{invite_id}/revoke":{"post":{"operationId":"Org_RevokeInvite","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"format":"int64","in":"path","name":"invite_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgRevokeInviteBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RevokeInviteResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отозвать своё исходящее приглашение (owner|admin; company_id из пути = анти-IDOR).","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/RevokeInvite","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/leave":{"post":{"operationId":"Org_LeaveOrg","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgLeaveOrgBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1LeaveOrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Leave Org","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/LeaveOrg","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/members":{"get":{"operationId":"Org_ListMembers","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListMembersResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"участники","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/ListMembers","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/members/invite":{"post":{"operationId":"Org_InviteMember","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgInviteMemberBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1InviteMemberResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Invite Member","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/InviteMember","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/members/{user_id}/remove":{"post":{"operationId":"Org_RemoveMember","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"format":"int32","in":"path","name":"user_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgRemoveMemberBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RemoveMemberResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove Member","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/RemoveMember","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/members/{user_id}/role":{"post":{"operationId":"Org_UpdateMemberRole","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"format":"int32","in":"path","name":"user_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdateMemberRoleBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1MemberResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Member Role","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdateMemberRole","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/payments":{"get":{"operationId":"Org_GetPaymentSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PaymentSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Приём оплат магазином: подключение кассы и режим оплаты. Ключи провайдера\nнаружу не отдаются НИКОГДА — в ответе только хвосты, чтобы продавец узнал\nсвой ключ, не увидев его.","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetPaymentSettings","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Org_UpdatePaymentSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdatePaymentSettingsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PaymentSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Payment Settings","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdatePaymentSettings","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/storefront":{"get":{"operationId":"Org_GetStorefront","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StorefrontResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"витрина (vizen)","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetStorefront","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Org_UpdateStorefront","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdateStorefrontBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1StorefrontResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Storefront","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdateStorefront","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/telegram":{"get":{"operationId":"Org_GetTelegramSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1TelegramSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Телеграм-бот магазина: куда уходит уведомление о новой заявке с лид-формы.\nОтдельной парой вызовов по эталону фискальных настроек — это секрет, и\nобщий PATCH организации его не примет: ответ UpdateOrg возвращает карточку\nцеликом, а токен возвращать нельзя ни в каком ответе.","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/GetTelegramSettings","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Org_UpdateTelegramSettings","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgUpdateTelegramSettingsBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1TelegramSettingsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Update Telegram Settings","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/UpdateTelegramSettings","x-vizen-pat-access":"forbidden"}},"/v1/orgs/{id}/transfer":{"post":{"operationId":"Org_TransferOwnership","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/OrgTransferOwnershipBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1OrgResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Transfer Ownership","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/TransferOwnership","x-vizen-pat-access":"forbidden"}},"/v1/snapshots":{"get":{"operationId":"Snapshot_ListSnapshots","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListSnapshotsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Живые снапшоты компании, новые сверху.","tags":["Snapshot"],"x-vizen-grpc-method":"/vizenpro.api.snapshot.v1.Snapshot/ListSnapshots","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Snapshot_CreateSnapshot","parameters":[{"description":"CreateSnapshotRequest — имя снапшота (может быть пустым — «безымянный»).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateSnapshotRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateSnapshotResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать снапшот каталога (kind=manual). Перед созданием — fail-closed\nгейт автоохвата реестра таблиц (неклассифицированная таблица → ошибка).","tags":["Snapshot"],"x-vizen-grpc-method":"/vizenpro.api.snapshot.v1.Snapshot/CreateSnapshot","x-vizen-pat-access":"forbidden"}},"/v1/snapshots/{id}":{"delete":{"operationId":"Snapshot_DeleteSnapshot","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/SnapshotDeleteSnapshotBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteSnapshotResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить снапшот (soft-delete, канон deleted_after).","tags":["Snapshot"],"x-vizen-grpc-method":"/vizenpro.api.snapshot.v1.Snapshot/DeleteSnapshot","x-vizen-pat-access":"forbidden"}},"/v1/snapshots/{id}/restore":{"post":{"operationId":"Snapshot_RestoreSnapshot","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/SnapshotRestoreSnapshotBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RestoreSnapshotResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Восстановить каталог из снапшота: одна транзакция под advisory-lock,\nавтокопия pre_restore ДО мутаций; несовпадение версии схемы → Aborted\n(409) SNAPSHOT_SCHEMA_MISMATCH; чужой/удалённый id → NotFound.","tags":["Snapshot"],"x-vizen-grpc-method":"/vizenpro.api.snapshot.v1.Snapshot/RestoreSnapshot","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections":{"get":{"operationId":"Storage_GetCollections","parameters":[{"in":"query","name":"mode","required":false,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"in":"query","name":"name","required":false,"type":"string"},{"description":"\"name\" | \"created_at\" | \"updated_at\" | \"order_index\"","in":"query","name":"sort_by","required":false,"type":"string"},{"description":"\"asc\" | \"desc\"","in":"query","name":"sort_order","required":false,"type":"string"},{"description":"фильтр по родительской коллекции","format":"int64","in":"query","name":"parent_id","required":false,"type":"string"},{"description":"только корневые (parent_id IS NULL)","in":"query","name":"root_only","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetCollections","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Storage_CreateCollection","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateCollectionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateCollection","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/containers":{"delete":{"operationId":"Storage_RemoveContainerFromCollection","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RemoveContainerFromCollectionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RemoveContainerFromCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove Container From Collection","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/RemoveContainerFromCollection","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Storage_AddContainerToCollection","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AddContainerToCollectionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AddContainerToCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Add Container To Collection","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/AddContainerToCollection","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/files":{"delete":{"operationId":"Storage_RemoveFileFromCollection","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1RemoveFileFromCollectionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RemoveFileFromCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove File From Collection","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/RemoveFileFromCollection","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Storage_AddFileToCollection","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AddFileToCollectionRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AddFileToCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Add File To Collection","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/AddFileToCollection","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/reorder":{"put":{"operationId":"Storage_ReorderCollections","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ReorderCollectionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReorderCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Batch reorder коллекций (siblings)","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ReorderCollections","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/search":{"get":{"operationId":"Storage_SearchCollections","parameters":[{"description":"мин. 3 символа","in":"query","name":"query","required":false,"type":"string"},{"description":"\"folder\" | \"material\"","in":"query","name":"mode","required":false,"type":"string"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SearchCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Поиск коллекций по имени (с путём ancestors)","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/SearchCollections","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/{collection_id}/files/reorder":{"put":{"operationId":"Storage_ReorderFilesInCollection","parameters":[{"format":"int64","in":"path","name":"collection_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageReorderFilesInCollectionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReorderFilesInCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Batch reorder файлов в коллекции","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ReorderFilesInCollection","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/{id}":{"delete":{"operationId":"Storage_DeleteCollection","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DeleteCollection","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Storage_GetCollection","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetCollection","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Storage_EditCollection","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageEditCollectionBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditCollectionResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/EditCollection","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/{id}/containers":{"get":{"operationId":"Storage_GetContainersFromCollections","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetContainersFromCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Containers From Collections","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetContainersFromCollections","x-vizen-pat-access":"forbidden"}},"/v1/storages/collections/{id}/files":{"get":{"operationId":"Storage_GetFilesFromCollections","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"description":"\"order_index\" | \"name\" | \"created_at\" | \"updated_at\"","in":"query","name":"sort_by","required":false,"type":"string"},{"description":"\"asc\" | \"desc\"","in":"query","name":"sort_order","required":false,"type":"string"},{"description":"включить файлы из всех подпапок (рекурсивно)","in":"query","name":"include_subfolders","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetFilesFromCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Files From Collections","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetFilesFromCollections","x-vizen-pat-access":"forbidden"}},"/v1/storages/containers":{"post":{"operationId":"Storage_CreateContainer","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateContainerRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateContainerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateContainer","x-vizen-pat-access":"forbidden"}},"/v1/storages/containers/{id}":{"delete":{"operationId":"Storage_DeleteContainer","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteContainerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DeleteContainer","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Storage_GetContainer","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetContainerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetContainer","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Storage_EditContainer","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageEditContainerBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditContainerResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/EditContainer","x-vizen-pat-access":"forbidden"}},"/v1/storages/files":{"get":{"operationId":"Storage_GetFiles","parameters":[{"collectionFormat":"multi","in":"query","items":{"type":"string"},"name":"section","required":false,"type":"array"},{"collectionFormat":"multi","in":"query","items":{"type":"string"},"name":"file_type","required":false,"type":"array"},{"format":"int32","in":"query","name":"company_id","required":false,"type":"integer"},{"description":"файлы НЕ привязанные ни к одной коллекции","in":"query","name":"without_collection","required":false,"type":"boolean"},{"description":"\"name\" | \"created_at\" | \"updated_at\" | \"file_size\"","in":"query","name":"sort_by","required":false,"type":"string"},{"description":"\"asc\" | \"desc\"","in":"query","name":"sort_order","required":false,"type":"string"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.\nБ граница выровнена с catalog.PageRequest (lte:100)\nДО массовой пагинации — иначе разнобой закрепился бы в новых ручках.\nРасширение допустимых значений — не ломающее.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"},{"description":"(долг Волны 2): серверный поиск по имени файла (ILIKE-подстрока) —\nфронт-поиск на пагинированных источниках искал только по загруженному.","in":"query","name":"query","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetFilesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Files","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetFiles","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:read"},"post":{"operationId":"Storage_CreateFile","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateFileRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/files/from-url":{"post":{"description":"SSRF-гейт (обязателен, файл качает СЕРВЕР по чужому адресу): только\nhttp/https; приватные/служебные диапазоны запрещены на КАЖДОМ хопе\n(проверка резолвнутого IP в dial-хуке — закрывает и DNS-rebinding),\nне больше 3 редиректов, таймаут 30 с, тело режется лимитом\nAPI_IMG_MAX_UPLOAD_MB. Формат определяется по фактическим байтам\n(image.DecodeConfig), а не по Content-Type ответа.\nСтатический сегмент \"from-url\" объявлен ДО ReplaceFile'овского {id} по\nтому же принципу, что /products/by-slug/{slug}: chi ставит статический\nузел выше параметрического, коллизии нет.","operationId":"Storage_CreateFileFromURL","parameters":[{"description":"п.3: серверная загрузка файла по внешнему URL (импорт каталога).\nsection/file_type — те же значения, что у CreateFile (file_type нормализуется\nиз MIME в категорию); original_name пустой → имя берётся из пути URL.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateFileFromURLRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateFileFromURLResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"ТЗ производительности п.3 — батч-ручка импортёров: ОДИН вызов\nвместо четырёх (CreateFile → PUT presign → DoneFile → GetFile). Сервер сам\nкачает файл по внешнему URL и проходит весь путь загрузки (лимит размера,\nконвертация оригинала в WebP для контент-секций, предгенерация лестницы\nнарезки), в ответе — готовый File с public_path.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateFileFromURL","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/files/{file_id}/collections":{"get":{"operationId":"Storage_GetFileCollections","parameters":[{"in":"path","name":"file_id","required":true,"type":"string"},{"description":"\"folder\" | \"material\"","in":"query","name":"mode","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetFileCollectionsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить коллекции, содержащие файл (обратный поиск)","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetFileCollections","x-vizen-pat-access":"forbidden"}},"/v1/storages/files/{id}":{"delete":{"operationId":"Storage_DeleteFile","parameters":[{"in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DeleteFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"},"get":{"operationId":"Storage_GetFile","parameters":[{"in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить один файл по ID. Отдельный endpoint — list (GetFiles)\nконцептуально другая операция и не принимает id-фильтр.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:read"},"post":{"operationId":"Storage_ReplaceFile","parameters":[{"in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageReplaceFileBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ReplaceFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Замена","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ReplaceFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/files/{id}/done":{"post":{"operationId":"Storage_DoneFile","parameters":[{"in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DoneFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Done File","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DoneFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/files/{id}/rename":{"post":{"operationId":"Storage_RenameFile","parameters":[{"in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageRenameFileBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RenameFileResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Переименование — только обновляет original_name в БД, без MarkPrivate\nи без regen storage_path. Используется когда пользователь хочет изменить\nимя файла, но содержимое остаётся тем же.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/RenameFile","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/materials":{"get":{"operationId":"Storage_ListEntityMaterials","parameters":[{"in":"query","name":"entity_type","required":false,"type":"string"},{"in":"query","name":"entity_id","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListEntityMaterialsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список материалов сущности (живые, по sort_order).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ListEntityMaterials","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:read"},"post":{"operationId":"Storage_CreateEntityMaterial","parameters":[{"description":"Запрос создания материала.","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateEntityMaterialRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateEntityMaterialResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать материал.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateEntityMaterial","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/materials/summary":{"get":{"operationId":"Storage_GetEntityMaterialsSummary","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetEntityMaterialsSummaryResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Счётчики материалов по сущностям (для дерева структуры сайта, М3).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetEntityMaterialsSummary","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:read"}},"/v1/storages/materials/{id}":{"delete":{"operationId":"Storage_DeleteEntityMaterial","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteEntityMaterialResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить материал (soft-delete).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DeleteEntityMaterial","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"},"put":{"operationId":"Storage_EditEntityMaterial","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageEditEntityMaterialBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditEntityMaterialResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать материал (partial-update).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/EditEntityMaterial","x-vizen-pat-access":"allowed","x-vizen-required-scope":"storage:write"}},"/v1/storages/products/{product_id}/publication":{"get":{"operationId":"Storage_GetPublishedScene","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetPublishedSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Публичный просмотр опубликованной сцены. Вьюер живёт на /view/:productId,\nпоэтому лукап по product_id: product(PK) → scene_id → активная публикация.\nЛюбой обрыв цепочки — NotFound-маска (не палим существование чужого).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetPublishedScene","x-vizen-pat-access":"public"}},"/v1/storages/scenes":{"get":{"operationId":"Storage_GetScenes","parameters":[{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.\nБ граница выровнена с catalog.PageRequest (lte:100)\nДО массовой пагинации — иначе разнобой закрепился бы в новых ручках.\nРасширение допустимых значений — не ломающее.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetScenesResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список сцен компании (Publish Platform B+, админ-вкладка «3D-сцены»):\nлёгкие карточки без data, со статусом активной публикации и привязанными\nтоварами. Скоуп = MainCompanyID токена (чужие сцены недоступны).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetScenes","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Storage_CreateScene","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateSceneRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CreateScene","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}":{"delete":{"operationId":"Storage_DeleteScene","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/DeleteScene","x-vizen-pat-access":"forbidden"},"get":{"operationId":"Storage_GetScene","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetScene","x-vizen-pat-access":"forbidden"},"put":{"operationId":"Storage_EditScene","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageEditSceneBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Отредактировать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/EditScene","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/archive":{"get":{"operationId":"Storage_ListSceneArchive","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.\nБ граница выровнена с catalog.PageRequest (lte:100)\nДО массовой пагинации — иначе разнобой закрепился бы в новых ручках.\nРасширение допустимых значений — не ломающее.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListSceneArchiveResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список архивных версий сцены (история сохранений).\nАрхив пополняется автоматически в транзакции PartialUpdateScene.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ListSceneArchive","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/archive/{version}":{"get":{"operationId":"Storage_GetSceneArchive","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"format":"int32","in":"path","name":"version","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetSceneArchiveResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Получить конкретную версию сцены из архива (с полем data).","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/GetSceneArchive","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/copy":{"post":{"operationId":"Storage_CopyScene","parameters":[{"format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageCopySceneBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CopySceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Скопировать","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/CopyScene","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/publication/visibility":{"post":{"operationId":"Storage_SetPublicationVisibility","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageSetPublicationVisibilityBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1SetPublicationVisibilityResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Скрыть/показать активную публикацию без потери версии (Popover v2).\nhidden=true → публичный GET /publication отвечает 404-маской; публикация\nостаётся активной (revoked_at IS NULL), студия видит hidden-статус.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/SetPublicationVisibility","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/publications":{"get":{"operationId":"Storage_ListScenePublications","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListScenePublicationsResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"История публикаций сцены: карточки без artifact, новые сверху, максимум 20.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/ListScenePublications","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/publications/{publication_id}/restore":{"post":{"operationId":"Storage_RestorePublication","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"description":"id публикации-источника из истории (обязана принадлежать сцене {id}).","format":"int64","in":"path","name":"publication_id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageRestorePublicationBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RestorePublicationResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Восстановить публикацию из истории: revoke активной + копия артефакта\nисточника новой активной публикацией (одна транзакция под advisory-lock).\nhidden не наследуется — восстановленная публикация всегда видима.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/RestorePublication","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/publish":{"post":{"operationId":"Storage_PublishScene","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StoragePublishSceneBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1PublishSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Опубликовать сцену: immutable снапшот версии (revoke активной + insert\nв одной транзакции под advisory-lock). Одна активная публикация на сцену.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/PublishScene","x-vizen-pat-access":"forbidden"}},"/v1/storages/scenes/{id}/unpublish":{"post":{"operationId":"Storage_UnpublishScene","parameters":[{"description":"scene_id","format":"int32","in":"path","name":"id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/StorageUnpublishSceneBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1UnpublishSceneResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Снять публикацию (revoke активной без insert). Идемпотентно.","tags":["Storage"],"x-vizen-grpc-method":"/vizenpro.api.storage.v1.Storage/UnpublishScene","x-vizen-pat-access":"forbidden"}},"/v1/storefronts/resolve":{"get":{"operationId":"Org_ResolveStorefront","parameters":[{"in":"query","name":"slug","required":false,"type":"string"},{"in":"query","name":"domain","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ResolveStorefrontResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Не хватает права: `PAT_SCOPE_MISSING` (требуемое право указано в тексте) либо роль не позволяет операцию","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Resolve Storefront","tags":["Org"],"x-vizen-grpc-method":"/vizenpro.api.org.v1.Org/ResolveStorefront","x-vizen-pat-access":"public","x-vizen-required-scope":"catalog:read"}},"/webhooks":{"get":{"operationId":"ApiAccess_ListWebhooks","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1ListWebhooksResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Список вебхуков компании.","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/ListWebhooks","x-vizen-pat-access":"forbidden"},"post":{"operationId":"ApiAccess_CreateWebhook","parameters":[{"description":"CreateWebhookRequest — url http(s) + события (whitelist domain.ValidWebhookEvent).","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CreateWebhookRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1CreateWebhookResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Создать вебхук; secret пуст — генерируется сервером (hex32).","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/CreateWebhook","x-vizen-pat-access":"forbidden"}},"/webhooks/{id}":{"delete":{"operationId":"ApiAccess_DeleteWebhook","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/ApiAccessDeleteWebhookBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1DeleteWebhookResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Удалить вебхук (жёстко; временное отключение — is_active=false).","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/DeleteWebhook","x-vizen-pat-access":"forbidden"},"put":{"operationId":"ApiAccess_EditWebhook","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/ApiAccessEditWebhookBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1EditWebhookResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Частично отредактировать вебхук (events — replace, если присланы).","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/EditWebhook","x-vizen-pat-access":"forbidden"}},"/webhooks/{id}/test":{"post":{"operationId":"ApiAccess_TestWebhook","parameters":[{"format":"int64","in":"path","name":"id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/ApiAccessTestWebhookBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1TestWebhookResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Тест-пинг: синхронная доставка события webhook.test с HMAC-подписью.","tags":["ApiAccess"],"x-vizen-grpc-method":"/vizenpro.api.apiaccess.v1.ApiAccess/TestWebhook","x-vizen-pat-access":"forbidden"}},"/wishlist/items":{"get":{"operationId":"Catalog_GetWishlist","parameters":[{"description":"Номер страницы, отсчет идет с 1.","format":"int64","in":"query","name":"page.number","required":false,"type":"integer"},{"description":"Количество значений на странице. Минимум — 1, максимум — 100.","format":"int64","in":"query","name":"page.limit","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1GetWishlistResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Get Wishlist","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/GetWishlist","x-vizen-pat-access":"forbidden"}},"/wishlist/items/{product_id}":{"delete":{"operationId":"Catalog_RemoveFromWishlist","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogRemoveFromWishlistBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1RemoveFromWishlistResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Remove From Wishlist","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/RemoveFromWishlist","x-vizen-pat-access":"forbidden"},"post":{"operationId":"Catalog_AddToWishlist","parameters":[{"format":"int32","in":"path","name":"product_id","required":true,"type":"integer"},{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/CatalogAddToWishlistBody"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/v1AddToWishlistResponse"}},"400":{"description":"Некорректный запрос или проваленная валидация","schema":{"$ref":"#/definitions/vizenError"}},"401":{"description":"Ключ не предъявлен, неизвестен, отозван или просрочен","schema":{"$ref":"#/definitions/vizenError"}},"403":{"description":"Метод недоступен персональному ключу: `PAT_METHOD_NOT_ALLOWED`. Требуется сессия пользователя","schema":{"$ref":"#/definitions/vizenError"}},"404":{"description":"Объект не найден. Чужой объект отдаётся тем же ответом, что и несуществующий — существование чужих данных не раскрывается","schema":{"$ref":"#/definitions/vizenError"}},"429":{"description":"Превышен лимит запросов. Время ожидания — в теле ответа","schema":{"$ref":"#/definitions/vizenError"}},"500":{"description":"Внутренняя ошибка","schema":{"$ref":"#/definitions/vizenError"}}},"summary":"Add To Wishlist","tags":["Catalog"],"x-vizen-grpc-method":"/vizenpro.api.catalog.v1.Catalog/AddToWishlist","x-vizen-pat-access":"forbidden"}}},"produces":["application/json"],"security":[{"bearerAuth":[]}],"securityDefinitions":{"bearerAuth":{"description":"Персональный ключ магазина: `Bearer vz_pat_…`. Также принимается пользовательский access-токен сессии.","in":"header","name":"Authorization","type":"apiKey"}},"swagger":"2.0","tags":[{"name":"Account"},{"name":"Admin"},{"name":"ApiAccess"},{"name":"Auth"},{"name":"Catalog"},{"name":"DevPublish"},{"name":"Org"},{"name":"Snapshot"},{"name":"Storage"},{"name":"Tariff"}]}