Upload Products

To upload products in your catalog, you need, as a prerequisite, to get an access token.
The steps to get a token are described in the Authentication and tokens page.

Once you are authenticated, you are able to upload products to your catalogue

Upload your first product

Now that you are authenticated, you can upload your first product via our REST API which is an HTTPS POST request to the Product Upsert API: Product Upsert

To send your product data to the SupplierXM platform, standard XML and JSON templates are provided.
These files may differ depending on the SupplierXM product category you choose for your products.

You can find examples of these standard files for the SupplierXM product category you are using, and the documentation for each attribute in the Attributes documentation.

Mandatory attributes:

  • GLN
  • GTIN
  • nameLegal or namePublicLong or namePublicShort

Attributes limited in Size:

  • namePublicLong is limited to 200 characters
  • namePublicShort is limited to 35 characters
>> replace 03036811359935 with your own gtin :)
>> add your access token to the HTTP header 

curl -H 'Authorization: Bearer SALSIFY_TOKEN' -XPOST 'https://apis.supplierxm.salsify.com/public/v1/products' -d '{
    "data": [
            "gtin": "03036811359935",
            "namePublicLong": [
                    "data": "Marmite Yeast Extract 250G",
                    "expressedIn": {
                        "code": "eng-GB",
}' -H 'Content-Type: application/json'

>> {"tracking": TRACKING_ID}

Bypassing SupplierXM mandatory rules

The SupplierXM standard import also provides a way for manufacturers to disable a control made of the platform. In order to do this, you only need to add a piece of XML just before the closing product tag.

      <ruleId><!-- the id of the rule --></ruleId>

This feature is also available in JSON:

  "data": [
      "gtin": "05555555555550", --> gtin of the product the change are applicables to
      "validationRules": [
          "rule_id": 7,
          "type": "ActivateValidationRule" --> To activate rule 7
          "rule_id": 34,
          "type": "DeactivateValidationRule" --> To deactivate rule 34

Available rules id

Rule ID

Field (Regulatory Rule)


netContent (INCO)


originText (INCO)


ratioAlcohol (INCO)


compulsoryStatements (CELEX)


netContent (CELEX)


originText (CELEX)


hazardPictograms (CELEX)


periodAfterOpening (CELEX)


compulsoryStatements (CLP)


composition (CLP)


hazardPictograms (CLP)


advices (2009/48/CE)


compulsoryStatements (2009/48/CE)


advices (767/2009)


drainedWeight (GDSN)


unitedNationsDangerousGoodsNumberCode (GDSN)


advices (INCO)


composition (INCO)


allergens (INCO)


conservations (INCO)


isPartitionedBy (INCO)

Get the upload status

Once a product is uploaded on SupplierXM platform through API, a tracking Id is provided to follow upload status:

    "tracking": 347269

The tracking Id can be used then to check import status.
It remains always valid.
More information on how to use it can be found in API reference: Product inbound tracking

Upload logistical hierarchies


Understanding logistical trees

If you have not already, please read the Understanding logistical trees page

As described in the documentation (link above), logistical hierarchies can be uploaded (creation or update) under the logisticalHierarchies field in the inbound API.

Upload assets

Assets need to be uploaded in the "asset" key.
More information on pictures is provided in the Media assets documentation.

Assets can not be deleted once uploaded.
It is possible anyway to set an expiration date during asset import with the field fileEffectiveEndDateTime.

Updating an asset will erase all his attributes, thus, it is required to update all attributes if one of them has to be updated.
Any attribute's update contained in assets.pictures will update the updatedAt field of assets.pictures.

You should at least provide the URL of the picture to download in the field url.

    "data": [
            "gtin": "03571996445009",
            "assets": {
                "pictures": [
                        "isPackshot": true,
                        "url": "https://stream.alkemics.com/images/logo-inverse.781f93875f9c12548f1a45118dde00b1.png"
                        "isPackshot": false,
                        "url": "https://stream.alkemics.com/images/logo-inverse.781f93875f9c12548f1a45118dde00b1.png"

Upload specific data

If the data can be adapted to a retailer, the data is seen as specific and can be added to the specificData node.
To upload or update this specific data, you’ll have to specify the adapted data in the specificData.data field and also specify for which retailer the data is sent in the targetOrganization.id field.

  "data": [
      "gtin": "05555555555550", --> gtin of the product the change are applicables to
      "specificData": [
          "data": {
            "namePublicShort": [
                "expressedIn": {
                  "code": "eng-GB"
                "data": "adapted description of my product" --> adapted data for my retailer
          "targetOrganization": { "id": 1234 } --> id of the retailer

Upload Textile variants


Understanding the variants

If you have not already, please read the Understand the variants page

As described in the documentation (link above), textile variants can be uploaded (creation or update) by specifying the variant in the list attribute textileVariantList in the inbound API.

More information are provided in the above link.

API References

public/v1/products: Upload Products

What’s Next