Product Submissions API 2025 Release: Changes

The following changes will be made to the error responses of the Merchant Product Submission API

1. New warnings included

In addition to errors, the Merchant Product Submission API responses will now also contain warnings. Whereas errors continue to cause submissions to be rejected (e.g. "ean" is mandatory for each simple), warnings are for information purposes. An example of a warning case could be an issue with any optional attribute (e.g. "certificate" is supplied but is given the wrong structure).

→ Impact: Prior to this change, warning cases would have been omitted without explanation. With this release, a warning will inform of such a case, which gives you the chance of fixing the optional attribute and ensuring it gets included for your article post fix.

Examples of API Responses with new warnings (right side):
Example 1: Response contains validation errors and warnings:

Current Behaviour Post Update Behavior
{
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    [
      {
        "actual": "Undefined",
        "expected": "array",
        "path": "product_model/product_model_attributes/target_genders"
      }
    ]
  ],
  "code": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}
{
  "title": "Bad Request",
  "detail": "Bad Request: validation errors found",
  "body_errors": [
    {
      "attribute": "target_genders",
      "message": "target_genders is missing from model attributes",
      "path": "/product_model/product_model_attributes",
      "reason": "MISSING_ATTRIBUTE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#missing_attribute"
      "tier": "model"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}

Example 2: Response contains no validation errors but a warning:

Current Behaviour Post Update Behavior
{}
{
  "title": "Success",
  "detail": "Success with warnings",
  "body_warnings": [
    {
      "attribute": "occasion",
      "tier": "config",
      "path": "/product_model/product_configs[0]/product_config_attributes/occasion",
      "message": "'Coloured' is not a valid value for occasion in outline low_shoe",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "status": 200,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}

2. Changes to existing Error Message structure

a. response field "code" is renamed to "status"

The response field "code" will be replaced with the "status" as was declared originally in the API spec.

Change Example:

Current Behaviour Post Update Behavior
{
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    {
      "attribute": "occasion",
      "tier": "config",
      "path": "product_model/product_configs[0]/product_config_attributes/occasion",
      "message": "'Coloured' is not a valid value for occasion in outline low_shoe",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "code": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
} 
{
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    {
      "attribute": "occasion",
      "tier": "config",
      "path": "/product_model/product_configs[0]/product_config_attributes/occasion",
      "message": "'Coloured' is not a valid value for occasion in outline low_shoe",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
} 

b. Structure of Error Messages (in body_errors) will change

Error Messages will be restructured for better readability and contain the following new elements:

  • Attribute: calls out the attribute_label which caused the error
  • Message: a detailed description of what caused the error
  • Path: helps locate the error within the submission, following the logical structure of a submission e.g. in the second example below, the path "/product_model/product_configs[0]/product_simples[3]/product_simple_attributes/ean" indicates that the issues lies with the attribute “EAN” which is located at simple level.
  • Tier: the level at which the error is located - can be model/ config or simple.
  • Reference: Links to further documentation that helps resolve the error.

→ Impact: This more human-readable error structure will help locate, understand and hence resolve errors faster.

Change Examples
Example 1: Error due to target_gender incorrect

Given the following submission body, where the specified value for target_genders is incorrect:

 {
  "outline": "bag",
  "product_model": {
    "merchant_product_model_id": "some model id",
    "product_model_attributes": {
      "target_genders": [
        "target_gender_male;target_gender_female"
      ]
    }
  }
}
Current Behaviour Post Update Behavior
{
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    {
      "error": "Invalid gender: target_gender_male;target_gender_female",
      "path": "0"
    },
    {
      "error": "Invalid gender: target_gender_male;target_gender_female",
      "path": "1"
    },
    {
      "error": "Invalid gender: target_gender_male;target_gender_female",
      "path": "2"
    },
    {
      "error": "Invalid gender: target_gender_male;target_gender_female",
      "path": "3"
    },
    {
      "error": "Invalid gender: target_gender_male;target_gender_female",
      "path": "4"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
} 
{
  "title": "Bad Request",
  "detail": "Bad Request: validation errors found",
  "body_errors": [
    {
      "attribute": "target_genders",
      "tier": "model",
      "path": "/product_model/product_model_attributes/target_genders",
      "message": "'target_gender_male;target_gender_female' is not a valid value for target_genders in outline bag",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
} 

Example 2: Error due to duplicate EANs

Current Behaviour Post Update Behavior
 {
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    {
      "offending_ids": [
        "8445497420559"
      ],
      "error_description": "Submission contains duplicate eans within the same model"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}   
{
  "title": "Bad Request",
  "detail": "Bad Request: validation errors found",
  "body_errors": [
    {
      "attribute": "ean",
      "tier": "simple",
      "path": "[/product_model/product_configs[0]/product_simples[3]/product_simple_attributes/ean, /product_model/product_configs[0]/product_simples[4]/product_simple_attributes/ean]",
      "message": "same ean 8445497420559 found in multiple simples",
      "reason": "DUPLICATE_IDENTIFIERS",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#duplicate_identifiers"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}  

c. Error path fields will now start with /

The value in the error path field will from now on be specified in JsonPointer format, which means it will start with '/' (whereas before it did not appear at the start).

Current Behaviour Post Update Behavior
{
  "title": "Bad Request",
  "detail": "Wrong body format",
  "body_errors": [
    {
      "attribute": "occasion",
      "tier": "config",
      "path": "/product_model/product_configs[0]/product_config_attributes/occasion",
      "message": "'Coloured' is not a valid value for occasion in outline low_shoe",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "code": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
} 
{
  "title": "Bad Request",
  "detail": "Bad Request",
  "body_errors": [
    {
      "attribute": "occasion",
      "tier": "config",
      "path": "/product_model/product_configs[0]/product_config_attributes/occasion",
      "message": "'Coloured' is not a valid value for occasion in outline low_shoe",
      "reason": "UNSUPPORTED_VALUE",
      "reference": "https://developers.merchants.zalando.com/docs/product-submission-validation.html#unsupported_value"
    }
  ],
  "status": 400,
  "contact": "support-onboarding@zalando.de",
  "flow_id": "some-flow-id"
}  

3. Extended Error Scope

a. Blank outline identifiers now cause errors

Currently, an error message is returned if any of the following is missing from a request body, but not if an empty string is supplied.

  • outline
  • merchant_product_model_id
  • merchant_product_config_id
  • merchant_product_simple_id

After this change, empty strings will be rejected, because the identifiers require a string of at least one character.

→ Impact: Currently, if an empty string is supplied, the API would let this submission “pass” but the article would then be rejected a few minutes later with a PSERR Error. With the January 2025 release, the API will no longer let such a submission pass, which will help identify such issues sooner.

b. Outlines that are not in scope of partner master data, now cause errors

Currently, a partner can attempt a submission, for any outline, and this will be accepted initially by the Merchant Product Submission API, however the product will be rejected and a PSERR error will be associated with the product and reported in zDirect Article Listing.

After this change…
→ Impact: A submission for an outline that is not applicable for the partner, will cause an error from the Merchant Product Submission API.

c. Invalid EAN values now cause errors

Currently, the Merchant Product Submission API accepts a submission, if it contains an invalid GTIN-13 barcode value for "ean", however the product will be rejected and a PSERR error will be associated with the product and reported in zDirect Article Listing.

After this change…
→ Impact: a submission with invalid values for "EAN" field, will cause an error from the Merchant Product Submission API.

Contact Support