Product tariff draft API
The Vendor Console Management API exposes a Product-scoped tariff draft aggregate and strict draft creation. These routes are not part of the public Partner API subset.
Operations
| Method and path | Permissions | Result |
|---|---|---|
GET /api/v1/catalog/products/{productId}/tariff-drafts?offset=0&limit=50 | catalog.read + commerce.read | Tariff series, current Draft state and optional management choices |
POST /api/v1/catalog/products/{productId}/tariff-drafts | catalog.read + commerce.read + commerce.manage + policies.read | Creates a NewTariff or NextVersion Draft |
managementOptions is null unless the reader also has commerce.manage
and policies.read. It is a UI hint; POST revalidates every permission and
owner source.
Creation rules
POST requires one printable ASCII Idempotency-Key of 1–128 characters and a
strict JSON discriminator creationMode with exact value NewTariff or
NextVersion. Unknown or duplicate members are rejected.
Tenant and actor come from the authenticated context. Product comes only from the path. The body never accepts Tenant, Product or a canonical technical package reference as authority. Policy id/hash and latest-version fields are stale assertions that the service revalidates against current owner data.
The first success returns 201; an exact durable replay returns the same safe
receipt with 200 and isIdempotentReplay: true. A reused key with changed
content returns 409 commerce.tariff_idempotency_conflict.
Safe failures
The route uses the stable commerce.tariff_* family: invalid request (400),
source not found (404), invalid state, stale data, idempotency conflict or
contradictory owner evidence (409), and dependency unavailable (503). No
partial aggregate or foreign-owner details are returned.
The authoritative wire schemas are in the repository's committed Management OpenAPI document; the full Management artifact is not published as a public Partner API download.