Manage purchasable offer

Learn how to update an Amazon purchasable offer for a given selling partner and Amazon marketplace using the Listings Items API.

This tutorial guides you through granularly updating and deleting sub-attributes of the purchasable_offer attribute using the Listings Items API. Learn how to modify individual offer properties, such as prices, dates, and pricing plans without deleting and recreating the entire offer.

Prerequisites

To complete this tutorial, you need:

  • Authorization from the selling partner for whom you are making calls. Refer to Authorizing Selling Partner API Applications for more information.
  • Approval for the Product Listing role in your developer profile.
  • The Product Listing role selected in the App registration page for your application.
  • For attribute updates, JSON-based listing attribute payloads adhering to the JSON Schema provided by the Selling Partner API for Product Type Definitions for the given selling partner, Amazon marketplace, Amazon product type, and attributes.
  • For attribute deletes, JSON-based listing attribute payloads adhering to the JSON Schema provided by the Selling Partner API for Product Type Definitions for the given selling partner, Amazon marketplace, Amazon product type, and attributes with the selector properties of the attributes to delete. You cannot delete attributes by name alone. Use selector values to identify which attribute instance to delete.

Purchasable Offer

The purchasable_offer attribute defines the complete pricing and offer configuration for a product listing on Amazon. It is structured as an array of offer objects, with each offer uniquely identified by marketplace_id, currency, and audience.

Sub-attributeDescriptionTypeUpdatableDeletable
currencyCurrency code for the offer (selector).stringNoNo
marketplace_idThe Amazon marketplace where the offer is active (selector).stringNoNo
audienceBuyer segment the offer targets, default: ALL (selector).stringNoNo
our_priceBase selling price.arrayYesNo
start_atOffering release date.objectYesYes
end_atStop selling date. Set to a past date to soft-close the offer.objectYesYes
map_priceMinimum advertised price.arrayYesYes
discounted_priceTemporary sale price with start_at and end_at dates.arrayYesYes
minimum_seller_allowed_pricePrice floor to prevent selling below a threshold.arrayYesYes
maximum_seller_allowed_pricePrice ceiling to prevent selling above a threshold.arrayYesYes
maximum_retail_pricePrice ceiling to prevent selling above a threshold. [Only available in the IN marketplace]arrayYesYes
quantity_discount_planQuantity-based discount configuration. [Only available for Amazon Business offers]arrayYesYes
automated_pricing_merchandising_rule_planAutomated pricing rule configuration.arrayYesYes

Use the patchListingsItem operation for all granular updates.

Important

The API derives selectors from the marketplace in the request. For better control, include the selector properties (currency, marketplace_id, and audience) within the payload to identify which offer instance to modify.

Supported operations for purchasable_offer

OperationWhat it doesUse case
op: "replace"Replaces the sub-attributes you include, but does NOT delete what you omit.Setting or updating prices.
op: "merge"Surgically updates OR deletes individual sub-attributes (set to null to delete).Updating a single sub-attribute or removing optional sub-attributes like discounted_price, map_price, start_at, end_at.
op: "delete"Cannot target sub-attributes within purchasable_offer.Do not use for sub-attribute removal.

📘

Note

This guide uses op: "merge" for all examples. While replace works similarly for updates, consider using merge because it also supports deletion (using null) and behaves consistently with other structured attributes like fulfillment_availability.

Update a sub-attribute

To granularly update a sub-attribute, use op: "merge" and include only the sub-attribute you want to change.

Updatable sub-attributes and example values

Sub-attributeExample value
our_price[{"schedule": [{"value_with_tax": 7.0}]}]
start_at{"value": "2026-03-01"}
end_at{"value": "2025-01-01"} (past date to soft-close) or {"value": "2027-12-31"} (future date)
map_price[{"schedule": [{"value_with_tax": 10.0}]}]
discounted_price[{"schedule": [{"start_at": "2026-01-01", "end_at": "2026-05-30", "value_with_tax": 5.0}]}]
minimum_seller_allowed_price[{"schedule": [{"value_with_tax": 3.0}]}]
maximum_seller_allowed_price[{"schedule": [{"value_with_tax": 50.0}]}]
maximum_retail_price[{"schedule": [{"value_with_tax": 100.0}]}] (IN marketplace only)
quantity_discount_planRefer to the product type definition schema for structure
automated_pricing_merchandising_rule_planRefer to the product type definition schema for structure

Replace <sub_attribute> and <value> with values from the table:

{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "merge",
            "path": "/attributes/purchasable_offer",
            "value": [
                {
                    "currency": "USD",
                    "audience": "ALL",
                    "marketplace_id": "ATVPDKIKX0DER",
                    "<sub_attribute>": <value>
                }
            ]
        }
    ]
}

For example, to update the start_at date:

{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "merge",
            "path": "/attributes/purchasable_offer",
            "value": [
                {
                    "currency": "USD",
                    "audience": "ALL",
                    "marketplace_id": "ATVPDKIKX0DER",
                    "start_at": {"value": "2026-03-01"}
                }
            ]
        }
    ]
}

Delete an optional sub-attribute

To granularly delete an optional sub-attribute, use op: "merge" and set the sub-attribute to null. You can delete the following sub-attributes:

  • map_price
  • discounted_price
  • minimum_seller_allowed_price
  • maximum_seller_allowed_price
  • maximum_retail_price
  • quantity_discount_plan
  • automated_pricing_merchandising_rule_plan
  • start_at
  • end_at

Replace <sub_attribute> with the sub-attribute to delete:

{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "merge",
            "path": "/attributes/purchasable_offer",
            "value": [
                {
                    "currency": "USD",
                    "audience": "ALL",
                    "marketplace_id": "ATVPDKIKX0DER",
                    "<sub_attribute>": null
                }
            ]
        }
    ]
}

For example, to delete the discounted_price:

{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "merge",
            "path": "/attributes/purchasable_offer",
            "value": [
                {
                    "currency": "USD",
                    "audience": "ALL",
                    "marketplace_id": "ATVPDKIKX0DER",
                    "discounted_price": null
                }
            ]
        }
    ]
}

To remove a B2B offer sub-attribute (e.g., quantity_discount_plan for the B2B audience), set it to null and specify the B2B audience selector:

{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "merge",
            "path": "/attributes/purchasable_offer",
            "value": [
                {
                    "currency": "USD",
                    "audience": "B2B",
                    "marketplace_id": "ATVPDKIKX0DER",
                    "quantity_discount_plan": null
                }
            ]
        }
    ]
}

Important

The our_price sub-attribute cannot be deleted (set to null). To remove an offer entirely, use the delete operation instead of merge.