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
- 200
- 400
- 401
- 403
Returns the updated Skus.SkuDetailDto.
Validation failed, or Id does not match an existing SKU (error array).
The caller is not authenticated.
The caller lacks Sku Update permission.