openapi: 3.1.0 info: title: kelvin API version: v3 description: 'Bienvenue dans la documentation de l''API kelvin. Cette API est conçue pour évaluer et améliorer la performance énergétique des propriétés. ![API Logo](/api/kelvin-v3-api-flow-colored-fr.svg) ### Aperçu de l''API L''API kelvin vous permet de créer des simulations pour évaluer la performance énergétique d''un bien immobilier. Elle vous aide également à proposer des plans de travaux personnalisés pour optimiser l''efficacité énergétique de ces biens. ### Objectifs Principaux - **Création de simulations** : Lancez des simulations pour obtenir la performance énergétique actuelle d''une propriété. - **Propositions de travaux** : Génération de recommandations de travaux spécifiques pour améliorer l''efficacité énergétique, basées sur les résultats de la simulation. - **Gestion des DPE** : Recherchez et gérez les Diagnostics de Performance Énergétique. ### Utilisation de l''iframe de sélection de polygone Pour créer une simulation, il faut déterminer la latitude, la longitude et l''identifiant d''interopérabilité (ban_id) de la propriété. Une carte interactive est disponible pour faciliter cette tâche: L''iframe de sélection de polygone. Cette carte permet aux utilisateurs de sélectionner visuellement leur propriété sur une carte. Vous pouvez intégrer ce composant dans vos applications en suivant la [documentation de l''iframe de sélection de polygone](https://app.go-kelvin.com/docs/simulator-map-iframe#/). Utilisez cette documentation pour explorer les endpoints disponibles, comprendre les paramètres requis, et découvrir comment intégrer efficacement l''API dans votre système. ### Changelog v2 → v3 ### ⚠️ Breaking changes **Tous les endpoints ont été migrés de `/api/v2/` vers `/api/v3/`.** #### Renommage des champs de performance énergétique `dpe_class` est renommé `energy_rating` dans l''état initial et l''état projeté. Trois nouveaux champs obligatoires sont ajoutés : | Avant | Après | |---|---| | `dpe_class` | `energy_rating` | | *(absent)* | `energy_consumption` (kWh/m²/an) | | *(absent)* | `carbon_rating` (lettre GES A–G) | | *(absent)* | `carbon_emissions` (kg CO₂/m²/an) | #### Champs d''isolation restructurés Les champs `walls_insulation_level`, `windows_insulation_level`, `high_floor_insulation_level`, `low_floor_insulation_level` (chaînes de caractères) sont remplacés par des objets contenant un `level` et une `u_value` numérique (W/m²K) : ```json "walls_insulation": { "level": "partially_insulated", "u_value": 0.35 } ``` #### Aides financières restructurées `subsidies` (montant total unique) est remplacé par un objet `financial_support` détaillé, disponible à la fois sur chaque plan de rénovation et sur chaque poste de travaux : ```json "financial_support": { "mpr": 4000.0, "cee": 800.0, "ecoptz": 1200.0, "local": { "Aide région Île-de-France": 1500.0 } } ``` #### Structure du plan de rénovation modifiée Chaque catégorie de travaux dans `renovation_plan` est désormais un **tableau d''items** (au lieu d''un objet unique). Chaque item remplace `id`/`simplified_id`/`label` par `technical_id` et `name`. #### Valeurs d''enum mises à jour Plusieurs champs ont des valeurs d''enum entièrement révisées pour correspondre au référentiel DPE/ADEME : - `generator_type` / `secondary_generator_type` : 4 valeurs génériques → 26 valeurs précises (ex. `condensing_gas_boiler`, `air_to_water_heat_pump`, `pellet_stove`) + `unknown` pour les cas non identifiés - `hot_water_type` : 5 valeurs → 24 valeurs précises (ex. `electric_hot_water_tank`, `thermodynamic_water_tank`) + `unknown` pour les cas non identifiés - `generator_energy` / `hot_water_energy` / `secondary_generator_energy` : `urban_heating_or_biomass` → `district_heating` + `biomass_wood` + `others` + `unknown` - `wall_material` : 5 valeurs → 9 valeurs (ex. `lightweight_concrete`, `hollow_or_perforated_bricks`, `rammed_or_cob_earth`) - `vents_type` : codes renommés (ex. `vmc_sf_hygro_b` → `sf_hygro_b_vmc`) #### `windows` renommé en `doors_windows` dans `renovation_plan` La catégorie `windows` couvre désormais fenêtres, portes, portes-fenêtres et fenêtres de toit (18 valeurs de `technical_id`). #### Champs supprimés - `recently_renovated` — supprimé de l''état initial et de l''endpoint de mise à jour du logement - `has_vents` — supprimé (remplacé par le champ `vents_type`) - `subsidies` — remplacé par l''objet `financial_support` ### ✨ Nouveautés #### Nouvel endpoint de qualification `PUT /api/v3/simulations/{id}/qualification` — Enregistre le profil de qualification de l''utilisateur (statut propriétaire/locataire, taille du foyer, tranche de revenus, département fiscal, maturité du projet). Cet appel doit être effectué avant `POST /run`. #### Nouveaux champs dans l''état initial - `epc_id` — numéro du DPE attaché à la simulation, le cas échéant - `secondary_generator_type` / `secondary_generator_energy` — système de chauffage secondaire - `collective_heating` / `collective_hot_water` — indicateurs de systèmes collectifs - `high_floor_surface`, `low_floor_surface`, `windows_surface` — surfaces en m² - `high_floor_kinds` / `low_floor_kinds` — tableaux remplaçant les anciens `high_floor_type` / `low_floor_type` - `sources` — indique pour chaque champ si la valeur provient de `ai`, `user` ou `dpe` #### Nouvelles catégories de travaux dans `renovation_plan` En plus de `ventilation`, `walls`, `doors_windows`, `low_floor`, `high_floor`, les catégories suivantes sont désormais retournées : `heating`, `hot_water`, `renewable_energy`, `summer_comfort`, `winter_comfort`, `thermal_bridge_treatment`, `lighting`, `sobriety` #### Nouveau bloc KPI Chaque plan de rénovation inclut désormais un objet `kpi` avec `property_value_increase` (valorisation immobilière estimée exprimée en pourcentage, en €/m² et en perte de surface m²). ' tags: - name: Simulateur description: Endpoints disponibles dans l'offre Simulateur - name: Qualification description: Endpoints disponibles dans l'offre Qualification - name: Documents description: Endpoints pour consulter les documents générés pour une simulation paths: /api/v3/catalog/enabled/gestures: get: summary: Lister les gestes activés pour l'équipe tags: - Qualification description: 'Retourne la liste des gestes de rénovation activés pour l''équipe. Un geste est considéré comme activé tant qu''il n''a pas été explicitement désactivé pour l''équipe (ou l''une de ses équipes parentes) dans les paramètres du catalogue. Chaque geste inclut, le cas échéant, sa prestation par défaut (`default_service`) ainsi que la référence par défaut associée pour l''équipe. ' security: - bearerAuth: [] parameters: - name: gesture_technical_ids in: query required: false schema: type: array items: type: string explode: true example: - roof_windows_double_glazed description: 'Filtre optionnel : limite le résultat aux gestes correspondant à ces identifiants techniques.' responses: '200': description: Liste des gestes activés content: application/json: schema: type: object properties: gestures: type: array items: type: object properties: id: type: string example: 3f2a1b9c-1234-4c56-89ab-0123456789ab description: Identifiant (UUID) du geste. technical_id: type: string example: roof_windows_double_glazed description: Identifiant technique du geste. name: type: string example: Fenêtres de toit double vitrage description: Nom du geste. category: type: object properties: technical_id: type: string example: windows description: Identifiant technique de la catégorie. name: type: string example: Windows description: Nom de la catégorie. default_service: type: object description: Prestation par défaut du geste pour l'équipe (absent si aucune prestation par défaut). properties: id: type: string example: 7c9e6679-1234-40de-944b-0123456789ab description: Identifiant (UUID) de la prestation. technical_id: type: string example: roof_windows_double_glazed_pvc description: Identifiant technique de la prestation. price_unit: type: - string - 'null' example: unit description: Unité de tarification de la prestation. required: - id - technical_id - name - category required: - gestures '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - scope catalog:read manquant content: application/json: schema: type: object properties: error: type: string example: missing_scope /api/v3/catalog/enabled/references: get: summary: Lister les références activées pour l'équipe tags: - Qualification description: 'Retourne la liste des références (produits) activées pour l''équipe. Au moins un filtre est requis parmi `service_technical_ids`, `gestures_technical_ids` ou `reference_ids`. Ce endpoint s''inscrit dans le parcours de qualification : récupérer les gestes activés, puis les prestations activées, puis les références activées pour la prestation choisie. Chaque référence inclut son prix pour l''équipe (héritant de la hiérarchie d''équipes le cas échéant). ' security: - bearerAuth: [] parameters: - name: service_technical_ids in: query required: false schema: type: array items: type: string explode: true example: - french_doors_double_glazed_wood_aluminium description: Filtre par identifiants techniques de prestations. - name: gestures_technical_ids in: query required: false schema: type: array items: type: string explode: true example: - french_doors_double_glazed description: Filtre par identifiants techniques de gestes. - name: reference_ids in: query required: false schema: type: array items: type: string explode: true example: - 919ce243-1385-46d7-afd6-41ea8629a40d description: Filtre par identifiants (UUID) de références. responses: '200': description: Liste des références activées content: application/json: schema: type: object properties: references: type: array items: type: object properties: id: type: string example: 919ce243-1385-46d7-afd6-41ea8629a40d description: Identifiant (UUID) de la référence. brand: type: - string - 'null' example: Velux description: Marque de la référence. model: type: - string - 'null' example: GGL MK04 description: Modèle de la référence. url: type: - string - 'null' example: https://example.com/produit description: URL de la fiche produit. price: type: - number - 'null' format: float example: 350 description: Prix HT pour l'équipe, en Euros. tax: type: - number - 'null' format: float example: 0.055 description: Taux de TVA applicable. default: type: boolean example: true description: Indique si cette référence est la référence par défaut de l'équipe pour la prestation (ou le groupe de références). gesture: type: object properties: technical_id: type: string example: french_doors_double_glazed description: Identifiant technique du geste parent. service: type: object properties: technical_id: type: string example: french_doors_double_glazed_wood_aluminium description: Identifiant technique de la prestation parente. required: - id - gesture - service required: - references '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - scope catalog:read manquant content: application/json: schema: type: object properties: error: type: string example: missing_scope '422': description: Aucun filtre fourni content: application/json: schema: type: object properties: error: type: string example: 'At least one filter is required: reference_ids, gestures_technical_ids, service_technical_ids' /api/v3/catalog/enabled/services: get: summary: Lister les prestations activées pour l'équipe tags: - Qualification description: 'Retourne la liste des prestations (services) activées pour l''équipe. Une prestation est considérée comme activée tant qu''elle n''a pas été explicitement désactivée pour l''équipe (ou l''une de ses équipes parentes) dans les paramètres du catalogue. Chaque prestation inclut, le cas échéant, sa référence par défaut (`default_reference`) pour l''équipe. ' security: - bearerAuth: [] parameters: - name: service_technical_ids in: query required: false schema: type: array items: type: string explode: true example: - french_doors_double_glazed_wood_aluminium description: 'Filtre optionnel : limite le résultat aux prestations correspondant à ces identifiants techniques.' responses: '200': description: Liste des prestations activées content: application/json: schema: type: object properties: services: type: array items: type: object properties: id: type: string example: 7c9e6679-1234-40de-944b-0123456789ab description: Identifiant (UUID) de la prestation. technical_id: type: string example: french_doors_double_glazed_wood_aluminium description: Identifiant technique de la prestation. name: type: string example: Porte-fenêtre double vitrage bois-aluminium description: Nom de la prestation. price_unit: type: - string - 'null' example: unit description: Unité de tarification de la prestation. default: type: boolean example: true description: Indique si cette prestation est la prestation par défaut de l'équipe pour son geste. gesture: type: object properties: technical_id: type: string example: french_doors_double_glazed description: Identifiant technique du geste parent. category: type: object properties: technical_id: type: string example: windows description: Identifiant technique de la catégorie. name: type: string example: Windows description: Nom de la catégorie. required: - id - technical_id - name - gesture - category required: - services '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - scope catalog:read manquant content: application/json: schema: type: object properties: error: type: string example: missing_scope /api/v3/dpes: get: summary: Rechercher des DPE par clé d'interopérabilité ou par numéro DPE. tags: - Qualification description: 'Cet endpoint permet de rechercher des DPE par clé d''interopérabilité ou par numéro de DPE. **Fonctionnalités :** Il est obligatoire de fournir au moins un des deux paramètres "ban_id" ou "dpe_id". - **Recherche par clé d''interopérabilité** : Il est possible de rechercher les DPE par la clé d''interopérabilité (ban_id) d''une adresse. Par exemple "31157_0790_00009". - **Recherche par Numéro de DPE** : Il est également possible de rechercher un DPE en utilisant son numéro unique. Cela permet de récupérer rapidement les informations d''un DPE spécifique, par exemple "2331E2555868X". **Filtres :** En plus des paramètres principaux, cet endpoint permet d''appliquer des filtres supplémentaires : - **Surface** : Filtrer les DPE en fonction de la surface du bien à 10% près. - **Date du du diagnostic** : Filtrer les DPE selon la date à laquelle ils ont été établis. - **Classe Énergétique** : Filtrer par la classe énergétique du DPE. **Réponse :** En cas de succès, l''endpoint retourne une liste de DPE correspondant aux critères de recherche spécifiés.' security: - bearerAuth: [] parameters: - name: dpe_id in: query required: false example: 2331E2555868X schema: type: string - name: building_type in: query required: false example: house description: "Le type de bâtiment:\n * `apartment` \n * `house` \n * `building` \n * `unknown` \n " schema: type: string enum: - apartment - house - building - unknown - name: ban_id in: query required: false example: '31157_0790_00009' schema: type: string - name: surface in: query required: false example: 100 schema: type: number - name: report_date in: query required: false example: '2024-01-01' schema: type: string - name: energy_class in: query required: false example: E schema: type: string responses: '200': description: successful content: application/json: schema: type: array items: type: object properties: dpe_id: type: string example: 2331E2555868X description: Le numéro unique du DPE. building_type: type: string example: house enum: - apartment - house - building - unknown description: Le type de bâtiment. ban_id: type: string example: '31157_0790_00009' description: clé d'interopérabilité. energy_class: type: string example: A description: La classe énergétique du DPE. emission_class: type: string example: B description: La classe d'émission du DPE. surface: type: number example: 100 description: La surface. report_date: type: string example: '2024-05-10' description: La date à laquelle le DPE a été établi. address: type: string example: 9 Rue du Vivier, Cugnaux, 31270 description: L'adresse associée au DPE address_complement: type: string example: 'Escalier: Etage 3; Porte 322, Lot: 10' description: Détails supplémentaires pour l'adresse. dpe_version: type: string example: '2.4' description: La version du dpe. required: - dpe_id - ban_id - energy_class - emission_class - surface - report_date - address '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Required dpe_id and ban_id are both missing description: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden /api/v3/simulations: get: summary: Lister les simulations description: Endpoint pour lister les simulations. security: - bearerAuth: [] parameters: - name: status in: query required: false example: with_contact_details description: "Filtrer les simulations avec des informations de contact:\n * `with_contact_details` \n " schema: type: string enum: - with_contact_details - name: page in: query required: false example: 1 schema: type: integer responses: '200': description: successful content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string example: 1fh9vrmd2c description: L'identifiant de la simulation created_at: type: string format: date-time example: '2024-10-08T10:00:54Z' description: La date de création de la simulation simulation_url: type: string format: uri example: https://app.go-kelvin.com/simulator/4732fnd4mt/simulations/1fh9vrmd2c description: L'adresse web du résultat de la simulation team_id: type: string example: 4732fnd4mt description: L'identifiant de l'équipe source: type: string enum: - simulator - qualification - api - prospection example: api description: La source de la simulation tracking_context: type: object description: Les informations de tracking extraites du contexte de lancement de la simulation properties: utm_source: type: - string - 'null' utm_medium: type: - string - 'null' utm_campaign: type: - string - 'null' utm_content: type: - string - 'null' utm_term: type: - string - 'null' gad_source: type: - string - 'null' gclid: type: - string - 'null' fbclid: type: - string - 'null' cuid: type: - string - 'null' referer: type: - string - 'null' gbraid: type: - string - 'null' msclkid: type: - string - 'null' krid: type: - string - 'null' krsrc: type: - string - 'null' ksid: type: - string - 'null' client: type: object description: Les informations du client properties: first_name: type: - string - 'null' example: Jean description: Le prénom du client last_name: type: - string - 'null' example: Dupont description: Le nom de famille du client email: type: - string - 'null' example: jean.dupont@example.com description: L'email du client phone_number: type: - string - 'null' example: '+33600112233' description: Le téléphone du client profile: type: - string - 'null' enum: - owner_resident - owner_non_resident - renter - lessor - null example: owner_resident description: Le profil de l'utilisateur. primary_residence: type: - boolean - 'null' example: true description: Indique si c'est une résidence principale. household_size: type: - number - 'null' example: 4 description: Nombre de personnes dans le foyer. tax_residence_department: type: - string - 'null' example: '75' description: Département de résidence fiscale. income_range: type: - string - 'null' enum: - very_modest - modest - intermediate - superior - null example: modest description: La tranche de revenus du foyer. project_maturity: type: - string - 'null' enum: - curious - searching - signed - estimated - null example: curious description: Maturité du projet. housing: type: object description: Les informations du logement (type, latitude, longitude, adresse, adresse détaillée, BAN, lien Google Maps) properties: kind: type: - string - 'null' enum: - apartment - house - null description: Le type de logement latitude: type: number format: float example: 48.8487743 description: La latitude des coordonnées GPS du logement longitude: type: number format: float example: 2.328388 description: La longitude des coordonnées GPS du logement address: type: - string - 'null' example: 10 rue du Regard, 75006, Paris description: L'adresse du logement address_parts: type: object description: Les parties de l'adresse du logement (numéro, rue, ville, code postal, pays, latitude, longitude) properties: street_number: type: string example: '10' description: Le numéro de la rue address_line_1: type: string example: rue du Regard description: La rue address_line_2: type: - string - 'null' example: Appartement 2 description: Le complément d'adresse city: type: string example: Paris description: La ville postal_code: type: string example: '75006' description: Le code postal country_number: type: integer example: 250 description: Le code pays (ISO 3166-1 alpha-3) latitude: type: number format: float example: 48.8487743 description: La latitude des coordonnées GPS du logement longitude: type: number format: float example: 2.328388 description: La longitude des coordonnées GPS du logement ban_id: type: - string - 'null' example: '75106_8092_00010' description: L'identifiant BAN du logement google_maps_link: type: string example: https://maps.google.com/ description: Le lien Google Maps du logement initial_state: type: object properties: overall_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre DPE globale (la plus défavorable entre énergie et GES). energy_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre énergie energy_consumption: type: integer example: 201 description: La consommation énergétique en kWh/m²/an. carbon_rating: type: string enum: - A - B - C - D - E - F - G example: C description: La lettre GES carbon_emissions: type: integer example: 40 description: Les émissions de gaz à effet de serre en kg CO2/m²/an. epc_id: type: - string - 'null' example: 2169E0063000A description: Le numéro du DPE s'il y a un DPE attaché à la simulation. confidence_score: type: number format: float example: 0.85 description: Le score de confiance concernant la lettre du DPE. annual_energy_cost_range: type: object properties: min: type: integer example: 500 description: '[Déprécié] Le minimum du prix annuel estimé de chauffage.' max: type: number format: float example: 1200 description: '[Déprécié] Le maximum du prix annuel estimé de chauffage.' annual_energy_consumption: type: integer example: 150 description: La consommation énergétique annuelle exprimée en kWh/m²/an. position_percentage_neighborhood: type: number format: float example: 0.75 description: Le pourcentage de logements du quartier qui consomment plus que le logement en question. energy_loss_percentage: type: object properties: walls: type: number format: float example: 0.15 description: Le pourcentage de perte d'énergie des murs. openings: type: number format: float example: 0.2 description: Le pourcentage de perte d'énergie des ouvrants. low_floor: type: number format: float example: 0.3 description: Le pourcentage de perte d'énergie des planchers bas. high_floor: type: number format: float example: 0.35 description: Le pourcentage de perte d'énergie des plafonds. close_to_historical_monument: type: boolean example: false description: Proximité d'un monument historique. living_area: type: number example: 120 description: La surface habitable en mètres carrés. exterior_walls_surface: type: integer example: 100 description: La surface extérieure des murs en mètres carrés. house_number_of_levels: type: integer example: 1 description: Le nombre de niveaux dans la maison. shared_walls: type: boolean example: true description: Présence de murs mitoyens. wall_material: type: string enum: - lightweight_concrete - insulating_concrete - stone - brick - hollow_or_perforated_bricks - wood - wood_with_insulating_infill - rammed_or_cob_earth - traditional_old_material - others example: brick description: Le matériau principal des murs. construction_year: type: integer example: 1985 description: L'année de construction du bâtiment. number_of_windows: type: integer example: 8 description: Le nombre total de fenêtres. generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove - unknown example: condensing_gas_boiler description: Le type de générateur de chauffage. generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: gas description: Le type d'énergie utilisé par le générateur de chauffage. hot_water_type: type: string enum: - air_to_water_heat_pump - classic_gas_boiler - coal_boiler - condensing_gas_boiler - electric_boiler - electric_hot_water_tank - electric_water_heater - fossil_fueled_district_heating_network - fuel_boiler - gas_water_tank - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - instant_gas_water_heater - instant_lpg_propane_butane_water_heater - lpg_propane_butane_boiler_external_tank - lpg_propane_butane_storage_hot_water_tank - low_temperature_gas_boiler - other_gas_generators - pellet_boiler - standard_gas_boiler - thermodynamic_water_tank - uninsulated_district_heating_network - wood_boiler - unknown example: electric_hot_water_tank description: Le type de système de production d'eau chaude sanitaire. hot_water_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: electricity description: Le type d'énergie utilisé pour l'eau chaude sanitaire. walls_insulation: type: - object - 'null' description: L'isolation des murs. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation des murs. u_value: type: - number - 'null' format: float example: 0.35 description: La valeur U des murs en W/m²K. windows_insulation: type: - object - 'null' description: L'isolation des fenêtres. properties: level: type: - string - 'null' enum: - high_class - middle_class - low_class example: middle_class description: Le niveau d'isolation des fenêtres. u_value: type: - number - 'null' format: float example: 1.8 description: La valeur U des fenêtres en W/m²K. high_floor_insulation: type: - object - 'null' description: L'isolation du plancher haut. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher haut. u_value: type: - number - 'null' format: float example: 0.25 description: La valeur U du plancher haut en W/m²K. low_floor_insulation: type: - object - 'null' description: L'isolation du plancher bas. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher bas. u_value: type: - number - 'null' format: float example: 0.4 description: La valeur U du plancher bas en W/m²K. vents_type: type: string enum: - window_opening_ventilation - high_low_air_inlet_ventilation - natural_ventilation_duct - mechanical_ventilation_existing_duct - sf_self_regulating_vmc - sf_hygro_a_vmc - sf_hygro_b_vmc - sf_gas_vmc - low_pressure_vmc - hybrid_ventilation - individual_df_vmc - collective_df_vmc - climatic_well example: sf_self_regulating_vmc description: Le type de ventilation. garage: type: boolean example: false description: Présence d'un garage. high_floor_kinds: type: array items: type: string enum: - apartment - converted_attic - lost_attic - not_heated_space - office - roof_terrace - unknown example: - not_heated_space description: Les types de plancher haut. low_floor_kinds: type: array items: type: string enum: - apartment - crawl_space - not_heated_space - office - slab_on_grade - underground_garage - unknown example: - crawl_space description: Les types de plancher bas. secondary_generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: gas description: Le type d'énergie utilisé par le chauffage secondaire. secondary_generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove - unknown example: condensing_gas_boiler description: Le type de générateur de chauffage secondaire. collective_heating: type: boolean example: false description: Chauffage collectif. collective_hot_water: type: boolean example: false description: Eau chaude sanitaire collective. high_floor_surface: type: integer example: 60 description: La surface du plancher haut en mètres carrés. low_floor_surface: type: integer example: 60 description: La surface du plancher bas en mètres carrés. windows_surface: type: integer example: 10 description: La surface totale des fenêtres en mètres carrés. sources: type: - object - 'null' description: La source de chaque champ de l'état initial. Absent si aucune source n'est disponible. properties: living_area: type: - string - 'null' enum: - ai - user - dpe exterior_walls_surface: type: - string - 'null' enum: - ai - user - dpe house_number_of_levels: type: - string - 'null' enum: - ai - user - dpe wall_material: type: - string - 'null' enum: - ai - user - dpe construction_year: type: - string - 'null' enum: - ai - user - dpe number_of_windows: type: - string - 'null' enum: - ai - user - dpe windows_insulation: type: - string - 'null' enum: - ai - user - dpe windows_surface: type: - string - 'null' enum: - ai - user - dpe vents_type: type: - string - 'null' enum: - ai - user - dpe generator_type: type: - string - 'null' enum: - ai - user - dpe generator_energy: type: - string - 'null' enum: - ai - user - dpe secondary_generator_type: type: - string - 'null' enum: - ai - user - dpe secondary_generator_energy: type: - string - 'null' enum: - ai - user - dpe hot_water_type: type: - string - 'null' enum: - ai - user - dpe hot_water_energy: type: - string - 'null' enum: - ai - user - dpe high_floor_kinds: type: - string - 'null' enum: - ai - user - dpe low_floor_kinds: type: - string - 'null' enum: - ai - user - dpe walls_insulation: type: - string - 'null' enum: - ai - user - dpe high_floor_insulation: type: - string - 'null' enum: - ai - user - dpe low_floor_insulation: type: - string - 'null' enum: - ai - user - dpe close_to_historical_monument: type: - string - 'null' enum: - ai - user - dpe shared_walls: type: - string - 'null' enum: - ai - user - dpe projected_state: type: object properties: renovation_plans: type: array items: type: object description: Liste des plans de rénovation. properties: id: type: string example: hjjcm1qp28 description: L'identifiant du plan de rénovation. name: type: string example: Mon plan personnalisé description: Le nom du plan de rénovation. type: type: string enum: - customized - optimized - normal example: customized description: Le type de plan de rénovation. overall_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre DPE globale (la plus défavorable entre énergie et GES). energy_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre énergie après rénovation. energy_consumption: type: integer example: 201 description: La consommation énergétique après rénovation en kWh/m²/an. carbon_rating: type: string enum: - A - B - C - D - E - F - G example: C description: La lettre GES après rénovation. carbon_emissions: type: integer example: 40 description: Les émissions de gaz à effet de serre après rénovation en kg CO2/m²/an. yearly_energy_savings: type: number format: float description: Économies d'énergie annuelles estimées en Euros. example: 600 yearly_energy_cost: type: number format: float description: Coût énergétique annuel estimé en Euros. example: 12000 budget: type: number format: float description: Coût total estimé du plan de travaux en Euros. example: 12000 financial_support: $ref: '#/components/schemas/FinancialSupport' kpi: type: object description: Indicateurs clés de performance du plan de rénovation. properties: property_value_increase: type: object description: Valorisation immobilière estimée suite aux travaux. properties: percentage: type: number format: float description: Pourcentage d'augmentation de la valeur immobilière. example: 5 price_per_sqm: type: number format: float description: Valorisation estimée en €/m². example: 115 area_loss_sqm: type: number format: float description: Perte de surface en m² due aux travaux. example: 0 renovation_plan: type: object description: Liste des tâches du plan de rénovation. properties: ventilation: type: array items: type: object properties: technical_id: type: string enum: - dual_flow_ventilation - single_flow_ventilation_self_regulating - air_destratifier - mechanical_distributed_ventilation - dual_flow_ventilation_thermodynamic - single_flow_ventilation_humidity_controlled - ventilation_mechanical_insufflation name: type: string enum: - Installation d'une VMC double flux - Installation d'une VMC simple flux autoréglable - Installation d'un destratificateur d'air - Installation d'un système de ventilation mécanique répartie (VMR) - Installation d'une VMC double flux thermodynamique - Installation d'une VMC simple flux hygroréglable - Installation d'un système de ventilation mécanique par insufflation (VMI) quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' walls: type: array items: type: object properties: technical_id: type: string enum: - exterior_thermal_correction - interior_thermal_insulation - exterior_thermal_insulation - exterior_thermal_insulation_historic - interior_thermal_insulation_thin name: type: string enum: - Réalisation d'une correction thermique par l'extérieur - Isolation thermique des murs par l'intérieur (ITI) - Isolation thermique des murs par l'extérieur (ITE) - Isolation thermique des murs par l'extérieur (ITE) en zone historique - Isolation thermique des murs par l'intérieur (ITI) avec isolant mince quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' doors_windows: type: array items: type: object properties: technical_id: type: string enum: - windows_triple_glazed - doors_double_glazed - windows_double_glazed_historic - french_doors_double_glazed_historic - doors_full_historic - roof_windows_triple_glazed_historic - french_doors_triple_glazed - roof_windows_triple_glazed - doors_triple_glazed - roof_windows_double_glazed - windows_double_glazed - windows_triple_glazed_historic - french_doors_double_glazed - doors_full - roof_windows_double_glazed_historic - doors_double_glazed_historic - doors_triple_glazed_historic - french_doors_triple_glazed_historic name: type: string enum: - Pose de fenêtres à triple vitrage - Pose de portes à double vitrage - Pose de fenêtres à double vitrage en zone historique - Pose de portes-fenêtres à double vitrage en zone historique - Pose de portes pleines en zone historique - Pose de fenêtres de toit à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage - Pose de fenêtres de toit à triple vitrage - Pose de portes à triple vitrage - Pose de fenêtres de toit à double vitrage - Pose de fenêtres à double vitrage - Pose de fenêtres à triple vitrage en zone historique - Pose de portes-fenêtres à double vitrage - Pose de portes pleines - Pose de fenêtres de toit à double vitrage en zone historique - Pose de portes à double vitrage en zone historique - Pose de portes à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage en zone historique quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' low_floor: type: array items: type: object properties: technical_id: type: string enum: - crawl_space - underfloor - parcel name: type: string enum: - Isolation du plancher bas sur vide sanitaire - Isolation du plancher bas sur sous-sol - Isolation du plancher bas sur terre-plein quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' high_floor: type: array items: type: object properties: technical_id: type: string enum: - sloped_walls_nonreg - flat_roof - sloped_walls - lost_attic - flat_roof_nonreg name: type: string enum: - Isolation non réglementaire des rampants de toiture - Isolation de la toiture-terrasse - Isolation des rampants de toiture - Isolation du plancher haut sur combles perdus - Isolation non réglementaire de la toiture terrasse quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' heating: type: array items: type: object properties: technical_id: type: string enum: - wood_pellets_stove - wood_logs_boiler_simple_service - mass_stove - wood_pellets_boiler_simple_service - wood_logs_boiler_double_service - geothermal_heat_pump_double_service - wood_pellets_boiler_double_service - air_water_heat_pump_simple_service - gas_boiler_double_service - geothermal_heat_pump_simple_service - wood_logs_stove_double_service - gas_boiler_simple_service - air_water_heat_pump_double_service - air_air_heat_pump_with_external_unit_complete - hybrid_heat_pump_simple_service - wood_logs_stove - hybrid_heat_pump_double_service - electric_emitter_fluid_inertia - low_temperature_underfloor_heating - air_air_heat_pump_without_external_unit name: type: string enum: - Installation d'un poêle à granulés - Installation d'une chaudière bois à bûches simple service - Installation d'un poêle de masse - Installation d'une chaudière bois à granulés simple service - Installation d'une chaudière bois à bûches double service - Installation d'une pompe à chaleur géothermique double service - Installation d'une chaudière bois à granulés double service - Installation d'une pompe à chaleur air/eau simple service - Installation d'une chaudière gaz à condensation double service - Installation d'une pompe à chaleur géothermique simple service - Installation d'un poêle à bûches avec bouilleur - Installation d'une chaudière gaz à condensation simple service - Installation d'une pompe à chaleur air/eau double service - Installation d'une pompe à chaleur air/air avec groupe extérieur - Installation d'une pompe à chaleur hybride air/eau simple service - Installation d'un poêle à bûches - Installation d'une pompe à chaleur hybride air/eau double service - Installation d'un émetteur électrique performant - Installation d'un plancher chauffant basse température (PCBT) - Installation d'une pompe à chaleur air/air sans groupe extérieur quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour le chauffage. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' recommended_power: type: number description: Puissance recommandée (en kW). Présent uniquement pour les pompes à chaleur. example: 6.2 recommended_water_tank_volume: type: integer description: Capacité du ballon recommandée (en litres). Présent uniquement pour les pompes à chaleur double service. example: 80 hot_water: type: array items: type: object properties: technical_id: type: string enum: - solar_water_heater - electric_storage_tank - solar_system_combined - thermodynamic_water_heater name: type: string enum: - Installation d'un chauffe-eau solaire individuel - Installation d'un ballon d'eau chaude électrique à accumulation - Installation d'un système solaire combiné (SSC) - Installation d'un ballon d'eau chaude thermodynamique indépendant quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour l'eau chaude sanitaire. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' renewable_energy: type: array items: type: object properties: technical_id: type: string enum: - hydroelectric_turbine - wind_turbine - photovoltaic_panels name: type: string enum: - Installation d'une micro-turbine hydroélectrique - Installation d'une éolienne domestique - Installation de panneaux photovoltaïques quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' summer_comfort: type: array items: type: object properties: technical_id: type: string enum: - sunshade - roller_shutters - vegetal_facade - solar_film - exterior_jalousies - vegetal_screens - awnings name: type: string enum: - Installation de brise-soleil - Installation de volets roulants - Mise en place d'une végétalisation de façade - Pose de films solaires sur vitrages - Installation de jalousies extérieures - Installation d'écrans végétaux mobiles - Installation de stores bannes quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' winter_comfort: type: array items: type: object properties: technical_id: type: string enum: - thermal_curtains - window_sealing - carpets - air_leak_detection - door_borders name: type: string enum: - Installation de rideaux thermiques - Pose de joints d'étanchéité sur menuiseries - Mise en place de moquettes ou de tapis - Réalisation d'une traque des infiltrations d'air - Installation de boudins de porte quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' thermal_bridge_treatment: type: array items: type: object properties: technical_id: type: string enum: - thermal_bridge_treatment_after_interior_insulation - thermal_bridge_treatment_after_high_floor_insulation - thermal_point_insulation_window - thermal_bridge_treatment_after_low_floor_insulation name: type: string enum: - Traitement d'une rupture de pont thermique suite à une isolation des murs par l'intérieur - Traitement d'une rupture de pont thermique suite à une isolation du plancher haut - Isolation thermique d'un pont thermique induit par une menuiserie - Traitement d'une rupture de pont thermique suite à une isolation du plancher bas quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' lighting: type: array items: type: object properties: technical_id: type: string enum: - led_low_consumption_bulbs - lighting_controller - solar_lighting_with_motion_detector name: type: string enum: - Remplacement d'ampoules existantes par des lampes LED à faible consommation - Installation d'un contrôleur d'éclairage connecté - Installation d'un éclairage solaire extérieur avec détecteur de mouvement quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' sobriety: type: array items: type: object properties: technical_id: type: string enum: - rainwater_watering_system - rainwater_downspout - gray_water_recovery_system - rainwater_recovery_tank_with_cistern - buried_water_recovery_tank - thermostat_valves - terminal_regulation name: type: string enum: - Installation d'un système d'arrosage utilisant l'eau de récupération - Installation d'une descente d'eau pluviale - Installation d'un récupérateur d'énergie sur les eaux grises - Installation d'un récupérateur d'eau de pluie avec citerne - Installation d'une cuve de récupération d'eau de pluie enterrée - Pose de robinets thermostatiques - Installation d'un système de régulation terminale quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' required: - id - name - type - overall_rating - energy_rating - energy_consumption - carbon_rating - carbon_emissions - yearly_energy_savings - yearly_energy_cost - budget - financial_support - kpi - renovation_plan required: - id - created_at - simulation_url - team_id - source - tracking_context - client - housing meta: type: object properties: total_pages: type: integer current_page: type: integer total_count: type: integer '400': description: Bad request content: application/json: schema: type: object properties: error: type: string example: Status is not valid description: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden post: summary: Créer une simulation tags: - Simulateur description: Endpoint pour créer une simulation à partir d'un ban_id et des coordonnées GPS. security: - bearerAuth: [] parameters: [] responses: '201': description: Created content: application/json: schema: type: object properties: simulation_id: type: string example: hjjcm1qp28 description: L'identifiant de la simulation créée. required: - simulation_id '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Latitude is missing, Longitude is missing description: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '422': description: Unprocessable Entity content: application/json: schema: type: object properties: error: type: string example: Could not find an address for the given GPS coordinates description: Error message indicating the issue. requestBody: content: application/json: schema: type: object properties: latitude: type: number example: 43.53718 longitude: type: number example: 1.337797 ban_id: type: string example: '31157_0790_00009' required: - latitude - longitude /api/v3/simulations/{simulation_id}/housing: get: summary: Récupérer les informations de la propriété tags: - Simulateur description: Les informations de la propriété. security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed description: Le statut de l'opération de génération de résultat. housing: type: object properties: housing_type: type: - string - 'null' enum: - house - apartment - unknown example: apartment description: Le type de la propriété. epc_id: type: - string - 'null' example: 2331E2555868X description: Le numéro unique du DPE. surface: type: - integer - 'null' example: 100 description: La surface de la propriété en m2. floor_level: type: - string - 'null' enum: - ground - intermediate - last example: ground description: La position da le propriété dans l'immeuble. number_of_exterior_wall: type: - integer - 'null' example: 1 description: Le nombre de murs donnant sur l'extérieur. address: type: object properties: street_number: type: string example: '123' description: Le numéro de la rue. address_line_1: type: string example: Rue de la Paix description: Le nom de la rue. address_line_2: type: - string - 'null' example: Apt 4B description: Complément d'adresse. city: type: string example: Paris description: La ville. postal_code: type: string example: '75000' description: Le code postal. country_number: type: integer example: 250 description: Le numéro du pays, code ISO3166. France = 250 latitude: type: number example: 43.53718 description: La latitude. longitude: type: number example: 1.337797 description: La longitude. required: - housing - status - address '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. put: summary: Mettre à jour les informations de la propriété tags: - Simulateur description: Endpoint pour mettre à jour les informations de la propriété security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Housing type is missing or invalid description: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden requestBody: content: application/json: schema: type: object properties: epc_id: type: string example: 2331E2555868X description: Le numéro unique du DPE. housing_type: type: string enum: - house - apartment example: apartment description: Le type de propriété. surface: type: integer example: 100 description: La surface de la propriété en m2. Obligatoire si le housing_type est apartment. floor_level: type: string enum: - ground - intermediate - last example: ground description: La position da le propriété dans l'immeuble. Obligatoire si le housing_type est apartment. number_of_exterior_wall: type: integer example: 1 description: Le nombre de murs donnant sur l'extérieur. Obligatoire si le housing_type est apartment. required: - simulation_id - post_params /api/v3/simulations/{simulation_id}/qualification: put: summary: Qualifier le profil de l'utilisateur tags: - Simulateur description: 'Enregistre les informations de qualification du profil utilisateur. **Comportement de `primary_residence` selon `profile` :** - `owner_resident` : `primary_residence` est automatiquement défini à `true` (la valeur fournie est ignorée). - `owner_non_resident` : `primary_residence` est automatiquement défini à `false` (la valeur fournie est ignorée). - `renter` ou `lessor` : `primary_residence` est **obligatoire** ; son absence retourne une erreur `400`. **Effet sur la simulation :** Après une mise à jour réussie, les résultats de simulation existants ne sont plus à jour. Appelez `POST /api/v3/simulations/{simulation_id}/run` pour obtenir des résultats recalculés. ' security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de la simulation. schema: type: string responses: '204': description: Qualification enregistrée avec succès. '400': description: Bad Request - code département fiscal invalide content: application/json: schema: type: object properties: error: type: string example: Tax residence department is invalid description: Le code département ne correspond à aucun département connu. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: La simulation n'existe pas ou n'appartient pas à cette équipe. requestBody: content: application/json: schema: type: object properties: profile: type: string enum: - owner_resident - owner_non_resident - renter - lessor example: owner_resident description: 'Le profil de l''utilisateur. `owner_resident` : propriétaire occupant (primary_residence forcé à true). `owner_non_resident` : propriétaire non-occupant (primary_residence forcé à false). `renter` : locataire (primary_residence requis). `lessor` : bailleur (primary_residence requis).' primary_residence: type: boolean example: true description: Indique si le logement est la résidence principale. Obligatoire pour les profils `renter` et `lessor`. Ignoré (auto-calculé) pour les profils `owner_resident` et `owner_non_resident`. household_size: type: integer minimum: 1 maximum: 12 example: 4 description: Nombre de personnes dans le foyer fiscal. tax_residence_department: type: string example: '75' description: 'Code du département de résidence fiscale (ex : "75", "13", "2A"). Doit correspondre à un code de département français valide. Utilisé pour calculer les plafonds de revenus ANAH.' income_range: type: string enum: - very_modest - modest - intermediate - superior example: modest description: 'Tranche de revenus du foyer selon le barème ANAH. `very_modest` : très modeste. `modest` : modeste. `intermediate` : intermédiaire. `superior` : supérieure aux plafonds ANAH.' project_maturity: type: string enum: - curious - searching - estimated - signed example: curious description: 'Maturité du projet de rénovation. `curious` : en phase de découverte. `searching` : en recherche active. `estimated` : devis reçu. `signed` : devis signé.' required: - profile - household_size - income_range required: true /api/v3/simulations/{simulation_id}/run: post: summary: Lancer la simulation tags: - Simulateur description: Endpoint pour lancer la simulation. security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '201': description: Created '401': description: unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '422': description: Unprocessable Entity content: application/json: schema: type: object properties: error: type: string example: Apartment information is needed /api/v3/simulations/{simulation_id}/initial-state: get: summary: Récupérer l'état initial tags: - Qualification description: Les informations de l'état initial. security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed description: Le statut de l'opération de génération de résultat. initial_state: type: object properties: overall_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre DPE globale (la plus défavorable entre énergie et GES). energy_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre énergie energy_consumption: type: integer example: 201 description: La consommation énergétique en kWh/m²/an. carbon_rating: type: string enum: - A - B - C - D - E - F - G example: C description: La lettre GES carbon_emissions: type: integer example: 40 description: Les émissions de gaz à effet de serre en kg CO2/m²/an. epc_id: type: - string - 'null' example: 2169E0063000A description: Le numéro du DPE s'il y a un DPE attaché à la simulation. confidence_score: type: number format: float example: 0.85 description: Le score de confiance concernant la lettre du DPE. annual_energy_cost_range: type: object properties: min: type: integer example: 500 description: '[Déprécié] Le minimum du prix annuel estimé de chauffage.' max: type: number format: float example: 1200 description: '[Déprécié] Le maximum du prix annuel estimé de chauffage.' annual_energy_consumption: type: integer example: 150 description: La consommation énergétique annuelle exprimée en kWh/m²/an. position_percentage_neighborhood: type: number format: float example: 0.75 description: Le pourcentage de logements du quartier qui consomment plus que le logement en question. energy_loss_percentage: type: object properties: walls: type: number format: float example: 0.15 description: Le pourcentage de perte d'énergie des murs. openings: type: number format: float example: 0.2 description: Le pourcentage de perte d'énergie des ouvrants. low_floor: type: number format: float example: 0.3 description: Le pourcentage de perte d'énergie des planchers bas. high_floor: type: number format: float example: 0.35 description: Le pourcentage de perte d'énergie des plafonds. close_to_historical_monument: type: boolean example: false description: Proximité d'un monument historique. living_area: type: number example: 120 description: La surface habitable en mètres carrés. exterior_walls_surface: type: integer example: 100 description: La surface extérieure des murs en mètres carrés. house_number_of_levels: type: integer example: 1 description: Le nombre de niveaux dans la maison. shared_walls: type: boolean example: true description: Présence de murs mitoyens. wall_material: type: string enum: - lightweight_concrete - insulating_concrete - stone - brick - hollow_or_perforated_bricks - wood - wood_with_insulating_infill - rammed_or_cob_earth - traditional_old_material - others example: brick description: Le matériau principal des murs. construction_year: type: integer example: 1985 description: L'année de construction du bâtiment. number_of_windows: type: integer example: 8 description: Le nombre total de fenêtres. generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove - unknown example: condensing_gas_boiler description: Le type de générateur de chauffage. generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: gas description: Le type d'énergie utilisé par le générateur de chauffage. hot_water_type: type: string enum: - air_to_water_heat_pump - classic_gas_boiler - coal_boiler - condensing_gas_boiler - electric_boiler - electric_hot_water_tank - electric_water_heater - fossil_fueled_district_heating_network - fuel_boiler - gas_water_tank - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - instant_gas_water_heater - instant_lpg_propane_butane_water_heater - lpg_propane_butane_boiler_external_tank - lpg_propane_butane_storage_hot_water_tank - low_temperature_gas_boiler - other_gas_generators - pellet_boiler - standard_gas_boiler - thermodynamic_water_tank - uninsulated_district_heating_network - wood_boiler - unknown example: electric_hot_water_tank description: Le type de système de production d'eau chaude sanitaire. hot_water_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: electricity description: Le type d'énergie utilisé pour l'eau chaude sanitaire. walls_insulation: type: - object - 'null' description: L'isolation des murs. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation des murs. u_value: type: - number - 'null' format: float example: 0.35 description: La valeur U des murs en W/m²K. windows_insulation: type: - object - 'null' description: L'isolation des fenêtres. properties: level: type: - string - 'null' enum: - high_class - middle_class - low_class example: middle_class description: Le niveau d'isolation des fenêtres. u_value: type: - number - 'null' format: float example: 1.8 description: La valeur U des fenêtres en W/m²K. high_floor_insulation: type: - object - 'null' description: L'isolation du plancher haut. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher haut. u_value: type: - number - 'null' format: float example: 0.25 description: La valeur U du plancher haut en W/m²K. low_floor_insulation: type: - object - 'null' description: L'isolation du plancher bas. properties: level: type: - string - 'null' enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher bas. u_value: type: - number - 'null' format: float example: 0.4 description: La valeur U du plancher bas en W/m²K. vents_type: type: string enum: - window_opening_ventilation - high_low_air_inlet_ventilation - natural_ventilation_duct - mechanical_ventilation_existing_duct - sf_self_regulating_vmc - sf_hygro_a_vmc - sf_hygro_b_vmc - sf_gas_vmc - low_pressure_vmc - hybrid_ventilation - individual_df_vmc - collective_df_vmc - climatic_well example: sf_self_regulating_vmc description: Le type de ventilation. garage: type: boolean example: false description: Présence d'un garage. high_floor_kinds: type: array items: type: string enum: - apartment - converted_attic - lost_attic - not_heated_space - office - roof_terrace - unknown example: - not_heated_space description: Les types de plancher haut. low_floor_kinds: type: array items: type: string enum: - apartment - crawl_space - not_heated_space - office - slab_on_grade - underground_garage - unknown example: - crawl_space description: Les types de plancher bas. secondary_generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others - unknown example: gas description: Le type d'énergie utilisé par le chauffage secondaire. secondary_generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove - unknown example: condensing_gas_boiler description: Le type de générateur de chauffage secondaire. collective_heating: type: boolean example: false description: Chauffage collectif. collective_hot_water: type: boolean example: false description: Eau chaude sanitaire collective. high_floor_surface: type: integer example: 60 description: La surface du plancher haut en mètres carrés. low_floor_surface: type: integer example: 60 description: La surface du plancher bas en mètres carrés. windows_surface: type: integer example: 10 description: La surface totale des fenêtres en mètres carrés. sources: type: - object - 'null' description: La source de chaque champ de l'état initial. Absent si aucune source n'est disponible. properties: living_area: type: - string - 'null' enum: - ai - user - dpe exterior_walls_surface: type: - string - 'null' enum: - ai - user - dpe house_number_of_levels: type: - string - 'null' enum: - ai - user - dpe wall_material: type: - string - 'null' enum: - ai - user - dpe construction_year: type: - string - 'null' enum: - ai - user - dpe number_of_windows: type: - string - 'null' enum: - ai - user - dpe windows_insulation: type: - string - 'null' enum: - ai - user - dpe windows_surface: type: - string - 'null' enum: - ai - user - dpe vents_type: type: - string - 'null' enum: - ai - user - dpe generator_type: type: - string - 'null' enum: - ai - user - dpe generator_energy: type: - string - 'null' enum: - ai - user - dpe secondary_generator_type: type: - string - 'null' enum: - ai - user - dpe secondary_generator_energy: type: - string - 'null' enum: - ai - user - dpe hot_water_type: type: - string - 'null' enum: - ai - user - dpe hot_water_energy: type: - string - 'null' enum: - ai - user - dpe high_floor_kinds: type: - string - 'null' enum: - ai - user - dpe low_floor_kinds: type: - string - 'null' enum: - ai - user - dpe walls_insulation: type: - string - 'null' enum: - ai - user - dpe high_floor_insulation: type: - string - 'null' enum: - ai - user - dpe low_floor_insulation: type: - string - 'null' enum: - ai - user - dpe close_to_historical_monument: type: - string - 'null' enum: - ai - user - dpe shared_walls: type: - string - 'null' enum: - ai - user - dpe garage: type: - string - 'null' enum: - user collective_heating: type: - string - 'null' enum: - user collective_hot_water: type: - string - 'null' enum: - user required: - status '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. '409': description: Conflit content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet description: Error message indicating the issue. put: summary: Mettre à jour l'état initial tags: - Qualification description: Endpoint pour mettre à jour les informations de l'état initial security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Generator type n'est pas valide '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. '422': description: Unprocessable Entity content: application/json: schema: type: object properties: error: type: string example: Apartment information is needed requestBody: content: application/json: schema: type: object properties: housing_type: type: string enum: - house - apartment example: apartment description: Type de logement. close_to_historical_monument: type: boolean example: true description: Proximité d'un monument historique. floor_level: type: string enum: - ground - intermediate - last example: ground description: Niveau de l'étage (rez-de-chaussée, intermédiaire, dernier étage). living_area: type: number example: 120 description: La surface habitable en mètres carrés. number_of_exterior_wall: type: integer example: 3 description: Nombre de murs extérieurs. house_number_of_levels: type: integer example: 1 description: Le nombre de niveaux dans la maison. shared_walls: type: boolean example: true description: Présence de murs mitoyens. construction_year: type: object description: L'année de construction du bâtiment. properties: range: type: string enum: - exact_date - less_than_two - two_to_fifteen - fifteen_to_twenty_five - more_twenty_five example: exact_date description: Plage d'années de construction. exact_date: type: integer example: 1985 description: Éléments récemment rénovés. wall_material: type: string enum: - lightweight_concrete - insulating_concrete - stone - brick - hollow_or_perforated_bricks - wood - wood_with_insulating_infill - rammed_or_cob_earth - traditional_old_material - others example: brick description: Le matériau principal des murs. high_floor_kinds: type: array items: type: string enum: - apartment - converted_attic - lost_attic - not_heated_space - office - roof_terrace - unknown example: - not_heated_space description: Les types de plancher haut. low_floor_kinds: type: array items: type: string enum: - apartment - crawl_space - not_heated_space - office - slab_on_grade - underground_garage - unknown example: - crawl_space description: Les types de plancher bas. windows: type: string enum: - high_class - middle_class - low_class example: middle_class description: Le type de fenêtre. number_of_windows: type: integer example: 8 description: Le nombre total de fenêtres. generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others example: gas description: Le type d'énergie utilisé par le générateur de chauffage. generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove example: condensing_gas_boiler description: Le type de générateur de chauffage. secondary_generator_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others example: gas description: Le type d'énergie utilisé par le chauffage secondaire. secondary_generator_type: type: string enum: - air_to_air_heat_pump - air_to_water_heat_pump - classic_gas_boiler - closed_fireplace_insert - coal_boiler - condensing_gas_boiler - electric_boiler_or_underfloor_heating - electric_convector_heater - electric_radiator - fossil_fueled_district_heating_network - fuel_boiler - fuel_stove - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - lpg_propane_butane_boiler_with_external_tank - low_temperature_gas_boiler - misc_system - other_gas_generators - pellet_boiler - pellet_stove - radiant_panel_heater - standard_gas_boiler - uninsulated_district_heating_network - wood_boiler - wood_stove example: condensing_gas_boiler description: Le type de générateur de chauffage secondaire. hot_water_energy: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others example: electricity description: Le type d'énergie utilisé pour l'eau chaude sanitaire. hot_water_type: type: string enum: - air_to_water_heat_pump - classic_gas_boiler - coal_boiler - condensing_gas_boiler - electric_boiler - electric_hot_water_tank - electric_water_heater - fossil_fueled_district_heating_network - fuel_boiler - gas_water_tank - geothermal_heat_pump - hybrid_heat_pump - insulated_district_heating_network - instant_gas_water_heater - instant_lpg_propane_butane_water_heater - lpg_propane_butane_boiler_external_tank - lpg_propane_butane_storage_hot_water_tank - low_temperature_gas_boiler - other_gas_generators - pellet_boiler - standard_gas_boiler - thermodynamic_water_tank - uninsulated_district_heating_network - wood_boiler example: electric_hot_water_tank description: Le type de système de production d'eau chaude sanitaire. vents_type: type: string enum: - window_opening_ventilation - high_low_air_inlet_ventilation - natural_ventilation_duct - mechanical_ventilation_existing_duct - sf_self_regulating_vmc - sf_hygro_a_vmc - sf_hygro_b_vmc - sf_gas_vmc - low_pressure_vmc - hybrid_ventilation - individual_df_vmc - collective_df_vmc - climatic_well example: sf_self_regulating_vmc description: Le type de ventilation. garage: type: boolean example: false description: Présence d'un garage. collective_heating: type: boolean example: false description: Chauffage collectif. collective_hot_water: type: boolean example: false description: Eau chaude sanitaire collective. walls_insulation_level: type: string enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation des murs. high_floor_insulation_level: type: string enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher haut. low_floor_insulation_level: type: string enum: - no_insulation - partially_insulated - moderately_insulated - well_insulated example: partially_insulated description: Le niveau d'isolation du plancher bas. high_floor_surface: type: integer example: 60 description: La surface du plancher haut en mètres carrés. low_floor_surface: type: integer example: 60 description: La surface du plancher bas en mètres carrés. exterior_walls_surface: type: integer example: 85 description: La surface extérieure des murs en mètres carrés. windows_surface: type: integer example: 10 description: La surface totale des fenêtres en mètres carrés. required: [] /api/v3/simulations/{simulation_id}/projected-state: get: summary: Récupérer l'état projeté tags: - Simulateur description: Les informations de l'état projeté. security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed description: Le statut de l'opération de génération de résultat. projected_state: type: object properties: renovation_plans: type: array items: type: object description: Liste des plans de rénovation. properties: id: type: string example: hjjcm1qp28 description: L'identifiant du plan de rénovation. name: type: string example: Mon plan personnalisé description: Le nom du plan de rénovation. type: type: string enum: - normal - customized - optimized example: customized description: Le type de plan de rénovation. overall_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre DPE globale (la plus défavorable entre énergie et GES). energy_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre énergie après rénovation. energy_consumption: type: integer example: 201 description: La consommation énergétique après rénovation en kWh/m²/an. carbon_rating: type: string enum: - A - B - C - D - E - F - G example: C description: La lettre GES après rénovation. carbon_emissions: type: integer example: 40 description: Les émissions de gaz à effet de serre après rénovation en kg CO2/m²/an. yearly_energy_savings: type: number format: float description: Économies d'énergie annuelles estimées en Euros. example: 600 yearly_energy_cost: type: number format: float description: Coût énergétique annuel estimé en Euros. example: 12000 budget: type: number format: float description: Coût total estimé du plan de travaux en Euros. example: 12000 financial_support: $ref: '#/components/schemas/FinancialSupport' kpi: type: object description: Indicateurs clés de performance du plan de rénovation. properties: property_value_increase: type: object description: Valorisation immobilière estimée suite aux travaux. properties: percentage: type: number format: float description: Pourcentage d'augmentation de la valeur immobilière. example: 5 price_per_sqm: type: number format: float description: Valorisation estimée en €/m². example: 115 area_loss_sqm: type: number format: float description: Perte de surface en m² due aux travaux. example: 0 renovation_plan: type: object description: Liste des tâches du plan de rénovation. properties: ventilation: type: array items: type: object properties: technical_id: type: string enum: - dual_flow_ventilation - single_flow_ventilation_self_regulating - air_destratifier - mechanical_distributed_ventilation - dual_flow_ventilation_thermodynamic - single_flow_ventilation_humidity_controlled - ventilation_mechanical_insufflation name: type: string enum: - Installation d'une VMC double flux - Installation d'une VMC simple flux autoréglable - Installation d'un destratificateur d'air - Installation d'un système de ventilation mécanique répartie (VMR) - Installation d'une VMC double flux thermodynamique - Installation d'une VMC simple flux hygroréglable - Installation d'un système de ventilation mécanique par insufflation (VMI) quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' walls: type: array items: type: object properties: technical_id: type: string enum: - exterior_thermal_correction - interior_thermal_insulation - exterior_thermal_insulation - exterior_thermal_insulation_historic - interior_thermal_insulation_thin name: type: string enum: - Réalisation d'une correction thermique par l'extérieur - Isolation thermique des murs par l'intérieur (ITI) - Isolation thermique des murs par l'extérieur (ITE) - Isolation thermique des murs par l'extérieur (ITE) en zone historique - Isolation thermique des murs par l'intérieur (ITI) avec isolant mince quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' doors_windows: type: array items: type: object properties: technical_id: type: string enum: - windows_triple_glazed - doors_double_glazed - windows_double_glazed_historic - french_doors_double_glazed_historic - doors_full_historic - roof_windows_triple_glazed_historic - french_doors_triple_glazed - roof_windows_triple_glazed - doors_triple_glazed - roof_windows_double_glazed - windows_double_glazed - windows_triple_glazed_historic - french_doors_double_glazed - doors_full - roof_windows_double_glazed_historic - doors_double_glazed_historic - doors_triple_glazed_historic - french_doors_triple_glazed_historic name: type: string enum: - Pose de fenêtres à triple vitrage - Pose de portes à double vitrage - Pose de fenêtres à double vitrage en zone historique - Pose de portes-fenêtres à double vitrage en zone historique - Pose de portes pleines en zone historique - Pose de fenêtres de toit à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage - Pose de fenêtres de toit à triple vitrage - Pose de portes à triple vitrage - Pose de fenêtres de toit à double vitrage - Pose de fenêtres à double vitrage - Pose de fenêtres à triple vitrage en zone historique - Pose de portes-fenêtres à double vitrage - Pose de portes pleines - Pose de fenêtres de toit à double vitrage en zone historique - Pose de portes à double vitrage en zone historique - Pose de portes à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage en zone historique quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' low_floor: type: array items: type: object properties: technical_id: type: string enum: - crawl_space - underfloor - parcel name: type: string enum: - Isolation du plancher bas sur vide sanitaire - Isolation du plancher bas sur sous-sol - Isolation du plancher bas sur terre-plein quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' high_floor: type: array items: type: object properties: technical_id: type: string enum: - sloped_walls_nonreg - flat_roof - sloped_walls - lost_attic - flat_roof_nonreg name: type: string enum: - Isolation non réglementaire des rampants de toiture - Isolation de la toiture-terrasse - Isolation des rampants de toiture - Isolation du plancher haut sur combles perdus - Isolation non réglementaire de la toiture terrasse quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' heating: type: array items: type: object properties: technical_id: type: string enum: - wood_pellets_stove - wood_logs_boiler_simple_service - mass_stove - wood_pellets_boiler_simple_service - wood_logs_boiler_double_service - geothermal_heat_pump_double_service - wood_pellets_boiler_double_service - air_water_heat_pump_simple_service - gas_boiler_double_service - geothermal_heat_pump_simple_service - wood_logs_stove_double_service - gas_boiler_simple_service - air_water_heat_pump_double_service - air_air_heat_pump_with_external_unit_complete - hybrid_heat_pump_simple_service - wood_logs_stove - hybrid_heat_pump_double_service - electric_emitter_fluid_inertia - low_temperature_underfloor_heating - air_air_heat_pump_without_external_unit name: type: string enum: - Installation d'un poêle à granulés - Installation d'une chaudière bois à bûches simple service - Installation d'un poêle de masse - Installation d'une chaudière bois à granulés simple service - Installation d'une chaudière bois à bûches double service - Installation d'une pompe à chaleur géothermique double service - Installation d'une chaudière bois à granulés double service - Installation d'une pompe à chaleur air/eau simple service - Installation d'une chaudière gaz à condensation double service - Installation d'une pompe à chaleur géothermique simple service - Installation d'un poêle à bûches avec bouilleur - Installation d'une chaudière gaz à condensation simple service - Installation d'une pompe à chaleur air/eau double service - Installation d'une pompe à chaleur air/air avec groupe extérieur - Installation d'une pompe à chaleur hybride air/eau simple service - Installation d'un poêle à bûches - Installation d'une pompe à chaleur hybride air/eau double service - Installation d'un émetteur électrique performant - Installation d'un plancher chauffant basse température (PCBT) - Installation d'une pompe à chaleur air/air sans groupe extérieur quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour le chauffage. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' recommended_power: type: number description: Puissance recommandée (en kW). Présent uniquement pour les pompes à chaleur. example: 6.2 recommended_water_tank_volume: type: integer description: Capacité du ballon recommandée (en litres). Présent uniquement pour les pompes à chaleur double service. example: 80 service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' hot_water: type: array items: type: object properties: technical_id: type: string enum: - solar_water_heater - electric_storage_tank - solar_system_combined - thermodynamic_water_heater name: type: string enum: - Installation d'un chauffe-eau solaire individuel - Installation d'un ballon d'eau chaude électrique à accumulation - Installation d'un système solaire combiné (SSC) - Installation d'un ballon d'eau chaude thermodynamique indépendant quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour l'eau chaude sanitaire. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' renewable_energy: type: array items: type: object properties: technical_id: type: string enum: - hydroelectric_turbine - wind_turbine - photovoltaic_panels name: type: string enum: - Installation d'une micro-turbine hydroélectrique - Installation d'une éolienne domestique - Installation de panneaux photovoltaïques quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' summer_comfort: type: array items: type: object properties: technical_id: type: string enum: - sunshade - roller_shutters - vegetal_facade - solar_film - exterior_jalousies - vegetal_screens - awnings name: type: string enum: - Installation de brise-soleil - Installation de volets roulants - Mise en place d'une végétalisation de façade - Pose de films solaires sur vitrages - Installation de jalousies extérieures - Installation d'écrans végétaux mobiles - Installation de stores bannes quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' winter_comfort: type: array items: type: object properties: technical_id: type: string enum: - thermal_curtains - window_sealing - carpets - air_leak_detection - door_borders name: type: string enum: - Installation de rideaux thermiques - Pose de joints d'étanchéité sur menuiseries - Mise en place de moquettes ou de tapis - Réalisation d'une traque des infiltrations d'air - Installation de boudins de porte quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' thermal_bridge_treatment: type: array items: type: object properties: technical_id: type: string enum: - thermal_bridge_treatment_after_interior_insulation - thermal_bridge_treatment_after_high_floor_insulation - thermal_point_insulation_window - thermal_bridge_treatment_after_low_floor_insulation name: type: string enum: - Traitement d'une rupture de pont thermique suite à une isolation des murs par l'intérieur - Traitement d'une rupture de pont thermique suite à une isolation du plancher haut - Isolation thermique d'un pont thermique induit par une menuiserie - Traitement d'une rupture de pont thermique suite à une isolation du plancher bas quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' lighting: type: array items: type: object properties: technical_id: type: string enum: - led_low_consumption_bulbs - lighting_controller - solar_lighting_with_motion_detector name: type: string enum: - Remplacement d'ampoules existantes par des lampes LED à faible consommation - Installation d'un contrôleur d'éclairage connecté - Installation d'un éclairage solaire extérieur avec détecteur de mouvement quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' sobriety: type: array items: type: object properties: technical_id: type: string enum: - rainwater_watering_system - rainwater_downspout - gray_water_recovery_system - rainwater_recovery_tank_with_cistern - buried_water_recovery_tank - thermostat_valves - terminal_regulation name: type: string enum: - Installation d'un système d'arrosage utilisant l'eau de récupération - Installation d'une descente d'eau pluviale - Installation d'un récupérateur d'énergie sur les eaux grises - Installation d'un récupérateur d'eau de pluie avec citerne - Installation d'une cuve de récupération d'eau de pluie enterrée - Pose de robinets thermostatiques - Installation d'un système de régulation terminale quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' required: - id - name - type - overall_rating - energy_rating - energy_consumption - carbon_rating - carbon_emissions - yearly_energy_savings - yearly_energy_cost - budget - financial_support - kpi - renovation_plan required: - renovation_plans required: - status '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. '409': description: Conflit content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet description: Error message indicating the issue. /api/v3/simulations/{simulation_id}/projected-state/renovation-plans: post: summary: Créer un plan de rénovation personnalisé tags: - Qualification description: 'Crée un plan de rénovation basé sur une sélection spécifique de gestes. L''opération est asynchrone : l''API retourne immédiatement une réponse confirmant la création, mais le plan complet n''est pas disponible dans l''instant. Pour consulter le plan généré une fois le traitement terminé, utilisez le endpoint ''Récupérer le plan de rénovation personnalisé''.' security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: renovation_plan_id: type: string example: hjjcm1qp28 description: L'identifiant du plan de rénovation personnalisé. required: - renovation_plan_id '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. requestBody: content: application/json: schema: type: object properties: name: type: string example: Mon plan personnalisé description: Le nom du plan de rénovation personnalisé. renovation_plan: type: object properties: ventilation: type: array items: type: object properties: technical_id: type: string enum: - dual_flow_ventilation - single_flow_ventilation_self_regulating - air_destratifier - mechanical_distributed_ventilation - dual_flow_ventilation_thermodynamic - single_flow_ventilation_humidity_controlled - ventilation_mechanical_insufflation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id walls: type: array items: type: object properties: technical_id: type: string enum: - exterior_thermal_correction - interior_thermal_insulation - exterior_thermal_insulation - exterior_thermal_insulation_historic - interior_thermal_insulation_thin quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: integer example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id doors_windows: type: array items: type: object properties: technical_id: type: string enum: - windows_triple_glazed - doors_double_glazed - windows_double_glazed_historic - french_doors_double_glazed_historic - doors_full_historic - roof_windows_triple_glazed_historic - french_doors_triple_glazed - roof_windows_triple_glazed - doors_triple_glazed - roof_windows_double_glazed - windows_double_glazed - windows_triple_glazed_historic - french_doors_double_glazed - doors_full - roof_windows_double_glazed_historic - doors_double_glazed_historic - doors_triple_glazed_historic - french_doors_triple_glazed_historic quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par m² service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id low_floor: type: array items: type: object properties: technical_id: type: string enum: - crawl_space - underfloor - parcel quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: integer example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id high_floor: type: array items: type: object properties: technical_id: type: string enum: - sloped_walls_nonreg - flat_roof - sloped_walls - lost_attic - flat_roof_nonreg quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: number example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id heating: type: array items: type: object properties: technical_id: type: string enum: - wood_pellets_stove - wood_logs_boiler_simple_service - mass_stove - wood_pellets_boiler_simple_service - wood_logs_boiler_double_service - geothermal_heat_pump_double_service - wood_pellets_boiler_double_service - air_water_heat_pump_simple_service - gas_boiler_double_service - geothermal_heat_pump_simple_service - wood_logs_stove_double_service - gas_boiler_simple_service - air_water_heat_pump_double_service - air_air_heat_pump_with_external_unit_complete - hybrid_heat_pump_simple_service - wood_logs_stove - hybrid_heat_pump_double_service - electric_emitter_fluid_inertia - low_temperature_underfloor_heating - air_air_heat_pump_without_external_unit quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id hot_water: type: array items: type: object properties: technical_id: type: string enum: - solar_water_heater - electric_storage_tank - solar_system_combined - thermodynamic_water_heater quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id renewable_energy: type: array items: type: object properties: technical_id: type: string enum: - hydroelectric_turbine - wind_turbine - photovoltaic_panels quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id summer_comfort: type: array items: type: object properties: technical_id: type: string enum: - sunshade - roller_shutters - vegetal_facade - solar_film - exterior_jalousies - vegetal_screens - awnings quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id winter_comfort: type: array items: type: object properties: technical_id: type: string enum: - thermal_curtains - window_sealing - carpets - air_leak_detection - door_borders quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id thermal_bridge_treatment: type: array items: type: object properties: technical_id: type: string enum: - thermal_bridge_treatment_after_interior_insulation - thermal_bridge_treatment_after_high_floor_insulation - thermal_point_insulation_window - thermal_bridge_treatment_after_low_floor_insulation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id lighting: type: array items: type: object properties: technical_id: type: string enum: - led_low_consumption_bulbs - lighting_controller - solar_lighting_with_motion_detector quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id sobriety: type: array items: type: object properties: technical_id: type: string enum: - rainwater_watering_system - rainwater_downspout - gray_water_recovery_system - rainwater_recovery_tank_with_cistern - buried_water_recovery_tank - thermostat_valves - terminal_regulation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id required: - renovation_plan required: true /api/v3/simulations/{simulation_id}/projected-state/renovation-plans/{renovation_plan_id}: get: summary: Récupérer le plan de rénovation personnalisé tags: - Qualification description: Les informations du plan de rénovation personnalisé. security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string - name: renovation_plan_id in: path required: true example: hjjcm1qp28 description: L'identifiant du plan de rénovation personnalisé. schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed description: Le statut de l'opération de génération de résultat. id: type: string example: hjjcm1qp28 description: L'identifiant du plan de rénovation personnalisé. name: type: string example: Mon plan personnalisé description: Le nom du plan de rénovation personnalisé. type: type: string enum: - normal - customized - optimized example: customized description: Le type de plan de rénovation personnalisé. overall_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre DPE globale (la plus défavorable entre énergie et GES). energy_rating: type: string enum: - A - B - C - D - E - F - G example: B description: La lettre énergie après rénovation. energy_consumption: type: integer example: 201 description: La consommation énergétique après rénovation en kWh/m²/an. carbon_rating: type: string enum: - A - B - C - D - E - F - G example: C description: La lettre GES après rénovation. carbon_emissions: type: integer example: 40 description: Les émissions de gaz à effet de serre après rénovation en kg CO2/m²/an. yearly_energy_savings: type: integer description: Économies d'énergie annuelles estimées en Euros. example: 600 yearly_energy_cost: type: integer description: Coût énergétique annuel estimé en Euros. example: 12000 budget: type: number format: float example: 400 description: Le budget total du plan de rénovation personnalisé. financial_support: $ref: '#/components/schemas/FinancialSupport' kpi: type: object description: Indicateurs clés de performance du plan de rénovation. properties: property_value_increase: type: object description: Valorisation immobilière estimée suite aux travaux. properties: percentage: type: number format: float description: Pourcentage d'augmentation de la valeur immobilière. example: 5 price_per_sqm: type: number format: float description: Valorisation estimée en €/m². example: 115 area_loss_sqm: type: number format: float description: Perte de surface en m² due aux travaux. example: 0 renovation_plan: type: object description: Liste des tâches du plan de rénovation. properties: ventilation: type: array items: type: object properties: technical_id: type: string enum: - dual_flow_ventilation - single_flow_ventilation_self_regulating - air_destratifier - mechanical_distributed_ventilation - dual_flow_ventilation_thermodynamic - single_flow_ventilation_humidity_controlled - ventilation_mechanical_insufflation name: type: string enum: - Installation d'une VMC double flux - Installation d'une VMC simple flux autoréglable - Installation d'un destratificateur d'air - Installation d'un système de ventilation mécanique répartie (VMR) - Installation d'une VMC double flux thermodynamique - Installation d'une VMC simple flux hygroréglable - Installation d'un système de ventilation mécanique par insufflation (VMI) quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' walls: type: array items: type: object properties: technical_id: type: string enum: - exterior_thermal_correction - interior_thermal_insulation - exterior_thermal_insulation - exterior_thermal_insulation_historic - interior_thermal_insulation_thin name: type: string enum: - Réalisation d'une correction thermique par l'extérieur - Isolation thermique des murs par l'intérieur (ITI) - Isolation thermique des murs par l'extérieur (ITE) - Isolation thermique des murs par l'extérieur (ITE) en zone historique - Isolation thermique des murs par l'intérieur (ITI) avec isolant mince quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' doors_windows: type: array items: type: object properties: technical_id: type: string enum: - windows_triple_glazed - doors_double_glazed - windows_double_glazed_historic - french_doors_double_glazed_historic - doors_full_historic - roof_windows_triple_glazed_historic - french_doors_triple_glazed - roof_windows_triple_glazed - doors_triple_glazed - roof_windows_double_glazed - windows_double_glazed - windows_triple_glazed_historic - french_doors_double_glazed - doors_full - roof_windows_double_glazed_historic - doors_double_glazed_historic - doors_triple_glazed_historic - french_doors_triple_glazed_historic name: type: string enum: - Pose de fenêtres à triple vitrage - Pose de portes à double vitrage - Pose de fenêtres à double vitrage en zone historique - Pose de portes-fenêtres à double vitrage en zone historique - Pose de portes pleines en zone historique - Pose de fenêtres de toit à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage - Pose de fenêtres de toit à triple vitrage - Pose de portes à triple vitrage - Pose de fenêtres de toit à double vitrage - Pose de fenêtres à double vitrage - Pose de fenêtres à triple vitrage en zone historique - Pose de portes-fenêtres à double vitrage - Pose de portes pleines - Pose de fenêtres de toit à double vitrage en zone historique - Pose de portes à double vitrage en zone historique - Pose de portes à triple vitrage en zone historique - Pose de portes-fenêtres à triple vitrage en zone historique quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' low_floor: type: array items: type: object properties: technical_id: type: string enum: - crawl_space - underfloor - parcel name: type: string enum: - Isolation du plancher bas sur vide sanitaire - Isolation du plancher bas sur sous-sol - Isolation du plancher bas sur terre-plein quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' high_floor: type: array items: type: object properties: technical_id: type: string enum: - sloped_walls_nonreg - flat_roof - sloped_walls - lost_attic - flat_roof_nonreg name: type: string enum: - Isolation non réglementaire des rampants de toiture - Isolation de la toiture-terrasse - Isolation des rampants de toiture - Isolation du plancher haut sur combles perdus - Isolation non réglementaire de la toiture terrasse quantity: type: integer description: Surface en m² budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' heating: type: array items: type: object properties: technical_id: type: string enum: - wood_pellets_stove - wood_logs_boiler_simple_service - mass_stove - wood_pellets_boiler_simple_service - wood_logs_boiler_double_service - geothermal_heat_pump_double_service - wood_pellets_boiler_double_service - air_water_heat_pump_simple_service - gas_boiler_double_service - geothermal_heat_pump_simple_service - wood_logs_stove_double_service - gas_boiler_simple_service - air_water_heat_pump_double_service - air_air_heat_pump_with_external_unit_complete - hybrid_heat_pump_simple_service - wood_logs_stove - hybrid_heat_pump_double_service - electric_emitter_fluid_inertia - low_temperature_underfloor_heating - air_air_heat_pump_without_external_unit name: type: string enum: - Installation d'un poêle à granulés - Installation d'une chaudière bois à bûches simple service - Installation d'un poêle de masse - Installation d'une chaudière bois à granulés simple service - Installation d'une chaudière bois à bûches double service - Installation d'une pompe à chaleur géothermique double service - Installation d'une chaudière bois à granulés double service - Installation d'une pompe à chaleur air/eau simple service - Installation d'une chaudière gaz à condensation double service - Installation d'une pompe à chaleur géothermique simple service - Installation d'un poêle à bûches avec bouilleur - Installation d'une chaudière gaz à condensation simple service - Installation d'une pompe à chaleur air/eau double service - Installation d'une pompe à chaleur air/air avec groupe extérieur - Installation d'une pompe à chaleur hybride air/eau simple service - Installation d'un poêle à bûches - Installation d'une pompe à chaleur hybride air/eau double service - Installation d'un émetteur électrique performant - Installation d'un plancher chauffant basse température (PCBT) - Installation d'une pompe à chaleur air/air sans groupe extérieur quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour le chauffage. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' recommended_power: type: number description: Puissance recommandée (en kW). Présent uniquement pour les pompes à chaleur. example: 6.2 recommended_water_tank_volume: type: integer description: Capacité du ballon recommandée (en litres). Présent uniquement pour les pompes à chaleur double service. example: 80 service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' hot_water: type: array items: type: object properties: technical_id: type: string enum: - solar_water_heater - electric_storage_tank - solar_system_combined - thermodynamic_water_heater name: type: string enum: - Installation d'un chauffe-eau solaire individuel - Installation d'un ballon d'eau chaude électrique à accumulation - Installation d'un système solaire combiné (SSC) - Installation d'un ballon d'eau chaude thermodynamique indépendant quantity: type: integer description: Nombre d'unités energy: type: object description: Type d'énergie utilisé pour l'eau chaude sanitaire. properties: technical_id: type: string enum: - electricity - fuel - gas - biomass_wood - district_heating - others name: type: string enum: - Électricité - Fioul - Gaz - Bois/biomasse - Réseau de chauffage urbain - Autres budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' renewable_energy: type: array items: type: object properties: technical_id: type: string enum: - hydroelectric_turbine - wind_turbine - photovoltaic_panels name: type: string enum: - Installation d'une micro-turbine hydroélectrique - Installation d'une éolienne domestique - Installation de panneaux photovoltaïques quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' summer_comfort: type: array items: type: object properties: technical_id: type: string enum: - sunshade - roller_shutters - vegetal_facade - solar_film - exterior_jalousies - vegetal_screens - awnings name: type: string enum: - Installation de brise-soleil - Installation de volets roulants - Mise en place d'une végétalisation de façade - Pose de films solaires sur vitrages - Installation de jalousies extérieures - Installation d'écrans végétaux mobiles - Installation de stores bannes quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' winter_comfort: type: array items: type: object properties: technical_id: type: string enum: - thermal_curtains - window_sealing - carpets - air_leak_detection - door_borders name: type: string enum: - Installation de rideaux thermiques - Pose de joints d'étanchéité sur menuiseries - Mise en place de moquettes ou de tapis - Réalisation d'une traque des infiltrations d'air - Installation de boudins de porte quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' thermal_bridge_treatment: type: array items: type: object properties: technical_id: type: string enum: - thermal_bridge_treatment_after_interior_insulation - thermal_bridge_treatment_after_high_floor_insulation - thermal_point_insulation_window - thermal_bridge_treatment_after_low_floor_insulation name: type: string enum: - Traitement d'une rupture de pont thermique suite à une isolation des murs par l'intérieur - Traitement d'une rupture de pont thermique suite à une isolation du plancher haut - Isolation thermique d'un pont thermique induit par une menuiserie - Traitement d'une rupture de pont thermique suite à une isolation du plancher bas quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' lighting: type: array items: type: object properties: technical_id: type: string enum: - led_low_consumption_bulbs - lighting_controller - solar_lighting_with_motion_detector name: type: string enum: - Remplacement d'ampoules existantes par des lampes LED à faible consommation - Installation d'un contrôleur d'éclairage connecté - Installation d'un éclairage solaire extérieur avec détecteur de mouvement quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' sobriety: type: array items: type: object properties: technical_id: type: string enum: - rainwater_watering_system - rainwater_downspout - gray_water_recovery_system - rainwater_recovery_tank_with_cistern - buried_water_recovery_tank - thermostat_valves - terminal_regulation name: type: string enum: - Installation d'un système d'arrosage utilisant l'eau de récupération - Installation d'une descente d'eau pluviale - Installation d'un récupérateur d'énergie sur les eaux grises - Installation d'un récupérateur d'eau de pluie avec citerne - Installation d'une cuve de récupération d'eau de pluie enterrée - Pose de robinets thermostatiques - Installation d'un système de régulation terminale quantity: type: integer description: Nombre d'unités budget: type: number format: float description: Coût estimé des travaux (en euros) financial_support: $ref: '#/components/schemas/GestureFinancialSupport' service_technical_id: type: string nullable: true description: L'identifiant technique de la prestation (service) du catalogue. reference_id: type: string nullable: true description: L'identifiant de la référence catalogue sélectionnée. price_per_unit: type: number format: float nullable: true description: Le prix unitaire hors taxes retenu. vat: type: number format: float nullable: true description: 'Le taux de TVA appliqué (en pourcentage, ex: 5.5).' required: - status - id '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. patch: summary: Modifier un plan de rénovation personnalisé tags: - Qualification description: 'Modifie un plan de rénovation existant en mode avancé (choix de la prestation et de la référence catalogue). Un nouveau plan est créé à partir de l''original afin de conserver l''historique. L''opération est asynchrone : consultez le plan via le endpoint ''Récupérer le plan de rénovation personnalisé'' une fois le traitement terminé.' security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string - name: renovation_plan_id in: path required: true example: hjjcm1qp28 description: L'identifiant du plan de rénovation personnalisé à modifier. schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: renovation_plan_id: type: string example: hjjcm1qp28 description: L'identifiant du nouveau plan de rénovation personnalisé. required: - renovation_plan_id '400': description: Bad Request content: application/json: schema: type: object properties: error: type: string example: Error message indicating the issue. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation description: Error message indicating the issue. requestBody: content: application/json: schema: type: object properties: name: type: string example: Mon plan personnalisé description: Le nom du plan de rénovation personnalisé. renovation_plan: type: object properties: ventilation: type: array items: type: object properties: technical_id: type: string enum: - dual_flow_ventilation - single_flow_ventilation_self_regulating - air_destratifier - mechanical_distributed_ventilation - dual_flow_ventilation_thermodynamic - single_flow_ventilation_humidity_controlled - ventilation_mechanical_insufflation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id walls: type: array items: type: object properties: technical_id: type: string enum: - exterior_thermal_correction - interior_thermal_insulation - exterior_thermal_insulation - exterior_thermal_insulation_historic - interior_thermal_insulation_thin quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: integer example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id doors_windows: type: array items: type: object properties: technical_id: type: string enum: - windows_triple_glazed - doors_double_glazed - windows_double_glazed_historic - french_doors_double_glazed_historic - doors_full_historic - roof_windows_triple_glazed_historic - french_doors_triple_glazed - roof_windows_triple_glazed - doors_triple_glazed - roof_windows_double_glazed - windows_double_glazed - windows_triple_glazed_historic - french_doors_double_glazed - doors_full - roof_windows_double_glazed_historic - doors_double_glazed_historic - doors_triple_glazed_historic - french_doors_triple_glazed_historic quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par m² service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id low_floor: type: array items: type: object properties: technical_id: type: string enum: - crawl_space - underfloor - parcel quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: integer example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id high_floor: type: array items: type: object properties: technical_id: type: string enum: - sloped_walls_nonreg - flat_roof - sloped_walls - lost_attic - flat_roof_nonreg quantity: type: integer description: Surface en m² price_per_unit: type: number description: Prix par m² error_margin: type: number example: 15 description: Marge d'erreur (en pourcentage, 15 = 15%) service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id heating: type: array items: type: object properties: technical_id: type: string enum: - wood_pellets_stove - wood_logs_boiler_simple_service - mass_stove - wood_pellets_boiler_simple_service - wood_logs_boiler_double_service - geothermal_heat_pump_double_service - wood_pellets_boiler_double_service - air_water_heat_pump_simple_service - gas_boiler_double_service - geothermal_heat_pump_simple_service - wood_logs_stove_double_service - gas_boiler_simple_service - air_water_heat_pump_double_service - air_air_heat_pump_with_external_unit_complete - hybrid_heat_pump_simple_service - wood_logs_stove - hybrid_heat_pump_double_service - electric_emitter_fluid_inertia - low_temperature_underfloor_heating - air_air_heat_pump_without_external_unit quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id hot_water: type: array items: type: object properties: technical_id: type: string enum: - solar_water_heater - electric_storage_tank - solar_system_combined - thermodynamic_water_heater quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id renewable_energy: type: array items: type: object properties: technical_id: type: string enum: - hydroelectric_turbine - wind_turbine - photovoltaic_panels quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id summer_comfort: type: array items: type: object properties: technical_id: type: string enum: - sunshade - roller_shutters - vegetal_facade - solar_film - exterior_jalousies - vegetal_screens - awnings quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id winter_comfort: type: array items: type: object properties: technical_id: type: string enum: - thermal_curtains - window_sealing - carpets - air_leak_detection - door_borders quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id thermal_bridge_treatment: type: array items: type: object properties: technical_id: type: string enum: - thermal_bridge_treatment_after_interior_insulation - thermal_bridge_treatment_after_high_floor_insulation - thermal_point_insulation_window - thermal_bridge_treatment_after_low_floor_insulation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id lighting: type: array items: type: object properties: technical_id: type: string enum: - led_low_consumption_bulbs - lighting_controller - solar_lighting_with_motion_detector quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id sobriety: type: array items: type: object properties: technical_id: type: string enum: - rainwater_watering_system - rainwater_downspout - gray_water_recovery_system - rainwater_recovery_tank_with_cistern - buried_water_recovery_tank - thermostat_valves - terminal_regulation quantity: type: integer description: Nombre d'unités price_per_unit: type: number description: Prix par unité service_technical_id: type: string description: 'Mode avancé : l''identifiant technique de la prestation (service) du catalogue.' reference_id: type: string description: 'Mode avancé : l''identifiant de la référence catalogue à utiliser.' required: - technical_id required: - renovation_plan required: true /api/v3/simulations/{simulation_id}/report: post: summary: Lancer la génération du rapport PDF description: Endpoint pour démarrer la génération asynchrone du rapport PDF de la simulation. Le rapport peut optionnellement inclure les informations du client. tags: - Qualification security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '204': description: No Content - La génération du rapport a été lancée avec succès. '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet requestBody: content: application/json: schema: type: object properties: client: type: object description: Les informations du client (nom, prénom, email, téléphone) properties: first_name: type: string example: Jean description: Le prénom du client last_name: type: string example: Dupont description: Le nom de famille du client email: type: string example: jean.dupont@example.com description: L'email du client phone_number: type: string example: '+33600112233' description: Le téléphone du client get: summary: Récupérer le statut du rapport PDF description: Le statut de la génération du rapport PDF et l'URL de téléchargement. tags: - Qualification security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed description: Le statut de la génération du rapport. download_url: type: string example: https://app.go-kelvin.com/rails/active_storage/blobs/redirect/xxx/report.pdf description: L'URL de téléchargement du rapport PDF. Présent uniquement lorsque le statut est 'completed'. required: - status '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found - Aucune génération de rapport n'a été demandée. content: application/json: schema: type: object properties: error: type: string example: No report generation has been requested '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet /api/v3/simulations/{simulation_id}/documents: get: summary: Lister les documents de la simulation description: 'Liste paginée des documents générés pour la simulation (rapports PDF, offres commerciales, cadres de contribution, notes de dimensionnement, attestations sur l''honneur). Par défaut, seul le dernier document est renvoyé. Utilisez `full=true` pour tous les documents, `id` pour un document précis, `type` pour filtrer par type de document, et `begin`/`end` pour filtrer par date de génération. ' tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string - name: full in: query required: false description: Renvoie tous les documents au lieu du seul dernier document. schema: type: boolean - name: id in: query required: false description: Renvoie uniquement le document correspondant à cet identifiant. schema: type: integer - name: type in: query required: false enum: - report - commercial_offer - contribution_framework - dimensioning_note - sworn_statement description: "Ne renvoie que les documents du type donné.:\n * `report` \n * `commercial_offer` \n * `contribution_framework`\ \ \n * `dimensioning_note` \n * `sworn_statement` \n " schema: type: string - name: begin in: query format: date-time required: false description: Ne renvoie que les documents générés à partir de cette date (ISO 8601). schema: type: string - name: end in: query format: date-time required: false description: Ne renvoie que les documents générés jusqu'à cette date (ISO 8601). schema: type: string - name: page in: query required: false description: Numéro de page. schema: type: integer - name: per_page in: query required: false default: 1000 description: Nombre de documents par page (par défaut 1000). schema: type: integer responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: integer description: Le numéro unique du document. example: 42 team_id: type: string description: L'identifiant de l'équipe. example: 4732fnd4mt user_id: type: string nullable: true description: L'identifiant de l'utilisateur associé à la simulation. example: 9ab3cd2ef1 simulation_id: type: string description: L'identifiant de la simulation mère (racine). example: hjjcm1qp28 source_simulation_id: type: string description: L'identifiant de la simulation (enfant ou racine) à laquelle le document est directement rattaché. example: 3kd8fvn2mt generated_at: type: string format: date-time description: L'horodatage de la génération du document. example: '2026-07-03T14:00:00Z' type: type: string description: Le type de document. enum: - report - commercial_offer - contribution_framework - dimensioning_note - sworn_statement example: report metadata: type: object description: Métadonnées du document générées au moment de la création. properties: format: type: string description: Format du fichier généré. example: pdf scenario_ids: type: array description: Identifiants des scénarios inclus dans le document. items: type: string example: - hjjcm1qp28 type: type: string description: Type de document généré. example: report report_template: type: string nullable: true description: 'Template sélectionné lors de la génération. Valeurs possibles : `current_state` (Etat actuel du logement), `full` (Rapport complet). `null` pour les générations sans sélection de template (ex: API).' enum: - current_state - full example: current_state download_url: type: string description: L'URL de téléchargement du document. example: https://app.go-kelvin.com/rails/active_storage/blobs/redirect/xxx/report.pdf meta: type: object properties: total_pages: type: integer example: 1 current_page: type: integer example: 1 total_count: type: integer example: 1 '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: Unauthorized '403': description: Forbidden content: application/json: schema: type: object properties: error: type: string example: Forbidden '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation /api/v3/simulations/{simulation_id}/documents/report: post: summary: 'Lancer la génération du document : Rapport complet' description: Lance la génération asynchrone du document PDF « Rapport complet » pour la simulation. Renvoie l'identifiant de la génération à utiliser pour interroger son statut. Répond 403 si le document dépend d'une configuration d'équipe désactivée, et 422 si les données de la simulation ne permettent pas de produire le document. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '202': description: Accepted - La génération du document a été lancée. content: application/json: schema: type: object properties: operation_id: type: string example: op1a2b3c4d description: L'identifiant de la génération, à passer au endpoint de statut. document_type: type: string example: report description: Le type de document généré. required: - operation_id - document_type '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - Scope manquant ou document désactivé pour l'équipe. content: application/json: schema: type: object properties: error: type: string example: missing_scope '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet requestBody: content: application/json: schema: type: object properties: scenario_ids: type: array items: type: string description: 'Optionnel. Identifiants des plans de rénovation à inclure (par défaut : tous les plans éligibles). Utilisé uniquement pour les documents liés à un scénario.' /api/v3/simulations/{simulation_id}/documents/contribution-framework: post: summary: 'Lancer la génération du document : Cadre de contribution' description: Lance la génération asynchrone du document PDF « Cadre de contribution » pour la simulation. Renvoie l'identifiant de la génération à utiliser pour interroger son statut. Répond 403 si le document dépend d'une configuration d'équipe désactivée, et 422 si les données de la simulation ne permettent pas de produire le document. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '202': description: Accepted - La génération du document a été lancée. content: application/json: schema: type: object properties: operation_id: type: string example: op1a2b3c4d description: L'identifiant de la génération, à passer au endpoint de statut. document_type: type: string example: report description: Le type de document généré. required: - operation_id - document_type '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - Scope manquant ou document désactivé pour l'équipe. content: application/json: schema: type: object properties: error: type: string example: missing_scope '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet requestBody: content: application/json: schema: type: object properties: scenario_ids: type: array items: type: string description: 'Optionnel. Identifiants des plans de rénovation à inclure (par défaut : tous les plans éligibles). Utilisé uniquement pour les documents liés à un scénario.' /api/v3/simulations/{simulation_id}/documents/dimensioning-note: post: summary: 'Lancer la génération du document : Note de dimensionnement' description: Lance la génération asynchrone du document PDF « Note de dimensionnement » pour la simulation. Renvoie l'identifiant de la génération à utiliser pour interroger son statut. Répond 403 si le document dépend d'une configuration d'équipe désactivée, et 422 si les données de la simulation ne permettent pas de produire le document. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '202': description: Accepted - La génération du document a été lancée. content: application/json: schema: type: object properties: operation_id: type: string example: op1a2b3c4d description: L'identifiant de la génération, à passer au endpoint de statut. document_type: type: string example: report description: Le type de document généré. required: - operation_id - document_type '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - Scope manquant ou document désactivé pour l'équipe. content: application/json: schema: type: object properties: error: type: string example: missing_scope '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet requestBody: content: application/json: schema: type: object properties: scenario_ids: type: array items: type: string description: 'Optionnel. Identifiants des plans de rénovation à inclure (par défaut : tous les plans éligibles). Utilisé uniquement pour les documents liés à un scénario.' /api/v3/simulations/{simulation_id}/documents/sworn-statement: post: summary: 'Lancer la génération du document : Attestation sur l''honneur' description: Lance la génération asynchrone du document PDF « Attestation sur l'honneur » pour la simulation. Renvoie l'identifiant de la génération à utiliser pour interroger son statut. Répond 403 si le document dépend d'une configuration d'équipe désactivée, et 422 si les données de la simulation ne permettent pas de produire le document. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '202': description: Accepted - La génération du document a été lancée. content: application/json: schema: type: object properties: operation_id: type: string example: op1a2b3c4d description: L'identifiant de la génération, à passer au endpoint de statut. document_type: type: string example: report description: Le type de document généré. required: - operation_id - document_type '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - Scope manquant ou document désactivé pour l'équipe. content: application/json: schema: type: object properties: error: type: string example: missing_scope '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet requestBody: content: application/json: schema: type: object properties: scenario_ids: type: array items: type: string description: 'Optionnel. Identifiants des plans de rénovation à inclure (par défaut : tous les plans éligibles). Utilisé uniquement pour les documents liés à un scénario.' /api/v3/simulations/{simulation_id}/documents/commercial-offer: post: summary: 'Lancer la génération du document : Offre commerciale' description: Crée un devis à partir d'un plan de rénovation, puis lance la génération asynchrone du PDF « Offre commerciale ». Renvoie l'identifiant de la génération à utiliser pour interroger son statut, ainsi que l'identifiant du devis créé. Répond 403 si les devis sont désactivés pour l'équipe, et 422 si le plan de rénovation est inconnu. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string responses: '202': description: Accepted - Le devis a été créé et la génération du document a été lancée. content: application/json: schema: type: object properties: operation_id: type: string example: op1a2b3c4d description: L'identifiant de la génération, à passer au endpoint de statut. document_type: type: string example: commercial_offer description: Le type de document généré. quotation_id: type: string example: quo1a2b3c4d description: L'identifiant du devis créé à partir du plan de rénovation. required: - operation_id - document_type - quotation_id '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '403': description: Forbidden - Scope manquant ou devis désactivés pour l'équipe. content: application/json: schema: type: object properties: error: type: string example: missing_scope '404': description: Not Found content: application/json: schema: type: object properties: error: type: string example: Could not find the simulation '409': description: Conflict - La simulation n'est pas encore terminée. content: application/json: schema: type: object properties: error: type: string example: The simulation has not been run yet '422': description: Unprocessable Content - Plan de rénovation inconnu. content: application/json: schema: type: object properties: error: type: string example: Unknown renovation plan requestBody: content: application/json: schema: type: object properties: renovation_plan_id: type: string example: rp1a2b3c4d description: Identifiant du plan de rénovation (sqid du scénario) à partir duquel créer le devis. required: - renovation_plan_id required: true /api/v3/simulations/{simulation_id}/documents/{id}: get: summary: Récupérer le statut d'une génération de document description: Récupère le statut de la génération d'un document et l'URL de téléchargement lorsqu'il est prêt. tags: - Documents security: - bearerAuth: [] parameters: - name: simulation_id in: path required: true example: hjjcm1qp28 description: L'identifiant de simulation renvoyé par l'appel au endpoint créer schema: type: string - name: id in: path required: true example: op1a2b3c4d description: L'identifiant de génération renvoyé par le endpoint de lancement schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: status: type: string enum: - pending - processing - completed - failed example: completed document_type: type: string example: report download_url: type: string example: https://app.go-kelvin.com/rails/active_storage/blobs/redirect/xxx/report.pdf description: Présent uniquement lorsque le statut est 'completed'. required: - status - document_type '401': description: Unauthorized content: application/json: schema: type: object properties: error: type: string example: unauthorized '404': description: Not Found - Aucune génération de document ne correspond. content: application/json: schema: type: object properties: error: type: string example: Could not find the document generation servers: - url: '{protocol}://{defaultHost}' variables: protocol: default: https defaultHost: default: app.go-kelvin.com components: securitySchemes: bearerAuth: type: http scheme: bearer description: Le token commence par 'team-api-key-' schemas: FinancialSupport: type: object description: Détail des aides financières properties: mpr: type: number format: float description: Montant de l'aide MaPrimeRénov' par geste (Aides par geste) en Euros mpr_ampleur: type: number format: float description: Montant de l'aide MaPrimeRénov' Ampleur (Aides d'ampleur) en Euros cee: type: number format: float description: Montant de l'aide des Certificats d'Économies d'Énergie en Euros ecoptz: type: number format: float description: Montant de l'aide Éco-PTZ en Euros local: type: array description: Détail des aides locales items: type: object properties: name: type: string description: Nom de l'aide locale amount: type: number format: float description: Montant de l'aide locale en Euros example: - name: Aide région Île-de-France amount: 1500 - name: Aide département Seine-Saint-Denis amount: 800 - name: Aide ville de Saint-Denis amount: 500 GestureFinancialSupport: type: object description: Détail des aides financières par geste properties: mpr: type: number format: float description: Montant de l'aide MaPrimeRénov' par geste (Aides par geste) en Euros cee: type: number format: float description: Montant de l'aide des Certificats d'Économies d'Énergie en Euros ecoptz: type: number format: float description: Montant de l'aide Éco-PTZ en Euros local: type: array description: Détail des aides locales items: type: object properties: name: type: string description: Nom de l'aide locale amount: type: number format: float description: Montant de l'aide locale en Euros example: - name: Aide région Île-de-France amount: 1500 - name: Aide département Seine-Saint-Denis amount: 800 - name: Aide ville de Saint-Denis amount: 500 security: - bearerAuth: []