{"openapi":"3.1.0","info":{"title":"Intent Analytics API","version":"1.1.0","summary":"Référentiel ouvert de l'actif immobilier français + méthodes d'analyse métérées.","description":"Ouvre la grammaire, métère la méthode. La grammaire « Actif immobilier » est publique (GET /v1/schema/actif-immobilier) ; les outils d'analyse (estimation, fiche territoire, parcelle, constructibilité, radar) sont servis par clé API. 100 % open data public français, zéro donnée personnelle.","contact":{"name":"Intent Analytics","email":"contact@intentanalytics.fr","url":"https://intentanalytics.fr/api"},"license":{"name":"Licence Ouverte Etalab 2.0 (grammaire)","url":"https://www.etalab.gouv.fr/licence-ouverte-open-licence"}},"servers":[{"url":"https://intent-analytics-api-206463984463.europe-west1.run.app"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"paths":{"/v1/schema/actif-immobilier":{"get":{"tags":["référentiel"],"summary":"Grammaire ouverte « Actif immobilier » (sans clé)","responses":{"200":{"description":"Schéma JSON versionné et daté"}}}},"/tools":{"get":{"tags":["meta"],"summary":"Liste des outils et leurs schémas","security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Outils disponibles"}}}},"/tool/estimate":{"post":{"tags":["outils"],"summary":"Estime le prix d'un bien (modèle v12, fourchette calibrée CQR 80%). Avec une adresse précise : comparables et DPE réels du bien.","operationId":"tool_estimate","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_postal":{"type":"string","description":"Code postal, ex 75015."},"surface":{"type":"number","description":"Surface habitable en m²."},"type_local":{"type":"string","enum":["Appartement","Maison"],"description":"Type de bien."},"dpe":{"type":"string","description":"Classe DPE A→G. Défaut C."},"nb_pieces":{"type":"integer","description":"Nombre de pièces (optionnel, affine la prédiction)."},"adresse":{"type":"string","description":"Adresse complète (optionnel, améliore nettement la précision)."}},"required":["code_postal","surface","type_local"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/enrich":{"post":{"tags":["outils"],"summary":"Enrichit une commune : géo (geo.api.gouv.fr) + stats DPE/marché + POI.","operationId":"tool_enrich","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_postal":{"type":"string","description":"Code postal, ex 69001."},"nom_commune":{"type":"string","description":"Nom de la commune (optionnel, affine la recherche)."}},"required":["code_postal"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/search":{"post":{"tags":["outils"],"summary":"Recherche multicritères de communes (nom, département, prix m², population, % passoires).","operationId":"tool_search","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nom":{"type":"string","description":"Filtre nom (ILIKE)."},"departement":{"type":"string","description":"Code département, ex 69."},"prix_m2_min":{"type":"number"},"prix_m2_max":{"type":"number"},"population_min":{"type":"integer"},"pct_passoires_max":{"type":"number","description":"% max de passoires DPE (F+G), ex 20."},"limit":{"type":"integer","description":"Max résultats (défaut 20, plafond 100)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/get_commune_profile":{"post":{"tags":["outils"],"summary":"Profil complet d'une commune (mv_commune_complete : géo, marché, DPE, socio-éco).","operationId":"tool_get_commune_profile","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_postal":{"type":"string","description":"Code postal, ex 69001."}},"required":["code_postal"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/get_renovation_aids":{"post":{"tags":["outils"],"summary":"Aides à la rénovation (MaPrimeRénov, CEE…) selon commune et classe de revenus.","operationId":"tool_get_renovation_aids","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_insee":{"type":"string","description":"Code INSEE, ex 75056."},"revenu_classe":{"type":"string","enum":["tres_modeste","modeste","intermediaire","superieur"],"description":"Classe de revenus du ménage."}},"required":["code_insee","revenu_classe"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/aides_renovation_adresse":{"post":{"tags":["outils"],"summary":"Aides à la rénovation d'un LOGEMENT précis via le simulateur OFFICIEL France Rénov' (Publicodes) + ANAH — montants réels selon le bâtiment (DPE, surface, année).","operationId":"tool_aides_renovation_adresse","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse complète du logement (numéro + rue + commune)."},"profil":{"type":"string","enum":["modeste","intermediaire","aise","bailleur"],"description":"Profil du ménage (défaut modeste)."}},"required":["adresse"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/prospection_decote":{"post":{"tags":["outils"],"summary":"Biens potentiellement sous-évalués d'une commune : prix estimé (KNN adresse, DVF réel) nettement sous la médiane communale. Signal d'opportunité / marge de négociation.","operationId":"tool_prospection_decote","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_commune":{"type":"string","description":"Code INSEE (ex 33063)."},"seuil_pct":{"type":"number","description":"Décote minimale en % sous la médiane (défaut 15)."},"limit":{"type":"integer","description":"Nombre d'adresses (défaut 30, max 100)."}},"required":["code_commune"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/radar_syndic":{"post":{"tags":["outils"],"summary":"Radar syndic : copropriétés autour d'un point (RNC) avec signal de prospection (fin de mandat, syndic bénévole, copro fragile/QPV) pour démarcher des mandats de syndic.","operationId":"tool_radar_syndic","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse libre (géocodée), ou fournir lat+lon."},"lat":{"type":"number","description":"Latitude du centre (si pas d'adresse)."},"lon":{"type":"number","description":"Longitude du centre (si pas d'adresse)."},"rayon_m":{"type":"integer","description":"Rayon en mètres (défaut 1000)."},"limit":{"type":"integer","description":"Nombre de copropriétés (défaut 40)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/leads_renovation":{"post":{"tags":["outils"],"summary":"Leads rénovation énergétique : passoires DPE F/G d'une commune ou d'un département, avec données BDNB (conso, GES, énergie, isolation, aides estimées, QPV, score).","operationId":"tool_leads_renovation","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_commune":{"type":"string","description":"Code INSEE (ex 33063), ou code_dept."},"code_dept":{"type":"string","description":"Code département (ex 33) pour un balayage large."},"score_min":{"type":"integer","description":"Score de lead minimal (défaut 50)."},"limit":{"type":"integer","description":"Nombre de leads (défaut 30)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/comparables_dvf":{"post":{"tags":["outils"],"summary":"Vraies ventes comparables (DVF) autour d'un point : transactions récentes de biens similaires (type, surface proche) avec prix, prix/m², distance, date. Pour ancrer un prix avec des faits.","operationId":"tool_comparables_dvf","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse libre (géocodée), ou lat+lon."},"lat":{"type":"number","description":"Latitude du bien."},"lon":{"type":"number","description":"Longitude du bien."},"type_local":{"type":"string","enum":["Appartement","Maison"],"description":"Type de bien (défaut Appartement)."},"surface":{"type":"number","description":"Surface cible m² (tolérance ±30%)."},"rayon_m":{"type":"integer","description":"Rayon en mètres (défaut 1500)."},"limit":{"type":"integer","description":"Nombre de comparables (défaut 30)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/search_nearby":{"post":{"tags":["outils"],"summary":"POI / DPE / bornes / transactions autour d'un point (PostGIS).","operationId":"tool_search_nearby","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude, ex 48.8566."},"lon":{"type":"number","description":"Longitude, ex 2.3522."},"type":{"type":"string","enum":["poi","dpe","borne_recharge","transaction"]},"radius":{"type":"integer","description":"Rayon en mètres (défaut 1000, plafond 10000)."}},"required":["lat","lon","type"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/radar_vendeur":{"post":{"tags":["outils"],"summary":"Radar vendeur / prospection d'une commune : tension marché, mouvements SCI (BODACC), radar succession, vacance LOVAC. ATTENTION : scores succession/radar = INDICATIFS / R&D, non garantis. Les faits (BODACC, vacance, ancienneté DVF) sont solides.","operationId":"tool_radar_vendeur","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_commune":{"type":"string","description":"Code INSEE, ex 33063."},"adresse":{"type":"string","description":"Adresse libre (géocodée → commune) si code_commune absent."},"limit":{"type":"integer","description":"Nb d'adresses à signal (défaut 15, plafond 50)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/fiche_territoire":{"post":{"tags":["outils"],"summary":"Fiche territoire / diagnostic B2G d'une commune (démographie, logement, marché, ZAN, risques, fiscalité, enjeux). Données JSON.","operationId":"tool_fiche_territoire","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_commune":{"type":"string","description":"Code INSEE, ex 33063."},"nom_ou_adresse":{"type":"string","description":"Commune ou adresse (géocodée → INSEE)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/fiche_territoire_pdf":{"post":{"tags":["outils"],"summary":"Génère le PDF de la fiche territoire (charte Intent Analytics, Gotenberg). Retourne l'URL du PDF.","operationId":"tool_fiche_territoire_pdf","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code_commune":{"type":"string","description":"Code INSEE, ex 33063."},"nom_ou_adresse":{"type":"string","description":"Commune ou adresse (géocodée → INSEE)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/generer_avis_valeur":{"post":{"tags":["outils"],"summary":"Génère un avis de valeur 360° premium (PDF). Recueille les champs de qualification AVANT d'appeler. Renvoie un report_id immédiatement ; le PDF se génère en tâche de fond (suivi via statut_avis_valeur).","operationId":"tool_generer_avis_valeur","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse complète, ex '44 Grande Rue, 60420 Coivrel'."},"type_bien":{"type":"string","enum":["Maison","Appartement","Bureau","Local commercial","Immeuble","Terrain"]},"surface":{"type":"number","description":"Surface habitable / utile en m²."},"nb_pieces":{"type":"integer"},"nb_chambres":{"type":"integer"},"nb_sdb":{"type":"integer","description":"Salles de bain (baignoire)."},"nb_sde":{"type":"integer","description":"Salles d'eau (douche)."},"surface_terrain":{"type":"number","description":"Surface terrain m² (0 si aucun)."},"etat_general":{"type":"string","enum":["Neuf","Excellent","Bon","Correct","À rafraîchir","À rénover","À restructurer"]},"dpe":{"type":"string","description":"A→G ou 'N/D'."},"ges":{"type":"string","description":"A→G ou 'N/D'."},"annee_construction":{"type":"integer"},"qualifiants":{"type":"array","items":{"type":"string"},"description":"ex ['jardin','garage','piscine','photovoltaïque','mitoyenne']."},"avis_agence_min_keur":{"type":"number"},"avis_agence_max_keur":{"type":"number"},"client_nom":{"type":"string","description":"Destinataire du rapport."},"tier":{"type":"string","enum":["express","standard","premium"]}},"required":["adresse","surface"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/statut_avis_valeur":{"post":{"tags":["outils"],"summary":"Statut d'un avis de valeur en cours (et URL PDF si prêt).","operationId":"tool_statut_avis_valeur","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"report_id":{"type":"string","description":"Identifiant renvoyé par generer_avis_valeur."}},"required":["report_id"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/health":{"post":{"tags":["outils"],"summary":"Santé du backend : ping tables Supabase, présence clé service_role, liste des outils.","operationId":"tool_health","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/fiche_parcelle":{"post":{"tags":["outils"],"summary":"Fiche d'une parcelle cadastrale : contenance, bâti (BDNB/DPE), marché foncier (DVF) et constructibilité (zone d'urbanisme GPU U/AU/A/N + règlement PDF).","operationId":"tool_fiche_parcelle","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id_parcelle":{"type":"string","description":"Identifiant cadastral, ex 33063000DT0162."}},"required":["id_parcelle"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/log_incident":{"post":{"tags":["outils"],"summary":"Enregistre un incident/intervention géolocalisé au registre territorial d'une commune (voirie, eau, bâti, éclairage). Recalcule les points chauds.","operationId":"tool_log_incident","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"commune_insee":{"type":"string","description":"Code INSEE 5 caractères."},"type":{"type":"string","enum":["fuite_reseau","inondation","affaissement","equipement","arbre","autre"]},"lon":{"type":"number","description":"Longitude WGS84."},"lat":{"type":"number","description":"Latitude WGS84."},"constat":{"type":"string","description":"Constat terrain."},"nature_intervention":{"type":"string"},"nature_reparation":{"type":"string"},"fournisseur":{"type":"string"},"cout_eur":{"type":"number","description":"Coût de l'intervention en euros."},"pluie_mm":{"type":"number","description":"Pluie 24 h en mm (corrélation hydraulique)."},"gravite":{"type":"integer","description":"1 (mineur) à 4 (critique)."}},"required":["commune_insee","type","lon","lat"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/list_incidents":{"post":{"tags":["outils"],"summary":"Liste les incidents du registre territorial, par commune (avec criticité) ou par bbox carte. Les libellés [DÉMO] sont fictifs.","operationId":"tool_list_incidents","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"commune_insee":{"type":"string","description":"Code INSEE 5 caractères (recommandé)."},"bbox":{"type":"string","description":"minlon,minlat,maxlon,maxlat (mode carte)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/incident_patterns":{"post":{"tags":["outils"],"summary":"Patterns des incidents d'une commune : clusters spatiaux, récurrence, dette grise, corrélation pluie, point de bascule rustines/travaux, causes composites.","operationId":"tool_incident_patterns","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"commune_insee":{"type":"string","description":"Code INSEE 5 caractères."}},"required":["commune_insee"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/planning_reco":{"post":{"tags":["outils"],"summary":"Plan pluriannuel d'investissement (PPI) recommandé depuis le registre d'incidents : priorités année 1/2/3, dette grise totale, base factuelle pour subventions (DETR, Fonds Vert).","operationId":"tool_planning_reco","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"commune_insee":{"type":"string","description":"Code INSEE 5 caractères."}},"required":["commune_insee"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/fiche_adresse":{"post":{"tags":["outils"],"summary":"Fiche adresse TOUT-EN-UN : un seul appel → estimation de prix (v12 calibré DVF) + vraies ventes comparables DVF + aides à la rénovation (France Rénov' officiel) + risques Géorisques + écart prix/marché (si prix d'annonce) + signal d'intention de vente. Vue 360° d'un logement.","operationId":"tool_fiche_adresse","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse complète (numéro + rue + commune)."},"surface":{"type":"number","description":"Surface habitable en m²."},"type_local":{"type":"string","enum":["Appartement","Maison"],"description":"Type de bien (défaut Appartement)."},"dpe":{"type":"string","description":"Classe DPE déclarée A→G (défaut C)."},"nb_pieces":{"type":"integer","description":"Nombre de pièces (optionnel, affine l'estimation)."},"prix_annonce":{"type":"number","description":"Prix d'annonce/offre en € (optionnel) → calcule l'écart vs marché."},"profil_aides":{"type":"string","enum":["modeste","intermediaire","aise","bailleur"],"description":"Profil ménage pour les aides (défaut modeste)."}},"required":["adresse","surface"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/ecart_prix_avm":{"post":{"tags":["outils"],"summary":"Écart entre un prix (annonce/offre) et la valeur de marché AVM d'un logement (KNN sur ventes DVF réelles) : sous / au / sur le marché, en % et en €. Pour négocier ou détecter une opportunité.","operationId":"tool_ecart_prix_avm","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prix":{"type":"number","description":"Prix à tester en € (annonce ou offre)."},"surface":{"type":"number","description":"Surface habitable en m²."},"adresse":{"type":"string","description":"Adresse complète (géocodée au numéro). OU ban_id."},"ban_id":{"type":"string","description":"Identifiant BAN du logement (alternative à l'adresse)."}},"required":["prix","surface"]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/predict_intent_vente":{"post":{"tags":["outils"],"summary":"Score d'intention de vente d'un logement (probabilité de mise en vente à 12/36 mois) + signaux actifs (mutations DVF, tension vendeur, dynamisme) et horizon médian. Signal R&D, indicatif.","operationId":"tool_predict_intent_vente","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adresse":{"type":"string","description":"Adresse complète (géocodée au numéro). OU ban_id."},"ban_id":{"type":"string","description":"Identifiant BAN du logement (alternative à l'adresse)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}},"/tool/score_portfolio":{"post":{"tags":["outils"],"summary":"Score un portefeuille de logements en une fois : valeur estimée, scores localisation/transport/santé/commerce/risque, liquidité, rendement brut, potentiel rénovation, passoire, score composite classé. Pour arbitrer ou prioriser un parc.","operationId":"tool_score_portfolio","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ban_ids":{"type":"array","items":{"type":"string"},"description":"Liste d'identifiants BAN (le plus direct)."},"adresses":{"type":"array","items":{"type":"string"},"description":"Liste d'adresses complètes (alternative à ban_ids)."}},"required":[]}}}},"responses":{"200":{"description":"Résultat de l'outil (JSON)"},"401":{"description":"Clé API manquante ou invalide"},"429":{"description":"Quota quotidien atteint"}}}}},"x-souverainete":{"donnees_personnelles":"aucune — le référentiel décrit des adresses et des biens, jamais des personnes","sources":"100% open data officiel FR (DVF, DPE, BAN, BDNB, INSEE, cadastre, GPU)","hebergement":"Union européenne ; trajectoire SecNumCloud pour l'offre institutionnelle","anteriorite":"e-Soleau INPI DSO2026011828"}}