> ## 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.

# Search products

> Search for products in the Product Impact Calculator (PIC) based on various criteria.

Use this endpoint to filter and find products within your account. You can search by name, category, materials, or French Eco-Score status.

### Request body properties

<Note title="hasFrenchEcoScore">
  Set to `true` to return only products that have a French Eco-Score calculation.
</Note>

<Note title="from / size">
  Controls pagination. `from` specifies the starting index (default `0`), and `size` specifies the number of results to return (default `50`).
</Note>

| Name                | Type            | Description                                                        |
| :------------------ | :-------------- | :----------------------------------------------------------------- |
| `id`                | `Array<string>` | Filter by specific product IDs.                                    |
| `name`              | `Array<string>` | Filter by product names.                                           |
| `textSearch`        | `Array<string>` | General text search across multiple fields.                        |
| `productSize`       | `Array<string>` | Filter by product sizes.                                           |
| `productCategory`   | `Array<string>` | Filter by product categories.                                      |
| `component`         | `Array<string>` | Filter by component IDs or names.                                  |
| `material`          | `Array<string>` | Filter by material IDs or names.                                   |
| `packaging`         | `Array<string>` | Filter by packaging IDs or names.                                  |
| `tag`               | `Array<string>` | Filter by tags.                                                    |
| `identifier`        | `Array<string>` | Filter by product identifiers (e.g., SKU).                         |
| `hasFrenchEcoScore` | `boolean`       | Filter products that have a French Eco-Score calculated.           |
| `from`              | `number`        | **\[DEFAULT: 0]** Pagination start index.                          |
| `size`              | `number`        | **\[DEFAULT: 50]** Number of results to return.                    |
| `sort`              | `object`        | Sorting configuration `{ field: string, order: "asc" \| "desc" }`. |

### Response body properties

The search result includes a `results` array containing product details.

<Note title="finishedProductImpacts">
  This property is located within `purchaseOrder[].assembly` and provides the environmental impact specifically for the finished product assembly.
</Note>

### Implementation details

* **Pagination**: Use `from` and `size` for large result sets. The response includes a `total` field to help you calculate the number of pages.
* **Filtering logic**: Most array fields (like `name` or `material`) act as "OR" filters. A product is returned if it matches any of the provided values in the array.
* **French Eco-Score**: Use the `hasFrenchEcoScore` filter to identify products eligible for French environmental labeling.

### Related recipes

<Card title="PIC - Retrieve French Eco-Score" href="/recipes/retrieve-french-eco-score" />

<Card title="PIC - Create a Product" href="/recipes/create-product-pic" />

<Card title="PIC - Create a Purchase Order" href="/recipes/pic-add-po-to-product" />

Check the [PIC Data Dictionary](/data-dictionary/pic) for detailed definitions of product and impact fields.


## OpenAPI

````yaml api-reference/openapi/french-eco.json POST /products/search
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/search:
    post:
      summary: Products Search
      operationId: ProductsSearch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CorpRepApiProductSearchParams'
        required: true
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/CorpReportApiPaginatedResponseCorpRepApiProductEntity
components:
  schemas:
    CorpRepApiProductSearchParams:
      properties:
        id:
          items:
            type: string
          type: array
          nullable: true
        name:
          items:
            type: string
          type: array
          nullable: true
        sort:
          $ref: '#/components/schemas/SortType'
        textSearch:
          items:
            type: string
          type: array
          nullable: true
        from:
          type: number
          format: double
          nullable: true
        size:
          type: number
          format: double
          nullable: true
        productSize:
          items:
            type: string
          type: array
          nullable: true
        productCategory:
          items:
            type: string
          type: array
          nullable: true
        component:
          items:
            type: string
          type: array
          nullable: true
        material:
          items:
            type: string
          type: array
          nullable: true
        packaging:
          items:
            type: string
          type: array
          nullable: true
        tag:
          items:
            type: string
          type: array
          nullable: true
        identifier:
          items:
            type: string
          type: array
          nullable: true
        hasFrenchEcoScore:
          type: boolean
          nullable: true
        publishEligibleOnly:
          type: boolean
          description: >-
            Opt-in only. When `true` the search restricts results to products
            eligible to publish to the French Eco-Score declaration portal right
            now. Omit (or pass `false`) to skip the filter — both behave
            identically. Silently ignored for accounts without the publish
            feature enabled.
          nullable: true
      type: object
      additionalProperties: false
    CorpReportApiPaginatedResponseCorpRepApiProductEntity:
      description: API Search responses
      properties:
        from:
          type: number
          format: double
        size:
          type: number
          format: double
        total:
          type: number
          format: double
        results:
          items:
            $ref: '#/components/schemas/CorpRepApiProductEntity'
          type: array
      required:
        - from
        - results
        - size
        - total
      type: object
      additionalProperties: false
    SortType:
      description: API Search requests
      properties:
        field:
          type: string
        order:
          type: string
          enum:
            - asc
            - desc
      required:
        - field
        - order
      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
    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
    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
    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
    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
    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
    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
    CorpRepProductIdentifierType:
      enum:
        - GTIN
        - SKU
        - UPC
        - OTHER
      type: string
    MaterialMeasureUnit:
      enum:
        - kilograms
        - grams
        - milligram
        - pound
        - ounce
      type: string
    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

````