The Iconic Product Management
The Iconic is feed based marketplace supporting both xml and json feeds. Product calls creates feeds, which are then processed by system in the background thus we will be storing them in our Marketplace feeds table. Please note the Iconic provide taxonomy which will be stored in Hemi and will be used for internal validations. The product flows will include in the initial integration are Product Create, Product Update, Product Remove, Image, Product Stock Update, Product Price Update
Product Create
POST - https://api.sellercenter.net/?Action=ProductCreate
Parameters:
Parameter Name | Parameter Value | Comment | Required |
---|---|---|---|
Action | “ProductCreate“ | for product create our action will always be “ProductCreate“ | Yes |
Format | “XML“ or “JSON“ | both options are available, If not supplied, 'XML' is assumed. | No |
Timestamp | the current time in ISO8601 format relative to UTC | e.g., Timestamp=2015-04-01T10:00:00+02:00 for Berlin | Yes |
UserID | Account The Iconic > User ID | The ID of the user making the call | Yes |
Version | “2.6.20“ | hardcoded the latest available version | Yes |
Signature | Account The Iconic > Signature | The cryptographic signature, authenticating the request. A caller must create this value by computing the SHA256 hash of the request, using the API key of the user specified in the UserID parameter | Yes |
Example:
url = "https://api.sellercenter.net/"
post
data-urlencode Action=ProductCreate
data Timestamp=2015-07-01T11:11+0000
data-urlencode UserID=maintenance@sellercenter.net
data-urlencode Version=1.0
data-urlencode Signature=7cd3bf58ba87e2928c8fbb93acab0fa9e88cd8086231977d5cd78c4c495bedb5
In the body of the request we are sending the actual product information
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<ParentSku/>
<Status>active</Status>
<Name>Magic Product</Name>
<Variation>XXL</Variation>
<PrimaryCategory>4</PrimaryCategory>
<Categories>2,3,5</Categories>
<Description><![CDATA[This is a <b>bold</b> product.]]></Description>
<Brand>ASM</Brand>
<Price>1.00</Price>
<SalePrice>32.5</SalePrice>
<SaleStartDate>2013-09-03T11:31:23+00:00</SaleStartDate>
<SaleEndDate>2013-10-03T11:31:23+00:00</SaleEndDate>
<TaxClass>default</TaxClass>
<ShipmentType>dropshipping</ShipmentType>
<ProductId>xyzabc</ProductId>
<Condition>new</Condition>
<ProductData>
<Megapixels>490</Megapixels>
<OpticalZoom>7</OpticalZoom>
<SystemMemory>4</SystemMemory>
<NumberCpus>32</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Quantity>10</Quantity>
</Product>
<Product>
<SellerSku>513558029156743ab4e3</SellerSku>
<ParentSku/>
<Status>active</Status>
<Name>Normal Product</Name>
<Variation>XS</Variation>
<PrimaryCategory>4</PrimaryCategory>
<Categories>2,3,5</Categories>
<Description><![CDATA[This is a <i>cursive</i> product.]]></Description>
<Brand>BIN</Brand>
<Price>2.50</Price>
<SalePrice>1.50</SalePrice>
<SaleStartDate>2016-07-01T11:15:07+00:00</SaleStartDate>
<SaleEndDate>2016-07-01T11:15:07+00:00</SaleEndDate>
<TaxClass>default</TaxClass>
<ShipmentType>dropshipping</ShipmentType>
<ProductId>foobar</ProductId>
<Condition>new</Condition>
<ProductData>
<Megapixels>1</Megapixels>
<OpticalZoom>100</OpticalZoom>
<SystemMemory>2</SystemMemory>
<NumberCpus>3</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Quantity>5</Quantity>
</Product>
</Request>
The Iconic Field | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
Product |
||||||
SellerSku |
Item > SKU | String | Yes | |||
ParentSku |
N/A | The unique identifier of a product with which this product should be associated. | ||||
[Free nomenclature ParentSku feature enabled] If ParentSku is provided than it will pick the defined ParentSku otherwise it will use SellerSku of the first variation. | String | No | ||||
Status |
“active” | One of the following values: 'active', 'inactive' or 'deleted'. Optional, defaults to 'active'. | String | No | ||
Name |
Item Account > Title | Must be between 2 to 255 characters. | String | Yes | ||
Variation |
Item Account > Variation Specific (Value) | If a product is available in multiple variations (e.g., colors or size), this is the value of the variation. E.g., if the product is a jacket that comes in different sizes, this would be the size of the jacket's variation that is added with the call (e.g., 'Extra Small'). | String | No | ||
PrimaryCategory |
Item Account > Primary Category ID | The ID of the primary category for his product. This will be picked based on the mapping and internal Hemi validation | String | Yes | ||
Categories |
Item Account > Secondary Category ID | A comma-separated list of one to thee sub-categories to which the product belongs. Each of the given sub-categories must descend from the category specified by the PrimaryCategory parameter. | String | No | ||
Description |
Item Account > Description | The description of the product, as shown to the end-user. 6 to 25000 characters. Embedding certain HTML tags is allowed, but must be escaped as ![CDATA[ ]] |
String | Yes | ||
Brand |
Item Account > Item Specific | String | Yes | |||
Price |
Item Account > Price / RRP | If RRP is provided in Hemi then the Price is picked from Item Account > RRP field else we push Item Account > Price field | Decimal | Yes | ||
SalePrice |
Item Account > Price | If RRP is provided in Hemi we push the SalePrice as Item Account > Price | Decimal | No (Yes if Sales dates are added) | ||
SaleStartDate |
“CURTIME“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) | ||
SaleEndDate |
“CURTIME + 2 years“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) | ||
TaxClass |
N/A | The taxation class the product belongs to. The available tax classes are dependent on the specific installation the call is executed against. | String | No | ||
ShipmentType |
N/A | Indicates whether the product is shipped directly upon receipt ('crossdocking') or is drop shipped ('dropshipping'). Which shipment types are permissible depends on what is set up for a specific seller. Optional | String | No | ||
ProductId |
Item > EAN |
Item > UPC
Item > MPN
Item > ISBN | If we have EAN we push Item > EAN else if Item > UPC else if Item > MPN else Item > ISBN | String | No |
| | Condition
| | Item > Condition | Indicates whether the product is new or used. One of ‘new', 'used' or 'refurbished'. Conditions to be mapped like:
’new' - New (with tags) 1000
'used' - Used (Pre-owned, Like new) 3000
'refurbished' - Seller refurbished (Re-manufactured) 2500 | String | No |
| | ProductData
| | | | | |
| | | Megapixels
(just as an example) | Item Account > Item Specifics | `
<OpticalZoom>100</OpticalZoom>
<SystemMemory>2</SystemMemory>
<NumberCpus>3</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Megapixels>1</Megapixels> Item specific name will be "Megapixels" and Item Specific Value "1"` | Subsection | Depends on the category attributes |
| | Quantity
| | Item Account > Quantity | | Integer | Yes |
| | VolumetricWeight | | N/A | | Number | No |
| | ProductGroup | | Item Account > Variation Group | The name of the group | String | No |
If we have successfully pass our internal validation and push the feed to The Iconic we will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds
Successful Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>cb106552-87f3-450b-aa8b-412246a24b34</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2016-06-22T04:40:14+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
The account will be picked from the Item Account > Account ID the feed status by default will be “Processing” and the Sent Objects Count will depends on how many products we include in the feed.
If we receive an error while sending the feed we will need to store:
Error Response:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>ProductCreate</RequestAction>
<ErrorType>Platform</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Could not save product: An exact match of the document is being processed, cb106552-87f3-450b-aa8b-412246a24b34</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
Product Create Status Flow

In order to create a new product we must have Item Account >List Update The Whole Item = Pending AND Item Account > Listing Status = Inactive AND Item Account > Product Status IN (Awaiting Creation, Product Removed). This way the cron will pick the product for creation and if the feed is generated successfully we will set the Item Account >List Update The Whole Item = Sent and once the feed is processed and we get the response we will either have successful product creation or error. If we receive error we set Item Account >List Update The Whole Item = Error. If we receive success we set Item Account >List Update The Whole Item = Pending AND Item Account > Listing Status = Inactive AND Item Account > Product Status = Product Created. This way the next step is the image cron to pick this product and send the images to the MP. In order to do so the Image Upload Cron will look for products with Item Account >List Update The Whole Item = Pending AND Item Account > Listing Status = Inactive AND Item Account > Product Status = Product Created. When the images are sent to the MP we need to update Item Account >List Update The Whole Item = Sent AND Item Account > Product Status = Images Uploaded and once the feed is processed and we get the response we will either have successful image upload or error. If we receive error we set Item Account >List Update The Whole Item = Error AND Item Account > Product Status = Product Created If we receive success we set Item Account >List Update The Whole Item = Not Needed AND Item Account > Listing Status = Active AND Item Account > Product Status = Product Published
Product Update
POST - https://api.sellercenter.net/?Action=ProductUpdate
Parameters:
Parameters Name | Parameter Value | Comments | |
---|---|---|---|
1 | Action | ProductUpdate | for product update our action will always be “ProductUpdate“ |
2 | Format | “XML“ or “JSON“ | both options are available, If not supplied, 'XML' is assumed. |
3 | Timestamp | the current time in ISO8601 format relative to UTC | e.g., Timestamp=2015-04-01T10:00:00+02:00 for Berlin |
4 | UserID | Account The Iconic > User ID | The ID of the user making the call |
5 | Version | “2.6.20“ | hardcoded the latest available version |
6 | Signature | Account The Iconic > Signature | The cryptographic signature, authenticating the request. A caller must create this value by computing the SHA256 hash of the request, using the API key of the user specified in the UserID parameter |
Example:
url = "https://api.sellercenter.net/"
post
data-urlencode Action=ProductUpdate
data Timestamp=2015-07-01T11:11+0000
data-urlencode UserID=maintenance@sellercenter.net
data-urlencode Version=1.0
data-urlencode Signature=7cd3bf58ba87e2928c8fbb93acab0fa9e88cd8086231977d5cd78c4c495bedb5
The Product Update request could be split for 3 different updates - Full Product Update, Stock update and Price update; The only difference between Product Update request & Product Create request is that there are no mandatory fields for Product Update apart from the seller SKU;
Full Product Update
In the body of the request we are sending the actual product information
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<ParentSku/>
<Status>active</Status>
<Name>Magic Product</Name>
<Variation>XXL</Variation>
<PrimaryCategory>4</PrimaryCategory>
<Categories>2,3,5</Categories>
<Description><![CDATA[This is a <b>bold</b> product.]]></Description>
<Brand>ASM</Brand>
<Price>1.00</Price>
<SalePrice>32.5</SalePrice>
<SaleStartDate>2013-09-03T11:31:23+00:00</SaleStartDate>
<SaleEndDate>2013-10-03T11:31:23+00:00</SaleEndDate>
<TaxClass>default</TaxClass>
<ShipmentType>dropshipping</ShipmentType>
<ProductId>xyzabc</ProductId>
<Condition>new</Condition>
<ProductData>
<Megapixels>490</Megapixels>
<OpticalZoom>7</OpticalZoom>
<SystemMemory>4</SystemMemory>
<NumberCpus>32</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Quantity>10</Quantity>
</Product>
<Product>
<SellerSku>513558029156743ab4e3</SellerSku>
<ParentSku/>
<Status>active</Status>
<Name>Normal Product</Name>
<Variation>XS</Variation>
<PrimaryCategory>4</PrimaryCategory>
<Categories>2,3,5</Categories>
<Description><![CDATA[This is a <i>cursive</i> product.]]></Description>
<Brand>BIN</Brand>
<Price>2.50</Price>
<SalePrice>1.50</SalePrice>
<SaleStartDate>2016-07-01T11:15:07+00:00</SaleStartDate>
<SaleEndDate>2016-07-01T11:15:07+00:00</SaleEndDate>
<TaxClass>default</TaxClass>
<ShipmentType>dropshipping</ShipmentType>
<ProductId>foobar</ProductId>
<Condition>new</Condition>
<ProductData>
<Megapixels>1</Megapixels>
<OpticalZoom>100</OpticalZoom>
<SystemMemory>2</SystemMemory>
<NumberCpus>3</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Quantity>5</Quantity>
</Product>
</Request>
The Iconic Field | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
Product |
||||||
SellerSku |
Item > SKU | String | Yes | |||
ParentSku |
N/A | The unique identifier of a product with which this product should be associated. | ||||
[Free nomenclature ParentSku feature enabled] If ParentSku is provided than it will pick the defined ParentSku otherwise it will use SellerSku of the first variation. Optional | String | No | ||||
Status |
“active” | One of the following values: 'active', 'inactive' or 'deleted'. Optional, defaults to 'active'. | String | No | ||
Name |
Item Account > Title | Must be between 2 to 255 characters. | String | Yes | ||
Variation |
Item Account > Variation Specific (Value) | If a product is available in multiple variations (e.g., colors or size), this is the value of the variation. E.g., if the product is a jacket that comes in different sizes, this would be the size of the jacket's variation that is added with the call (e.g., 'Extra Small'). | String | No | ||
PrimaryCategory |
Item Account > Primary Category ID | The ID of the primary category for his product. This will be picked based on the mapping and internal Hemi validation | String | Yes | ||
Categories |
Item Account > Secondary Category ID | A comma-separated list of one to thee sub-categories to which the product belongs. Each of the given sub-categories must descend from the category specified by the PrimaryCategory parameter. | String | No | ||
Description |
Item Account > Description | The description of the product, as shown to the end-user. 6 to 25000 characters. Embedding certain HTML tags is allowed, but must be escaped as ![CDATA[ ]] |
String | Yes | ||
Brand |
Item Account > Item Specific | String | Yes | |||
Price |
Item Account > Price / RRP | If RRP is provided in Hemi then the Price is picked from Item Account > RRP field else we push Item Account > Price field | Decimal | Yes | ||
SalePrice |
Item Account > Price | If RRP is provided in Hemi we push the SalePrice as Item Account > Price | Decimal | No (Yes if Sales dates are added) | ||
SaleStartDate |
“CURTIME“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) | ||
SaleEndDate |
“CURTIME + 2 years“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) | ||
TaxClass |
N/A | The taxation class the product belongs to. The available tax classes are dependent on the specific installation the call is executed against. | String | No | ||
ShipmentType |
N/A | Indicates whether the product is shipped direcly upon receipt ('crossdocking') or is drop shipped ('dropshipping'). Which shipment types are permissible depends on what is set up for a specific seller. Optional | String | No | ||
ProductId |
Item > EAN |
Item > UPC
Item > MPN
Item > ISBN | If we have EAN we push Item > EAN else if Item > UPC else if Item > MPN else Item > ISBN | String | No |
| | Condition
| | Item > Condition | Indicates whether the product is new or used. One of ‘new', 'used' or 'refurbished'. Conditions to be mapped like:
’new' - New (with tags) 1000
'used' - Used (Pre-owned, Like new) 3000
'refurbished' - Seller refurbished (Re-manufactured) 2500 | String | No |
| | ProductData
| | | | | |
| | | Megapixels
(just as an example) | Item Account > Item Specifics | `
<OpticalZoom>100</OpticalZoom>
<SystemMemory>2</SystemMemory>
<NumberCpus>3</NumberCpus>
<Network>This is network</Network>
</ProductData>
<Megapixels>1</Megapixels> Item specific name will be "Megapixels" and Item Specific Value "1"` | Subsection | Depends on the category attributes |
| | Quantity
| | Item Account > Quantity | | Integer | Yes |
| | VolumetricWeight | | N/A | | Number | No |
| | ProductGroup | | Item Account > Variation Group | The name of the group | String | No |
Product Full Update Status Flow

In order to Update products we must have:
(1)
Item Account >List Update The Whole Item = Pending;
Item Account> Product Status = Published;
Item Account > Listing Status = Active OR Item Account > Listing Status = Inactive;
This way the cron will pick the product for update and if the feed is generated successfully we will set:
(2)
Item Account >List Update The Whole Item = Sent;
Item Account>Product Status=Published;
Item Account>Listing Status=Active OR Item Account > Listing Status = Inactive
Once the feed is processed and we get the response we will have successful product update (3) or error (4).
If we receive successful Product Update we need to set:
(3)
Item Account >List Update The Whole Item = Not Needed;
Item Account> Product Status=Product Published;
Item Account>Listing Status=Active;
If we receive error we set:
(4)
Item Account >List Update The Whole Item = Error;
Item Account > Product Status=Published;
Item Account>Listing Status=Active OR Item Account > Listing Status = Inactive;
If we have successfully pass our internal validation and push the feed to The Iconic we will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds
Successful Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>cb106552-87f3-450b-aa8b-412246a24b34</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2016-06-22T04:40:14+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
The account will be picked from the Item Account > Account ID the feed status by default will be “Processing” and the Sent Objects Count will depends on how many products we include in the feed.
If we receive an error while sending the feed we will need to store:
Error Response:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>ProductCreate</RequestAction>
<ErrorType>Platform</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Could not save product: An exact match of the document is being processed, cb106552-87f3-450b-aa8b-412246a24b34</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
Price Update
Example:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<Price>2.50</Price>
<SalePrice>1.50</SalePrice>
<SaleStartDate>2016-07-01T11:15:07+00:00</SaleStartDate>
<SaleEndDate>2016-07-01T11:15:07+00:00</SaleEndDate>
</Product>
</Request>
The Iconic fields | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
1 | Product |
|||||
2 | Price |
Item Account > Price / RRP | If RRP is provided in Hemi then the Price is picked from Item Account > RRP field else we push Item Account > Price field | Decimal | Yes | |
3 | SalePrice |
Item Account > Price | If RRP is provided in Hemi we push the SalePrice as Item Account > Price | Decimal | No (Yes if Sales dates are added) | |
4 | SaleStartDate |
“CURTIME“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) | |
5 | SaleEndDate |
“CURTIME + 2 years“ | If RRP is provided we hardcode the dates until when the sale is active. | DateTime | No (Yes if SalePrice is added) |
Price Update Flow

To Update the Product Price we must have:
(1)
Item Account >Update Price = Pending;
Item Account> Product Status = Published;
Item Account > Listing Status = Active;
This way the cron will pick the product for price update and if the feed is generated successfully we will set:
(2)
Item Account >Update Price = Sent;
Item Account> Product Status = Published;
Item Account > Listing Status = Active;
Once the feed is processed and we get the response, we will have successful product price update or error.
(3) If we have successful Product Price Update we will set:
Item Account >Update Price = Not Needed;
Item Account> Product Status = Published;
Item Account > Listing Status = Active;
(4) If an error:
Item Account >Update Price = Error;
Item Account> Product Status = Published;
Item Account > Listing Status = Active;
If we have successfully pass our internal validation and push the feed to The Iconic we will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds
Successful Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>cb106552-87f3-450b-aa8b-412246a24b34</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2016-06-22T04:40:14+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
The account will be picked from the Item Account > Account ID the feed status by default will be “Processing” and the Sent Objects Count will depends on how many products we include in the feed.
If we receive an error while sending the feed we will need to store:
Error Response:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>ProductCreate</RequestAction>
<ErrorType>Platform</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Could not save product: An exact match of the document is being processed, cb106552-87f3-450b-aa8b-412246a24b34</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
Stock Update
Example:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<Quantity>4</Quantity>
</Product>
</Request>
Mapping:
The Iconic fields | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
1 | Product |
|||||
2 | SellerSku |
Item > SKU | String | Yes | ||
3 | Quantity |
Item Account > Quantity | Integer | Yes |
Stock Update Flow

In order to update the stock (quantity) we must have:
(1)
Item Account >Update Quantity = Pending;
Item Account> Product Status = Published;
Item Account > Listing Status = Active OR Item Account > Listing Status = Inactive (After successful end item)
The cron will pick the product for stock update and if the feed is generated successfully we will set:
(2)
Item Account >Update Quantity = Sent;
Item Account> Product Status = Published;
Item Account > Listing Status = Active OR Item Account > Listing Status = Inactive
We will get 2 possible responses - success or error
If the response is successful we need to set:
(3)
Item Account >Update Quantity = Not Needed;
Item Account> Product Status = Published;
Item Account > Listing Status = Active;
If there is an error, we need to set:
(4)
Item Account >Update Quantity = Error;
Item Account> Product Status = Published;
Item Account > Listing Status = Active OR Item Account > Listing Status = Inactive;
If we have successfully pass our internal validation and push the feed to The Iconic we will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds
Successful Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>cb106552-87f3-450b-aa8b-412246a24b34</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2016-06-22T04:40:14+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
The account will be picked from the Item Account > Account ID the feed status by default will be “Processing” and the Sent Objects Count will depends on how many products we include in the feed.
If we receive an error while sending the feed we will need to store:
Error Response:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>ProductCreate</RequestAction>
<ErrorType>Platform</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Could not save product: An exact match of the document is being processed, cb106552-87f3-450b-aa8b-412246a24b34</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
Product End
Product end simply send 0 stock for the SKU. In order to send product end we will need to have a product with Item Account > End Item= 1, Item Account > Product Status = Product Published, Item Account > Listing Status = Active
Example:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<Quantity>4</Quantity>
</Product>
</Request>
Mapping:
The Iconic fields | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
1 | Product |
|||||
2 | SellerSku |
Item > SKU | String | Yes | ||
3 | Quantity |
Hardcoded as “0“ | For end item we always push “0” stock | Integer | Yes |
Product End Status Flow

In order to End a product we must have:
(1)
Item Account>End Item=Pending;
Item Account>Product Status=Published;
Item Account>Listing Status=Active
Then the cron will pick the item and if the feed is generated successfully we will set:
(2)
Item Account >End Item=Sent;
Item Account>Product Status=Published;
Item Account>Listing Status=Active
Once the feed is processed and we get the response we will either have success or error.
(3) If we receive success we set:
Item Account>End Item= Not Needed;
Item Account>Product Status= Published;
Item Account>Listing Status=Inactive;
(4) If we receive an error we set:
Item Account>End Item= Error;
Item Account>Product Status=Published;
Item Account>Listing Status=Active;
If we have successfully pass our internal validation and push the feed to The Iconic we will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds
Successful Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>cb106552-87f3-450b-aa8b-412246a24b34</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2016-06-22T04:40:14+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
The account will be picked from the Item Account > Account ID the feed status by default will be “Processing” and the Sent Objects Count will depends on how many products we include in the feed.
If we receive an error while sending the feed we will need to store:
Error Response:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Head>
<RequestAction>ProductCreate</RequestAction>
<ErrorType>Platform</ErrorType>
<ErrorCode>1000</ErrorCode>
<ErrorMessage>Could not save product: An exact match of the document is being processed, cb106552-87f3-450b-aa8b-412246a24b34</ErrorMessage>
</Head>
<Body/>
</ErrorResponse>
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > Update Item Error | We concatenate the the fields into Item Account > Update Item Error |
Product Remove
POST - https://api.sellercenter.net/?Action=ProductRemove
In order to remove a product, we should have an active listing and need to set Item Account > End Listing = 1, Item Account > Product Status = Product Published, Item Account > Listing Status = Active
Parameters:
Parameter Name | Parameter Value | Comment | Required |
---|---|---|---|
Action | “ProductRemove“ | for product remove our action will always be “ProductRemove“ | Yes |
Format | “XML“ or “JSON“ | both options are available, If not supplied, 'XML' is assumed. | No |
Timestamp | the current time in ISO8601 format relative to UTC | e.g., Timestamp=2015-04-01T10:00:00+02:00 for Berlin | Yes |
UserID | Account The Iconic > User ID | The ID of the user making the call | Yes |
Version | “2.6.20“ | hardcoded the latest available version | Yes |
Signature | Account The Iconic > Signature | The cryptographic signature, authenticating the request. A caller must create this value by computing the SHA256 hash of the request, using the API key of the user specified in the UserID parameter | Yes |
Example:
url = "https://api.sellercenter.net/"
post
data-urlencode Action=ProductRemove
data Timestamp=2015-07-01T11:11+0000
data-urlencode UserID=maintenance@sellercenter.net
data-urlencode Version=1.0
data-urlencode Signature=7cd3bf58ba87e2928c8fbb93acab0fa9e88cd8086231977d5cd78c4c495bedb5
In the body of the request we are sending the following:
Example request:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>297afb9c989c6ad</SellerSku>
</Product>
<Product>
<SellerSku>1b71ff01983241f</SellerSku>
</Product>
</Request>
Mapping:
The Iconic Field | Hemi Field | Comment | Type | Required |
---|---|---|---|---|
SellerSku |
Item > SKU | String | Yes |
Example response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>f8bf8d09-1647-4136-b405-03c44f228cf5</RequestId>
<RequestAction>ProductRemove</RequestAction>
<ResponseType/>
<Timestamp>2015-07-01T11:11:11+0000</Timestamp>
</Head>
<Body/>
</SuccessResponse>
Mapping:
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
We will receive the feed ID (RequestId
) which will be stored in Hemi in Marketplace Feeds.
To remove a product/products the status should be “Product Published”. After successful removing of product, the Product status should be “Product Removed“ and product listing status should be set to “Inactive”.
If we receive an error while sending the feed we will need to store:
The Iconic Field | Hemi Field | Comment |
---|---|---|
ErrorType |
Item Account > End Listing Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorCode |
Item Account > End Listing Error | We concatenate the the fields into Item Account > Update Item Error |
ErrorMessage |
Item Account > End Listing Error | We concatenate the the fields into Item Account > Update Item Error |
Error codes/messages (The Iconic):
Error code | Message |
---|---|
1000 | Could not remove product: %s |
1000 | Format Error Detected |
Product Remove Status Flow

In order to remove a product we must have:
(1)
Item Account>End Listing=Pending;
Item Account>Product Status=Published;
Item Account>Listing Status=Active;
The cron will pick the product that should be removed and if the feed is generated successfully we will set: (2)
Item Account>End Listing=Sent;
Item Account>Product Status=Published;
Item Account>Listing Status=Active;
Once the feed is processed we can receive successful product removed or error.
(3) If we receive success we set:
Item Account>End Listing= Not Needed;
Item Account>Product Status= Removed;
Item Account>Listing Status=Inactive;
(4) If we receive an error we set:
Item Account>End Listing= Error;
Item Account>Product Status=Published;
Item Account>Listing Status=Active;
Listing Image
The purpose of this documentation is to describe process of listing images on the 'The Iconic' marketplace. The first image passed in, becomes the product's default image, i.e. we need to submit main image first.
Limit: 8 images per product.
POST-https://api.sellercenter.net/?Action=Image
Parameter Name | Parameter Value | Comment | Required |
---|---|---|---|
Action | “Image“ | The action will be “Listing Image?“ | Yes |
Format | “XML“ or “JSON“ | both options are available, If not supplied, 'XML' is assumed. | No |
Timestamp | the current time in ISO8601 format relative to UTC | e.g., Timestamp=2015-04-01T10:00:00+02:00 for Berlin | Yes |
UserID | Account The Iconic > User ID | The ID of the user making the call | Yes |
Version | “2.6.20“ | hardcoded the latest available version | Yes |
Signature | Account The Iconic > Signature | The cryptographic signature, authenticating the request. A caller must create this value by computing the SHA256 hash of the request, using the API key of the user specified in the UserID parameter | Yes |
- Setting Single Image
Example request:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<ProductImage>
<SellerSku>b2378adf</SellerSku>
<Images>
<Image>http://static.somecdn.com/rear.jpeg</Image>
</Images>
</ProductImage>
</Request>
Mapping:
The Iconic Field | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
ProductImage |
||||||
SellerSku |
Item > SKU | string | Yes | |||
Images |
||||||
Image |
Item > Main Image |
OR
Item Account The Iconic > Main Image | The first image we push is always our main image | image (jpeg
?) | Yes |
| | | Image
| Item > More Picture URLs
OR
Item Account The Iconic > More Picture URLs | | image (jpeg
?) | Yes |
Example response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>4d9c69e1-a581-4114-8ef1-210541b7c070</RequestId>
<RequestAction>Image</RequestAction>
<ResponseType/>
<Timestamp>2015-07-03T11:14:32+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
Mapping:
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
- Set Three images
Example request:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<ProductImage>
<SellerSku>b2378adf</SellerSku>
<Images>
<Image>http://static.somecdn.com/moneyshot.jpeg</Image>
<Image>http://static.somecdn.com/front.jpeg</Image>
<Image>http://static.somecdn.com/rear.jpeg</Image>
</Images>
</ProductImage>
</Request>
Mapping:
The Iconic Field | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
ProductImage |
||||||
SellerSku |
Item > SKU | string | Yes | |||
Images |
||||||
Image |
Item > Main Image |
OR
Item Account The Iconic > Main Image | The first image we push is always our main image | image (jpeg
?) | Yes |
| | | Image
| Item > More Picture URLs
OR
Item Account The Iconic > More Picture URLs | | image (jpeg
?) | Yes |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>4d9c69e1-a581-4114-8ef1-210541b7c070</RequestId>
<RequestAction>Image</RequestAction>
<ResponseType/>
<Timestamp>2015-07-03T11:14:32+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
Mapping:
The Iconic Field | Hemi Field | Comment |
---|---|---|
RequestId |
Marketplace Feeds > External ID | |
RequestAction |
Marketplace Feeds > Type | |
Timestamp |
Marketplace Feeds > Submitted Date |
- Set images for multiple product - (To list images for 2 or more products simultaneously).
Example request:
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<ProductImage>
<SellerSku>b2378adf</SellerSku>
<Images>
<Image>http://static.somecdn.com/moneyshot.jpeg</Image>
<Image>http://static.somecdn.com/front.jpeg</Image>
<Image>http://static.somecdn.com/rear.jpeg</Image>
</Images>
</ProductImage>
<ProductImage>
<SellerSku>c62378fdf</SellerSku>
<Images>
<Image>http://static.somecdn.com/unboxing.jpeg</Image>
<Image>http://static.somecdn.com/in-use.jpeg</Image>
<Image>http://static.somecdn.com/recycled.jpeg</Image>
</Images>
</ProductImage>
</Request>
The Iconic Field | Hemi Field | Comment | Type | Required | ||
---|---|---|---|---|---|---|
ProductImage |
||||||
SellerSku |
Item > SKU | string | Yes | |||
Images |
||||||
Image |
Item > Main Image |
OR
Item Account The Iconic > Main Image | The first image we push is always our main image | image (jpeg
?) | Yes |
| | | Image
| Item > More Picture URLs
OR
Item Account The Iconic > More Picture URLs | | image (jpeg
?) | Yes |
Example response:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>4d9c69e1-a581-4114-8ef1-210541b7c070</RequestId>
<RequestAction>Image</RequestAction>
<ResponseType/>
<Timestamp>2015-07-03T11:14:32+0200</Timestamp>
</Head>
<Body/>
</SuccessResponse>
Errors:
If we receive an error while sending the feed we will need to store the error in Item Account > Update Item Error”.
Error code | Message |
---|---|
1000 | Format Error Detected |
Listing Image Status
In order to list images, cron will look for products with Item Account >List Update The Whole Item = Pending AND Item Account > Listing Status = Inactive AND Item Account > Product Status = Product Created. When the images are sent to the MP we need to update Item Account >List Update The Whole Item = Sent AND Item Account > Product Status = Images Uploaded and once the feed is processed and we get the response we will either have successful image upload or error. If we receive error we set Item Account >List Update The Whole Item = Error AND Item Account > Product Status = Product Created If we receive success we set Item Account >List Update The Whole Item = Not Needed AND Item Account > Listing Status = Active AND Item Account > Product Status = Product Published
Response Reader
In order to process the feeds in Hemi we need to check what have been successfully update and what returns an error. Thus we need to call each processing feed for The Iconic using the GetFeedStatus request.
GET https://api.sellercenter.net/?Action=FeedStatus
Parameters Name | Parameter Value | Comments | |
---|---|---|---|
1 | Action | ProductUpdate | for product update our action will always be “ProductUpdate“ |
2 | Format | “XML“ or “JSON“ | both options are available, If not supplied, 'XML' is assumed. |
3 | Timestamp | the current time in ISO8601 format relative to UTC | e.g., Timestamp=2015-04-01T10:00:00+02:00 for Berlin |
4 | UserID | Account The Iconic > User ID | The ID of the user making the call |
5 | Version | “2.6.20“ | hardcoded the latest available version |
6 | Signature | Account The Iconic > Signature | The cryptographic signature, authenticating the request. A caller must create this value by computing the SHA256 hash of the request, using the API key of the user specified in the UserID parameter |
7 | FeedID | Marketplace Feed > External ID | string The identifier (UUID) of the feed. |
Examples
# FeedStatus cURL example
# to run, update Timestamp and recompute Signature
#
url = "https://api.sellercenter.net/"
get
data-urlencode Action=FeedStatus
data-urlencode FeedID=4a835cd5-1f55-f56e011be009
data-urlencode Timestamp=2015-07-01T11:11+0000
data-urlencode UserID=maintenance@sellercenter.net
data-urlencode Version=1.0
data-urlencode Signature=685d7883322681f9d70948312b7cf7d7b9639bb10ba2c111122f9c289fda128c
Example Payload:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId/>
<RequestAction>FeedStatus</RequestAction>
<ResponseType>FeedDetail</ResponseType>
<Timestamp>2015-07-06T15:00:14+0200</Timestamp>
<RequestParameters>
<FeedID>883bdfe3-950f-4390-9a80-41437b69808c</FeedID>
</RequestParameters>
</Head>
<Body>
<FeedDetail>
<Feed>883bdfe3-950f-4390-9a80-41437b69808c</Feed>
<Status>Finished</Status>
<Action>ProductUpdate</Action>
<CreationDate>2015-05-05 15:06:35</CreationDate>
<UpdatedDate>2015-05-05 15:07:11</UpdatedDate>
<Source>api</Source>
<TotalRecords>10</TotalRecords>
<ProcessedRecords>10</ProcessedRecords>
<FailedRecords>0</FailedRecords>
<FeedErrors/>
<FeedWarnings>
<Warning>
<Message>The following SKUs have been excluded...</Message>
<SellerSku>SKU-123</SellerSku>
</Warning>
</FeedWarnings>
</FeedDetail>
</Body>
</SuccessResponse>
The Iconic fields | Hemi Field | Comment | Type | Required | |
---|---|---|---|---|---|
1 | Status |
Marketplace Feed > External Status | string | Yes | |
2 | FeedWarnings |
Item Account > Error Fields | Depends on the type of the feed we need to update the relevant error field in Hemi. | ||
For example if we have Type > UpdateProduct then we update the revise item error field if any errors, consequently the case is the same for Type > UpdateStock , Type > UpdatePrice , Type > ProductCreate , Type > EndListing , Type > ImageUpload, Type > EndItem |
string | Yes | |||
3 | Completed Date | The CURTTIME() | date | Yes |
Request Limits:TBA Variations what to do? Error messages? Do they support multivariations? Flags Closed Protect Price, Protect Quantity etc TBA add the standard logic reference