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-attribute | Description | Type | Updatable | Deletable |
|---|---|---|---|---|
currency | Currency code for the offer (selector). | string | No | No |
marketplace_id | The Amazon marketplace where the offer is active (selector). | string | No | No |
audience | Buyer segment the offer targets, default: ALL (selector). | string | No | No |
our_price | Base selling price. | array | Yes | No |
start_at | Offering release date. | object | Yes | Yes |
end_at | Stop selling date. Set to a past date to soft-close the offer. | object | Yes | Yes |
map_price | Minimum advertised price. | array | Yes | Yes |
discounted_price | Temporary sale price with start_at and end_at dates. | array | Yes | Yes |
minimum_seller_allowed_price | Price floor to prevent selling below a threshold. | array | Yes | Yes |
maximum_seller_allowed_price | Price ceiling to prevent selling above a threshold. | array | Yes | Yes |
maximum_retail_price | Price ceiling to prevent selling above a threshold. [Only available in the IN marketplace] | array | Yes | Yes |
quantity_discount_plan | Quantity-based discount configuration. [Only available for Amazon Business offers] | array | Yes | Yes |
automated_pricing_merchandising_rule_plan | Automated pricing rule configuration. | array | Yes | Yes |
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, andaudience) within the payload to identify which offer instance to modify.
Supported operations for purchasable_offer
purchasable_offer| Operation | What it does | Use 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. Whilereplaceworks similarly for updates, consider usingmergebecause it also supports deletion (usingnull) and behaves consistently with other structured attributes likefulfillment_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-attribute | Example 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_plan | Refer to the product type definition schema for structure |
automated_pricing_merchandising_rule_plan | Refer 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_pricediscounted_priceminimum_seller_allowed_pricemaximum_seller_allowed_pricemaximum_retail_pricequantity_discount_planautomated_pricing_merchandising_rule_planstart_atend_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_pricesub-attribute cannot be deleted (set tonull). To remove an offer entirely, use thedeleteoperation instead ofmerge.
Updated about 4 hours ago
