> ## Documentation Index
> Fetch the complete documentation index at: https://developer.worldly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Product

> Updates an existing product.

Use this endpoint to update an existing product in your PIC product library.

<Card title="PIC - Update Product with French Eco-Score requirements" href="/recipes/french-eco-score-update" />

<Note>
  Download our Postman collection example for product creation [here](https://drive.usercontent.google.com/uc?id=1n2jnTuNPg4VrbnYHnS7oXB2Jan-R5xT1\&export=download).
</Note>

### Request body properties

| Name                        | Type                   | Description                                                                                                                                                                          |
| :-------------------------- | :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                      | `string`               | New name for the product.                                                                                                                                                            |
| `weight`                    | `number`               | New weight. **Condition**: If updated, and `isMaterialWeight` is `false`, this field is required.                                                                                    |
| `weightMeasureUnit`         | `string (enum)`        | Unit for the weight.                                                                                                                                                                 |
| `isMaterialWeight`          | `boolean`              | Toggle whether weight is calculated from materials.                                                                                                                                  |
| `taxonomyId`                | `string`               | Update taxonomy ID.                                                                                                                                                                  |
| `size`                      | `string`               | Update product size.                                                                                                                                                                 |
| `productCategory`           | `string`               | **\[DEPRECATED]** The category of the product. Use `categoryExpansionId` instead.                                                                                                    |
| `categoryExpansionId`       | `string`               | The product category code.                                                                                                                                                           |
| `packaging`                 | `Array<PackagingData>` | Replace packaging list. Each item requires `packagingId` and `amount`.                                                                                                               |
| `materials`                 | `Array<MaterialsData>` | Replace materials list. Each item requires `materialId` and `netUse`.                                                                                                                |
| `components`                | `Array<ComponentData>` | Replace components list. Each item requires `componentId` and `unit`.                                                                                                                |
| `addPurchaseOrder`          | `Array<POData>`        | Add new purchase orders to the product. Items include `purchaseOrderId`, `purchaseDate`, `amountPurchase`, and `assembly` (with `femId`).                                            |
| `updatePurchaseOrder`       | `Array<POData>`        | Update existing purchase orders. Items require `_id`.                                                                                                                                |
| `removePurchaseOrder`       | `Array<string>`        | List of purchase order IDs (`_id`) to remove.                                                                                                                                        |
| `frenchLabelCountry`        | `object<code, name>`   | **\[FRENCH ECO-SCORE]** The product's final assembly location. Check the location list [here](/api-reference/pic/french-eco-scores/get-manufacturing-countries).                     |
| `frenchLabelDyeingCountry`  | `object<code, name>`   | **\[FRENCH ECO-SCORE]** The product's preparation, dyeing, and finishing location. Check the location list [here](/api-reference/pic/french-eco-scores/get-manufacturing-countries). |
| `frenchLabelFabricCountry`  | `object<code, name>`   | **\[FRENCH ECO-SCORE]** The product's textile formation location. Check the location list [here](/api-reference/pic/french-eco-scores/get-manufacturing-countries).                  |
| `frenchLabelOptionalFields` | `object`               | **\[FRENCH ECO-SCORE]** Optional fields for durability and scoring. See the [Optional Fields](/api-reference/pic/french-eco-scores/optional-fields) reference for details.           |
| `weightIsPrimaryData`       | `boolean`              | **\[FRENCH ECO-SCORE]** Indicates if the weight data is primary data.                                                                                                                |

### Implementation details

* **Partial updates**: Most fields are optional. Providing them will update the value; omitting them usually leaves the existing value (standard PATCH/Update behavior), though the API treats this as a command object.
* **Purchase order logic**: The update logic for purchase orders is complex. You can `add`, `update`, and `remove` purchase orders in a single call.
  * `addPurchaseOrder`: Appends new purchase orders.
  * `updatePurchaseOrder`: Matches by `_id` and updates fields.
  * `removePurchaseOrder`: Removes purchase orders by `_id`.
* **FEM assessment IDs**: When adding or updating purchase orders with assembly data, ensure you use valid FEM assessment IDs for the `femId` field.


## OpenAPI

````yaml api-reference/openapi/french-eco.json POST /products/update/{productId}
openapi: 3.0.0
info:
  title: pic-api
  version: 1.0.0
servers:
  - url: https://api-v2.production.higg.org/pic-api/v1
    description: Production
  - url: https://api-v2.demo.higg.org/pic-api/v1
    description: Demo
security:
  - sec0: []
    sec1: []
paths:
  /products/update/{productId}:
    post:
      summary: Products Update
      operationId: ProductsUpdate
      parameters:
        - in: path
          name: productId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CorpRepApiUpdateProductRequest'
        required: true
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpRepApiProductEntity'
components:
  schemas:
    CorpRepApiUpdateProductRequest:
      properties:
        name:
          type: string
          nullable: true
        weight:
          type: number
          format: double
          nullable: true
        weightMeasureUnit:
          $ref: '#/components/schemas/MaterialMeasureUnit'
        weightIsPrimaryData:
          type: boolean
          nullable: true
        taxonomyId:
          type: string
          nullable: true
        size:
          type: string
          nullable: true
        productCategory:
          type: string
          nullable: true
        categoryExpansionId:
          type: string
          nullable: true
        packaging:
          items:
            $ref: '#/components/schemas/CorpRepProductPackagingRef'
          type: array
          nullable: true
        materials:
          items:
            $ref: '#/components/schemas/CorpRepProductMaterialsRef'
          type: array
          nullable: true
        components:
          items:
            $ref: '#/components/schemas/CorpRepProductComponentRef'
          type: array
          nullable: true
        addPurchaseOrder:
          items:
            $ref: '#/components/schemas/CorpRepApiPurchaseOrderData'
          type: array
          nullable: true
        updatePurchaseOrder:
          items:
            $ref: '#/components/schemas/PurchaseOrderTypeUpdateRequest'
          type: array
          nullable: true
        removePurchaseOrder:
          items:
            type: string
          type: array
          nullable: true
        frenchLabelCountry:
          $ref: '#/components/schemas/FrenchLabelManufacturingCountry'
        frenchLabelDyeingCountry:
          $ref: '#/components/schemas/FrenchLabelDyeingCountry'
        frenchLabelFabricCountry:
          $ref: '#/components/schemas/FrenchLabelFabricCountry'
        frenchLabelOptionalFields:
          $ref: '#/components/schemas/FrenchLabelOptionalFields'
        isMaterialWeight:
          type: boolean
          nullable: true
        identifier:
          type: string
          nullable: true
        identifierType:
          $ref: '#/components/schemas/CorpRepProductIdentifierType'
        tags:
          items:
            type: string
          type: array
          nullable: true
      type: object
      additionalProperties: false
    CorpRepApiProductEntity:
      description: >-
        API light version of a CorpRepProductEntity for the API. Ideally we
        would do this with a Pick<CorpRepProductEntity> or
        Omit<CorpRepProductEntity>, but tsoa doesn't recognice those
      properties:
        _id:
          type: string
        _rev:
          type: string
          nullable: true
        version:
          type: string
          nullable: true
        name:
          type: string
        productType:
          type: string
          nullable: true
        productCategory:
          type: string
          nullable: true
        weightInformation:
          $ref: '#/components/schemas/CorpRepWeightInformation'
        packagingWeight:
          $ref: '#/components/schemas/CorpRepWeightInformation'
        modelNumber:
          type: string
          nullable: true
        barcodes:
          items:
            type: string
          type: array
          nullable: true
        dataSource:
          type: string
          nullable: true
        type:
          type: string
        createdOn:
          type: object
        modifiedOn:
          type: object
          nullable: true
        deleted:
          type: boolean
          nullable: true
        modifiedBy:
          $ref: '#/components/schemas/UserRef'
        deletedBy:
          $ref: '#/components/schemas/UserRef'
        user:
          $ref: '#/components/schemas/UserRef'
        account:
          $ref: '#/components/schemas/AccountRef'
        defaultProduct:
          properties:
            defaultProductId:
              type: string
            name:
              type: string
          required:
            - defaultProductId
            - name
          type: object
          nullable: true
        materials:
          items:
            $ref: '#/components/schemas/CorpRepBom'
          type: array
        components:
          items:
            $ref: '#/components/schemas/ComponentTaxonomyRef'
          type: array
          nullable: true
        packaging:
          items:
            $ref: '#/components/schemas/PackagingTaxonomyRef'
          type: array
          nullable: true
        notes:
          type: string
          nullable: true
        purchaseOrder:
          items:
            $ref: '#/components/schemas/PurchaseOrder'
          type: array
          nullable: true
        purchaseOrderImpactsTotal:
          $ref: '#/components/schemas/CorpRepPurchaseOrderImpacts'
        materialImpact:
          type: number
          format: double
        tier1Impact:
          type: number
          format: double
        packagingImpact:
          type: number
          format: double
        componentImpact:
          type: number
          format: double
          nullable: true
        logisticsImpactsUpstreamTD:
          type: number
          format: double
        logisticsImpactsDTImpact:
          type: number
          format: double
        logisticsImpactsDCImpact:
          type: number
          format: double
        logisticsImpactsRetailImpact:
          type: number
          format: double
        productCareImpacts:
          type: number
          format: double
        endOfUseImpact:
          type: number
          format: double
        upstreamTransportation:
          type: number
          format: double
          nullable: true
        downstreamTransportationRetail:
          type: number
          format: double
          nullable: true
        downstreamTransportationConsumer:
          type: number
          format: double
          nullable: true
        distributionCenterUnOwned:
          type: number
          format: double
          nullable: true
        retailEnergyUnOwned:
          type: number
          format: double
          nullable: true
        frenchLabelManufacturingCountry:
          $ref: '#/components/schemas/FrenchLabelManufacturingCountry'
        frenchLabelFabricCountry:
          $ref: '#/components/schemas/FrenchLabelFabricCountry'
        frenchLabelDyeingCountry:
          $ref: '#/components/schemas/FrenchLabelDyeingCountry'
        frenchLabelOptionalFields:
          $ref: '#/components/schemas/FrenchLabelOptionalFields'
        frenchLabelEligibility:
          $ref: '#/components/schemas/FrenchLabelEligibility'
        frenchLabelEcoScore:
          $ref: '#/components/schemas/FrenchLabelEcoScore'
        identifier:
          type: string
          nullable: true
        identifierType:
          $ref: '#/components/schemas/CorpRepProductIdentifierType'
        tags:
          items:
            type: string
          type: array
          nullable: true
      required:
        - _id
        - account
        - createdOn
        - endOfUseImpact
        - logisticsImpactsDCImpact
        - logisticsImpactsDTImpact
        - logisticsImpactsRetailImpact
        - logisticsImpactsUpstreamTD
        - materialImpact
        - materials
        - name
        - packagingImpact
        - productCareImpacts
        - tier1Impact
        - type
        - user
        - weightInformation
      type: object
      additionalProperties: false
    MaterialMeasureUnit:
      enum:
        - kilograms
        - grams
        - milligram
        - pound
        - ounce
      type: string
    CorpRepProductPackagingRef:
      properties:
        packagingId:
          type: string
        amount:
          type: number
          format: double
      required:
        - amount
        - packagingId
      type: object
      additionalProperties: false
    CorpRepProductMaterialsRef:
      properties:
        netUse:
          type: number
          format: double
        materialId:
          type: string
        composition:
          type: number
          format: double
          nullable: true
        weight:
          $ref: '#/components/schemas/CorpRepMaterialWeight'
      required:
        - materialId
        - netUse
      type: object
      additionalProperties: false
    CorpRepProductComponentRef:
      properties:
        componentId:
          type: string
        unit:
          type: number
          format: double
      required:
        - componentId
        - unit
      type: object
      additionalProperties: false
    CorpRepApiPurchaseOrderData:
      properties:
        purchaseOrderId:
          type: string
          nullable: true
        purchaseDate:
          type: string
          nullable: true
        amountPurchase:
          type: number
          format: double
          nullable: true
        assembly:
          $ref: '#/components/schemas/AssemblyType'
      type: object
      additionalProperties: false
    PurchaseOrderTypeUpdateRequest:
      properties:
        _id:
          type: string
        purchaseOrderId:
          type: string
          nullable: true
        purchaseDate:
          type: string
          nullable: true
        amountPurchase:
          type: number
          format: double
          nullable: true
        assembly:
          $ref: '#/components/schemas/AssemblyType'
      required:
        - _id
      type: object
      additionalProperties: false
    FrenchLabelManufacturingCountry:
      description: >-
        Determines what country this product was made in, for the French Label
        Eco-Scores.
      properties:
        code:
          type: string
          description: >-
            Country code for the Manufacturing stage (list available at
            https://ecobalyse.beta.gouv.fr/api/textile/countries)
        name:
          type: string
          description: Country name for the Manufacturing stage in English.
      required:
        - code
        - name
      type: object
      additionalProperties: false
    FrenchLabelDyeingCountry:
      description: >-
        Determines what country this product was dyed in, for the French Label
        Eco-Scores.
      properties:
        code:
          type: string
          description: >-
            Country code for the Dyeing stage (list available at
            https://ecobalyse.beta.gouv.fr/api/textile/countries)
        name:
          type: string
          description: Country name for the Dyeing stage in English.
      required:
        - code
        - name
      type: object
      additionalProperties: false
    FrenchLabelFabricCountry:
      description: >-
        Determines what country this product was woven or knitted in, for the
        French Label Eco-Scores.
      properties:
        code:
          type: string
          description: >-
            Country code for the Weaving/Knitting stage (list available at
            https://ecobalyse.beta.gouv.fr/api/textile/countries)
        name:
          type: string
          description: Country name for the Weaving/Knitting stage in English.
      required:
        - code
        - name
      type: object
      additionalProperties: false
    FrenchLabelOptionalFields:
      description: >-
        Optional durability fields for the French Label Eco-Score, gated by
        EnableFrenchEcoOptionalFields config key.
      properties:
        countrySpinning:
          properties:
            code:
              type: string
            name:
              type: string
          required:
            - code
            - name
          type: object
          description: >-
            Location of Spinning — country where spinning occurred. Send null to
            clear.
          nullable: true
        upcycled:
          type: boolean
          description: >-
            Remanufactured — indicates whether the product is remanufactured.
            Named 'upcycled' in the Ecobalyse API. Send null to clear.
          nullable: true
        price:
          type: number
          format: double
          description: >-
            Default Price — product price in euros (EUR). Min: 1, Max: 1000.
            Send null to clear.
          nullable: true
        numberOfReferences:
          type: number
          format: double
          description: >-
            Number of References — number of references in the brand catalogue.
            Min: 1, Max: 999999. Send null to clear.
          nullable: true
        business:
          type: string
          enum:
            - small-business
            - large-business-with-services
            - large-business-without-services
          description: >-
            Business and Repair Service — business type for the French Label
            Eco-Scores. Send null to clear.
          nullable: true
      type: object
      additionalProperties: false
    CorpRepProductIdentifierType:
      enum:
        - GTIN
        - SKU
        - UPC
        - OTHER
      type: string
    CorpRepWeightInformation:
      description: corpRep weight information
      properties:
        convertedToKg:
          type: number
          format: double
        weight:
          type: number
          format: double
        unit:
          $ref: '#/components/schemas/MaterialMeasureUnit'
        isPrimaryData:
          type: boolean
          description: >-
            This field is used only in product weight, Indicates if the weight
            information is primary data or is inferred from product category and
            size
          nullable: true
      required:
        - convertedToKg
        - unit
        - weight
      type: object
      additionalProperties: false
    UserRef:
      description: >-
        This interface was referenced by `Exports`'s JSON-Schema via the
        `definition` "userRef".
      properties:
        _id:
          type: string
        email:
          type: string
        firstname:
          type: string
          nullable: true
        lastname:
          type: string
          nullable: true
      required:
        - _id
        - email
      type: object
      additionalProperties: false
    AccountRef:
      description: >-
        This interface was referenced by `Exports`'s JSON-Schema via the
        `definition` "accountRef".
      properties:
        _id:
          type: string
        name:
          type: string
        country:
          type: string
        sacId:
          type: number
          format: double
        oar_id:
          type: string
          nullable: true
        demoaccount:
          type: boolean
          nullable: true
        vbType:
          $ref: '#/components/schemas/AccountVbType'
        socialCreditId:
          type: string
          nullable: true
        taxId:
          type: string
          nullable: true
        bluesignId:
          type: string
          nullable: true
        zdhcId:
          type: string
          nullable: true
        ipeViolation:
          $ref: '#/components/schemas/IpeViolationRef'
        ffcId:
          type: number
          format: double
          nullable: true
        approvalStatus:
          $ref: '#/components/schemas/AccountApprovalStatus'
      required:
        - _id
        - country
        - name
        - sacId
      type: object
      additionalProperties: false
    CorpRepBom:
      description: corpRep product module bill of material
      properties:
        name:
          type: string
        netUse:
          type: number
          format: double
        materialId:
          type: string
        weightInformation:
          $ref: '#/components/schemas/PicMaterialWeightInformation'
        composition:
          type: number
          format: double
        isMsiMaterial:
          type: boolean
          nullable: true
        isPicMaterialLibrary:
          type: boolean
          nullable: true
        code:
          type: string
          nullable: true
        dataSource:
          type: string
          nullable: true
        isOutdated:
          type: boolean
          nullable: true
        description:
          type: string
          nullable: true
        impacts:
          $ref: '#/components/schemas/CorpRepMaterialImpacts'
      required:
        - composition
        - materialId
        - name
        - netUse
      type: object
      additionalProperties: false
    ComponentTaxonomyRef:
      properties:
        name:
          type: string
        componentId:
          type: string
        unit:
          type: number
          format: double
        weightInformation:
          $ref: '#/components/schemas/CorpRepWeightInformation'
        isMsiComponent:
          type: boolean
          nullable: true
        isOutdated:
          type: boolean
          nullable: true
        dataSource:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        impacts:
          $ref: '#/components/schemas/CorpRepMaterialImpacts'
      required:
        - componentId
        - name
        - unit
        - weightInformation
      type: object
      additionalProperties: false
    PackagingTaxonomyRef:
      properties:
        name:
          type: string
          nullable: true
        packagingId:
          type: string
        amount:
          type: number
          format: double
        weightInformation:
          $ref: '#/components/schemas/CorpRepWeightInformation'
        isMsiPackaging:
          type: boolean
          nullable: true
        isOutdated:
          type: boolean
          nullable: true
        code:
          type: string
          nullable: true
        dataSource:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        impacts:
          $ref: '#/components/schemas/CorpRepMaterialImpacts'
      required:
        - amount
        - packagingId
      type: object
      additionalProperties: false
    PurchaseOrder:
      properties:
        _id:
          type: string
        purchaseOrderId:
          type: string
          nullable: true
        purchaseDate:
          type: number
          format: double
          nullable: true
        impactPerUnit:
          type: number
          format: double
          nullable: true
        totalImpactPerUnit:
          type: number
          format: double
          nullable: true
        pmVersion:
          type: string
          nullable: true
        msiVersion:
          type: string
          nullable: true
        version:
          type: string
          nullable: true
        amountPurchase:
          type: number
          format: double
          nullable: true
        isOutdated:
          type: boolean
          nullable: true
        impactsPerUnitMultiPack:
          $ref: '#/components/schemas/CorpRepPurchaseOrderImpacts'
        totalImpactsMultiPack:
          $ref: '#/components/schemas/CorpRepPurchaseOrderImpacts'
        impactsPerUnit:
          $ref: '#/components/schemas/CorpRepPurchaseOrderImpacts'
        totalImpacts:
          $ref: '#/components/schemas/CorpRepPurchaseOrderImpacts'
        assembly:
          $ref: '#/components/schemas/AssemblyRef'
      required:
        - _id
        - assembly
      type: object
      additionalProperties: false
    CorpRepPurchaseOrderImpacts:
      description: corpRep weight information
      properties:
        componentImpact:
          type: number
          format: double
          description: Components Impact
          nullable: true
        materialImpact:
          type: number
          format: double
          description: Materials Impact
        tier1Impact:
          type: number
          format: double
          description: Tier 1 (finished goods assembly processes) Impacts
        packagingImpact:
          type: number
          format: double
          description: Packaging Impacts
        logisticsImpactsUpstreamTD:
          type: number
          format: double
          description: >-
            Logistics Impacts--Category 4 - Upstream Transportation and
            Distribution
        logisticsImpactsDTImpact:
          type: number
          format: double
          description: Logistics Impacts--Category 9 - Downstream transportation
        logisticsImpactsDCImpact:
          type: number
          format: double
          description: Logistics Impacts--Category 9 - Distribution Center
        logisticsImpactsRetailImpact:
          type: number
          format: double
          description: Logistics Impacts--Category 9 - Retail
        productCareImpacts:
          type: number
          format: double
          description: Product Care Impacts--Category 11 - Use of sold products
        endOfUseImpact:
          type: number
          format: double
          description: >-
            End of Use Impacts--Category 12 - End-of-life treatment of sold
            products
        totalProductImpacts:
          type: number
          format: double
          description: Total Corporate Report Total product
      required:
        - endOfUseImpact
        - logisticsImpactsDCImpact
        - logisticsImpactsDTImpact
        - logisticsImpactsRetailImpact
        - logisticsImpactsUpstreamTD
        - materialImpact
        - packagingImpact
        - productCareImpacts
        - tier1Impact
        - totalProductImpacts
      type: object
      additionalProperties: false
    FrenchLabelEligibility:
      description: >-
        Store information on whether a product is eligible for French Label
        Eco-Scores.
      properties:
        eligible:
          type: boolean
          description: Determines if a product is eligible for French Label Eco-Scores.
        reasons:
          items:
            $ref: '#/components/schemas/FrenchLabelEligibilityReason'
          type: array
          description: The reasons a product is ineligible for French Label Eco-Scores.
          nullable: true
      required:
        - eligible
      type: object
      additionalProperties: false
    FrenchLabelEcoScore:
      description: >-
        Determines the environmental impacts of a product based on mass,
        composition, place of manufacture, etc. (See
        https://ecobalyse.beta.gouv.fr/#/api)
      properties:
        score:
          type: number
          format: double
          description: >-
            The Eco-Score to be displayed is sourced from 'impacts.ecs' and
            rounded to the nearest integer.
        impacts:
          $ref: '#/components/schemas/FrenchLabelEcoScoreImpacts'
        impactsPercentageContribution:
          $ref: '#/components/schemas/FrenchLabelEcoScoreImpacts1'
        status:
          $ref: '#/components/schemas/FrenchLabelEcoScoreStatus'
        createdAt:
          type: number
          format: double
          description: The timestamp when the French Label Eco-Score was created.
        updatedAt:
          type: number
          format: double
          description: The timestamp when the French Label Eco-Score was updated.
        apiVersion:
          type: string
          description: The version of the Ecobalyse API used to calculate the Eco-Score.
          nullable: true
        apiResponseError:
          type: string
          description: The error message from Ecobalyse API response.
          nullable: true
        complementsImpacts:
          $ref: '#/components/schemas/FrenchLabelComplementsImpacts'
        publishEligibility:
          properties:
            eligible:
              type: boolean
            reasons:
              items:
                type: string
              type: array
          required:
            - eligible
            - reasons
          type: object
          description: >-
            Whether this product can currently be published to the Affichage
            Environnemental portal. Recomputed every time the Eco-Score is
            recalculated. The 3-month re-publish lock is tracked separately on
            publish.nextEligibleAt.
          nullable: true
        publish:
          $ref: '#/components/schemas/FrenchLabelPublish'
      required:
        - createdAt
        - impacts
        - score
        - updatedAt
      type: object
      additionalProperties: false
    CorpRepMaterialWeight:
      properties:
        value:
          type: number
          format: double
        measureUnit:
          $ref: '#/components/schemas/MaterialMeasureUnit'
      required:
        - measureUnit
        - value
      type: object
      additionalProperties: false
    AssemblyType:
      properties:
        femId:
          type: string
          nullable: true
      type: object
      additionalProperties: false
    AccountVbType:
      description: >-
        This interface was referenced by `Exports`'s JSON-Schema via the
        `definition` "accountVbType".
      enum:
        - None
        - 2nd Party
        - 3rd Party
      type: string
    IpeViolationRef:
      properties:
        totalViolations:
          type: number
          format: double
      required:
        - totalViolations
      type: object
      additionalProperties: false
    AccountApprovalStatus:
      enum:
        - Approved
        - Declined
        - New
      type: string
    PicMaterialWeightInformation:
      description: Weight information of the material in the BOM
      properties:
        convertedToKg:
          type: number
          format: double
        weight:
          type: number
          format: double
        unit:
          $ref: '#/components/schemas/MaterialMeasureUnit'
        netWeight:
          type: number
          format: double
      required:
        - convertedToKg
        - netWeight
        - unit
        - weight
      type: object
      additionalProperties: false
    CorpRepMaterialImpacts:
      description: corpRep Material Impacts
      properties:
        totalMaterialLibrary:
          type: number
          format: double
          nullable: true
        tier4Impact:
          type: number
          format: double
        tier2and3Impact:
          type: number
          format: double
        totalTierImpact:
          type: number
          format: double
          nullable: true
        uncertainty:
          properties:
            lower:
              type: number
              format: double
            upper:
              type: number
              format: double
          type: object
          nullable: true
      required:
        - tier2and3Impact
        - tier4Impact
      type: object
      additionalProperties:
        additionalProperties: true
    AssemblyRef:
      properties:
        isDefault:
          type: boolean
          nullable: true
        femId:
          type: string
          nullable: true
        facilityName:
          type: string
          nullable: true
        finalAssemblyRawText:
          type: string
          description: >-
            Used when finalAssembly or finalAssemblyWorldlyId is not a valid
            enum.
          nullable: true
        surveyVersion:
          type: string
          nullable: true
        finalAssemblyImpacts:
          type: number
          format: double
          nullable: true
        printingProductDyeingImpacts:
          type: number
          format: double
          nullable: true
        totalNormalizedImpacts:
          type: number
          format: double
          nullable: true
        sipfacilitytype:
          items:
            type: string
          type: array
          nullable: true
        annualProd:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        femDescriptor:
          type: string
          nullable: true
        year:
          type: number
          format: double
          nullable: true
        assessmentStatus:
          $ref: '#/components/schemas/AssessmentStatus'
        finishedProductImpacts:
          type: number
          format: double
          nullable: true
      type: object
      additionalProperties: false
    FrenchLabelEligibilityReason:
      description: >-
        Store information on the reason a product is ineligible for French Label
        Eco-Scores.
      properties:
        category:
          $ref: '#/components/schemas/FrenchLabelEligibilityReasonCategory'
        message:
          type: string
          description: The reason a product is ineligible for French Label Eco-Scores.
      required:
        - category
        - message
      type: object
      additionalProperties: false
    FrenchLabelEcoScoreImpacts:
      description: >-
        The impacts object in the API response from Ecobalyse for the textile
        simulator.
      properties:
        acd:
          type: number
          format: double
          nullable: true
        cch:
          type: number
          format: double
          nullable: true
        etf:
          type: number
          format: double
          nullable: true
        etfC:
          type: number
          format: double
          nullable: true
        fru:
          type: number
          format: double
          nullable: true
        fwe:
          type: number
          format: double
          nullable: true
        htc:
          type: number
          format: double
          nullable: true
        htcC:
          type: number
          format: double
          nullable: true
        htn:
          type: number
          format: double
          nullable: true
        htnC:
          type: number
          format: double
          nullable: true
        ior:
          type: number
          format: double
          nullable: true
        ldu:
          type: number
          format: double
          nullable: true
        mru:
          type: number
          format: double
          nullable: true
        ozd:
          type: number
          format: double
          nullable: true
        pco:
          type: number
          format: double
          nullable: true
        pma:
          type: number
          format: double
          nullable: true
        swe:
          type: number
          format: double
          nullable: true
        tre:
          type: number
          format: double
          nullable: true
        wtu:
          type: number
          format: double
          nullable: true
        ecs:
          type: number
          format: double
          nullable: true
        pef:
          type: number
          format: double
          nullable: true
        microfibers:
          type: number
          format: double
          description: >-
            Percentage contribution of microfiber release — only populated on
            impactsPercentageContribution, never on the raw Ecobalyse `impacts`
            payload. Sourced from frenchLabelComplementsImpacts.microfibers.
          nullable: true
        outOfEuropeEOL:
          type: number
          format: double
          description: >-
            Percentage contribution of end-of-life processing outside Europe —
            only populated on impactsPercentageContribution, never on the raw
            Ecobalyse `impacts` payload. Sourced from
            frenchLabelComplementsImpacts.outOfEuropeEOL.
          nullable: true
      type: object
      additionalProperties: false
    FrenchLabelEcoScoreImpacts1:
      description: The percentage contribution of each impact category.
      properties:
        acd:
          type: number
          format: double
          nullable: true
        cch:
          type: number
          format: double
          nullable: true
        etf:
          type: number
          format: double
          nullable: true
        etfC:
          type: number
          format: double
          nullable: true
        fru:
          type: number
          format: double
          nullable: true
        fwe:
          type: number
          format: double
          nullable: true
        htc:
          type: number
          format: double
          nullable: true
        htcC:
          type: number
          format: double
          nullable: true
        htn:
          type: number
          format: double
          nullable: true
        htnC:
          type: number
          format: double
          nullable: true
        ior:
          type: number
          format: double
          nullable: true
        ldu:
          type: number
          format: double
          nullable: true
        mru:
          type: number
          format: double
          nullable: true
        ozd:
          type: number
          format: double
          nullable: true
        pco:
          type: number
          format: double
          nullable: true
        pma:
          type: number
          format: double
          nullable: true
        swe:
          type: number
          format: double
          nullable: true
        tre:
          type: number
          format: double
          nullable: true
        wtu:
          type: number
          format: double
          nullable: true
        ecs:
          type: number
          format: double
          nullable: true
        pef:
          type: number
          format: double
          nullable: true
        microfibers:
          type: number
          format: double
          description: >-
            Percentage contribution of microfiber release — only populated on
            impactsPercentageContribution, never on the raw Ecobalyse `impacts`
            payload. Sourced from frenchLabelComplementsImpacts.microfibers.
          nullable: true
        outOfEuropeEOL:
          type: number
          format: double
          description: >-
            Percentage contribution of end-of-life processing outside Europe —
            only populated on impactsPercentageContribution, never on the raw
            Ecobalyse `impacts` payload. Sourced from
            frenchLabelComplementsImpacts.outOfEuropeEOL.
          nullable: true
      type: object
      additionalProperties: false
    FrenchLabelEcoScoreStatus:
      description: Determines the status of the French Label Score.
      enum:
        - Pending
        - Failed
        - Complete
      type: string
    FrenchLabelComplementsImpacts:
      description: >-
        Complement impacts from the Ecobalyse detailed endpoint. Absent for
        products scored before the detailed endpoint was adopted.
      properties:
        microfibers:
          type: number
          format: double
          description: >-
            Impact from microfiber release during use phase, in µPt
            (durability-adjusted).
          nullable: true
        outOfEuropeEOL:
          type: number
          format: double
          description: >-
            Impact from end-of-life processing outside Europe, in µPt
            (durability-adjusted).
          nullable: true
        cropDiversity:
          type: number
          format: double
          description: >-
            Bonus/malus for crop diversity (agriculture only; omitted for
            textiles).
          nullable: true
        forest:
          type: number
          format: double
          description: >-
            Bonus/malus for deforestation-free supply chain (agriculture only;
            omitted for textiles).
          nullable: true
        hedges:
          type: number
          format: double
          description: >-
            Bonus/malus for hedge presence on agricultural land (agriculture
            only; omitted for textiles).
          nullable: true
        livestockDensity:
          type: number
          format: double
          description: >-
            Bonus/malus for livestock density (agriculture only; omitted for
            textiles).
          nullable: true
        permanentPasture:
          type: number
          format: double
          description: >-
            Bonus/malus for permanent pasture use (agriculture only; omitted for
            textiles).
          nullable: true
        plotSize:
          type: number
          format: double
          description: >-
            Bonus/malus for agricultural plot size (agriculture only; omitted
            for textiles).
          nullable: true
      type: object
      additionalProperties: false
    FrenchLabelPublish:
      description: >-
        Most recent publish attempt for this product. Updated on every attempt;
        the success-only fields (publishedAt, publishedBy, filedScore,
        internalReference, nextEligibleAt) reflect the latest accepted
        declaration.
      properties:
        status:
          type: string
          enum:
            - NeverPublished
            - Published
            - Failed
          description: >-
            Status of the most recent publish attempt: NeverPublished, Published
            (last attempt accepted), or Failed (last attempt rejected).
        publishedAt:
          type: number
          format: double
          description: >-
            When the product was last published successfully (Unix
            milliseconds).
          nullable: true
        publishedBy:
          type: string
          description: ID of the user who published the product successfully the last time.
          nullable: true
        filedScore:
          type: number
          format: double
          description: >-
            The Eco-Score value filed to the portal in the latest successful
            publish.
          nullable: true
        internalReference:
          type: string
          description: >-
            Batch identifier assigned to the latest publish attempt (UUID).
            Products published together share this value.
          nullable: true
        nextEligibleAt:
          type: number
          format: double
          description: >-
            When the 3-month re-publish lock from the latest successful publish
            ends (Unix milliseconds). The product cannot be published again
            before this time.
          nullable: true
        attemptedAt:
          type: number
          format: double
          description: >-
            When the latest publish was attempted (Unix milliseconds), whether
            it succeeded or failed.
          nullable: true
        attemptedBy:
          type: string
          description: ID of the user who triggered the latest publish attempt.
          nullable: true
        apiResponseError:
          type: string
          description: >-
            The raw JSON error array returned by the Affichage portal on the
            latest failed publish attempt (max 2000 characters).
          nullable: true
        label:
          $ref: '#/components/schemas/FrenchLabelDeclarationStatusLabel'
      required:
        - status
      type: object
      additionalProperties: false
    AssessmentStatus:
      description: >-
        This interface was referenced by `Exports`'s JSON-Schema via the
        `definition` "assessmentStatus".
      enum:
        - NS
        - ASI
        - ASC
        - VRP
        - VRQ
        - VRE
        - VRC
        - VRD
        - VRF
        - VRI
        - ASD
      type: string
    FrenchLabelEligibilityReasonCategory:
      description: Determines the type of message for French Label ineligibility.
      enum:
        - ProductType
        - ProductCategory
        - ProductTaxonomy
        - msiProductType
        - WeightInformation
        - Materials
        - Other
      type: string
    FrenchLabelDeclarationStatusLabel:
      description: >-
        Response-time declaration status label derived from publish/eligibility
        state. Not persisted.
      enum:
        - NotDeclared
        - MissingData
        - Ineligible
        - Declared
        - OutdatedReDeclare
        - Outdated
      type: string
  securitySchemes:
    sec0:
      type: apiKey
      in: header
      name: x-api-key
    sec1:
      type: apiKey
      in: header
      name: x-developer-request-token

````