Marketplaces / Inno Technical Scope [DRAFT] / Inno Product & Offer management / Inno Offer Full update

Inno Offer Full 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 page is to describe in details the process of full update of the offers on MIRAKL.

We are able to send updates to an offer using the call for creating an offer, 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

Note: The mapping is the same as described mapping into Create Offer page

NB! We need to split the way we are sending the offer full updates. We need to be able to create two full offer update feeds - One with products that have Protect Price - No, and another with products that have Protect Price - Yes. So we need to be sending either a feed with products that all have price node, or feed with products that all do not have price node. The reason for that is because we cannot have a single feed with products that we are NOT sending price for and products that we are sending price for as Mirakl mistakes this call for offer create and returns error that the price field is mandatory.

We are able to send updates to products in 2 cases. Once the product listing status is Active and Inactive(i.e. after successfully zero stock updates)

We pick the offer for update when we have:

Product status **= Product Published ; Listing Status **= Active/Inactive; List/Update the whole item = Pending If we send the offer for update successfully we set: Product status **= Product Published ; Listing Status **= Active/Inactive; List/Update the whole item = Sent

Once we receive success, we need to set following statuses:

Product status = Product Published; **Listing Status =Active/Inactive; List/Update the whole item = Not Needed**

If we receive an error we will have:

Product status **= Product Published ; Listing Status **= Active/Inactive; List/Update the whole item = Error

(The error need to be stored into Update item error field.)

Example Response:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<offer_import_tracking>
    <import_id>2035</import_id>
    <product_import_id>2036</product_import_id>
</offer_import_tracking>

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 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 and Listing Status = Active/Inactive and List/Update the whole item =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; List/Update the whole item = Error

and we need to store the relevant error in Product Account > Update Item 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://galeriainnobe2-dev.mirakl.net/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 - We can exclude the quantity from the payload when we are doing updates so we do not add the quantity in the payload when have Protect Quantity raised

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 - We update the quantity only.

Closed -will stop all the updates to the MPs apart from the end item (send 0 stock update);

Is this article helpful?
0 0 0