openapi: 3.0.1 info: title: API Ecobalyse description: L'API HTTP Ecobalyse permet de calculer les impacts environnementaux des produits textiles, alimentaires, objets et véhicules. version: 0.0.1-alpha externalDocs: description: Visiter le site url: https://ecobalyse.beta.gouv.fr servers: - url: https://ecobalyse.beta.gouv.fr/api tags: - name: Commun description: Documentation de l'API multi-domaines au format OpenAPI externalDocs: description: À propos url: https://fabrique-numerique.gitbook.io/ecobalyse - name: Textile description: Documentation de l'API pour le domaine textile au format OpenAPI externalDocs: description: À propos url: https://fabrique-numerique.gitbook.io/ecobalyse - name: Alimentaire description: | Documentation de l'API pour le domaine alimentaire historique au format OpenAPI **⚠️ En construction, les résultats fournis sont incomplets et probablement invalides.** externalDocs: description: À propos url: https://fabrique-numerique.gitbook.io/ecobalyse - name: Générique description: | **⚠️ Actuellement en version bêta d'accès restreint** Documentation de l'API du calculateur générique. Les périmètres disponibles sur une instance sont listés par `GET /generic/scopes` et s’utilisent comme valeur du paramètre de chemin `{scope}`. Un tutoriel permettant de prendre en main l'API générique est [disponible ici](/#/pages/api-docs). externalDocs: description: À propos url: https://fabrique-numerique.gitbook.io/ecobalyse security: - token: [] paths: /: get: tags: - Commun summary: Documentation OpenAPI de l'API description: Sert la documentation de l'API au format [OpenAPI](https://swagger.io/specification/) security: [] # root endpoint is always public access responses: 200: description: Documentation de l'API au format OpenAPI. /textile/countries: get: tags: - Textile summary: Liste des pays utilisables pour les simulations textiles. responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/CountryListResponse" /textile/materials: get: tags: - Textile summary: Liste des matières textile responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/MaterialListResponse" /textile/products: get: tags: - Textile summary: Liste des types de produits textiles responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/ProductListResponse" /textile/simulator: post: tags: - Textile summary: Calcul des impacts environnementaux d'un produit textile requestBody: description: Requête modélisant les paramètres du produit à évaluer. L'id des matières est invariable dans le temps. required: true content: application/json: schema: $ref: "#/components/schemas/TextileQuery" examples: tShirtFrance: $ref: "#/components/examples/tShirtFrance" tShirtChina: $ref: "#/components/examples/tShirtChina" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/TextileSimulatorResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" /textile/simulator/{impact}: post: tags: - Textile summary: Calcul des impacts environnementaux d'un produit textile parameters: - $ref: "#/components/parameters/impactUrlParam" requestBody: description: Requête modélisant les paramètres du produit à évaluer. L'id des matières est invariable dans le temps. required: true content: application/json: schema: $ref: "#/components/schemas/TextileQuery" examples: tShirtFrance: $ref: "#/components/examples/tShirtFrance" tShirtChina: $ref: "#/components/examples/tShirtChina" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/SingleImpactResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" /textile/simulator/detailed: post: tags: - Textile summary: Calcul des impacts environnementaux d'un produit textile requestBody: description: Requête modélisant les paramètres du produit à évaluer. L'id des matières est invariable dans le temps. required: true content: application/json: schema: $ref: "#/components/schemas/TextileQuery" examples: tShirtFrance: $ref: "#/components/examples/tShirtFrance" tShirtChina: $ref: "#/components/examples/tShirtChina" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/DetailedTextileResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" /textile/trims: get: tags: - Textile summary: Liste des accessoires pour vêtements responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/TrimListResponse" /food/countries: get: tags: - Alimentaire summary: Liste des pays utilisables pour les simulations alimentaires. responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/CountryListResponse" /food/ingredients: get: tags: - Alimentaire summary: Liste des ingrédients disponibles pour élaborer une recette responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/IngredientListResponse" /food/transforms: get: tags: - Alimentaire summary: Liste des procédés de transformation alimentaire responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/TransformListResponse" /food/packagings: get: tags: - Alimentaire summary: Liste des emballages disponibles pour conditionner une recette responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/PackagingListResponse" /food: post: tags: - Alimentaire summary: Calcul des impacts environnementaux d'une recette alimentaire requestBody: description: Requête modélisant les éléments de la recette à évaluer. L'id des ingrédients est invariable dans le temps. required: true content: application/json: schema: $ref: "#/components/schemas/FoodQuery" examples: CarrotCake: summary: "Carrot cake conventionnel" value: ingredients: - id: cf30d3bc-e99c-418a-b7e3-89a894d410a5 mass: 120 - id: 38788025-a65e-4edf-a92f-aab0b89b0d61 mass: 140 - id: 8f3863e7-f981-4367-90a2-e1aaa096a6e0 mass: 60 - id: 4d5198e7-413a-4ae2-8448-535aa3b302ae mass: 225 transform: id: a2836bb8-7f45-5cfa-bb00-8b38046291cf mass: 545 packaging: - id: 09bf8c91-b95e-4bd3-aaf3-4c5450f74ae7 mass: 105 distribution: ambient preparation: - refrigeration SpanishOrganicCarrotCake: summary: "Carrot cake bio, origine Espagne" value: ingredients: - id: cfd4a437-aa49-49ff-818e-353421f2fc09 mass: 120 country: ES - id: a98b8776-a96d-48e9-b218-976f5452907a mass: 140 country: ES - id: 2bf307e8-8cb0-400b-a4f1-cf615d9e96f4 mass: 60 country: ES - id: 9042b6d0-c309-4757-a03f-ba802f0c8c01 mass: 225 country: ES transform: id: a2836bb8-7f45-5cfa-bb00-8b38046291cf mass: 545 packaging: - id: 09bf8c91-b95e-4bd3-aaf3-4c5450f74ae7 mass: 105 distribution: ambient preparation: - refrigeration BrazilianMango: summary: "Mangue du Brésil" value: ingredients: - id: db0e5f44-34b4-4160-b003-77c828d75e60 mass: 500 country: BR transform: null packaging: [] distribution: ambient preparation: [] responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/RecipeResultsResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" /generic/scopes: get: tags: - Générique summary: Liste des périmètres génériques activés sur le serveur description: | Retourne les périmètres (*scopes*) du calculateur générique disponibles sur cette instance. Utiliser les identifiants renvoyés comme valeur du paramètre de chemin `{scope}` des autres points d’accès génériques. Un appel vers un périmètre absent de cette liste renvoie une erreur HTTP 403. responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericScopeListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/countries: get: tags: - Générique summary: | Liste des pays utilisables pour une simulation générique parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/CountryListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/catalog: get: tags: - Générique summary: Liste des composants du catalogue description: | Identifiants utilisables pour le champ `components[].id`. Pour les matières et ingrédients d'un composant personnalisé (`elements`), voir `/{scope}/processes/material`. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericComponentListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/categories: get: tags: - Générique summary: Liste des catégories de produit description: | Identifiants utilisables pour le champ `product`. Chaque catégorie de produits expose les valeurs par défaut appliquées lorsque certains champs sont omis. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericCategoryListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/material: get: tags: - Générique summary: Liste des procédés matières description: | Identifiants utilisables pour le champ `components[].elements[].material` (UUID seul, ou objet de forme `{ "id", "country" }`). Le champ `unit` indique l'unité dans laquelle la quantité `amount` est exprimée. **Attention :** Les matières d'emballage sont exclues (voir `/{scope}/processes/packaging`). parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/transform/{materialType}: get: tags: - Générique summary: Liste des procédés de transformation de la matière description: | Identifiants utilisables pour le champ `components[].elements[].transforms` (UUID seul, ou objet de forme `{ "id", "country" }`). Le paramètre `materialType` filtre les procédés de transformation dont la catégorie `material_type` correspond (par exemple `fruits_and_vegetables` ou `pp`). Il reprend le suffixe de la catégorie `material_type:` du procédé matière. Une valeur inconnue est rejetée avec une erreur HTTP 400. parameters: - $ref: "#/components/parameters/genericScopeParam" - $ref: "#/components/parameters/genericMaterialTypeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/assembly: get: tags: - Générique summary: Liste des procédés d'assemblage description: Identifiants utilisables pour le champ `assembly.operations`. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/distribution: get: tags: - Générique summary: Liste des procédés de distribution description: | Identifiants de procédés de stockage utilisables pour le champ `distribution`. Seuls les procédés dont l'unité est le mètre cube (`m3`) sont renvoyés. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/packaging: get: tags: - Générique summary: Liste des procédés d'emballage description: Identifiants utilisables pour le champ `packagings[].processId`. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/processes/consumption: get: tags: - Générique summary: Liste des procédés de consommation à la phase d'utilisation description: | Identifiants utilisables pour le champ `consumptions` de la requête. Un procédé `productmassdependent` s'écrit comme un UUID seul, les autres exigent la définition d'une quantité sous la forme `{ "amount", "processId" }`. parameters: - $ref: "#/components/parameters/genericScopeParam" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericProcessListResponse" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" /{scope}/simulator: post: tags: - Générique summary: Calcul des impacts environnementaux d'un produit description: | Calcule l'ensemble des impacts à partir d'une requête `GenericQuery`. Le corps JSON est le même que celui exposé par l'onglet Partage du simulateur web (composants catalogue et/ou composants personnalisés). parameters: - $ref: "#/components/parameters/genericScopeParam" requestBody: description: Requête modélisant le produit à évaluer. L'id des procédés et composants est invariable dans le temps. required: true content: application/json: schema: $ref: "#/components/schemas/GenericQuery" examples: genericExampleCompote: $ref: "#/components/examples/genericExampleCompote" genericExampleJardiniere: $ref: "#/components/examples/genericExampleJardiniere" genericExampleVeloDeVille: $ref: "#/components/examples/genericExampleVeloDeVille" responses: 200: description: Opération réussie content: application/json: schema: $ref: "#/components/schemas/GenericSimulatorResponse" 400: description: Paramètres invalides content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" 401: $ref: "#/components/responses/AuthenticationError" 403: $ref: "#/components/responses/ForbiddenAccessError" 500: $ref: "#/components/responses/ServerError" components: securitySchemes: token: description: > Un jeton d'API (token) vous permet d'accéder aux impacts détaillés des calculs effectués. Il peut être passé dans les entêtes `Authorization: Bearer` ou `token` de la requête. type: apiKey name: token in: header examples: tShirtFrance: summary: "T-Shirt France 100% Coton" value: mass: 0.17 materials: - id: "62a4d6fb-3276-4ba5-93a3-889ecd3bff84" share: 1 country: "FR" product: "tshirt" countrySpinning: "FR" countryFabric: "FR" countryDyeing: "FR" countryMaking: "FR" fabricProcess: "knitting-mix" tShirtChina: summary: "T-Shirt Chine, low-cost, 100% Coton" value: mass: 0.17 materials: - id: "62a4d6fb-3276-4ba5-93a3-889ecd3bff84" share: 1 product: "tshirt" countrySpinning: "CN" countryFabric: "CN" countryDyeing: "CN" countryMaking: "CN" airTransportRatio: 0.33 makingWaste: null makingDeadStock: null makingComplexity: null yarnSize: null surfaceMass: null fabricProcess: "knitting-mix" disabledSteps: - use genericExampleCompote: summary: "Lot de 4 pots de compote pomme banane" value: assembly: country: FR components: - elements: - amount: 0.2 material: country: FR id: d9519b9d-d166-4bb0-8f34-27bb874b104a transforms: - country: FR id: de307fb4-99d3-4a01-962b-242ace7b2739 name: "Compote de pomme (200g)" quantity: 1 - elements: - amount: 0.2 material: country: ROF id: ed59e002-178b-5132-9df5-6883261dfa1c transforms: - country: ROF id: de307fb4-99d3-4a01-962b-242ace7b2739 name: "Compote de banane (200g)" quantity: 1 consumptions: - b4642cec-b72e-4116-81c5-5dbfccb46055 distribution: be66b80b-1500-4e3b-bfd2-87a89ff54031 packagings: - amount: 1 processId: d64edb92-6adc-4a06-a0d0-250cf57c54bd recyclable: true transportOptions: cooling: true genericExampleJardiniere: summary: "Jardinière d'extérieur en bois" value: components: - id: c5d86519-e56a-4ad7-aada-d4f7fffd5628 quantity: 1 - id: c845482e-8347-4a3c-9dd4-392d8fc2cb3f quantity: 1 genericExampleVeloDeVille: summary: "Vélo de ville, cadre aluminium" value: product: b87cbaf5-4ad5-4bc6-84b6-b63c934e1d60 components: - id: 1bd0f5c3-c368-4a2f-b404-2214a6c9b677 quantity: 1 - id: 8e38b6a5-1c95-43f6-987f-2e368fc74edc quantity: 2 - id: a94918a7-8915-4841-9cdc-deec0536c724 quantity: 2 - id: 6ab7bcdf-7648-43b5-beb6-b4fa11c2d5d3 quantity: 1 - id: c4a8eb8f-b4c6-42b8-bd04-0f68e9083424 quantity: 1 - id: 892ba9b4-e6d4-408c-87b9-5eef455f5b4f quantity: 1 - id: 658611b7-4b76-4f1d-aed7-55ec11f299e3 quantity: 1 - id: 347629ff-e7e9-4822-a948-d8c7757b2a9a quantity: 1 - id: d2228b50-8187-4940-92a5-6dffe2a2ba85 quantity: 1 assembly: country: FR operations: - c51ab87d-f368-4704-a5ec-7ea17ba87d46 parameters: genericMaterialTypeParam: name: materialType in: path required: true description: | Identifiant du type de matière, correspondant au suffixe de la catégorie `material_type:` du procédé matière (par exemple `pp` pour `material_type:pp`). schema: type: string example: fruits_and_vegetables genericScopeParam: name: scope in: path required: true description: | Identifiant d’un périmètre du calculateur générique activé sur cette instance (liste disponible sur `GET /generic/scopes`). Par exemple `food2`. schema: type: string example: food2 minLength: 1 impactUrlParam: name: impact in: path description: | Trigramme de l'impact étudié ([la liste est documenté ici](https://fabrique-numerique.gitbook.io/ecobalyse/methodologie/impacts-consideres)) required: true schema: type: string minLength: 3 maxLength: 5 default: "cch" enum: - "acd" - "cch" - "ecs" - "etf" - "etf-c" - "fru" - "fwe" - "htc" - "htc-c" - "htn" - "htn-c" - "ior" - "ldu" - "mru" - "ozd" - "pco" - "pma" - "swe" - "tre" - "wtu" responses: AuthenticationError: description: Jeton d’API manquant ou invalide content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" ForbiddenAccessError: description: | Accès refusé ; cela peut être dû à un scope désactivé sur cette instance, ou à un compte non autorisé (par exemple, accès réservé aux bêta-testeurs et superutilisateurs) content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" ServerError: description: Erreur irrécupérable du serveur content: application/json: schema: $ref: "#/components/schemas/InvalidParametersError" schemas: Impacts: description: | Tous les impacts, individuels comme agrégés. allOf: - $ref: "#/components/schemas/PhysicalImpacts" - type: object properties: ecs: type: number description: "Coût environnemental (Pts d'impact)" PhysicalImpacts: type: object description: | Catégories d'impacts physiques, dans leurs unités respectives. Ne contient pas de coûts agrégés comme `ecs`. properties: acd: type: number description: "Acidification (mol éq. H+)" cch: type: number description: "Changement climatique (kg éq. CO2)" etf: type: number description: "Écotoxicité de l'eau douce (CTUe)" etf-c: type: number description: "Écotoxicité de l'eau douce, corrigée (CTUe)" fru: type: number description: "Utilisation de ressources fossiles (MJ)" fwe: type: number description: "Eutrophisation eaux douces (kg éq. P)" htc: type: number description: "Toxicité humaine - cancer (CTUh)" htc-c: type: number description: "Toxicité humaine - cancer, corrigée (CTUh)" htn: type: number description: "Toxicité humaine - non-cancer (CTUh)" htn-c: type: number description: "Toxicité humaine - non-cancer, corrigée (CTUh)" ior: type: number description: "Radiations ionisantes (éq. kBq U235)" ldu: type: number description: "Utilisation des sols (sans dimension (pt))" mru: type: number description: "Utilisation de ressources minérales et métalliques (kg éq. Sb)" ozd: type: number description: "Appauvrissement de la couche d'ozone (kg éq. CFC 11)" pco: type: number description: "Formation d'ozone photochimique (kg éq. COVNM)" pma: type: number description: "Particules (incidence de maladie)" swe: type: number description: "Eutrophisation marine (kg éq. N)" tre: type: number description: "Eutrophisation terrestre (mol éq. N)" wtu: type: number description: "Utilisation de ressources en eau (m³)" TextileQuery: type: object additionalProperties: false required: - mass - materials - product properties: mass: type: number description: Masse du produit fini, en kilogrammes minimum: 0.01 example: 0.17 product: type: string description: | Identifiant du produit (liste disponible sur le point d'entrée `/textile/products`) enum: - calecon - chaussettes - chemise - jean - jupe - maillot-de-bain - manteau - pantalon - pull - slip - tshirt materials: type: array description: Liste des matières composant le vêtement items: "$ref": "#/components/schemas/TextileQueryMaterial" minItems: 1 airTransportRatio: type: number description: | Part de **transport aérien** entre l'étape de **Confection** et l'étape de **Distribution**, entre `0` et `1` minimum: 0 maximum: 1 business: type: string description: | Type d'entreprise et d'offre de services : - `small-business`: PME/TPE - `large-business-with-services`: Grande entreprise avec service de réparation - `large-business-without-services` (par défaut): Grande entreprise sans service de réparation enum: - small-business - large-business-with-services - large-business-without-services countryDyeing: type: string description: | Code pays pour l'étape de **Teinture** (liste disponible sur le point d'entrée `textile/countries`) minLength: 2 maxLength: 3 countryFabric: type: string description: | Code pays pour l'étape de **Tissage/Tricotage** (liste disponible sur le point d'entrée `textile/countries`) minLength: 2 maxLength: 3 countryMaking: type: string description: | Code pays pour l'étape de **Confection** (liste disponible sur le point d'entrée `textile/countries`) minLength: 2 maxLength: 3 countrySpinning: type: string description: | Code pays pour l'étape de **Filature** (liste disponible sur le point d'entrée `textile/countries`). Si non spécifié, le pays de filature pris en considération est celui de production de la matière la plus représentée dans le mix. minLength: 2 maxLength: 3 disabledSteps: type: array description: | Liste des étapes du cycle de vie à désactiver, séparée par des virgules. Chaque étape est identifiée par un code : - `material`: Matière - `spinning`: Filature - `fabric`: Tissage ou Tricotage - `ennobling`: Ennoblissement (incluant le pré-traitement, la teinture et la finition) - `making`: Confection - `distribution`: Distribution - `use`: Utilisation - `eol`: Fin de vie Par exemple, pour désactiver l'étape de filature ainsi que celle d'ennoblissement, on peut passer `disabledSteps=spinning,ennobling`. items: type: string enum: - material - spinning - fabric - making - ennobling - distribution - use - eol dyeingProcessType: type: string description: | Ce paramètre permet de préciser le type de procédé avec lequel est teint le produit; il peut prendre les valeurs suivantes : - `average`: Teinture moyenne - `continuous`: Teinture en continu - `discontinuous`: Teinture discontinue ⚠️ En l’absence d’utilisation explicite du paramètre, le type de teinture utilisé sera teinture moyenne. enum: - average - continuous - discontinuous fabricProcess: type: string description: | Le processus utilisé pour tisser ou tricoter le tissu, parmi la liste de choix suivants : - `knitting-mix` : Tricotage moyen (mix de métiers circulaire & rectiligne) - `knitting-fully-fashioned` : Tricotage fully-fashioned / seamless - `knitting-integral` : Tricotage intégral / whole garment - `knitting-circular` : Tricotage circulaire, inventaire désagrégé - `knitting-straight` : Tricotage rectiligne, inventaire désagrégé - `weaving` : Tissage enum: - knitting-mix - knitting-fully-fashioned - knitting-integral - knitting-circular - knitting-straight - weaving fading: type: boolean description: | Active l'application du **procédé de délavage** pour l'étape de confection d'un produit. makingComplexity: type: string description: | Complexité de la confection, parmi la liste de choix suivants : - `very-high` : très élevée - `high` : élevée - `medium` : moyenne - `low` : faible - `very-low` : très faible **⚠️ Sur les produits tricotés en "fully fashioned / seamless", ce paramètre n'a aucun impact (valeur fixe: very-low).** **⚠️ Sur les produits tricotés en "integral / whole garment", ce paramètre n'a aucun impact (valeur fixe: vide, non applicable).** enum: - very-high - high - medium - low - very-low - not-applicable makingDeadStock: type: number description: | Taux de stocks dormants lors de la confection, entre `0` et `0.3`. minimum: 0 maximum: 0.3 makingWaste: type: number description: | Taux de perte en confection (incluant la découpe), entre `0` et `0.4`. **⚠️ Sur les produits tricotés en "fully fashioned / seamless", ce paramètre n'a aucun impact (valeur fixe: 0.02).** **⚠️ Sur les produits tricotés en "integral / whole garment", ce paramètre n'a aucun impact (valeur fixe: 0).** minimum: 0 maximum: 0.4 numberOfReferences: description: | Nombre de références au catalogue de la marque. type: number minimum: 1 maximum: 999999 physicalDurability: description: La durabilité physique du produit. type: number minimum: 0.67 maximum: 1.45 price: description: | Prix du produit, en Euros (€). type: number minimum: 1 maximum: 1000 printing: type: object description: | Ce paramètre permet de préciser le type d'impression effectuée sur le produit. Par exemple, `{"kind": "pigment", "ratio": 0.1}` signifie impression pigmentaire sur 10% de la superficie du vêtement. required: ["kind"] properties: kind: type: string description: | Type de procédé d'impression pouvant prendre les valeurs suivantes : - `pigment` pour une impression pigmentaire ; - `substantive` pour une impression fixé/lavé ; enum: - pigment - substantive ratio: type: number description: | Pourcentage de surface imprimée, exprimé entre `0` et `0.8` (entre 0% et 80%) surfaceMass: type: number description: | Le grammage de l'étoffe, exprimé en gr/m², représente sa masse surfacique. **⚠️ Sur les produits tricotés, ce paramètre n'impacte que l'impression.** minimum: 80 maximum: 500 trims: description: | Liste des accessoires du vêtement (boutons, zip, etc). La liste des accessoires disponibles est accessible sur le point d'entrée `/textile/trims`. type: array items: type: object properties: id: type: string format: uuid quantity: type: integer minimum: 0 upcycled: description: | Produit remanufacturé type: boolean yarnSize: oneOf: - type: string - type: integer description: | Titrage du fil exprimé en **numéro métrique** (`Nm`). Il est aussi possible de l'exprimer en décitex (`Dtex`) en spécifiant l'unité. Exemples de saisie : - `40` : 40Nm - `"40Nm"` : 40Nm - `"250Dtex"` : 250Dtex, équivalent à 40Nm minimum: 9 maximum: 200 TextileQueryMaterial: type: object description: | Liste des matières composant le produit additionalProperties: false required: - id - share properties: id: type: string description: | Identifiant de la matière, la liste des matières disponibles est accessible sur le point d'entrée `/textile/materials` share: type: number description: | Part du produit que cette matière représente (entre `0` et `1`) minimum: 0.01 maximum: 1 spinning: type: string description: | Procédé de filature ou de filage pour la matière, dont la valeur peut être : - `ConventionalSpinning` : filature conventionnelle (à anneaux : ring spun) pour les matières naturelles ou artificielles - `UnconventionalSpinning` : filature non conventionnelle (à bouts libérées : open-end) pour les matières naturelles ou artificielles - `SyntheticSpinning` : filage pour les matières synthétiques enum: - ConventionalSpinning - UnconventionalSpinning - SyntheticSpinning country: type: string description: Code du pays d'origine de la matière (liste disponible sur le point d'entrée `/textile/countries`). minLength: 2 maxLength: 3 FoodQuery: type: object additionalProperties: false required: - ingredients properties: ingredients: type: array items: "$ref": "#/components/schemas/FoodQueryIngredient" minItems: 1 transform: "$ref": "#/components/schemas/FoodQueryTransform" packaging: type: array items: "$ref": "#/components/schemas/FoodQueryPackaging" distribution: type: string description: | Choix du mode de stockage chez le distributeur, parmi ces valeurs possibles : - `ambient`: Température ambiante (valeur par défaut) - `fresh`: Réfrigéré - `frozen`: Congelé La distribution inclut 450km de transport terrestre vers le site de stockage + 150km vers le site de distribution. enum: [ambient, fresh, frozen] preparation: type: array description: | Liste des techniques de préparation mobilisées **à l'étape de consommation** : - `frying`: Friture - `pan-cooking`: Cuisson à la poêle - `pan-warming`: Réchauffage à la poêle - `oven`: Cuisson au four - `microwave`: Cuisson au four micro-ondes - `refrigeration`: Réfrigération - `freezing`: Congélation **Un maximum de deux techniques de préparation est autorisé.** items: type: string enum: - frying - pan-cooking - pan-warming - oven - microwave - refrigeration - freezing FoodQueryIngredient: type: object description: | Liste des ingrédients composant la recette (liste disponible sur le point d'entrée `/food/ingredients`). Le format de chaque entrée est composé de : - l'identifiant de la matière (pour avoir la liste, utiliser l'API de liste d'ingrédients) - sa masse **exprimée en grammes** - un éventuel code de pays d'origine (ex: `BR` pour le Brésil) - un éventuel transport par avion *uniquement si c'est un [ingrédient de catégorie "HORS EUROPE-MAGHREB (AVION)"](https://fabrique-numerique.gitbook.io/ecobalyse/alimentaire/transport#circuits-consideres)* (valeurs possible: ``, `byPlane`, `noPlane`) additionalProperties: false required: - id - mass properties: id: type: string description: Identifiant de l'ingrédient mass: type: number description: Masse de l'ingrédient, **en grammes** country: type: string description: Code du pays d'origine (liste disponible sur le point d'entrée `/food/countries`). byPlane: type: string description: Transport par avion enum: ["", byPlane, noPlane] FoodQueryTransform: type: object description: | Précision du procédé de transformation et de la masse de produit à transformer. additionalProperties: false required: - id - mass properties: id: type: string description: Identifiant du procédé de transformation (liste disponible sur le point d'entrée `/food/transforms`) mass: type: number description: Masse de produit à transformer, **en grammes** FoodQueryPackaging: type: object description: | Liste des emballages composant la recette. additionalProperties: false required: - id - mass properties: id: type: string description: Identifiant du procédé d'emballage (liste disponible sur le point d'entrée `/food/packaging`) mass: type: number description: Masse de cet emballage, **en grammes** InvalidParametersError: type: object properties: error: type: object description: | Un dictionnaire dont la clé est le nom d'un champ en erreur et la valeur le message d'erreur. properties: decoding: type: string description: Une erreur de décodage JSON general: type: string description: Une erreur d'ordre général materialType: type: string description: Type de matière invalide authorization: type: string description: Jeton/token absent ou invalide scope: type: string description: Scope inactif sur cette instance server: type: string description: Erreur du serveur d’authentification additionalProperties: type: string description: Une erreur particulière pour un champ spécifique documentation: type: string description: | Lien hypertexte vers la documentation de l'API CountryListResponse: type: array description: Liste des pays. items: type: object properties: code: type: string name: type: string MaterialListResponse: type: array description: Liste des matières items: type: object properties: uuid: type: string name: type: string ProductListResponse: type: array description: Liste des types de produits items: type: object properties: id: type: string name: type: string TrimListResponse: type: array description: Liste des accessoires pour vêtements items: type: object properties: id: type: string name: type: string RecipeResultsResponse: type: object description: | Recipe impact results. properties: webUrl: type: string description: URL vers la simulation dans l'interface web. results: type: object properties: impacts: $ref: "#/components/schemas/Impacts" description: type: string description: Une description de la simulation. query: type: object description: Le jeu de paramètres utilisé pour effectuer la simulation. GenericSimulatorResponse: type: object description: | Réponse du simulateur pour un périmètre générique. properties: webUrl: type: string description: URL vers la simulation dans l'interface web. score: allOf: - $ref: "#/components/schemas/GenericScore" description: | Score en Pts d'impact du produit. Si un coefficient de durabilité est supporté pour le scope sélectionné et spécifié dans la requête, il est appliqué à ce score. impacts: allOf: - $ref: "#/components/schemas/PhysicalImpacts" description: | Catégories d'impacts physiques du produit, dans leurs unités respectives, après application du coefficient de durabilité. productMass: type: number description: Masse du produit fini, en kilogrammes. complements: allOf: - $ref: "#/components/schemas/GenericComplementPoints" description: | Détail des compléments hors ACV, en Pts d'impact, après application de la durabilité. La somme de ces valeurs est égale à `score.complements`. subscores: allOf: - $ref: "#/components/schemas/GenericSubscores" description: | Détail du score d'impact (`ecs`) par sous-score, après application de la durabilité. stages: allOf: - $ref: "#/components/schemas/GenericStages" description: | Détail du score d'impact (`ecs`) par étape du cycle de vie, après application de la durabilité. composition: type: array description: | Impacts de composition du produit à **l'étape de production** uniquement, après application de la durabilité. items: $ref: "#/components/schemas/GenericCompositionItem" description: type: string description: Une description de la simulation. query: allOf: - $ref: "#/components/schemas/GenericQuery" description: Le jeu de paramètres utilisé pour effectuer la simulation. required: - complements - composition - impacts - productMass - query - score - stages - subscores - webUrl GenericScore: type: object additionalProperties: false description: | Éléments du score en Pts d'impact : - `ecs` est le coût environnemental total en Pts d'impact, compléments hors ACV inclus - `complements` est la somme en Pts d'impact de tous les compléments hors ACV required: - complements - ecs properties: ecs: type: number description: Score d'impact (Pts), compléments inclus complements: type: number description: | Somme des compléments hors ACV (en Pts). Une valeur négative **diminue** le coût environnemental. GenericComplementPoints: type: object additionalProperties: false description: | Points d'impact (`ecs`) par complément, après application de la durabilité. Une clé absente signifie que ce complément ne s'applique pas. Une valeur négative **diminue** le coût environnemental. properties: cropDiversity: type: number description: Diversité culturale (Pts d'impact) forest: type: number description: Forêt (Pts d'impact) hedges: type: number description: Haies (Pts d'impact) microfibers: type: number description: Microfibres (Pts d'impact) outOfEuropeEOL: type: number description: Export hors Europe (Pts d'impact) permanentPasture: type: number description: Prairies permanentes (Pts d'impact) plotSize: type: number description: Taille des parcelles (Pts d'impact) GenericCompositionItem: type: object additionalProperties: false required: - complements - impacts - mass - quantity - score properties: id: type: string format: uuid description: Identifiant du composant catalogue. Absent pour un composant personnalisé name: type: string description: Nom du composant. quantity: type: integer description: Quantité demandée pour ce composant. mass: type: number description: | Masse de la ligne, en kilogrammes. La quantité est déjà appliquée : ne pas multiplier `mass` par `quantity`. score: allOf: - $ref: "#/components/schemas/GenericScore" description: | Score de ce composant, après application de la durabilité. Le coût environnemental (`ecs`) inclut les compléments. impacts: allOf: - $ref: "#/components/schemas/PhysicalImpacts" description: | Catégories d'impacts physiques de ce composant, dans leurs unités respectives, après application du coefficient de durabilité. complements: allOf: - $ref: "#/components/schemas/GenericComplementPoints" description: | Compléments des éléments de ce composant, en Pts d'impact, après application de la durabilité. La somme de ces valeurs est égale à `score.complements`. GenericStages: type: object additionalProperties: false description: | Coût environnemental en Pts d'impact (`ecs`) de chaque étape, après durabilité. Une étape sans impact vaut 0. required: - assembly - distribution - endOfLife - materials - packaging - transform - transports - usage properties: materials: type: number description: Matières premières (Pts d'impact), hors compléments transform: type: number description: Transformation (Pts d'impact) assembly: type: number description: Assemblage (Pts d'impact) packaging: type: number description: Emballage (Pts d'impact) transports: type: number description: Transports (Pts d'impact) distribution: type: number description: Distribution (Pts d'impact) usage: type: number description: Utilisation (Pts d'impact) endOfLife: type: number description: Fin de vie (Pts d'impact) GenericSubscores: type: object additionalProperties: false description: | Points d'impact (`ecs`) par sous-score, **après** application de la durabilité. Ces sous-scores sont recalculés à partir des indicateurs physiques. Leur somme peut différer de `score.ecs` d'une fraction de point. required: - biodiversity - climate - complements - health - resources properties: biodiversity: type: number description: Biodiversité (Pts d'impact) climate: type: number description: Climat (Pts d'impact) health: type: number description: Santé environnementale (Pts d'impact) resources: type: number description: Ressources (Pts d'impact) complements: type: number description: Compléments (en Pts d'impact, une valeur négative **diminue** le score) GenericScopeListResponse: type: array description: | Liste des périmètres génériques activés sur cette instance (voir `GET /generic/scopes`). items: type: object additionalProperties: false required: - id - name properties: id: type: string description: Identifiant utilisable comme paramètre de chemin `{scope}`. example: food2 name: type: string description: Libellé affichable du périmètre. example: Alimentaire BÉTA SingleImpactResponse: type: object properties: webUrl: type: string description: URL vers la simulation dans l'interface web. impacts: type: object properties: "{impact}": type: number description: Valeur de l'impact recherché description: type: string description: Une description de la simulation. query: type: object description: Le jeu de paramètres utilisé pour effectuer la simulation. TextileSimulatorResponse: type: object description: | Impacts environnementaux d'un produit textile, exprimés dans leurs unités respectives, dont [la documentation est disponible ici](https://fabrique-numerique.gitbook.io/ecobalyse/methodologie/impacts-consideres). properties: webUrl: type: string description: URL vers la simulation dans l'interface web. impacts: $ref: "#/components/schemas/Impacts" description: type: string description: Une description de la simulation. query: type: object description: Le jeu de paramètres utilisé pour effectuer la simulation. DetailedTextileResponse: type: object description: | Réponse détaillée contenant tous les calculs intermédiaires pour un produit textile. properties: webUrl: type: string description: URL vers la simulation dans l'interface web. impacts: $ref: "#/components/schemas/Impacts" impactsWithoutDurability: $ref: "#/components/schemas/Impacts" complementsImpacts: type: object description: | Impact des compléments hors-ACV (microfibres, export hors europe, etc.). Si un coefficient de durabilité est supporté pour le scope sélectionné et spécifié dans la requête, les impacts sont calculés après application de ce coefficient. daysOfWear: type: integer description: Nombre de jours d'usage du produit durability: type: number description: Durabilité du produit inputs: type: object description: Paramètres d'entrée de la simulation lifeCycle: type: object description: Détails du cycle de vie du produit transport: type: object description: Détails du transport trimsImpacts: type: object description: Impacts des accessoires useNbCycles: type: integer description: Nombre de cycles d'usage IngredientListResponse: type: array description: Liste des ingrédients utilisables dans une recette items: type: object properties: id: type: string name: type: string defaultOrigin: type: string description: Lieu d'origine par défaut de cet ingrédient dont la liste est disponible dans [la documentation](https://fabrique-numerique.gitbook.io/ecobalyse/alimentaire/transport#circuits-consideres) PackagingListResponse: type: array description: Liste des emballages utilisables pour conditionner une recette items: type: object properties: id: type: string name: type: string TransformListResponse: type: array description: Liste des procédés de transformation utilisables pour une recette items: type: object properties: id: type: string name: type: string GenericQuery: type: object additionalProperties: false description: | Requête de simulation générique. properties: components: type: array description: | Liste des composants constituant le produit. Un composant du catalogue se référence par `id` (liste disponible sur `/{scope}/catalog`). Un composant personnalisé se décrit via `name` et `elements` à la racine de l'item (matières listées sur `/{scope}/processes/material`). L'objet imbriqué `custom` reste accepté. items: $ref: "#/components/schemas/GenericQueryItem" product: type: string format: uuid description: | Identifiant de la catégorie de produit (liste disponible sur `/{scope}/categories`). Lorsque ce champ est fourni, ses valeurs par défaut s'appliquent aux champs suivants s'ils sont vides ou absents : - `assembly.operations` - `consumptions` - `distribution` - `transportOptions.cooling` assembly: $ref: "#/components/schemas/GenericQueryAssembly" consumptions: type: array description: | Liste des procédés de consommation à l'étape d'utilisation (liste disponible sur `/{scope}/processes/consumption`). Si omis, les consommations de la catégorie de produit sélectionnée s'appliquent. Un procédé dont l'entrée sera la masse du produit (catégorisé `productmassdependent`) s'identifie par un simple UUID (celui du procédé en question), sans quantité associée. Les autres types de procédés exigent que la quantité soit spécifiée (`{ "amount", "processId" }`). items: $ref: "#/components/schemas/GenericQueryConsumption" distribution: type: string format: uuid description: | Identifiant du procédé de distribution (liste disponible sur `/{scope}/processes/distribution`). Si omis, le procédé de la catégorie de produit sélectionnée ou de la configuration du périmètre générique s'applique. durability: type: number description: | Coefficient de durabilité du produit. Ignoré (et rejeté) lorsque la durabilité n'est pas activée pour le périmètre générique actif. packagings: type: array description: Emballages du produit (liste disponible sur `/{scope}/processes/packaging`). items: $ref: "#/components/schemas/GenericQueryQuantifiedProcess" recyclable: type: boolean description: Produit recyclable (défaut `true`). transportOptions: $ref: "#/components/schemas/GenericQueryTransportOptions" GenericQueryAssembly: type: object additionalProperties: false properties: country: type: string description: Code pays d'assemblage (liste disponible sur `/{scope}/countries`). minLength: 2 maxLength: 3 operations: type: array description: | Procédés d'assemblage (liste disponible sur `/{scope}/processes/assembly`). `[]` désactive explicitement les opérations par défaut de la catégorie. items: type: string format: uuid GenericQueryItem: type: object additionalProperties: false required: - quantity properties: id: type: string format: uuid description: Identifiant d'un composant du catalogue (liste disponible sur `/{scope}/catalog`). quantity: type: integer minimum: 1 description: Nombre d'exemplaires de ce composant. unitMass: type: number minimum: 0 exclusiveMinimum: true description: | Masse unitaire finale du composant, en kilogrammes (optionnel) : - Si le champ est fourni, il est prioritaire sur la masse cumulée des éléments du composant ; - Si le champ est omis, la masse cumulée des éléments du composant est utilisée. name: type: string description: Nom du composant personnalisé. elements: type: array items: $ref: "#/components/schemas/GenericQueryElement" scopes: type: array description: Scopes associés. items: type: string GenericQueryCustom: type: object additionalProperties: false required: - elements properties: name: type: string description: Nom du composant personnalisé. elements: type: array items: $ref: "#/components/schemas/GenericQueryElement" scopes: type: array description: Scopes associés. items: type: string GenericQueryElement: type: object additionalProperties: false required: - amount - material properties: amount: type: number description: | Quantité de matière, exprimée dans l'unité du procédé matière (`unit` renvoyé par `/{scope}/processes/material`). material: $ref: "#/components/schemas/GenericQueryLocalizedProcess" transforms: type: array description: | Transformations successives de la matière (liste disponible sur `/{scope}/processes/transform/{materialType}`). Champ optionnel : l'omettre équivaut à une absence de transformation. Chaque entrée accepte un UUID seul ou un objet de forme `{ "id", "country" }`. items: $ref: "#/components/schemas/GenericQueryLocalizedProcess" GenericQueryLocalizedProcess: description: | Procédé localisé : UUID seul (pays d'origine par défaut), ou objet `{ "id", "country" }` pour mobiliser le mix énergétique du pays. oneOf: - type: string format: uuid description: Identifiant du procédé (pays d'origine par défaut). - type: object additionalProperties: false required: - id properties: id: type: string format: uuid description: Identifiant du procédé. country: type: string description: Code pays de localisation (liste disponible sur `/{scope}/countries`). minLength: 2 maxLength: 3 GenericQueryConsumption: oneOf: - type: string format: uuid description: | Identifiant d'un procédé `productmassdependent` (sans `amount`). - type: object additionalProperties: false required: - processId properties: processId: type: string format: uuid description: Identifiant d'un procédé `productmassdependent` (sans `amount`). - type: object additionalProperties: false required: - amount - processId properties: amount: type: number description: | Quantité exprimée dans l'unité du procédé. Interdit si le procédé est `productmassdependent` ; obligatoire sinon. processId: type: string format: uuid description: Identifiant du procédé. GenericQueryQuantifiedProcess: type: object additionalProperties: false required: - amount - processId properties: amount: type: number description: | Quantité exprimée dans l'unité du procédé (`unit` renvoyé par le point d'entrée catalogue correspondant). processId: type: string format: uuid description: Identifiant du procédé. GenericQueryTransportOptions: type: object additionalProperties: false properties: byAir: type: number description: Part de transport aérien vers la distribution, en pourcentage entre `0` et `100`. minimum: 0 maximum: 100 cooling: type: boolean description: | Transport réfrigéré vers la distribution. Si omis, la valeur de la catégorie de produit s'applique. GenericComponentListResponse: type: array description: Liste des composants du catalogue items: type: object properties: id: type: string name: type: string GenericCategoryListResponse: type: array description: Liste des catégories de produit items: type: object properties: id: type: string label: type: string assembly: type: array items: type: string description: Procédés d'assemblage par défaut consumptions: type: array items: $ref: "#/components/schemas/GenericQueryConsumption" description: | Consommations par défaut à la phase d'utilisation. Un procédé `productmassdependent` est encodé comme un UUID (sans `amount`). cooling: type: boolean description: Transport réfrigéré par défaut distribution: type: string description: Procédé de distribution par défaut GenericProcessListResponse: type: array description: Liste des procédés items: type: object properties: id: type: string name: type: string unit: type: string description: Unité du procédé (`kg`, `m3`, `kWh`, `MJ`, `L`, `m2`, `Item(s)`, `t⋅km`) categories: type: array items: type: string description: Catégories du procédé