Update Price Push Settings
PATCH/api/v2/sales-channels/:integrationInstance/prices/settings
Update the push cadence and price guardrails for an integration instance. Amazon instances may also set automated_pricing_rule_id (nullable string, e.g. 328182282407-COMPETITIVE_BUYBOX): every pushed offer is then attached to that Seller Central Automate Pricing rule, and the resolved floor/ceiling for each listing is published as minimum_seller_allowed_price / maximum_seller_allowed_price so Amazon's repricer moves the price only between SKU.io's guardrails. Rules are created in Seller Central; SP-API can only attach a SKU to an existing one. Other channels ignore the field.
integrations:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Guardrails are applied to every price immediately before it is sent, on every path — scheduled, manual and repricing-driven.
Authentication: Requires Bearer token.
Fields:
- cadence_minutes (required, integer): how often the scheduled push runs. One of 15, 30, 60, 180, 360, 720, 1440.
- floor_type (required, string): none, amount or margin_pct.
- floor_value (required unless floor_type is none, number): the floor amount, or the minimum margin percentage.
- ceiling_type (required, string): none, amount or markup_pct.
- ceiling_value (required unless ceiling_type is none, number): the ceiling amount, or the maximum markup percentage.
- max_delta_pct (optional, number, 0-1000): refuse a price that moves more than this percentage from the last value sent. Omit or null to disable.
- max_delta_action (required, string): skip to refuse only that listing, or block_run to stop the whole run before anything is sent.
- require_dry_run_first (optional, boolean): require a preview before the first live push.
A margin floor cannot be verified without a landed cost, and a listing with no cost is blocked rather than sent. A margin floor of 100% or more is rejected as unsatisfiable.
Requires the integrations.update permission.
Pricing-level bounds. floor_type / ceiling_type also accept tier, which reads the bound from the product's price in the pricing level named by floor_tier_id / ceiling_tier_id (MAP and MSRP are the usual cases). A product with no price in that level simply has NO bound — it is not blocked, unlike a margin_pct rule on a product with no landed cost.
floor_action / ceiling_action choose what happens when a price violates the bound: adjust moves the price to the bound and transmits it, block refuses the listing. Omit them (or send null) to get the type's default — adjust for tier, block for amount and the percentage types. An adjusted price is reported as a pushed line whose detail names the bound that moved it, and the maximum-change limit is measured on the ADJUSTED figure.
Which price to send (the sequence). pricing_tier_ids is an ordered list of pricing level IDs, highest priority first. For each product the first level in the list that holds a price for it supplies the price sent; a product with no price at that level falls through to the next. A product no level prices is reported as not_priced and nothing is sent for it.
Ordering is by position only — it is never re-ordered by value, so a level cannot be skipped for being cheaper or dearer than another. Use floor_tier_id / ceiling_tier_id above for value-based limits such as MAP.
- pricing_tier_ids (optional, array of integers, max 5): the ordered sequence. Each ID must exist and be distinct. Omit the key entirely to leave the saved sequence untouched — this endpoint is also the guardrails save, so an omitted key must not wipe a sequence. Send
[]to clear it and fall back to the channel's single pricing level. - A calculated level (one derived from another) prices every product it can compute, so any level after it is unreachable; the save still succeeds, and the coverage endpoint reports which steps have become unreachable.
Fulfillment-channel lanes. fulfillment_pricing_tier_ids (optional, object) gives one fulfillment channel its own sequence, keyed by lane: {"MFN": [6]}. Each lane is an ordered list of up to 5 distinct pricing level IDs, checked before the channel sequence for the listings in that lane and falling through to pricing_tier_ids when no lane level prices the product. Only the lanes the channel supports are accepted — Amazon supports MFN (merchant-fulfilled listings; FBA listings always use the channel sequence) — and the supported lanes are listed by Get Price Sync Status. Send an empty array for a lane to remove it. Omit the key entirely to leave the saved lanes untouched. Every level across the channel sequence and every lane must share one currency.
Returns 422 for a lane the channel does not support, a level repeated within a lane, or a mix of currencies across the sequence and its lanes.
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.
Unprocessable Entity
Response Headers
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.