Marketplaces / Amazon SP API - Technical Scope / Amazon SP API Product Management / Amazon SP API Price

Amazon SP API Price

Version Date Created / Updated Notes
v1.0 11.05.2022 Bogomil Pavlov First publish
v1.1 20.06.2023 Bogomil Pavlov Introduce Suffix/Prefix Update
v1.2 16.08.2023 Bogomil Pavlov RRP logic rework

Pricing Feed

We will use the Pricing feed to manage prices on Amazon. The xml structure and flows are described here but the actual feed flow and response reader is available here - Amazon SP-API Orders and Products Feeds Flow

API Call: POST_PRODUCT_PRICING_DATA

API Docs: selling-partner-api-docs/feedtype-values.md at main · amzn/selling-partner-api-docs · GitHub

XSD Schema:

<?xml version="1.0"?>
<!-- Revision="$Revision: #3 $" -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!--
    $Date: 2006/11/17 $

    AMAZON.COM CONFIDENTIAL.  This document and the information contained in it are
    confidential and proprietary information of Amazon.com and may not be reproduced,
    distributed or used, in whole or in part, for any purpose other than as necessary
    to list products for sale on the www.amazon.com web site pursuant to an agreement
    with Amazon.com.
    -->
    <xsd:include schemaLocation="amzn-base.xsd"/>
    <xsd:element name="Price">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="SKU"/>
                <xsd:element name="StandardPrice" type="OverrideCurrencyAmount" minOccurs="0"/>
                <!--StandardPricePoints attribute will be deprecated on 11/01/2021-->
                <xsd:element name="StandardPricePoints" type="xsd:integer" minOccurs="0"/>
                <xsd:element name="BusinessPrice" type="BasePriceCurrencyAmount" minOccurs="0"/>
                <xsd:element name="QuantityPriceType" type="QuantityPriceTypes" minOccurs="0"/>
                <xsd:element name="QuantityPrice" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="QuantityPrice1" type="BasePriceCurrencyAmount" minOccurs="0"/>
                            <xsd:element name="QuantityLowerBound1" type="PositiveInteger" minOccurs="0"/>
                            <xsd:element name="QuantityPrice2" type="BasePriceCurrencyAmount" minOccurs="0"/>
                            <xsd:element name="QuantityLowerBound2" type="PositiveInteger" minOccurs="0"/>
                            <xsd:element name="QuantityPrice3" type="BasePriceCurrencyAmount" minOccurs="0"/>
                            <xsd:element name="QuantityLowerBound3" type="PositiveInteger" minOccurs="0"/>
                            <xsd:element name="QuantityPrice4" type="BasePriceCurrencyAmount" minOccurs="0"/>
                            <xsd:element name="QuantityLowerBound4" type="PositiveInteger" minOccurs="0"/>
                            <xsd:element name="QuantityPrice5" type="BasePriceCurrencyAmount" minOccurs="0"/>
                            <xsd:element name="QuantityLowerBound5" type="PositiveInteger" minOccurs="0"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="MinimumSellerAllowedPrice" type="StringOverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="MaximumSellerAllowedPrice" type="StringOverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="MAP" type="OverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="DepositAmount" type="CurrencyAmountWithDefault" minOccurs="0"/>
                <xsd:element name="Sale" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="SalePrice" type="OverrideCurrencyAmount"/>
                            <!--SalePricePoints attribute will be deprecated on 11/01/2021-->
                            <xsd:element name="SalePricePoints" type="xsd:integer" minOccurs="0"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="CompareAt" type="DatedCompareAtPrice" minOccurs="0"/>
                <xsd:element name="Previous" type="DatedPrice" minOccurs="0"/>
                <xsd:element name="Rental_0" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_1" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_2" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_3" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_4" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_5" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_6" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_7" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_8" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Rental_9" minOccurs="0">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StartDate" type="xsd:dateTime"/>
                            <xsd:element name="EndDate" type="xsd:dateTime"/>
                            <xsd:element name="RentalPrice" type="OverrideCurrencyAmountWithTax"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="CostPerClickBidPrice" type="OverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="PricingAction" type="PricingActionValues" minOccurs="0"/>
                <xsd:element name="MetalStandardPrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="DiamondStandardPrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="GemstoneStandardPrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="MakingChargesStandardPrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="TaxStandardPrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="MetalSalePrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="DiamondSalePrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="GemstoneSalePrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="MakingChargesSalePrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="TaxSalePrice" type="StringNotNull" minOccurs="0"/>
                <xsd:element name="MaximumRetailPrice" type="OverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="IsSourcingOnDemand" type="IsSourcingOnDemandValues" minOccurs="0"/>
                <xsd:element name="PricingStrategy" type="PricingStrategyValues" minOccurs="0"/>
                <xsd:element name="MinimumOrderAmount" type="xsd:decimal" minOccurs="0"/>
                <xsd:element name="MaximumOrderAmount" type="xsd:decimal" minOccurs="0"/>
                <xsd:element name="OrderIncrement" type="xsd:decimal" minOccurs="0"/>
                <xsd:element name="MSRPWithTax" type="OverrideCurrencyAmount" minOccurs="0"/>
                <xsd:element name="StandardPricePointsPercent" type="xsd:integer" minOccurs="0"/>
                <xsd:element name="SalePricePointsPercent" type="xsd:integer" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:simpleType name="BaseCurrencyCodeWithDefault">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="USD"/>
            <xsd:enumeration value="GBP"/>
            <xsd:enumeration value="EUR"/>
            <xsd:enumeration value="JPY"/>
            <xsd:enumeration value="CAD"/>
            <xsd:enumeration value="CNY"/>
            <xsd:enumeration value="INR"/>
            <xsd:enumeration value="AUD"/>
            <xsd:enumeration value="BRL"/>
            <xsd:enumeration value="MXN"/>
            <xsd:enumeration value="TRY"/>
            <xsd:enumeration value="DEFAULT"/>
            <xsd:enumeration value="AED"/>
            <xsd:enumeration value="SAR"/>
            <xsd:enumeration value="SGD"/>
            <xsd:enumeration value="SEK"/>
            <xsd:enumeration value="PLN"/>
            <xsd:enumeration value="EGP"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="CurrencyAmountWithDefault">
        <xsd:simpleContent>
            <xsd:extension base="BasePriceCurrencyAmount">
                <xsd:attribute name="currency" type="BaseCurrencyCodeWithDefault" use="required"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
    <xsd:complexType name="StringCurrencyAmountWithDefault">
        <xsd:simpleContent>
            <xsd:extension base="StringBasePriceCurrencyAmount">
                <xsd:attribute name="currency" type="BaseCurrencyCodeWithDefault" use="required"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
    <xsd:complexType name="OverrideCurrencyAmount">
        <xsd:simpleContent>
            <xsd:extension base="CurrencyAmountWithDefault">
                <xsd:attribute name="zero" type="xsd:boolean" use="optional"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="StringOverrideCurrencyAmount">
        <xsd:simpleContent>
            <xsd:extension base="StringCurrencyAmountWithDefault">
                <xsd:attribute name="zero" type="xsd:boolean" use="optional"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
        <xsd:complexType name="OverrideCurrencyAmountWithTax">
        <xsd:simpleContent>
            <xsd:extension base="OverrideCurrencyAmount">
                <xsd:attribute name="valueWithoutTax" type="BasePriceCurrencyAmount" use="optional"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
    <xsd:simpleType name="QuantityPriceTypes">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="fixed"/>
            <xsd:enumeration value="percent"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="PricingActionValues">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="delete business_price"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

Mapping request:

Integration Field Integration Notes Integration required Hemi Mapping Hemi Notes
Price
SKU Yes Product Details> SKU (v1.1)Based on the setup in Account Amazon > Suffix/Prefix Value we want to add the suffix/prefix when we are sending updates to Amazon in the SKU.
StandardPrice Yes Product Accounts > Price

OR Product Accounts > RRP | <v1.2> If RRP <= Price we push Product Account > Price If RRP > Price we push Product Account > RRP </1.2> We also need to pick the currency from Account > Exchange Rate Calculator Currency and use it as attribute - currency="EUR" e.g - <StandardPrice currency="EUR"><![CDATA[26.99]]></StandardPrice> | | | | StandardPricePoints | | | No | N/A | | | | | BusinessPrice | | | No | N/A | | | | | QuantityPriceType | | | No | N/A | | | | | QuantityPrice | | | No | N/A | | | | | | QuantityPrice1 | BasePriceCurrencyAmount | No | N/A | | | | | | QuantityLowerBound1 | PositiveInteger | No | N/A | | | | | | QuantityPrice2 | BasePriceCurrencyAmount | No | N/A | | | | | | QuantityLowerBound2 | PositiveInteger | No | N/A | | | | | | QuantityPrice3 | BasePriceCurrencyAmount | No | N/A | | | | | | QuantityLowerBound3 | PositiveInteger | No | N/A | | | | | | QuantityPrice4 | BasePriceCurrencyAmount | No | N/A | | | | | | QuantityLowerBound4 | PositiveInteger | No | N/A | | | | | | QuantityPrice5 | BasePriceCurrencyAmount | No | N/A | | | | | | QuantityLowerBound5 | PositiveInteger | No | N/A | | | | | MinimumSellerAllowedPrice | | StringOverrideCurrencyAmount | No | N/A | | | | | MaximumSellerAllowedPrice | | StringOverrideCurrencyAmount | No | N/A | | | | | MAP | | OverrideCurrencyAmount | No | N/A | | | | | DepositAmount | | CurrencyAmountWithDefault | No | N/A | | | | | Sale | | | No | | | | | | | StartDate | | No | “CURTIME - 10 min” e.g. - 2022-09-10T14:25:58Z | If RRP is provided and RRP > Start Price we hardcode the dates until when the sale is active. | | | | | EndDate | | No | “CURTIME + 1 years“ e.g. - 2022-09-10T14:25:58Z | If RRP is provided and RRP > Start Price we hardcode the dates until when the sale is active. | | | | | SalePrice | OverrideCurrencyAmount | No | Product Accounts > Price | <v1.2>If RRP > Price we want to push this field as Product Account > Price </v1.2> This is required only RRP is provided otherwise we do not include it in the payload

If RRP is provided and RRP > Start Price in Hemi we should push the SalePrice as Product Accounts > Price

We also need to pick the currency from Account > Exchange Rate Calculator Currency and use it as attribute - currency="EUR" e.g - <StandardPrice currency="EUR"><![CDATA[26.99]]></StandardPrice> | | | | | SalePricePoints | | No | N/A | | | | | CompareAt | | DatedCompareAtPrice | No | N/A | | | | | Previous | | DatedPrice | No | N/A | | | | | Rental_0 | | | No | N/A | | | | | | StartDate | | No | N/A | | | | | | EndDate | | No | N/A | | | | | | RentalPrice | | No | N/A | | | | | Rental_1 | | | No | N/A | | | | | | StartDate | | No | N/A | | | | | | EndDate | | No | N/A | | | | | | RentalPrice | | No | N/A | | | | | CostPerClickBidPrice | | | No | N/A | | | | | PricingAction | | | No | N/A | | | | | MetalStandardPrice | | | No | N/A | | | | | DiamondStandardPrice | | | No | N/A | | | | | GemstoneStandardPrice | | | No | N/A | | | | | MakingChargesStandardPrice | | | No | N/A | | | | | TaxStandardPrice | | | No | N/A | | | | | MetalSalePrice | | | No | N/A | | | | | DiamondSalePrice | | | No | N/A | | | | | GemstoneSalePrice | | | No | N/A | | | | | MakingChargesSalePrice | | | No | N/A | | | | | TaxSalePrice | | | No | N/A | | | | | MaximumRetailPrice | | | No | N/A | | | | | IsSourcingOnDemand | | | No | N/A | | | | | PricingStrategy | | | No | N/A | | | | | MinimumOrderAmount | | | No | N/A | | | | | MaximumOrderAmount | | | No | N/A | | | | | OrderIncrement | | | No | N/A | | | | | MSRPWithTax | | | No | N/A | | | | | StandardPricePointsPercent | | | No | N/A | | | | | SalePricePointsPercent | | | No | N/A | | | | BaseCurrencyCodeWithDefault | | | Values: USD GBP EUR JPY CAD CNY INR AUD BRL MXN TRY DEFAULT AED SAR SGD SEK PLN EGP | No | N/A | | | | CurrencyAmountWithDefault | | | | No | N/A | | | | | BasePriceCurrencyAmount | | | No | N/A | | | | StringCurrencyAmountWithDefault | | | | No | N/A | | | | | StringBasePriceCurrencyAmount | | | No | N/A | | | | OverrideCurrencyAmount | | | | No | N/A | | | | | CurrencyAmountWithDefault | | | No | N/A | | | | StringOverrideCurrencyAmount | | | | No | N/A | | | | | StringCurrencyAmountWithDefault | | | No | N/A | | | | OverrideCurrencyAmountWithTax | | | | No | N/A | | | | | OverrideCurrencyAmount | | | No | N/A | | | | QuantityPriceTypes | | | | No | N/A | | | | PricingActionValues | | | | No | N/A | | |

Sample Request:

<Message>
    <MessageID><![CDATA[9]]></MessageID>
    <Price>
      <SKU><![CDATA[44102816390]]></SKU>
      <StandardPrice currency="EUR"><![CDATA[26.99]]></StandardPrice>
    </Price>
  </Message>

  <Message>
    <MessageID><![CDATA[10]]></MessageID>
    <Price>
      <SKU><![CDATA[44602518430]]></SKU>
      <StandardPrice currency="EUR"><![CDATA[98.99]]></StandardPrice>
      <Sale>
        <StartDate><![CDATA[2022-08-29T09:55:26Z]]></StartDate>
        <EndDate><![CDATA[2023-08-29T10:05:26Z]]></EndDate>
        <SalePrice currency="EUR"><![CDATA[53.99]]></SalePrice>
      </Sale>
    </Price>
  </Message>

The trigger for price update will be our standard flag Product Accounts > Update Price. Since we wont have listing flow yet, when we select listing for price update we need to ignore the internal Product and Listing status and rely only on:

Product Accounts > Update Price = Pending Product Accounts > Closed = 0 Product Accounts > Protect Price = 0 Product Accounts > Protect Whole Item = 0

If update was successfully sent, we will have following statuses:

Product Accounts > Update Price = Sent

If we receive an error, we will have:

Product Accounts > Update Price = Error Product Accounts > Error Updating Price= {Store the relevant error message}

If the update is successful:

Product Accounts > Update Price= Not Needed

Is this article helpful?
0 0 0