Skip to main content

Update Product Listing

PUT 

/api/v2/product-listings/:productListing

Updates a product listing. If master_of_price or product_pricing_tier_id change, the price is pushed to the sales channel.

Required scope: products:write

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

master_of_price / master_of_stock accept sku.io, sales_channel, or neither (null inherits). The effective master_of_stock is driven by inventory_rules.masterOfStock.

Authentication: Requires Bearer token.

FBM Backup Mode (Amazon MFN listings only): send inventory_rules.fbmBackup = { inherit: bool, enabled: bool, fbaThreshold: int>=0, scope: "same_country"|"all_marketplaces" }. inherit:true (or omitting fbmBackup) inherits the Amazon integration default; inherit:false is a per-listing override. The response fbm_backup carries the EFFECTIVE config, inherited (bool), the integration_default, and (when effectively enabled) the live gate status. Enabling an override on a non-Amazon or FBA listing returns 422. fbm_backup is null only for non-Amazon-MFN listings.

Inventory modification rules: send inventory_rules.inventoryModificationRules = { maxRuleType: string, maxRuleTypeValue: numeric|null, minRuleType: string, minRuleTypeValue: numeric|null, subtractBufferStock: numeric|null }. All value fields are nullable; subtractBufferStock subtracts a buffer from the quantity pushed to the channel (null/0 = no buffer).

Pricing sync profile: send pricing_sync_profile_id (integer|null) to give the listing its own outbound price-push profile, or null to clear it so the listing falls back to its product's profile, then the channel default. A change re-prices this listing immediately. This never changes master_of_price — the master decides WHETHER a listing pushes, the profile decides WHAT is sent. Assigning an ARCHIVED profile is refused with 422 on pricing_sync_profile_id (re-sending the profile the listing already carries is tolerated, so a listing whose profile was archived after assignment still saves).

Pricing sync profile: the response carries pricing_sync_profile — the profile that governs this listing's outbound price push, as {id, name, source, is_archived} where source is listing (the listing's own), product (inherited from the product) or channel (the channel default); null when the channel pushes with its inline settings. pricing_sync_profile_override_id is the listing's OWN profile (null while it inherits), and product_pricing_sync_profile / channel_pricing_sync_profile ({id, name} or null) are the two levels it falls back to.

Shared FBA pools: Amazon holds fulfillable units against the FNSKU, not the merchant SKU, so several fba_listings entries can point at ONE physical stack of units — they share an integration_instance_id, country_code and fnsku, and each is reported with that stack's full available. fba_available_total counts such a group once, which is why the entries can add up to more than the total.

Requires permission: listings.update

Request​

Responses​

OK