Update Pricing Tier
PUT/api/product-pricing-tiers/:product_pricing_tier
Update an existing product pricing tier. currency_code cannot be changed on update.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Request body fields (all optional on update):
name(string, max:255, unique)pricing_type—absoluteorrelativebase_pricing_tier_id(nullable integer) — required if pricing_type=relativeadjustment_percentage(nullable numeric, -99.9999 to 999.9999) — required if pricing_type=relativeadjustment_fixed_amount(nullable numeric)rounding_value(nullable numeric, gt:0)
Relative tiers (pricing_type=relative) require relative_basis, one of:
pricing_tier— derive from another tier's price. Requiresbase_pricing_tier_id+adjustment_percentage.supplier_pricing_tier— cost-plus from the product's primary supplier cost. Optionalbase_supplier_pricing_tier_id(defaults to the default supplier tier) +adjustment_percentage.attribute— derive from a numeric/integer product attribute:value × attr_rate + attr_offset. Requiresbase_attribute_id+attr_rate(optionalattr_offset).average_cost— cost-plus from the product's average cost: the landed figure SKU.io maintains from received stock, so inbound freight, duty and customs are included once recorded. Requiresadjustment_percentage; no base field. Products with no average cost yet get no price, and a cost that falls to zero (sold out) leaves the last price standing.
rounding_value and adjustment_fixed_amount apply to every basis. Supplier/pricing-tier bases inherit currency from their source, the average-cost basis uses the default currency; attribute basis uses currency_code.
Adjustment mode (adjustment_mode, optional, markup | margin, default markup) — how adjustment_percentage is applied on the percentage bases. markup: price = base × (1 + p%). margin: price = base ÷ (1 − p%), so p% of the sell price is margin over the base (the repricer's target-margin strategy); p must be below 100.
Price bounds (floor_pricing_tier_id, ceiling_pricing_tier_id, optional, relative tiers only) — clamp the computed price to another tier's price for the same product, e.g. never below a Cost tier, never above a MAP tier. Applied after rounding and the fixed amount; if the two cross the ceiling wins. A bound tier may not be this tier or anything that derives from it (circular reference), and a tier used as a bound cannot be deleted while tiers clamp to it. Bound changes re-price the tier, and a price change on a bound tier re-clamps every tier bounded by it.
Requires permission: pricing_tiers.update
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.