Skip to content

Product Feed ​

Products are fetched in the same way as order feeds. Use the same product id here as on order rows, so reviews are paired with the correct product.

The response should be a JSON object like the example below.

All fields are overwritten with the last fetched value, so optional fields must be omitted when the feed does not include them. Translations are updated per language: a language left out of i18n stays as it is.

To clear a field, use an empty string "" for string fields (gtin, mpn, imageUrl) or null for object/reference fields (manufacturer, groupId, url).

Google Shopping XML feeds are also accepted. Contact us if you already have a feed set up, as it might be applicable with minor adjustments.

Example Data Structure ​

json
{
    "nextCursor": 1709547430,
    "products": [
        {
            "id": "SKU123", // required. Your product id as a string. Must match the id on order rows
            "name": "Example jacket", // default-language name. See Translations
            "url": "https://www.example.se/products/example-jacket", // optional product page URL for the default language
            "price": "199.00", // amount without a currency code. String or number, up to two decimals
            "imageUrl": "https://www.example.se/images/example-jacket.jpg", // midsize, about 300–400px
            "isActive": true,
            "releaseDate": "2024-03-04T10:17:00Z", // ISO 8601, "YYYY-MM-DD", or a unix timestamp
            "gtin": "01234567890123", // Global Trade Item Number (EAN)
            "mpn": "EJ-100", // manufacturer part number
            "groupId": "JACKET-100", // shared by variants that should share reviews, such as colors of the same model. null removes the product from its group
            "manufacturer": { // null clears the manufacturer
                "id": "M100", // required
                "name": "Example Brand"
            },
            "categories": [ // replaces the product's category list. [] clears it. Omit the field to keep the current list
                {
                    "id": "outerwear", // required
                    "name": "Outerwear", // default-language name
                    "parent": { // optional parent category, same shape, imported with the product
                        "id": "clothing",
                        "name": "Clothing"
                    },
                    "i18n": { // optional translations. See Translations
                        "en": {
                            "name": "Outerwear"
                        }
                    }
                }
            ],
            "meta": { // product attributes. See Attributes
                "size": "M"
            },
            "i18n": { // additional languages. See Translations
                "en": {
                    "name": "Example jacket", // required for each language
                    "url": "https://www.example.com/products/example-jacket"
                },
                "de": {
                    "name": "Beispieljacke",
                    "url": "https://www.example.de/products/beispieljacke"
                }
            }
        }
    ]
}

Only id is required. Every other field is optional.

Translations ​

Each product import has a default language, a two-letter ISO 639-1 code such as sv or en. When i18n does not include the default language, the top-level name and url are stored as that language. At least one of those three must be present for a default-language translation to be created or updated.

Put every other language in i18n. Keys are lowercase two-letter language codes. Each entry needs name. url is optional.

When i18n includes the import's default language, that entry is the translation stored for the default language.

Languages you include are created or updated. Languages left out of the response stay as they are, so a later response can send only id and i18n to add a language:

json
{
    "nextCursor": null,
    "products": [
        {
            "id": "SKU123",
            "i18n": {
                "de": {
                    "name": "Beispieljacke",
                    "url": "https://www.example.de/products/beispieljacke"
                }
            }
        }
    ]
}

Categories use the same pattern. name on the category are the default language. Further languages go in the category's i18n object, with name.

Attributes ​

meta holds product attributes. size is the supported attribute. Use the same kind of value as the Google Merchant Center size attribute, for example M, 42, or 10 cm.

When a product has meta.size, the review form asks how the size was perceived.

Omit meta to keep the size already stored. size is the only key accepted in meta.

Categories ​

Send the categories the product belongs to, including parents, so the full path is available. A category needs id. name, parent, and i18n are optional.

Sending categories replaces the links for that product. An empty array removes them. Omit categories to keep the current links.

The same category id can appear on many products. Name, slug, parent, and translations are stored on the category, so send the same values wherever that category appears.