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 DPE×DVF dépend de la disponibilité des références cadastrales dans les DPE post-juillet 2021. 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 (section + no_plan), puis par proximité géographique (50 m) si la première échoue. Les 2 crédits sont remboursés en cas d'absence de correspondance (HTTP 404).

ParamètreTypeDéfautDescription
id*stringID 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) et médianes de consommation énergétique pour une zone géographique. Au moins un filtre de localisation est requis.

ParamètreTypeDéfautDescription
code_postalstringCode postal (ex. '75011')
communestringNom de commune en majuscules (ex. 'BORDEAUX')
code_departementstringCode département (ex. '33')
type_batimentenummaison | appartement | immeuble
date_debutstringFiltrer 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 },
  "median_conso_ep_m2": 187.4,
  "median_emission_ges_m2": 41.2,
  "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
median_conso_ep_m2numberMédiane consommation énergie primaire (kWh/m²/an)
median_emission_ges_m2numberMédiane émissions GES (kgCO2eq/m²/an)

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 référence cadastrale, 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_postalstringCode postal (ex. '75011') — obligatoire si commune absent
communestringCommune (ex. 'BORDEAUX') — obligatoire si code_postal absent
type_localenumMaison | 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": "Cadastral cross-reference of DPE diagnoses and DVF transactions...",
  "_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.