Перейти к основному содержимому

API публикации и истории тарифов продукта

Management API консоли вендора предоставляет неизменяемую историю версий одной серии тарифа Product и явную публикацию Draft. Эти маршруты не входят в публичное подмножество Partner API.

Операции

Метод и путьПраваРезультат
GET /api/v1/catalog/products/{productId}/tariffs/{vendorOfferId}/versions?offset=0&limit=50catalog.read + commerce.readУпорядоченная неизменяемая история версий
POST /api/v1/catalog/products/{productId}/tariffs/{vendorOfferId}/versions/{offerVersionId}/publishcatalog.read + commerce.read + commerce.manage + policies.readПубликация точного допустимого Draft

История содержит безопасные коммерческие поля, lifecycle timestamps, актуальную отображаемую метку Policy и явный статус разрешения technical package. Она не возвращает Tenant id, PriceBook id, provider price id, канонические package references, хеши и внутренние коды.

Читатель без одновременных дополнительных прав commerce.manage и policies.read получает publishAction: null. При наличии обоих прав каждая строка содержит безопасный publishAction.blockingReason; только единственный допустимый Draft может вернуть Ready и allowed: true. Недоступная историческая Policy остаётся видимой без метки и с completeness TechnicalPackageUnresolved.

Сценарий в Console

В Product → «Тарифы» название тарифа открывает его неизменяемую историю версий. Локализованная таблица показывает версию и lifecycle, цену, актуальную метку Policy, период действия, полноту и готовность к публикации без отображения raw owner id, package reference и hash. В read-only истории нет кнопки публикации; заблокированные строки показывают серверную причину, но не становятся доступными для действия.

Только Draft со статусом Ready открывает подтверждение с повтором безопасных данных. Одно подтверждение создаёт одну неизменяемую попытку. При сбое зависимости повтор сохраняет точные path, body и idempotency key; stale-данные закрывают подтверждение, обновляют историю и требуют нового подтверждения. Успех и exact replay обновляют историю и агрегат тарифов Product.

Правила публикации

POST принимает ровно { "expectedRevision": positive-safe-integer }, один печатный ASCII Idempotency-Key длиной 1–128 символов и JSON content type. Неизвестные, повторяющиеся и authority-поля отклоняются до owner-вызовов. Tenant берётся из аутентифицированного контекста, Product, тариф и версия — только из канонического пути.

Durable exact replay разрешается до проверок изменяемого Product и Policy. Для новой попытки сервис проверяет Active Product, свежую историю VCM, точную ревизию Draft и закреплённый экспортируемый Policy package до фиксации публикации в VCM. Успех и replay возвращают безопасную квитанцию Published; у replay указано isIdempotentReplay: true.

Безопасные ошибки

Маршруты используют стабильные ошибки commerce.tariff_*: неверный запрос (400), источник не найден (404), неверное состояние, stale-данные, конфликт идемпотентности или неверные owner-evidence (409), недоступная зависимость (503). Сбой обязательного владельца не возвращает частичную историю.

Авторитетные wire-схемы находятся в committed Management OpenAPI; полный Management artifact не публикуется как общедоступная загрузка Partner API.