Validating custom fields
When importing entities into the product catalog, Newstore validates all imported entities.
However, some of the product fields can contain properties like
additional_attributes
or external_identifiers
, the values of which NewStore cannot validate
other than explicit validation rules. For example, if a number has been entered for a field additional_attributes
that only accepts strings, NewStore will return an error. However, no other validation rules can be applied to
check if a string entered as the value for the field is valid.
For retailers, these arbitrary fields can hold information critical for selling activities.
For example, external_identifiers
contain the ean
value that are used to scan items when selling them.
If an ean
is missing or invalid, the item will not be found by the scanner.
To prevent such cases Newstore provides an option to attach a custom schema for each imported product.
{
"head": {
"locale": "en-us",
"shop": "storefront-catalog-en",
"is_master": true
},
"items": [
{
"product_id": "TEST_EGE",
"validation": {
"schema_id": "ISd8f52b9f83c360cbc1c5"
},
"external_identifiers": [
{
"type": "sku",
"value": "TEST_RDYWUNVSRCTKFQK"
},
{
"type": "ean0",
"value": "34362890646072"
}
],
"variant_group_id": "TEST_STYLE_UK",
"extended_attributes": [
{
"name": "material",
"value": "Steel"
},
{
"name": "gender",
"value": "male"
}
]
}
]
}
In the example above, every product contains a validation object that holds the schema ID. It is used as a reference to the schema for product validation.
The schema must exist in the platform before you actually run an import with the attached schema. Missing validation schema will cause the product import to fail.
Creating a custom schema​
You can create a custom schema via the Catalog Schema API. You can also find a list of fields to use for validation and more details about the format of the schema.
JSON Schema is an industry standard. You can use various free tools to check the schema before deploying to production.
A custom created schema checks for:
- An existing
external_identifiers
property - The
external_identifiers
property must contain 2 items - The
external_identifiers
property must only contain unique items - 1 item must be
sku
with the value being a minimum length of1
and maximum255
- 1 item must be
ean
with the value being a minimum length of1
and maximum255
curl --location 'https://{tenant}.p.newstore.net/catalog/import-schemas' \
--header 'Content-Type: application/json-schema' \
--header 'Authorization: ••••••' \
--data '{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["external_identifiers"],
"properties": {
"external_identifiers": {
"type": "array",
"minItems": 2,
"uniqueItems": true,
"items": {
"oneOf": [
{
"type": "object",
"required": ["type", "value"],
"properties": {
"type": {
"type":"string",
"minLength":1,
"pattern": "^sku$"
},
"value": {
"type":"string",
"minLength":1,
"maxLength": 255
}
}
}, {
"type": "object",
"required": ["type", "value"],
"properties": {
"type": {
"type":"string",
"minLength":1,
"pattern": "^ean$"
},
"value": {
"type":"string",
"minLength":1,
"maxLength": 255
}
}
}
]
}
}
}
}'
This API call responds with the schema ID, which you can then use in your import jobs.
{
"id": "ISd8f52b9f83c360cbc1c5",
"last_updated_at": "2024-08-02T14:02:13.416604803Z"
}
Authorisation token for this request requires two additional scopes.
catalog:import-schemas:read
catalog:import-schemas:write
Schema updates are reflected in import jobs after 1 hour. Take this into consideration when making updates to the schema. These updates may not be reflected immediately.
Checking the import status​
After you have created and deployed a custom schema, you can check the status of the import.
The import fails if any of the products do not match against the schema. You can find the reason for failure in the error responses of an import. Access these responses via the Import API.
curl --location 'https://{tenant}.p.newstore.net/v0/d/import/89b70a65-2413-4ecd-8e0b-42cc838f19e0/errors' \
--header 'Authorization: ••••••'
This call returns the errors:
{
"items": [
{
"created_at": "2024-07-23T07:48:04.350065Z",
"entity_id": "TEST_EGE",
"entity_type": "products",
"reason": "Field: external_identifiers.1, Must validate one and only one schema (oneOf);
Field: external_identifiers.1.type, Does not match pattern '^sku$'"
}
]
}
In the above example, you can see the message containing a validation error.
In this case element 1 in the array (arrays are indexed from 0, and at 0 we have sku
, at 1 we have ean0
)
does not match any of requested patterns either for sku
or for ean
.
To resolve the error, the external identifier at index 1 must be changed to type ean
and not ean0
.