API BDNB — Bâtiments
Quatre endpoints pour croiser les données DVF avec les 32 M bâtiments de la Base de Données Nationale des Bâtiments (CSTB).
/v1/transactions/:id/bdnb2 créditsRetourne les données du bâtiment BDNB le plus proche d'une transaction DVF donnée : année de construction, matériaux, nombre de logements et étages, usage, distance de correspondance.
Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| id* | string | — | ID de la transaction DVF (paramètre de chemin) |
Exemple
curl "https://mcp.normi.fr/v1/transactions/123456/bdnb" \ -H "X-API-Key: normi_votre_token"
{
"building": {
"batiment_groupe_id": "bdnb-bg-KXVS-CAJR-C7E2",
"annee_construction": 1914,
"nb_logements": 17,
"nb_etages": 8,
"materiaux_murs": "PIERRE",
"materiaux_toit": "ARDOISES - ZINC ALUMINIUM",
"usage_principal": "Résidentiel collectif",
"usage_niveau_1": "Résidentiel collectif",
"dvf_nb_mutations": 12,
"dvf_prix_m2_median": 9337,
"match_distance_m": 6
},
"transaction_id": "123456",
"_credits": { "used": 2, "remaining": 498 },
"query_time_ms": 102
}/v1/bdnb/age-stats10 créditsPrix médian/m² DVF par tranche de construction (avant 1919, 1919–1945, 1946–1970, 1971–1990, 1991–2005, 2006+). Révèle si l'ancien se vend avec une prime ou une décote par rapport au neuf dans une zone donnée.
statistically_fragile: true signale les tranches avec moins de 30 transactions.Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| code_postal | string | — | Code postal (ex. '75015') |
| commune | string | — | Nom de commune en majuscules (ex. 'LYON') |
| code_departement | string | — | Code département (ex. '69') |
| type_local | enum | — | Maison | Appartement — filtre le côté DVF |
Exemple
curl "https://mcp.normi.fr/v1/bdnb/age-stats?code_postal=75015" \ -H "X-API-Key: normi_votre_token"
{
"tranches": [
{ "tranche": "avant_1919", "nb": 12648, "prix_m2_median": 9172, "prix_m2_moyen": 9278, "vs_zone_pct": 0, "statistically_fragile": false },
{ "tranche": "1919_1945", "nb": 4012, "prix_m2_median": 9165, "prix_m2_moyen": 9271, "vs_zone_pct": 0, "statistically_fragile": false },
{ "tranche": "1946_1970", "nb": 3177, "prix_m2_median": 8939, "prix_m2_moyen": 9076, "vs_zone_pct": -2, "statistically_fragile": false },
{ "tranche": "1971_1990", "nb": 2236, "prix_m2_median": 9199, "prix_m2_moyen": 9296, "vs_zone_pct": 0, "statistically_fragile": false },
{ "tranche": "1991_2005", "nb": 1665, "prix_m2_median": 9328, "prix_m2_moyen": 9467, "vs_zone_pct": 2, "statistically_fragile": false },
{ "tranche": "2006_plus", "nb": 833, "prix_m2_median": 10484,"prix_m2_moyen": 11627,"vs_zone_pct": 14, "statistically_fragile": false }
],
"prix_m2_median_zone": 9158,
"nb_total": 24571,
"_credits": { "used": 10, "remaining": 488 },
"query_time_ms": 367
}Lecture
- vs_zone_pct positif — les biens de cette tranche se vendent au-dessus de la médiane de la zone
- vs_zone_pct négatif — décote par rapport à la médiane
- tranche "2006_plus" — inclut tous les biens construits depuis 2006 (neuf et récent)
/v1/bdnb/renovation-score10 créditsScore de potentiel de rénovation (0–100) pour une zone : identifie les bâtiments construits avant 1975 vendus en dessous de la médiane du marché. Plus le score est élevé, plus il y a d'anciens biens sous-valorisés dans la zone.
Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| code_postal | string | — | Code postal (ex. '69001') |
| commune | string | — | Commune en majuscules (ex. 'MARSEILLE') |
| code_departement | string | — | Code département (ex. '13') |
| type_local | enum | — | Maison | Appartement — filtre le côté DVF |
Exemple
curl "https://mcp.normi.fr/v1/bdnb/renovation-score?code_postal=69001&type_local=Appartement" \ -H "X-API-Key: normi_votre_token"
{
"score": 72,
"nb_opportunites": 3471,
"prix_m2_median_vieux": 4200,
"prix_m2_median_zone": 5100,
"annee_construction_moy": 1932,
"materiaux_murs_principal": "PIERRE",
"decote_vs_zone_pct": 18,
"total_transactions_zone": 3664,
"_credits": { "used": 10, "remaining": 478 },
"query_time_ms": 280
}Lecture
- score = 0 — les vieux biens se vendent au prix du marché (pas de décote mesurable)
- score élevé (≥ 60) — décote significative sur l'ancien, potentiel de valorisation après travaux
- nb_opportunites < 10 — score non calculé, zone trop peu liquide
/v1/bdnb/stats5 créditsStock de bâtiments pour une commune ou un département : répartition par tranche de construction, par usage (résidentiel/tertiaire), nombre total de logements et médiane d'année de construction. Interroge directement les 32 M bâtiments BDNB — pas uniquement ceux avec des transactions DVF.
code_commune_insee pour une précision commune (ex. 75115 pour Paris 15e). Avec code_postal, les stats sont retournées au niveau du département (BDNB n'a pas de champ code postal).Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| code_commune_insee | string | — | Code INSEE commune (ex. '75115' pour Paris 15e) — précision maximale |
| code_postal | string | — | Code postal — retourne les stats au niveau du département |
| commune | string | — | Nom de commune en majuscules (ex. 'BORDEAUX') |
| code_departement | string | — | Code département (ex. '33') |
Exemple
curl "https://mcp.normi.fr/v1/bdnb/stats?code_commune_insee=75115" \ -H "X-API-Key: normi_votre_token"
{
"nb_batiments": 6172,
"nb_avec_annee": 5411,
"nb_logements_total": 153055,
"annee_construction_median": 1914,
"par_tranche": {
"avant_1919": 2868, "1919_1945": 791, "1946_1970": 555,
"1971_1990": 477, "1991_2005": 455, "2006_plus": 265
},
"par_usage": {
"residentiel": 4961, "tertiaire": 878, "mixte": 0, "autre": 20
},
"pct_vieux": 80,
"_credits": { "used": 5, "remaining": 473 },
"query_time_ms": 256
}