API DPE — Diagnostics de Performance Énergétique

Trois endpoints pour accéder aux données DPE d'ADEME (~13 millions de diagnostics) et les croiser avec les transactions DVF. Vous pouvez obtenir la distribution des classes énergétiques d'un marché, et — fait unique — la prime de prix associée à chaque étiquette.

Les données DPE proviennent d'ADEME (Licence Ouverte 2.0). La couverture du croisement agrégé DPE×DVF dépend des diagnostics géocodés dans le même département, appariés au plus proche dans un rayon de 200 m. Les marchés avec plus de DPE récents offrent une meilleure couverture premium.

GET /v1/transactions/:id/dpe

GET/v1/transactions/:id/dpe2 crédits

Retourne le diagnostic DPE associé à une transaction DVF précise. La correspondance est tentée d'abord par référence cadastrale gardée (section + no_plan et distance ≤50 m), puis par proximité géographique (50 m, surface ±35%) si la première échoue. Les 2 crédits sont remboursés en cas d'absence de correspondance (HTTP 404).

ParamètreTypeDéfautDescription
id*string—ID de la transaction DVF (paramètre de chemin)
curl "https://mcp.normi.fr/v1/transactions/123456/dpe" \
  -H "X-API-Key: normi_votre_token"

GET /v1/dpe/stats

GET/v1/dpe/stats10 crédits

Filtre de localisation requis : code_postal, commune, code_departement, ou latitude + longitude.

Distribution des classes DPE (A–G) pour une zone géographique. Au moins un filtre de localisation est requis.

ParamètreTypeDéfautDescription
code_postalstring—Code postal (ex. '75011')
communestring—Nom de commune en majuscules (ex. 'BORDEAUX')
code_departementstring—Code département (ex. '33')
type_batimentenum—maison | appartement | immeuble
date_debutstring—Filtrer les DPE établis depuis cette date (YYYY-MM-DD)
curl "https://mcp.normi.fr/v1/dpe/stats?code_postal=75011" \
  -H "X-API-Key: normi_votre_token"

Réponse

{
  "count": 42300,
  "distribution": { "A": 812, "B": 3104, "C": 9240, "D": 14760, "E": 8920, "F": 3740, "G": 1724 },
  "pct":          { "A": 1.9,  "B": 7.3,  "C": 21.8,  "D": 34.9,  "E": 21.1,  "F": 8.8,  "G": 4.1 },
  "filters": { "code_postal": "75011", "type_batiment": null },
  "_credits": { "used": 10, "remaining": 490 },
  "query_time_ms": 84,
  "cache": { "hit": false, "ttl_seconds": 86400 }
}

Champs de réponse

ChampTypeDescription
countnumberNombre total de DPE dans la zone
distributionobjectNombre de DPE par classe (A→G)
pctobjectPourcentage de chaque classe

GET /v1/stats/dpe-premium

GET/v1/stats/dpe-premium10 crédits

Filtre de localisation requis : code_postal, commune, code_departement, ou latitude + longitude.

Analyse la prime ou décote de prix liée à l'étiquette DPE. Croise les données DPE avec les transactions DVF par proximité contrôlée dans le même département (DPE le plus proche à moins de 200 m), puis calcule le prix médian/m² par classe et son écart à la médiane du marché.

C'est le seul endpoint du marché qui quantifie objectivement l'impact de la performance énergétique sur les prix de vente — à partir de vraies transactions notariées, pas d'estimations.
ParamètreTypeDéfautDescription
code_postalstring—Code postal (ex. '75011') — obligatoire si commune absent
communestring—Commune (ex. 'BORDEAUX') — obligatoire si code_postal absent
type_localenum—Maison | Appartement — filtre le côté DVF du croisement
curl "https://mcp.normi.fr/v1/stats/dpe-premium?code_postal=75011&type_local=Appartement" \
  -H "X-API-Key: normi_votre_token"

Réponse

{
  "classes": {
    "A": { "count": 234,  "median_prix_m2": 12800, "p25_prix_m2": 11200, "p75_prix_m2": 14600, "vs_median_pct": 14.2 },
    "B": { "count": 891,  "median_prix_m2": 11900, "p25_prix_m2": 10400, "p75_prix_m2": 13500, "vs_median_pct":  6.1 },
    "C": { "count": 2740, "median_prix_m2": 11400, "p25_prix_m2":  9800, "p75_prix_m2": 13100, "vs_median_pct":  1.7 },
    "D": { "count": 4120, "median_prix_m2": 11200, "p25_prix_m2":  9400, "p75_prix_m2": 12900, "vs_median_pct":  0.0 },
    "E": { "count": 2210, "median_prix_m2": 10100, "p25_prix_m2":  8600, "p75_prix_m2": 11800, "vs_median_pct": -9.8 },
    "F": { "count": 890,  "median_prix_m2":  9300, "p25_prix_m2":  7800, "p75_prix_m2": 10700, "vs_median_pct":-16.9 },
    "G": { "count": 412,  "median_prix_m2":  8800, "p25_prix_m2":  7200, "p75_prix_m2": 10100, "vs_median_pct":-21.4 }
  },
  "summary": "Class A homes sell at +14.2% vs. median; class G at -21.4%",
  "methodology": "Same-department nearest DPE within 200m of each DVF transaction...",
  "_credits": { "used": 10, "remaining": 480 },
  "query_time_ms": 42
}

Champs par classe (A–G)

ChampTypeDescription
countnumberTransactions DVF avec DPE matchée
median_prix_m2numberPrix médian/m² pour cette classe (€)
p25_prix_m2number1er quartile prix/m²
p75_prix_m2number3ème quartile prix/m²
vs_median_pctnumberÉcart à la médiane marché (%). Positif = prime, négatif = décote
Le champ classes peut être null si aucune transaction DVF n'a été croisée avec un DPE dans cette zone. La couverture s'améliore avec le temps à mesure que les DPE post-2021 s'accumulent.