Skip to main content
POST
/
products
/
create
Products Create
curl --request POST \
  --url https://api-v2.production.higg.org/pic-api/v1/products/create \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --header 'x-developer-request-token: <api-key>' \
  --data '
{
  "name": "<string>",
  "materials": [
    {
      "netUse": 123,
      "materialId": "<string>",
      "composition": 123
    }
  ],
  "weight": 123,
  "weightMeasureUnit": "kilograms",
  "weightIsPrimaryData": true,
  "productCategory": "<string>",
  "size": "<string>",
  "taxonomyId": "<string>",
  "packaging": [
    {
      "packagingId": "<string>",
      "amount": 123
    }
  ],
  "components": [
    {
      "componentId": "<string>",
      "unit": 123
    }
  ],
  "identifier": "<string>",
  "identifierType": "GTIN",
  "tags": [
    "<string>"
  ],
  "purchaseOrder": [
    {
      "purchaseOrderId": "<string>",
      "purchaseDate": "<string>",
      "amountPurchase": 123,
      "assembly": {
        "femId": "<string>"
      }
    }
  ],
  "frenchLabelOptionalFields": {
    "countrySpinning": {
      "code": "<string>",
      "name": "<string>"
    },
    "upcycled": true,
    "price": 123,
    "numberOfReferences": 123,
    "business": "small-business"
  },
  "isMaterialWeight": true,
  "categoryExpansionId": "<string>"
}
'
{
  "_id": "<string>",
  "name": "<string>",
  "weightInformation": {
    "convertedToKg": 123,
    "weight": 123,
    "unit": "kilograms",
    "isPrimaryData": true
  },
  "type": "<string>",
  "createdOn": {},
  "user": {
    "_id": "<string>",
    "email": "<string>",
    "firstname": "<string>",
    "lastname": "<string>"
  },
  "account": {
    "_id": "<string>",
    "name": "<string>",
    "country": "<string>",
    "sacId": 123,
    "oar_id": "<string>",
    "demoaccount": true,
    "vbType": "None",
    "socialCreditId": "<string>",
    "taxId": "<string>",
    "bluesignId": "<string>",
    "zdhcId": "<string>",
    "ipeViolation": {
      "totalViolations": 123
    },
    "ffcId": 123,
    "approvalStatus": "Approved"
  },
  "materials": [
    {
      "name": "<string>",
      "netUse": 123,
      "materialId": "<string>",
      "composition": 123,
      "weightInformation": {
        "convertedToKg": 123,
        "weight": 123,
        "unit": "kilograms",
        "netWeight": 123
      },
      "isMsiMaterial": true,
      "isPicMaterialLibrary": true,
      "code": "<string>",
      "dataSource": "<string>",
      "isOutdated": true,
      "description": "<string>",
      "impacts": {
        "tier4Impact": 123,
        "tier2and3Impact": 123,
        "totalMaterialLibrary": 123,
        "totalTierImpact": 123,
        "uncertainty": {
          "lower": 123,
          "upper": 123
        }
      }
    }
  ],
  "materialImpact": 123,
  "tier1Impact": 123,
  "packagingImpact": 123,
  "logisticsImpactsUpstreamTD": 123,
  "logisticsImpactsDTImpact": 123,
  "logisticsImpactsDCImpact": 123,
  "logisticsImpactsRetailImpact": 123,
  "productCareImpacts": 123,
  "endOfUseImpact": 123,
  "_rev": "<string>",
  "version": "<string>",
  "productType": "<string>",
  "productCategory": "<string>",
  "packagingWeight": {
    "convertedToKg": 123,
    "weight": 123,
    "unit": "kilograms",
    "isPrimaryData": true
  },
  "modelNumber": "<string>",
  "barcodes": [
    "<string>"
  ],
  "dataSource": "<string>",
  "modifiedOn": {},
  "deleted": true,
  "modifiedBy": {
    "_id": "<string>",
    "email": "<string>",
    "firstname": "<string>",
    "lastname": "<string>"
  },
  "deletedBy": {
    "_id": "<string>",
    "email": "<string>",
    "firstname": "<string>",
    "lastname": "<string>"
  },
  "defaultProduct": {
    "defaultProductId": "<string>",
    "name": "<string>"
  },
  "components": [
    {
      "name": "<string>",
      "componentId": "<string>",
      "unit": 123,
      "weightInformation": {
        "convertedToKg": 123,
        "weight": 123,
        "unit": "kilograms",
        "isPrimaryData": true
      },
      "isMsiComponent": true,
      "isOutdated": true,
      "dataSource": "<string>",
      "description": "<string>",
      "impacts": {
        "tier4Impact": 123,
        "tier2and3Impact": 123,
        "totalMaterialLibrary": 123,
        "totalTierImpact": 123,
        "uncertainty": {
          "lower": 123,
          "upper": 123
        }
      }
    }
  ],
  "packaging": [
    {
      "packagingId": "<string>",
      "amount": 123,
      "name": "<string>",
      "weightInformation": {
        "convertedToKg": 123,
        "weight": 123,
        "unit": "kilograms",
        "isPrimaryData": true
      },
      "isMsiPackaging": true,
      "isOutdated": true,
      "code": "<string>",
      "dataSource": "<string>",
      "description": "<string>",
      "impacts": {
        "tier4Impact": 123,
        "tier2and3Impact": 123,
        "totalMaterialLibrary": 123,
        "totalTierImpact": 123,
        "uncertainty": {
          "lower": 123,
          "upper": 123
        }
      }
    }
  ],
  "notes": "<string>",
  "purchaseOrder": [
    {
      "_id": "<string>",
      "assembly": {
        "isDefault": true,
        "femId": "<string>",
        "facilityName": "<string>",
        "finalAssemblyRawText": "<string>",
        "surveyVersion": "<string>",
        "finalAssemblyImpacts": 123,
        "printingProductDyeingImpacts": 123,
        "totalNormalizedImpacts": 123,
        "sipfacilitytype": [
          "<string>"
        ],
        "annualProd": "<string>",
        "country": "<string>",
        "femDescriptor": "<string>",
        "year": 123,
        "assessmentStatus": "NS"
      },
      "purchaseOrderId": "<string>",
      "purchaseDate": 123,
      "impactPerUnit": 123,
      "totalImpactPerUnit": 123,
      "pmVersion": "<string>",
      "msiVersion": "<string>",
      "version": "<string>",
      "amountPurchase": 123,
      "isOutdated": true,
      "impactsPerUnitMultiPack": {
        "materialImpact": 123,
        "tier1Impact": 123,
        "packagingImpact": 123,
        "logisticsImpactsUpstreamTD": 123,
        "logisticsImpactsDTImpact": 123,
        "logisticsImpactsDCImpact": 123,
        "logisticsImpactsRetailImpact": 123,
        "productCareImpacts": 123,
        "endOfUseImpact": 123,
        "totalProductImpacts": 123,
        "componentImpact": 123
      },
      "totalImpactsMultiPack": {
        "materialImpact": 123,
        "tier1Impact": 123,
        "packagingImpact": 123,
        "logisticsImpactsUpstreamTD": 123,
        "logisticsImpactsDTImpact": 123,
        "logisticsImpactsDCImpact": 123,
        "logisticsImpactsRetailImpact": 123,
        "productCareImpacts": 123,
        "endOfUseImpact": 123,
        "totalProductImpacts": 123,
        "componentImpact": 123
      },
      "impactsPerUnit": {
        "materialImpact": 123,
        "tier1Impact": 123,
        "packagingImpact": 123,
        "logisticsImpactsUpstreamTD": 123,
        "logisticsImpactsDTImpact": 123,
        "logisticsImpactsDCImpact": 123,
        "logisticsImpactsRetailImpact": 123,
        "productCareImpacts": 123,
        "endOfUseImpact": 123,
        "totalProductImpacts": 123,
        "componentImpact": 123
      },
      "totalImpacts": {
        "materialImpact": 123,
        "tier1Impact": 123,
        "packagingImpact": 123,
        "logisticsImpactsUpstreamTD": 123,
        "logisticsImpactsDTImpact": 123,
        "logisticsImpactsDCImpact": 123,
        "logisticsImpactsRetailImpact": 123,
        "productCareImpacts": 123,
        "endOfUseImpact": 123,
        "totalProductImpacts": 123,
        "componentImpact": 123
      }
    }
  ],
  "purchaseOrderImpactsTotal": {
    "materialImpact": 123,
    "tier1Impact": 123,
    "packagingImpact": 123,
    "logisticsImpactsUpstreamTD": 123,
    "logisticsImpactsDTImpact": 123,
    "logisticsImpactsDCImpact": 123,
    "logisticsImpactsRetailImpact": 123,
    "productCareImpacts": 123,
    "endOfUseImpact": 123,
    "totalProductImpacts": 123,
    "componentImpact": 123
  },
  "componentImpact": 123,
  "upstreamTransportation": 123,
  "downstreamTransportationRetail": 123,
  "downstreamTransportationConsumer": 123,
  "distributionCenterUnOwned": 123,
  "retailEnergyUnOwned": 123,
  "frenchLabelManufacturingCountry": {
    "code": "<string>",
    "name": "<string>"
  },
  "frenchLabelFabricCountry": {
    "code": "<string>",
    "name": "<string>"
  },
  "frenchLabelDyeingCountry": {
    "code": "<string>",
    "name": "<string>"
  },
  "frenchLabelOptionalFields": {
    "countrySpinning": {
      "code": "<string>",
      "name": "<string>"
    },
    "upcycled": true,
    "price": 123,
    "numberOfReferences": 123,
    "business": "small-business"
  },
  "frenchLabelEligibility": {
    "eligible": true,
    "reasons": [
      {
        "category": "ProductType",
        "message": "<string>"
      }
    ]
  },
  "frenchLabelEcoScore": {
    "score": 123,
    "impacts": {
      "acd": 123,
      "cch": 123,
      "etf": 123,
      "etfC": 123,
      "fru": 123,
      "fwe": 123,
      "htc": 123,
      "htcC": 123,
      "htn": 123,
      "htnC": 123,
      "ior": 123,
      "ldu": 123,
      "mru": 123,
      "ozd": 123,
      "pco": 123,
      "pma": 123,
      "swe": 123,
      "tre": 123,
      "wtu": 123,
      "ecs": 123,
      "pef": 123
    },
    "createdAt": 123,
    "updatedAt": 123,
    "impactsPercentageContribution": {
      "acd": 123,
      "cch": 123,
      "etf": 123,
      "etfC": 123,
      "fru": 123,
      "fwe": 123,
      "htc": 123,
      "htcC": 123,
      "htn": 123,
      "htnC": 123,
      "ior": 123,
      "ldu": 123,
      "mru": 123,
      "ozd": 123,
      "pco": 123,
      "pma": 123,
      "swe": 123,
      "tre": 123,
      "wtu": 123,
      "ecs": 123,
      "pef": 123
    },
    "status": "Pending",
    "apiVersion": "<string>",
    "apiResponseError": "<string>"
  }
}
Use this endpoint to create new products in your PIC product library. To create a product, you must specify the name, weight, category, size, and materials. Other attributes, such as taxonomy ID, packaging, components, and identifiers, are optional or may be required in specific scenarios. Please refer to the French Eco-Score page for specific requirements to generate scores.

Create a product in PIC

Download our Postman collection example for product creation here.
  1. Use the endpoint get categories to retrieve the list of supported product categories.
  2. Use the endpoint get available sizes to retrieve the list of supported sizes for a given product category.
{
    "productSize":
    [
        "{{size}}"
    ],
    "categoryExpansionId":
    [
        "{{categoryExpansionId}}"
    ]
}
  1. Use the endpoint post materials search to retrieve the material options that are available.
{
    "textSearch": "{{text}}",
    "from": 1,
    "size": 10
}
  1. Use the endpoint post components search to retrieve the component options that are available.
{
    "textSearch": "{{text}}",
    "from": 1,
    "size": 10
}
  1. Use the endpoint post packaging search to retrieve the packaging options that are available.
{
    "textSearch": "{{text}}",
    "from": 1,
    "size": 10
}
  1. Use the endpoint get countries for eco scores to retrieve valid locations for manufacture, finishing, and textile formation for the French Eco-Score.
  2. Now you have all the elements needed to create your product entry. Note that some elements are completely optional, while others are required when calculating the French Eco-Score.
{
    "name": "product name",
    "weight": 1,
    "weightMeasureUnit": "kilograms",

   // Required for French Eco-Score
   "weightIsPrimaryData": true,
   "frenchLabelCountry": {
     "code": "FR",
     "name": "France"
   },
   "frenchLabelDyeingCountry": {
     "code": "CN",
     "name": "China"
   },
   "frenchLabelFabricCountry": {
     "code": "IN",
     "name": "India"
   },
   "frenchLabelOptionalFields": {
     "business": "small-business",
     "countrySpinning": {
       "code": "CN",
       "name": "China"
     },
     "numberOfReferences": 100,
     "price": 20,
     "upcycled": true
   },

    "categoryExpansionId": "ApparelAccessories-SleepwearLoungewear-PajamaBottoms",
    "size": "Adult",
    "taxonomyId": "{{productDefaultId}}",
    "packaging":
    [
        {
            "amount": 123,
            "packagingId": "and"
        }
    ],
    "components":
    [
        {
            "componentId": "asd",
            "unit": 1
        }
    ],
    "materials":
    [
        {
            "netUse": 70,
            "materialId": "asd",
            "composition": 100
        }
    ],
    "identifier": "test",
    "identifierType": "GTIN",
    "tags":
    [
        "product-label"
    ],
    "purchaseOrder":
    [
        {
            "purchaseOrderId": "id purchase order",
            "purchaseDate": "YYYY-mm-dd",
            "amountPurchase": 1,
            "assembly":
            {
                "femId": "fem-assessment-id"
            }
        }
    ]
}

Request body properties

Field NameData TypeDescription
namestring[REQUIRED] The name of the product.
materialsArray<MaterialsData>[REQUIRED] List of materials used in the product. Each item requires materialId and netUse.
weightnumber[REQUIRED] The weight of the product. Condition: Required if isMaterialWeight is false or undefined.
weightMeasureUnitstring (enum)[REQUIRED] Unit of measure for the weight (e.g., “grams”, “kilograms”). Defaults to “grams”.
isMaterialWeightbooleanIf true, the product weight is calculated from the sum of its materials. If false, explicit weight is required.
productCategorystring[DEPRECATED] The category of the product (e.g., “Apparel”, “Footwear”). Use categoryExpansionId instead.
categoryExpansionIdstring[REQUIRED] The product category code.
sizestring[REQUIRED] The size of the product.
taxonomyIdstringID referring to a specific taxonomy entry. Used to identify the default product type.
packagingArray<PackagingData>List of packaging items associated with the product.
componentsArray<ComponentData>List of components associated with the product.
identifierstringExternal identifier for the product (e.g., SKU).
identifierTypestring (enum)Type of the identifier (e.g., GTIN, SKU, UPC, OTHER).
tagsArray<string>List of tags for categorization or filtering.
purchaseOrderArray<POData>List of purchase orders to associate with the product upon creation.
frenchLabelCountryobject<code, name>[FRENCH ECO-SCORE] The product’s final assembly location. Check the location list here.
frenchLabelDyeingCountryobject<code, name>[FRENCH ECO-SCORE] The product’s preparation, dyeing, and finishing location. Check the location list here.
frenchLabelFabricCountryobject<code, name>[FRENCH ECO-SCORE] The product’s textile formation location. Check the location list here.
frenchLabelOptionalFieldsobject[FRENCH ECO-SCORE] Optional fields for durability and scoring, including business, countrySpinning, numberOfReferences, price, and upcycled.
weightIsPrimaryDataboolean[FRENCH ECO-SCORE] Indicates if the weight data is primary data.

Implementation details

  • Weight validation: The API explicitly checks if isMaterialWeight is false. If so, weight must be provided. If weight is provided, weightMeasureUnit defaults to grams if not specified.
  • Purchase orders: If provided, purchase orders are validated. If an assembly is included in the PO data, it checks for a valid femId (FEM assessment ID).

Authorizations

x-api-key
string
header
required
x-developer-request-token
string
header
required

Body

application/json
name
string
required
materials
object[]
required
weight
number<double> | null
weightMeasureUnit
enum<string>
Available options:
kilograms,
grams,
milligram,
pound,
ounce
weightIsPrimaryData
boolean | null
productCategory
string | null
size
string | null
taxonomyId
string | null
packaging
object[] | null
components
object[] | null
identifier
string | null
identifierType
enum<string>
Available options:
GTIN,
SKU,
UPC,
OTHER
tags
string[] | null
purchaseOrder
object[] | null
frenchLabelCountry
object

Determines what country this product was made in, for the French Label Eco-Scores.

frenchLabelDyeingCountry
object

Determines what country this product was dyed in, for the French Label Eco-Scores.

frenchLabelFabricCountry
object

Determines what country this product was woven or knitted in, for the French Label Eco-Scores.

frenchLabelOptionalFields
object

Optional durability fields for the French Label Eco-Score, gated by EnableFrenchEcoOptionalFields config key.

isMaterialWeight
boolean | null
categoryExpansionId
string | null

Response

200 - application/json

Ok

API light version of a CorpRepProductEntity for the API. Ideally we would do this with a Pick or Omit, but tsoa doesn't recognice those

_id
string
required
name
string
required
weightInformation
object
required

corpRep weight information

type
string
required
createdOn
object
required
user
object
required

This interface was referenced by Exports's JSON-Schema via the definition "userRef".

account
object
required

This interface was referenced by Exports's JSON-Schema via the definition "accountRef".

materials
object[]
required
materialImpact
number<double>
required
tier1Impact
number<double>
required
packagingImpact
number<double>
required
logisticsImpactsUpstreamTD
number<double>
required
logisticsImpactsDTImpact
number<double>
required
logisticsImpactsDCImpact
number<double>
required
logisticsImpactsRetailImpact
number<double>
required
productCareImpacts
number<double>
required
endOfUseImpact
number<double>
required
_rev
string | null
version
string | null
productType
string | null
productCategory
string | null
packagingWeight
object

corpRep weight information

modelNumber
string | null
barcodes
string[] | null
dataSource
string | null
modifiedOn
object
deleted
boolean | null
modifiedBy
object

This interface was referenced by Exports's JSON-Schema via the definition "userRef".

deletedBy
object

This interface was referenced by Exports's JSON-Schema via the definition "userRef".

defaultProduct
object
components
object[] | null
packaging
object[] | null
notes
string | null
purchaseOrder
object[] | null
purchaseOrderImpactsTotal
object

corpRep weight information

componentImpact
number<double> | null
upstreamTransportation
number<double> | null
downstreamTransportationRetail
number<double> | null
downstreamTransportationConsumer
number<double> | null
distributionCenterUnOwned
number<double> | null
retailEnergyUnOwned
number<double> | null
frenchLabelManufacturingCountry
object

Determines what country this product was made in, for the French Label Eco-Scores.

frenchLabelFabricCountry
object

Determines what country this product was woven or knitted in, for the French Label Eco-Scores.

frenchLabelDyeingCountry
object

Determines what country this product was dyed in, for the French Label Eco-Scores.

frenchLabelOptionalFields
object

Optional durability fields for the French Label Eco-Score, gated by EnableFrenchEcoOptionalFields config key.

frenchLabelEligibility
object

Store information on whether a product is eligible for French Label Eco-Scores.

frenchLabelEcoScore
object

Determines the environmental impacts of a product based on mass, composition, place of manufacture, etc. (See https://ecobalyse.beta.gouv.fr/#/api)