Product Data

Link to swagger documentation

  1. Product Data to MM
  2. Check status of product data upload
  3. Get error report
  4. Error handling
  5. Get a list of all your product data uploads

Product Data to MM

Once you product data file is ready you can send it to us using a POST request /openapi/v1/uploads and attaching the file. Please send product data files with maximum 300 products.

In the Swagger documentation you will see a parameter called sourceId, please ignore it as it´s for internal purposes.

Example:

Request: POST https://app-seller-pim.sandbox.infra.metro-markets.cloud/openapi/v1/uploads attaching a .csv file.

You get a response with status code 201 and the body with an id. This is the id of your upload, it´s an UUID needed to check further details of your upload.

{
    "id": "56331416-687b-4916-bec0-7d03fdcc37ch"
}

Product Data for multimarkets

In case you would like to provide us the same product data for two or more different markets you have need to upload one file for each market (example one product data feed for DE and one for NL) taking into consideration the following aspects:

  • all non-localizable attributes need to be provided in every product data feed (eg. image, size, brand, …). This feature doesn’t work as a patch, therefore if you forget to add a value for an attribute in a market, the system will override it with null and delete it across all markets.
  • non localizable attributes (like images, size, etc.) will be taken from the latest successfully file. For example, if you provide a “Weight” value of 1 kg for the DE market and later created the same product for the NL market with a “Weight” value of 2 kg, then 2 kg will be saved for all markets.
  • Therefore images can´t be different per market.

Note: You can find more information about localizable attributes here.

Check status of product data upload

Once your data is uploaded it needs to be validated by our Product Data team, it can take up to 10 days.

In the sandbox, the data is validated only by the system by checking only the file’s structure and the mandatory attributes. In production, we conduct manual reviews of your files, where we also assess the quality. This is why you may encounter differences between the sandbox and production when we validate product data.

You can check the status of your file, sending a GET request /openapi/v1/uploads/{id} being {id} the upload id provided in our response before.

Request example:

GET https://app-seller-pim.sandbox.infra.metro-markets.cloud/openapi/v1/uploads/56331416-687b-4916-bec0-7d03fdcc37ch

Response example:

{
    "id": "56331416-687b-4916-bec0-7d03fdcc37ch",
    "filename": "productdata.csv",
    "status": {
        "internalStatus": "in_review",
        "readableStatus": "In review"
    },
    "reportFileName": null,
    "createdAt": "2023-01-06T18:46:12+00:00",
    "rejectReason": null
}

Here you have a list of all possible status and how we map them:

internalStatus readableStatus Explanation
uploaded Uploading The file is being uploaded to our server and waiting in the queue
in_review In review The file is being reviewed by our product data team
approved Approved Temporal status before going to processing
processing Processing The file is being processed
processing_finished Processing Temporal status. The file is still being processed
auto_process Auto processed The file is being processed automatically
report_generation Processing Temporal status while the report is being generated
success Completed The review has been completed withot any errors
with_errors Completed with errors The review has been completed with errors
review_rejected Rejected The file has been rejected, reason can be seen in rejectReason field

The statuses success, with_errors or review_rejected mean that the process of reviewing the file has completetly finished and you can check the report.

Request
GET https://app-seller-pim.sandbox.infra.metro-markets.cloud/openapi/v1/uploads/56331416-687b-4916-bec0-7d03fdcc37ch

Response 1:

{
    "id": "56331416-687b-4916-bec0-7d03fdcc37ch",
    "filename": "productdata.csv",
    "status": {
        "internalStatus": "with_errors",
        "readableStatus": "Completed with errors"
    },
    "reportFileName": "productdata.csv_0_20210106.csv",
    "createdAt": "2023-01-06T18:46:12+00:00",
    "rejectReason": null
}

Response 2

{
    "id": "56331416-687b-4916-bec0-7d03fdcc37ch",
    "filename": "productdata.csv",
    "status": {
        "internalStatus": "review_rejected",
        "readableStatus": "Rejected"
    },
    "reportFileName": "productdata.csv_0_20210106.csv",
    "createdAt": "2023-01-06T18:46:12+00:00",
    "rejectReason": "Recurrent file upload"
}

Get error report

Once your product data file has been reviewed, a report will be generated and will inform whether the data has been successfully processed or if there are any errors / warnings.

To check the report you can send a GET request /openapi/v1/uploads/{id}/errors/file being {id} the upload id provided in our response before.

MID: in this error report you will get the MID (METRO identifier). This is a unique identifier to a product and is assigned by MM when the product is created.

Request example
GET https://app-seller-pim.sandbox.infra.metro-markets.cloud/openapi/v1/uploads/56331416-687b-4916-bec0-7d03fdcc37ch/errors/file

Response example

Row;Status;MID;GTIN;MPN;Manufacturer;"Product Name";"Error Report"
2;successful;AAA0000122255;7321014500571;1230;Duni GmbH;Duni Sacchetto Zelltuch 190 x 85 mm bordeaux/cream 100er Pack;
3;successful with warnings;AAA0000155961;7321011657322;A456;Duni GmbH;Duni Zelltuch-Untersetzer 10 cm Traube bordeaux 250er Pack;Attribute `Color`: Value does not exist
4;successful with warnings;AAA0000000952;4251225663105;GG8000;Gastro-Groküchen-Geräte GmbH;GGG Arbeitstisch aus Edelstahl;Attribute `Guarantee conditions`: URL is invalid
5;rejected;;4251225663129;GG8002;Gastro-Groküchen-Geräte GmbH;GGG Arbeitstisch aus Edelstahl;Attribute `Guarantee conditions`: URL is invalid | Combination of GTIN and Manufacturer + MPN  can't be associated with any existing product
6;rejected;;4042485424489;0196;Plustek;Plustek SmartOffice PS286 Plus Dokumentenscanner Duplex A3 ADF-Scanner Duplex;Category not found
7;successful;AAA0000001897;4260212792872;67263252;Handelsagentur Noll GbR;JUNOPAX Papiertischläufer weinrot 50m x 0,20m nass- und wischfest;
8;successful;AAA0000001895;4260212792858;67263193;Handelsagentur Noll GbR;JUNOPAX Papiertischläufer weinrot 50m x 0,40m nass- und wischfest;

Error handling

  • Error messages in GET /openapi/v1/uploads/{id}

Case 1:
id is UUID but it doesn´t correspond to any upload id.
You will get a response with status code 404 error and the following body:

{
    "type": "about:blank",
    "title": "Upload not exist",
    "status": 404,
    "detail": "",
    "instance": null
}

Case 2:
id is not an UUID.
You will get a response with status code 400 error and the following body:

{
    "type": "about:blank",
    "title": "Invalid UUID string: 4b6afa92-22a3-4e4c-a14c-64d3932f9",
    "status": 400,
    "detail": "",
    "instance": null
}
  • Error messages for GET /openapi/v1/uploads/{id}/errors/file

Case 1:
id is UUID but it doesn´t correspond to any upload id.
You will get a response with status code 404 error and the following body:

{
    "type": "about:blank",
    "title": "Not found",
    "status": 404,
    "detail": "",
    "instance": null
}

Case 2:
id is not an UUID.
You will get a response with status code 400 error and the following body:

{
    "type": "validation",
    "title": "Validation error",
    "status": 400,
    "detail": "Incorrect Upload ID. Please check it and try again",
    "instance": null
}
  • Error messages for POST /openapi/v1/uploads

Case 1:
Product upload temporary disabled. If this happens after a while, seller needs to contact their Seller Manager / Support team.

{
    "type": "about:blank",
    "title": "Unauthorized",
    "status": 401,
    "detail": "Product upload temporary disabled",
    "instance": null
}

Get a list of all your product data uploads

If you want to see a list of all your uploads, please use GET /openapi/v1/uploads.

You can use the following filters to define your search:

  • sort[createdAt]: ASC, DESC (per default DESC)
  • sort[filename]: ASC, DESC
  • sort[status]: ASC, DESC
  • sort[reportFilename]: ASC, DESC
  • limit: per default 10
  • offset: default 0

For example, this request will give you the information about the product data uploads sorting them by creationdate in descending order, by filename in ascending order and limiting the results to 25.
https://app-seller-pim.sandbox.infra.metro-markets.cloud/openapi/v1/uploads?sort[createdAt]=DESC&sort[filename]=ASC&limit=25&offset=0