Marketplaces / VeePee Technical Scope / VeePee Product Management / VeePee Update Price

VeePee Update Price

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)

Date Version Name Applied changes
13.02.2023 1.0 Bogomil Pavlov First Publish
03.04.2023 1.1 Bogomil Pavlov Response Mapping added
06.04.2023 1.2 Bogomil Pavlov VeePee Status details added

The purpose of this page is to describe in details how we will send price updates

API Call: {{BaseURL}}price-list/{shopChannelId} API Docs:https://api-pinkstaging.pink-connect.com/v4/price-list/{shopChannelId}

We use the shopChannelId from the Account > VeePee as header parameter.

Sample Payload:

[
   {
      "manufacturer_recommended_price":30,
      "selling_price":15,
      "sku":"skuexample1",
      "gtin":"gtinexample1",
      "tax_rate_percentage":"21"
   },
   {
      "manufacturer_recommended_price":35,
      "selling_price":17.5,
      "sku":"skuexample2",
      "gtin":"gtinexample2",
      "tax_rate_percentage":"21"
   },
   {
      "manufacturer_recommended_price":70,
      "selling_price":35,
      "sku":"skuexample3",
      "gtin":"gtinexample3",
      "tax_rate_percentage":"21"
   }
]

Mapping:

Field Notes Required Hemi Field Hemi Note
manufacturer_recommended_price No Product Account > RRP
selling_price By default, we expect prices to come on the price file. So, if seller changes the price in the Shop Catalog file, we are ignoring it. We only use Shop Catalog prices if you never used a Price File Yes Product Account > Price
sku The product identifier is the GTIN. If you use the SKU as a product identifier it WILL fail. Yes Product > SKU
gtin The product identifier is the GTIN. If you use the SKU as a product identifier it WILL fail. Yes Product Account > Marketplace EAN

OR Product > EAN | Product Account > Marketplace EAN is with priority | | tax_rate_percentage | Now the attribute taxrate**percetage is mandatory for pricelist and campaigns to comply with the new law for EU VAT. | Yes | Product Account > VAT OR Account > VAT | Product Account > VAT is with priority |

We are able to update the price when we have the following internal statuses:

We pick the offer for update when we have:

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

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

Product status = Product Published; **Listing Status =Active/Inactive; Update Price = Not Needed**

If we receive an error we will have:

Product status **= Product Published ; Listing Status **= Active/Inactive; Update Price = Error

We must store the respectively error into the field “Update Price Error

Example Response:

"SHOP_CATALOG_PRICELIST_1160_20230215091821.json"

After each successfully sent feed for price update we need to store the filename is generated from VeePee and need to store it in Marketplace Feeds table. All products that are included in the feed need to be marked as Product Account > Update Price - Sent

VeePee Field Hemi Field Comment
FileName Marketplace Feed > External ID This field is used to get the response of the import.
Marketplace Feed > Account For which account is the feed generated.
Marketplace Feed > Type Hardcoded as “Listing 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

Please note we will also add the feed objects which after processing need to be removed.

Get the import status for a product import

API Call: {{BaseURL}}/status/{filename}

API Docs: https://pinkstaging.pink-connect.com/swagger#operation/getFileStatus

UPDATED: the change was successfully imported (we treat this as success)

SKIPPED: there was no change compared to the last feed (we treat this as success)

NOT FOUND: the reference does not exist in Pink Connect (we treat this as error)

ERROR: the data was not imported due to an error (we treat this as error)

Example pending response:

{
    "status": "PENDING",
    "result": null,
    "stats": "",
    "errorList": []
}

Example success response:

{
    "status": "FINISHED",
    "result": "ok",
    "stats": "OFFER [ ERROR :0, UPDATED :2]",
    "errorList": []
}

Example error response #1:

{
    "status": "FINISHED",
    "result": "ok",
    "stats": "OFFER [ ERROR :3, UPDATED :1]",
    "errorList": [
        "description: Selling price 100000000 above max price 100000 ",
        "GTIN in file:asdasd1 SKU in file:1",
        "description: Shop Catalog not found for seller V2 with gtin 1 or sku 1 ",
        "GTIN in file:1 SKU in file:1",
        "description: Shop Catalog not found for seller V2 with gtin 1 or sku 1 ",
        "GTIN in file:1 SKU in file:1"
    ]
}

**If we receive any errors they will be split in two rows: ”description” - where the actual error is stored ”GTIN in file” - for which EAN the error is returned. We want to store the ”description” as error and use the ”GTIN in file” to map the product internally.

Example error response #2:

{
    "status": "FINISHED",
    "result": "error",
    "stats": "",
    "errorList": [
        "description: Provided file SHOP_CATALOG_PRICELIST_1160_20230403111829.json content is corrupt ",
        ""
    ]
}

We can receive an error without status as well which we want to treat as full feed error and mark all products (feed objects) as error with the relevant error message from the “errorList“

Example error response #3:

{
    "status": "FINISHED",
    "result": "ok",
    "stats": "OFFER [ SKIPPED :0, UPDATED :0, NOT_FOUND :0, ERROR :0]",
    "errorList": []
}

We can receive a response with 0 processed products as well which we want to treat as full feed error and mark all products (feed objects) as error

Based on the response we need to map each product and we will have to update the products either with error or success as well as the Marketplace Feed > Status and Marketplace Feed > External Status. If the product price update successfully and we do not receive and error in the errorList from the response we want to update: Product Account > Update Price - Not Needed

If we receive and error and the product price is not update: Product Account > Update Price - Error Product Account > Update Price Error - store the relevant error message

Any Triggers or Validations that are not specifically mentioned, changed or removed from the above mentioned scope should follow the standard flor as per the Price Update General requirements abstraction.

Additional Information:

For this integration we will need to make sure the protect flags are working as expected:

Protect Price (Stop all price updates)If Protect Price = Yes and Update Price= Pending - We skip the product

Protect the whole item - (Stop all product updates apart from Quantity) If Protect the whole item = Yes and Update Price= Pending - We skip the whole variation

Closed -will stop all the updates to the MPs

Is this article helpful?
0 0 0