Skip to main content

Product tariff publish and history API

The Vendor Console Management API exposes immutable version history for one Product tariff series and an explicit Draft publication action. These routes are not part of the public Partner API subset.

Operations

Method and pathPermissionsResult
GET /api/v1/catalog/products/{productId}/tariffs/{vendorOfferId}/versions?offset=0&limit=50catalog.read + commerce.readOrdered immutable version history
POST /api/v1/catalog/products/{productId}/tariffs/{vendorOfferId}/versions/{offerVersionId}/publishcatalog.read + commerce.read + commerce.manage + policies.readPublishes the exact eligible Draft

History contains safe commercial fields, lifecycle timestamps, a current Policy display label and an explicit technical-package resolution status. It never returns Tenant ids, PriceBook ids, provider price ids, canonical package references, hashes or internal codes.

Readers without both optional commerce.manage and policies.read permissions receive publishAction: null. With both permissions, every row reports a safe publishAction.blockingReason; only the single eligible Draft can report Ready and allowed: true. An unavailable historical Policy remains visible with no label and TechnicalPackageUnresolved completeness.

Console journey

In Product → Tariffs, the tariff name opens its immutable version history. The localized table shows version/lifecycle, price, current Policy label, effective window, completeness and publication readiness without rendering raw owner ids, package references or hashes. Read-only history has no publish control; blocked rows display the server reason without becoming actionable.

Only a Ready Draft opens confirmation with safe repeated evidence. One confirmation creates one immutable attempt. Dependency retry preserves the exact path, body and idempotency key; stale data closes confirmation, reloads history and requires a new confirmation. Success and exact replay both reload history and the Product tariff aggregate.

Publication rules

POST accepts exactly { "expectedRevision": positive-safe-integer }, one printable ASCII Idempotency-Key of 1–128 characters, and JSON content type. Unknown, duplicate or authority-bearing members are rejected before owner calls. Tenant comes from the authenticated context; Product, tariff and version come only from the canonical path.

A durable exact replay is resolved before mutable Product and Policy checks. For a new attempt the service validates an Active Product, fresh VCM history, the exact Draft revision and its pinned exportable Policy package before VCM commits publication. Success and replay both return a safe Published receipt; replay has isIdempotentReplay: true.

Safe failures

The routes use stable commerce.tariff_* errors: invalid request (400), source not found (404), invalid state, stale data, idempotency conflict or invalid source evidence (409), and dependency unavailable (503). Required owner failure returns no partial history.

Authoritative wire schemas are in the committed Management OpenAPI document; the full Management artifact is not published as a public Partner download.