Inno Offer Stock Update
Summary of Changes: (The purpose of this table is to keep traceability and Product team to highlight the things that were changed into the scope, based on comments or discussions)
Version | Date | Name | Applied changes |
---|---|---|---|
1.0 | 09/12/2022 | Hristiyan Georgiev | First Publish |
The purpose of this document is to describe in details how we will send stock updates to offers on MIRAKL.
The process is quite straight forward as full offer updates. We are able to send updates to an offer using the call for creating an offer (OF01), but we need to specify the value in “update_delete“ field to be equal to “update“ ( "update_delete"
: "update")
- POST OF01 - Import a file to add offers
API Call: /api/offers/imports
API Docs: https://galeriainnobe2-dev.mirakl.net/help/api-doc/seller/mmp.html?#OF01
In order to send stock updated we should push only mandatory fields as per below mapping:
Mapping:
Mirakl Field | Mirakl Notes | Required | Hemi Field | Hemi Note |
---|---|---|---|---|
sku |
The offer’s unique identifier in the shop - Required - Maximum 40 characters, no "/" character | Yes | Product >SKU | |
product-id |
Unique product identifier for a given product-id-type - Required at offer creation - Maximum 40 characters | Yes | Product Account > Marketplace EAN |
OR
Product > EAN | |
| product-id-type
| | Yes | hardcoded as “ean“ | |
| quantity
| The quantity available in stock (maximum: one billion).
Integer greater than or equal to 0 | Yes | Product Account > Quantity | |
| state
| The state code of the offer
The accepted values are defined from the Mirakl back office | Yes | Product > ConditionID | Mapping to our conditions:
11- New > 1000;
1-Excellent > 1500;
2-Very Good >4000;
3-Good >5000;
4-Sufficient >6000;
5-Refurbished_like_new > 2750
6-Refurnished_very_good >2500
7-Refurbished_good > 2000
8-Refurbished_acceptable > 8000 |
We are able to send stock updates in two cases - once the product is active on the channel and once after we have already deactivated it and would want to send a positive stock.
We pick the offer for update when we have:
Product status **= Product Published ; Listing Status **= Active/Inactive; Update Quantity = Pending If we send the offer for update successfully we set: Product status **= Product Published ; Listing Status **= Active/Inactive; Update Quantity = Sent
Once we receive success, we need to set following statuses:
Product status = Product Published; **Listing Status =Active/Inactive; Update Quantity = Not Needed**
If we receive an error we will have:
Product status **= Product Published ; Listing Status **= Active/Inactive; Update Quantity = Error
We need to store the particular error into Update Quantity error field.
Example Response:
{
"import_id": 2035
}
After each successfully send feed for creation we will receive the feed id from the response and need to store it in Marketplace Feeds table.
Mirakl Field | Hemi Field | Comment |
---|---|---|
import_id | Marketplace Feed > External ID | |
Marketplace Feed > Account | For which account is the feed generated. | |
Marketplace Feed > Type | Hardcoded as “Offer Stock Price Update“ | |
Marketplace Feed > Submitted Date | When the feed is submitted | |
Marketplace Feed > Sent Objects Count | How many products we have pushed in the feed | |
Marketplace Feed > Completed Date | When the feed is completed |
Please note we will also add the feed objects which after processing need to be removed.
- GET OF02 - Get information and statistics about an offer import
API Call: /api/offers/imports/{import}
API Docs: https://galeriainnobe2-dev.mirakl.net/help/api-doc/seller/mmp.html?#OF02
Parameter | Integration Notes / Value | Required |
---|---|---|
import |
Import identifier | Yes |
Using this call, we are able to check the status of the imported file.
Example Response:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<import>
<date_created>2019-04-01T15:16:31Z</date_created>
<has_error_report>false</has_error_report>
<import_id>2035</import_id>
<lines_in_error>0</lines_in_error>
<lines_in_pending>0</lines_in_pending>
<lines_in_success>1</lines_in_success>
<lines_read>1</lines_read>
<mode>NORMAL</mode>
<offer_deleted>0</offer_deleted>
<offer_inserted>1</offer_inserted>
<offer_updated>0</offer_updated>
<status>COMPLETE</status>
</import>
OF02 call is returning the response for the actual offer import (all offers).
Based on the response, we will need to check if we have to continue with the error report (if "has_error_report": true
) we continue with OF03, otherwise we treat it as success.
Success case:
Product status - Product Published; Listing Status - Active/Inactive; Update Quantity - Not Needed
Error case:
If "has_error_report": true
this means there is an error and we need to reach each of the reports in order to check for which item and what is the error.
Product status - Product Published; Listing Status - Active/Inactive; Update Quantity - Error
and we need to store the relevant error in Product Account >Update Quantity Error field
- GET OF03 - Get the error report file for an offer import
In order to check if there are any errors related to the products, into imported file we should use the GET OF03 API Call.
API Call: /api/offers/imports/{import}/error_report
API Docs: https://marketplace.kingfisher.com/help/api-doc/seller/mmp.html#OF03
"sku";"product-id";"product-id-type";"description";"internal-description";"price-additional-info";"quantity";"min-quantity-alert";"state";"available-start-date";"available-end-date";"logistic-class";"update-delete";"discount-start-date";"discount-end-date";"price";"discount-price";"discount-ranges";"price-ranges";"discount-start-date[channel=FR]";"discount-end-date[channel=FR]";"price[channel=FR]";"discount-price[channel=FR]";"discount-ranges[channel=FR]";"prices-ranges[channel=FR]";"discount-start-date[channel=CA]";"discount-end-date[channel=CA]";"price[channel=CA]";"discount-price[channel=CA]";"discount-ranges[channel=CA]";"prices-ranges[channel=CA]";"leadtime-to-ship";"error-line";"error-message"
"OFFER_SKU_004";"MKP100000000195360";"SKU";"My Offer Description n°1";"My Internal description 1";"My price Additional innformations";"1000000";"20";"11";"2017-02-20T10:45:53+01";"2017-04-30T10:45:53+01";"S";"update";"2017-02-22T10:45:53+01";"2017-04-30T10:45:53+01";"110.52";"108,56";"";"5|109.20,10|108.736";"2017-02-22T10:45:53+01";"2017-03-31T10:45:53+01";"105.56";"102,36";"";"5|104.56,10|103.27";"2017-02-22T10:45:53+01";"2017-03-31T10:45:53+01";"190.23";"175,36";"";"5|182.58,10|181.27";"15";"2";"The product does not exist"
As described above, this response give us detailed report of the SKUs and the actual SKUs errors are in the “error-message“ which we store in the Product Account >Update Item Error
Additional Information:
For this integration we will need to make sure the protect flags are working as expected:
Protect Quantity - This call should not go through if there is protect quantity, as there will be nothing to update.
Protect Price - We can exclude the price from the payload when we are doing updates so we do not update the price when we have Protect Price raised. This will work only under the condition explained earlier in the document.
Protect the whole item - This call should not go through if there is protect the whole item, as there will be nothing to update.
Closed -will stop all the updates to the MPs apart from the end item (send 0 stock update);