Skip to main content

Update Sku

POST 

/api/skus/updatesku

Tier: Public — stable, supported for third-party integration.

Applies a full-replace update to a SKU. When the update requires it, item-level fields derived from the SKU (name, encoding, template-driven extended properties) are synchronously cascaded to every item of the SKU.

Field semantics are full-replace: this endpoint uses the same validation rules as SkuController.AddSku(...) (required fields, encoding-prefix rules, uniqueness, extended properties, price bounds, dim resolution). Reference-data dim fields and the three price fields (RetailPrice, SalePrice, MemberPrice) are assigned directly from the request — sending a field as null clears the stored value rather than leaving it unchanged, so callers should resend the SKU's current values for any field they do not intend to change.

Supplying a new InnerSku where none exists creates one, but the fields copied from UpdateSkuDto onto the new inner SKU are limited to the legacy field set (name, encoding, quantity, bounds, extended properties, etc.) — ExternalRef, UnitCost, IsSkuLevelCost, and the Phase 1 dim/Gender/lifecycle/price fields are not carried over to the new inner SKU.

LifecycleState, when supplied, requests a lifecycle transition via the same state machine described on Enums.SkuLifecycleState (non-admin — Discontinued → Draft is not reachable from this endpoint; use SkuController.RelaunchSku(...)). Transitions not allowed by the state machine are rejected and the stored lifecycle state is left unchanged; other field changes in the same request still commit. A rejected transition returns HTTP 200 with no error indicator (verified live 2026-07-03) — to detect rejection, compare the LifecycleState in the returned DTO against the value you submitted. The same applies to price edits submitted against a Discontinued SKU: the entity reverts the price values, while other field changes commit.

A price change (when it commits) advances PriceEffectiveFrom to the current time and appends a row to the SKU's price history (see SkuController.GetSkuPriceHistory(...)); an audit-write failure does not roll back the price change.

Request

Responses

Returns the updated Skus.SkuDetailDto.