API черновиков тарифов продукта
Management API консоли вендора предоставляет агрегат черновиков тарифов в контексте Product и строгое создание черновика. Эти маршруты не входят в публичное подмножество Partner API.
Операции
| Метод и путь | Права | Результат |
|---|---|---|
GET /api/v1/catalog/products/{productId}/tariff-drafts?offset=0&limit=50 | catalog.read + commerce.read | Серии тарифов, состояние текущего Draft и необязательные варианты управления |
POST /api/v1/catalog/products/{productId}/tariff-drafts | catalog.read + commerce.read + commerce.manage + policies.read | Создание Draft в режиме NewTariff или NextVersion |
managementOptions равен null, если у читателя нет одновременно
commerce.manage и policies.read. Это только подсказка для UI: POST повторно
проверяет все права и источники-владельцы.
Правила создания
POST требует один печатный ASCII-заголовок Idempotency-Key длиной 1–128
символов и строгий JSON-дискриминатор creationMode с точным значением
NewTariff или NextVersion. Неизвестные и повторяющиеся поля отклоняются.
Tenant и actor берутся из аутентифицированного контекста, Product — только из пути. Тело не принимает Tenant, Product или каноническую ссылку technical package как источник истины. Policy id/hash и поля последней версии являются stale-утверждениями и сверяются с актуальными данными владельцев.
Первый успех возвращает 201; точный durable replay возвращает ту же безопасную
квитанцию с 200 и isIdempotentReplay: true. Повтор ключа с изменённым
содержимым даёт 409 commerce.tariff_idempotency_conflict.
Безопасные ошибки
Маршрут использует стабильное семейство commerce.tariff_*: неверный запрос
(400), источник не найден (404), неверное состояние, stale-данные, конфликт
идемпотентности или противоречивые данные владельца (409), недоступность
зависимости (503). Частичный агрегат и сведения о чужом владельце не выдаются.
Авторитетные wire-схемы находятся в зафиксированном Management OpenAPI документе репозитория; полный Management artifact не публикуется как общедоступная загрузка Partner API.