French real estate data: cadastre, DVF sales, DPE energy ratings, price estimates, parcel context
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Estime le prix de vente d'une maison ou d'un appartement en France à partir des transactions DVF récentes et d'un modèle statistique national. Localisation par 'address' OU par 'lat' + 'lng' + 'code_insee'. Retourne un prix total, une fourchette, un prix au m² et des facteurs explicatifs.
Type de bien : 'maison' ou 'appartement'
Surface habitable en m² (annonce ou DPE du logement), ex: 85. Jamais l'emprise au sol d'un bâtiment.
Latitude, si pas d'adresse
Longitude, si pas d'adresse
Adresse du bien (option la plus simple)
Classe DPE si connue (affine l'estimation)
Code INSEE de la commune, si pas d'adresse
Surface du terrain en m² (maisons)
Année de construction, ex: 1975 (affine l'estimation)
Estime le prix de vente d'une maison ou d'un appartement en France à partir des transactions DVF récentes et d'un modèle statistique national. Localisation par 'address' OU par 'lat' + 'lng' + 'code_insee'. Retourne un prix total, une fourchette, un prix au m² et des facteurs explicatifs.
| Argument | Type | Description |
|---|---|---|
| lat | any | Latitude, si pas d'adresse |
| lng | any | Longitude, si pas d'adresse |
| address | any | Adresse du bien (option la plus simple) |
| type_bien* | string | Type de bien : 'maison' ou 'appartement' |
| classe_dpe | any | Classe DPE si connue (affine l'estimation) |
| code_insee | any | Code INSEE de la commune, si pas d'adresse |
| surface_m2* | number | Surface habitable en m² (annonce ou DPE du logement), ex: 85. Jamais l'emprise au sol d'un bâtiment. |
| terrain_m2 | any | Surface du terrain en m² (maisons) |
| annee_construction | any | Année de construction, ex: 1975 (affine l'estimation) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"type_bien",
"surface_m2"
],
"properties": {
"lat": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Latitude, si pas d'adresse"
},
"lng": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Longitude, si pas d'adresse"
},
"address": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Adresse du bien (option la plus simple)"
},
"type_bien": {
"enum": [
"maison",
"appartement"
],
"type": "string",
"description": "Type de bien : 'maison' ou 'appartement'"
},
"classe_dpe": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe DPE si connue (affine l'estimation)"
},
"code_insee": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"maxLength": 5,
"minLength": 5
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Code INSEE de la commune, si pas d'adresse"
},
"surface_m2": {
"type": "number",
"description": "Surface habitable en m² (annonce ou DPE du logement), ex: 85. Jamais l'emprise au sol d'un bâtiment.",
"exclusiveMinimum": 0
},
"terrain_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface du terrain en m² (maisons)"
},
"annee_construction": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Année de construction, ex: 1975 (affine l'estimation)"
}
},
"additionalProperties": false
}Géocode une adresse postale française (Base Adresse Nationale) puis retourne la ou les parcelles cadastrales correspondantes avec leur IDU. L'IDU permet ensuite d'appeler get_parcelle. Donner l'adresse la plus complète possible (numéro, rue, commune).
| Argument | Type | Description |
|---|---|---|
| address* | string | Adresse postale, ex: '10 quai des Chartrons, Bordeaux' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 3,
"description": "Adresse postale, ex: '10 quai des Chartrons, Bordeaux'"
}
},
"additionalProperties": false
}Identifie les parcelles candidates d'un bien immobilier à partir de ses caractéristiques (celles d'une annonce : commune, surface, classe et consommation DPE, GES, date du DPE, année de construction, terrain), en croisant avec la base des DPE et des ventes DVF. Équivalent sans URL ni quota de geolocate_listing. Plus il y a de critères DPE (consommation en kWh/m²/an, émissions GES, date), plus le résultat est précis. Retourne jusqu'à 10 candidates triées par score.
| Argument | Type | Description |
|---|---|---|
| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). |
| date_dpe | any | Date unique du DPE au format ISO 'AAAA-MM' (ex: '2026-09') ou 'AAAA-MM-JJ' (ex: '2026-09-15'). Indice de similarité, pas un filtre exact ni une plage. Pour une période, utiliser search_dpe avec date_dpe_min et date_dpe_max. Omettre si inconnue. |
| ges_kg_m2 | any | Émissions GES en kg CO2/m²/an |
| type_bien | any | Type de bien : 'maison' ou 'appartement' |
| classe_dpe | any | Classe énergie du DPE : une lettre de A à G |
| classe_ges | any | Classe GES du DPE : une lettre de A à G |
Géocode un lieu nommé (gare, mairie, hôpital, école, université, monument, station de tram…) avec l'index des points d'intérêt de l'IGN, et retourne plusieurs candidats avec leur catégorie, leur commune et leurs coordonnées. Passer ensuite lat et lng du bon candidat à search_dpe, search_ventes_dvf ou search_parcelles. Inclure la commune dans la requête et le nom officiel quand il est connu (ex: 'gare Angers Saint-Laud', 'centre hospitalier universitaire Angers'). Vérifier la catégorie et la commune : le premier candidat n'est pas toujours le bon (un quartier « Gare » n'est pas la gare). Pour une adresse, une rue ou une place, utiliser plutôt le paramètre address des outils de recherche.
| Argument | Type | Description |
|---|---|---|
| limit | any | Nombre de candidats (défaut 5, max 10) |
| query* | string | Nom du lieu et commune, ex: 'gare Angers Saint-Laud' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 10,
"minimum": 1
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nombre de candidats (défaut 5, max 10)"
},
"query": {
"type": "string",
"minLength": 3,
"description": "Nom du lieu et commune, ex: 'gare Angers Saint-Laud'"
}
},
"additionalProperties": false
}Analyse l'URL d'une annonce immobilière française (SeLoger, PAP, Bien'ici, Le Figaro Immobilier…) : extrait les caractéristiques du bien (surface, DPE, commune, terrain, prix affiché) puis identifie les parcelles cadastrales candidates en croisant avec la base des DPE. Service gratuit avec une limite GLOBALE de 50 analyses par heure, tous clients MCP confondus, sans limite individuelle — si la limite est atteinte (erreur 429), NE PAS réessayer immédiatement.
| Argument | Type | Description |
|---|---|---|
| url* | string | URL complète de l'annonce immobilière |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL complète de l'annonce immobilière"
}
},
"additionalProperties": false
}Retourne les statistiques d'une commune française : parcelles et bâtiments, prix au m² et volumes de transactions DVF par année, répartition des classes DPE, taux de propriétaires, logements vacants, etc. Identifier la commune par 'insee_id' (fiable) ou par 'commune' (nom ou code postal).
| Argument | Type | Description |
|---|---|---|
| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Ou son code postal. |
| insee_id | any | Code INSEE de la commune (prioritaire si fourni) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"commune": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Ou son code postal."
},
"insee_id": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"maxLength": 5,
"minLength": 5
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Code INSEE de la commune (prioritaire si fourni)"
}
},
"additionalProperties": false
}Retourne le résumé d'un DPE à partir de son numéro ADEME (13 caractères, présent sur les annonces immobilières et les diagnostics) : classe énergie, GES, surface, type de bien, localisation, ainsi qu'une estimation de prix du bien quand elle est possible.
| Argument | Type | Description |
|---|---|---|
| dpe_id* | string | Numéro ADEME du DPE, ex: '2233E1234567X' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"dpe_id"
],
"properties": {
"dpe_id": {
"type": "string",
"minLength": 8,
"description": "Numéro ADEME du DPE, ex: '2233E1234567X'"
}
},
"additionalProperties": false
}Retourne la fiche de base d'une parcelle cadastrale à partir de son IDU (14 caractères) : surface, adresse, commune. Tout le reste est à demander via 'include', uniquement pour les sections utiles à la question (chaque section allonge la réponse) : parcelles adjacentes (parcelles_adjacentes : celles qui la touchent, avec surface, bâti et nombre de DPE ; pour toute question de voisinage ou quand l'adresse ou un DPE pointe une petite parcelle sans bâti), bâtiments (batiments), transactions immobilières (dvf), diagnostics énergétiques (dpes), zonage d'urbanisme (urbanisme, la plus lente), données bâtiment BDNB (bdnb), piscines, copropriétés (rnc), personnes morales et droits déclarés, dont propriétaire ou syndic (majic_pm), permis de construire (sitadel). La réponse donne toujours le nombre d'éléments de chaque section (donnees_disponibles), même non demandée : s'en servir pour décider quelles sections lire.
| Argument | Type | Description |
|---|---|---|
| include | any | Sections à inclure, ex: ['dvf', 'dpes']. Aucune par défaut : sans include, seule la fiche de base de la parcelle est retournée. |
| max_items | any | Nombre maximum d'éléments par section liste (défaut 30). Les sections tronquées sont signalées dans 'sections_tronquees'. |
| parcelle_id* | string | IDU de la parcelle, 14 caractères, ex: '33063000IK0001' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"parcelle_id"
],
"properties": {
"include": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"parcelles_adjacentes",
"batiments",
"dvf",
"dpes",
"urbanisme",
"bdnb",
"piscines",
"rnc",
"majic_pm",
"sitadel"
],
"type": "string"
}
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Sections à inclure, ex: ['dvf', 'dpes']. Aucune par défaut : sans include, seule la fiche de base de la parcelle est retournée."
},
"max_items": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 200,
"minimum": 1
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nombre maximum d'éléments par section liste (défaut 30). Les sections tronquées sont signalées dans 'sections_tronquees'."
},
"parcelle_id": {
"type": "string",
"maxLength": 14,
"minLength": 14,
"description": "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'"
}
},
"additionalProperties": false
}Retourne l'environnement d'une parcelle cadastrale (IDU 14 caractères) à partir de sources publiques (Géorisques, ARCEP, ministère de l'Éducation, observatoires des loyers…). Passer à true uniquement les sections utiles à la question, ex: { risques: true, fibre: true }. Sans aucune section à true, aucune donnée d'environnement n'est retournée.
| Argument | Type | Description |
|---|---|---|
| fibre | boolean | Éligibilité fibre et opérateurs (ARCEP) |
| sante | boolean | Médecins, pharmacies… proches |
| ecoles | boolean | Écoles proches |
| loyers | boolean | Loyers de référence en €/m² |
| emprise | boolean | Emprise du bâti au sol |
| risques | boolean | Risques Géorisques : inondation, argiles, radon, sismicité, pollution… |
| terrain | boolean | Relief et altitude |
| recharge | boolean | Bornes de recharge proches |
| commerces | boolean |
Recherche une commune française par nom ou code postal. Retourne le code INSEE (nécessaire pour get_commune_stats), les coordonnées et l'URL de la page cadastre quand elle existe. À utiliser en premier quand on ne connaît que le nom d'une ville.
| Argument | Type | Description |
|---|---|---|
| query* | string | Nom de commune ou code postal, ex: 'Bordeaux' ou '33000' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Nom de commune ou code postal, ex: 'Bordeaux' ou '33000'"
}
},
"additionalProperties": false
}Liste les diagnostics de performance énergétique (DPE ADEME) d'une zone : autour d'une adresse, d'une parcelle ou d'un point (rayon), dans toute une commune ou dans toute une intercommunalité. Filtres : type de bâtiment, classes énergie/GES, surface, année de construction, date du DPE. Avec 'address' (numéro + rue), retourne aussi les DPE rattachés exactement à cette adresse. Résultats triés du plus récent au plus ancien et paginés ('limit', 'offset').
| Argument | Type | Description |
|---|---|---|
| lat | any | Latitude du centre (avec 'lng') |
| lng | any | Longitude du centre (avec 'lat') |
| limit | any | DPE par page (défaut 20, max 50) |
| offset | any | Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante. |
| address | any | Adresse postale au centre de la zone |
| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Couvre toute la commune (ignore 'rayon_m'). |
| rayon_m | any | Rayon autour du centre en mètres (défaut 500, max 25000) |
Recherche des parcelles cadastrales dans une zone avec les filtres de la carte parcellai.re/carte : surfaces, DPE, ventes DVF, année de construction, piscines, permis de construire, copropriétés, propriétaires personnes morales… Définir la zone par 'commune' (nom), 'intercommunalite' (nom ou SIREN d'une communauté d'agglomération, de communes, urbaine ou d'une métropole), 'departement' (code ou nom), 'region' (code ou nom) OU par 'viewport'. Région + SIREN est supporté sans commune. Omettre les filtres non demandés ; une valeur vide ou null signifie aucun filtre. Les filtres has_* acceptent true pour sélectionner une présence connue ; false est rejeté car la recherche par absence n’est pas prise en charge. Retourne le nombre total de parcelles, une PAGE de résultats détaillés et un lien vers la carte interactive. Résultats paginés : 'nb_parcelles' est le total, mais seules 'limit' parcelles (défaut 20, max 50) sont détaillées à partir de 'offset'. Vérifier 'pagination.has_more' et relancer avec 'offset' = 'pagination.next_offset' pour les pages suivantes. Si la zone est trop large, retourne une répartition agrégée par commune.
| Argument | Type | Description |
|---|---|---|
| limit | any | Nombre de parcelles détaillées retournées par page (défaut 20, max 50) |
| siren | any | SIREN du propriétaire personne morale |
| offset | any | Index de départ pour la pagination (défaut 0). Utiliser pagination.next_offset pour la page suivante. |
| region | any | Nom ou code INSEE de la région, ex: 'Bretagne', 'Île-de-France', '52'. Recherche dans tous ses départements couverts (France métropolitaine hors Corse). |
Recherche les autorisations d'urbanisme Sitadel par commune, intercommunalité, département ou région, avec filtre de destination (hébergement hôtelier, habitation, bureaux, commerce…). Retourne une ligne par permis, ses parcelles, son adresse et ses surfaces par destination, triées par date d'autorisation décroissante. Pour les derniers permis, omettre la date si aucune période n'est demandée. Les surfaces de construction ou créées par changement de destination sont distinctes des surfaces supprimées ou démolies : un permis impliquant un hôtel ne crée pas nécessairement un nouvel hôtel. Les résultats sont limités aux autorisations liées aux parcelles cadastrales et ne garantissent pas une couverture exhaustive.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Nombre de permis par page, défaut 20, maximum 50. |
| offset | integer | Index de départ, reprendre pagination.next_offset. Au-delà de 5000, restreindre la période ou la zone. |
| region | any | Code INSEE ou nom de la région, ex: Pays de la Loire. France métropolitaine hors Corse. |
| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). |
| departement | any | Code ou nom du département, ex: 44 ou Loire-Atlantique. Peut restreindre une commune ou une région. |
Liste les ventes immobilières (DVF) d'une zone : autour d'une adresse, d'une parcelle ou d'un point (rayon), ou dans toute une commune — idéal pour trouver des biens comparables. Une ligne par vente : date, prix, type de bien, surface bâtie, pièces, terrain, parcelles, prix au m² (quand la vente porte sur un seul logement). Retourne aussi la médiane du prix au m² des ventes filtrées. Seules les ventes géolocalisées sont couvertes (depuis 2021), hors Alsace-Moselle (Bas-Rhin, Haut-Rhin, Moselle), absente du fichier DVF. Filtrer par 'type_bien' pour des prix au m² comparables.
| Argument | Type | Description |
|---|---|---|
| lat | any | Latitude du centre (avec 'lng') |
| lng | any | Longitude du centre (avec 'lat') |
| tri | any | Tri des ventes (défaut : date décroissante ; distance pour les plus proches) |
| limit | any | Ventes par page (défaut 20, max 50) |
| offset | any | Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante. |
| address | any | Adresse postale au centre de la zone |
| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Couvre toute la commune (ignore 'rayon_m'). |
Transmet à l'équipe Parcellaire un retour sur le service, pour orienter ses évolutions : besoin non couvert, donnée manquante, bug, idée de fonctionnalité ou retour positif. N'appeler qu'avec l'accord explicite de l'utilisateur dans la conversation, jamais à son insu : quand il demande lui-même à envoyer un retour (origine 'utilisateur'), ou après lui avoir proposé de signaler une demande que les outils n'ont pas permis de satisfaire (donnée absente, filtre manquant, erreur répétée) et qu'il a accepté (origine 'assistant'). Lui dire ce qui sera envoyé, reformuler fidèlement, ne rien inventer, un seul envoi par besoin. Ne jamais inclure de données personnelles : ni nom, email, téléphone, adresse précise, numéro de parcelle ou de DPE, ni URL d'annonce ; décrire le besoin en termes généraux (commune ou département au plus). L'équipe ne répond pas par ce canal : pour une question ou une réponse personnelle, orienter vers https://parcellai.re/contact.
| Argument | Type | Description |
|---|---|---|
| type* | string | 'fonctionnalite' (outil, filtre ou usage souhaité), 'donnees_manquantes' (donnée absente, incomplète ou trop ancienne), 'bug' (erreur ou résultat faux), 'positif' (ce qui a été utile), 'autre' |
| outils | any | Noms des outils Parcellaire appelés pendant la conversation, dans l'ordre, ex: ['find_parcelles_by_address', 'search_ventes_dvf'] |
| profil | any | Profil de l'utilisateur, seulement s'il ressort clairement de la conversation : 'acheteur', 'proprietaire' (ou vendeur), 'locataire', 'professionnel_immobilier' (agent, notaire, diagnostiqueur, promoteur, géomètre), 'investisseur', 'collectivite', 'developpeur', 'etude' (presse, recherche, analyse de marché). Omettre sinon. |
| message* | string |
| code_postal |
| any |
| Code postal, ex: '49100' |
| conso_dpe_kwh_m2 | any | Consommation énergie primaire en kWh/m²/an |
| annee_construction | any | Année de construction, ex: 1975 |
| surface_terrain_m2 | any | Surface du terrain en m² (maisons), ex: 600 |
| surface_habitable_m2 | any | Surface habitable en m², ex: 85 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"commune": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département)."
},
"date_dpe": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}(-\\d{2})?$"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Date unique du DPE au format ISO 'AAAA-MM' (ex: '2026-09') ou 'AAAA-MM-JJ' (ex: '2026-09-15'). Indice de similarité, pas un filtre exact ni une plage. Pour une période, utiliser search_dpe avec date_dpe_min et date_dpe_max. Omettre si inconnue."
},
"ges_kg_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Émissions GES en kg CO2/m²/an"
},
"type_bien": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"maison",
"appartement"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Type de bien : 'maison' ou 'appartement'"
},
"classe_dpe": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe énergie du DPE : une lettre de A à G"
},
"classe_ges": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe GES du DPE : une lettre de A à G"
},
"code_postal": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"maxLength": 5,
"minLength": 5
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Code postal, ex: '49100'"
},
"conso_dpe_kwh_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Consommation énergie primaire en kWh/m²/an"
},
"annee_construction": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Année de construction, ex: 1975"
},
"surface_terrain_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface du terrain en m² (maisons), ex: 600"
},
"surface_habitable_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface habitable en m², ex: 85"
}
},
"additionalProperties": false
}| Commerces proches |
| filiation | boolean | Historique des découpages cadastraux |
| parcelle_id* | string | IDU de la parcelle, 14 caractères, ex: '33063000IK0001' |
| restrictions_eau | boolean | Arrêtés de restriction d'eau (sécheresse) en cours |
| secteur_scolaire | boolean | Établissements du secteur scolaire |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"parcelle_id"
],
"properties": {
"fibre": {
"type": "boolean",
"description": "Éligibilité fibre et opérateurs (ARCEP)"
},
"sante": {
"type": "boolean",
"description": "Médecins, pharmacies… proches"
},
"ecoles": {
"type": "boolean",
"description": "Écoles proches"
},
"loyers": {
"type": "boolean",
"description": "Loyers de référence en €/m²"
},
"emprise": {
"type": "boolean",
"description": "Emprise du bâti au sol"
},
"risques": {
"type": "boolean",
"description": "Risques Géorisques : inondation, argiles, radon, sismicité, pollution…"
},
"terrain": {
"type": "boolean",
"description": "Relief et altitude"
},
"recharge": {
"type": "boolean",
"description": "Bornes de recharge proches"
},
"commerces": {
"type": "boolean",
"description": "Commerces proches"
},
"filiation": {
"type": "boolean",
"description": "Historique des découpages cadastraux"
},
"parcelle_id": {
"type": "string",
"maxLength": 14,
"minLength": 14,
"description": "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'"
},
"restrictions_eau": {
"type": "boolean",
"description": "Arrêtés de restriction d'eau (sécheresse) en cours"
},
"secteur_scolaire": {
"type": "boolean",
"description": "Établissements du secteur scolaire"
}
},
"additionalProperties": false
}| classe_dpe | any | Classe énergie : une lettre de A à G |
| classe_ges | any | Classe GES : une lettre de A à G |
| parcelle_id | any | IDU d'une parcelle au centre de la zone |
| date_dpe_max | any | Borne maximale inclusive du DPE : année '2026' (31 décembre), mois ISO '2026-09' (dernier jour du mois), ou jour ISO '2026-09-30'. Pour une plage, utiliser date_dpe_min et date_dpe_max séparément. Omettre pour ne pas fixer de maximum. |
| date_dpe_min | any | Borne minimale inclusive du DPE : année '2026', mois ISO '2026-09' (premier jour du mois), ou jour ISO '2026-09-15'. Pour une plage, utiliser date_dpe_min et date_dpe_max séparément, pas une plage dans ce champ. Omettre pour ne pas fixer de minimum. |
| type_batiment | any | 'immeuble' = DPE d'immeuble collectif entier |
| surface_max_m2 | any | Surface habitable maximale en m², ex: 120 |
| surface_min_m2 | any | Surface habitable minimale en m², ex: 60 |
| intercommunalite | any | Nom ou SIREN d'une intercommunalité, ex: 'Grand Annecy', 'CA de La Rochelle', '241700434' : toutes ses communes membres, listées dans le résultat (ignore 'rayon_m'). |
| annee_construction_max | any | Année de construction maximale, ex: 1990 |
| annee_construction_min | any | Année de construction minimale, ex: 1950 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lat": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Latitude du centre (avec 'lng')"
},
"lng": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Longitude du centre (avec 'lat')"
},
"limit": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 50,
"minimum": 1
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "DPE par page (défaut 20, max 50)"
},
"offset": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 5000,
"minimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante."
},
"address": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"minLength": 3
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Adresse postale au centre de la zone"
},
"commune": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Couvre toute la commune (ignore 'rayon_m')."
},
"rayon_m": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 25000,
"minimum": 50
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Rayon autour du centre en mètres (défaut 500, max 25000)"
},
"classe_dpe": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe énergie : une lettre de A à G"
},
"classe_ges": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe GES : une lettre de A à G"
},
"parcelle_id": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"maxLength": 14,
"minLength": 14
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "IDU d'une parcelle au centre de la zone"
},
"date_dpe_max": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Borne maximale inclusive du DPE : année '2026' (31 décembre), mois ISO '2026-09' (dernier jour du mois), ou jour ISO '2026-09-30'. Pour une plage, utiliser date_dpe_min et date_dpe_max séparément. Omettre pour ne pas fixer de maximum."
},
"date_dpe_min": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Borne minimale inclusive du DPE : année '2026', mois ISO '2026-09' (premier jour du mois), ou jour ISO '2026-09-15'. Pour une plage, utiliser date_dpe_min et date_dpe_max séparément, pas une plage dans ce champ. Omettre pour ne pas fixer de minimum."
},
"type_batiment": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"maison",
"appartement",
"immeuble"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "'immeuble' = DPE d'immeuble collectif entier"
},
"surface_max_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface habitable maximale en m², ex: 120"
},
"surface_min_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface habitable minimale en m², ex: 60"
},
"intercommunalite": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom ou SIREN d'une intercommunalité, ex: 'Grand Annecy', 'CA de La Rochelle', '241700434' : toutes ses communes membres, listées dans le résultat (ignore 'rayon_m')."
},
"annee_construction_max": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Année de construction maximale, ex: 1990"
},
"annee_construction_min": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Année de construction minimale, ex: 1950"
}
},
"additionalProperties": false
}| commune | any | Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). |
| date_dpe | any | Date d'établissement du DPE. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date. |
| viewport | any | Zone géographique explicite (alternative à commune). Hauteur ≤ 20 km pour un détail parcelle par parcelle |
| classe_dpe | any | Classe énergie d'un logement. Clé exacte: classe_dpe; valeur: une lettre A-G. |
| classe_ges | any | Classe GES. Clé exacte: classe_ges; valeur: une lettre A-G. |
| date_vente | any | Date de vente DVF. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date. |
| departement | any | Code ou nom du département, ex: '49', 'Maine-et-Loire'. Peut aussi restreindre une commune ou un viewport. |
| has_piscine | any | Uniquement les parcelles avec piscine |
| prix_vente_eur | any | Prix de la dernière vente DVF en euros. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| has_copropriete | any | true : parcelles avec une copropriété RNC connue. false non pris en charge ; omettre ne filtre pas ce critère. |
| conso_dpe_kwh_m2 | any | Consommation énergie primaire en kWh/m²/an (alternative à classe_dpe). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| intercommunalite | any | Nom ou SIREN d'une intercommunalité, ex: 'CA de La Rochelle', 'agglo de Niort', 'Bordeaux Métropole', '241700434'. Cherche dans toutes ses communes membres, listées dans le résultat avec leur nombre de parcelles. |
| nombre_batiments | any | Nombre de bâtiments sur la parcelle. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| annee_construction | any | Année de construction (BDNB). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| has_permis_demolir | any | Uniquement les parcelles avec un permis de démolir (PD) |
| surface_piscine_m2 | any | Surface de la piscine en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| surface_batiment_m2 | any | Emprise au sol d'un bâtiment en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum) |
| surface_parcelle_m2 | any | Une seule surface de parcelle en m² par appel. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact (tolérance d'arrondi) : pour une surface approximative (« environ 600 m² »), passer une plage, ex: '540-660'. Pour plusieurs surfaces exactes, effectuer un appel séparé par surface; ne jamais fournir de tableau ni de liste séparée par des virgules. |
| surface_habitable_m2 | any | Surface habitable (DPE) en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact : pour une surface approximative, passer une plage, ex: '135-145'. |
| has_permis_construire | any | Uniquement les parcelles avec un permis de construire (PC), hors permis de démolir, d'aménager et déclarations préalables |
| date_permis_construire | any | Date d'autorisation. Avec has_permis_construire ou has_permis_demolir, elle porte sur ce permis ; seule, sur toute autorisation d'urbanisme (permis de construire, de démolir, d'aménager, déclaration préalable). Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date. |
| has_proprietaire_personne_morale | any | Uniquement les parcelles détenues par une personne morale (société, collectivité…) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 50,
"minimum": 1
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nombre de parcelles détaillées retournées par page (défaut 20, max 50)"
},
"siren": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "SIREN du propriétaire personne morale"
},
"offset": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Index de départ pour la pagination (défaut 0). Utiliser pagination.next_offset pour la page suivante."
},
"region": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom ou code INSEE de la région, ex: 'Bretagne', 'Île-de-France', '52'. Recherche dans tous ses départements couverts (France métropolitaine hors Corse)."
},
"commune": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département)."
},
"date_dpe": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Date d'établissement du DPE. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date."
},
"viewport": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"required": [
"sw_lat",
"sw_lng",
"ne_lat",
"ne_lng"
],
"properties": {
"ne_lat": {
"type": "number"
},
"ne_lng": {
"type": "number"
},
"sw_lat": {
"type": "number"
},
"sw_lng": {
"type": "number"
}
}
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Zone géographique explicite (alternative à commune). Hauteur ≤ 20 km pour un détail parcelle par parcelle"
},
"classe_dpe": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe énergie d'un logement. Clé exacte: classe_dpe; valeur: une lettre A-G."
},
"classe_ges": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Classe GES. Clé exacte: classe_ges; valeur: une lettre A-G."
},
"date_vente": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Date de vente DVF. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date."
},
"departement": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Code ou nom du département, ex: '49', 'Maine-et-Loire'. Peut aussi restreindre une commune ou un viewport."
},
"has_piscine": {
"anyOf": [
{
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Uniquement les parcelles avec piscine"
},
"prix_vente_eur": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Prix de la dernière vente DVF en euros. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"has_copropriete": {
"anyOf": [
{
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "true : parcelles avec une copropriété RNC connue. false non pris en charge ; omettre ne filtre pas ce critère."
},
"conso_dpe_kwh_m2": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Consommation énergie primaire en kWh/m²/an (alternative à classe_dpe). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"intercommunalite": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom ou SIREN d'une intercommunalité, ex: 'CA de La Rochelle', 'agglo de Niort', 'Bordeaux Métropole', '241700434'. Cherche dans toutes ses communes membres, listées dans le résultat avec leur nombre de parcelles."
},
"nombre_batiments": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nombre de bâtiments sur la parcelle. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"annee_construction": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Année de construction (BDNB). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"has_permis_demolir": {
"anyOf": [
{
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Uniquement les parcelles avec un permis de démolir (PD)"
},
"surface_piscine_m2": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface de la piscine en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"surface_batiment_m2": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Emprise au sol d'un bâtiment en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"
},
"surface_parcelle_m2": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Une seule surface de parcelle en m² par appel. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact (tolérance d'arrondi) : pour une surface approximative (« environ 600 m² »), passer une plage, ex: '540-660'. Pour plusieurs surfaces exactes, effectuer un appel séparé par surface; ne jamais fournir de tableau ni de liste séparée par des virgules."
},
"surface_habitable_m2": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface habitable (DPE) en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact : pour une surface approximative, passer une plage, ex: '135-145'."
},
"has_permis_construire": {
"anyOf": [
{
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Uniquement les parcelles avec un permis de construire (PC), hors permis de démolir, d'aménager et déclarations préalables"
},
"date_permis_construire": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Date d'autorisation. Avec has_permis_construire ou has_permis_demolir, elle porte sur ce permis ; seule, sur toute autorisation d'urbanisme (permis de construire, de démolir, d'aménager, déclaration préalable). Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date."
},
"has_proprietaire_personne_morale": {
"anyOf": [
{
"anyOf": [
{
"type": "boolean"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Uniquement les parcelles détenues par une personne morale (société, collectivité…)"
}
},
"additionalProperties": false
}| destination |
| string |
| Destination à rechercher à partir de ses surfaces déclarées. Pour des hôtels : hebergement_hotelier. Omettre pour toutes les destinations. |
| intercommunalite | any | Nom ou SIREN de l'intercommunalité, alternative à commune. |
| date_autorisation | any | Date d'autorisation, facultative. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date. |
| type_autorisation | string | PC (permis de construire, défaut), DP (déclaration préalable), PD (démolition) ou PA (aménagement). |
| operation_destination | string | Avec destination : toutes (défaut) concerne cette destination ; creation construit ou convertit vers elle ; suppression démolit ou convertit vers un autre usage ; existant exige une surface avant travaux. Une surface inconnue ne vaut pas zéro. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Nombre de permis par page, défaut 20, maximum 50."
},
"offset": {
"type": "integer",
"maximum": 5000,
"minimum": 0,
"description": "Index de départ, reprendre pagination.next_offset. Au-delà de 5000, restreindre la période ou la zone."
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Code INSEE ou nom de la région, ex: Pays de la Loire. France métropolitaine hors Corse."
},
"commune": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département)."
},
"departement": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Code ou nom du département, ex: 44 ou Loire-Atlantique. Peut restreindre une commune ou une région."
},
"destination": {
"enum": [
"hebergement_hotelier",
"habitation",
"bureaux",
"commerce",
"artisanat",
"industrie",
"agriculture",
"entrepot",
"service_public"
],
"type": "string",
"description": "Destination à rechercher à partir de ses surfaces déclarées. Pour des hôtels : hebergement_hotelier. Omettre pour toutes les destinations."
},
"intercommunalite": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Nom ou SIREN de l'intercommunalité, alternative à commune."
},
"date_autorisation": {
"anyOf": [
{
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Date d'autorisation, facultative. Année (2026 ou '2026'), mois ISO ('2026-09'), jour ISO ('2026-09-15'), ou plage inclusive séparée par un tiret : '2026-09-15-2026-09-30', '2026-09-2026-10', '2019-2024'. Borne ouverte : '2026-09-15-' (minimum), '-2026-09-30' (maximum). Une année ou un mois couvre toute cette année ou ce mois. Ne pas fournir de tableau. Omettre si aucun filtre de date."
},
"type_autorisation": {
"enum": [
"PC",
"DP",
"PD",
"PA"
],
"type": "string",
"description": "PC (permis de construire, défaut), DP (déclaration préalable), PD (démolition) ou PA (aménagement)."
},
"operation_destination": {
"enum": [
"toutes",
"creation",
"suppression",
"existant"
],
"type": "string",
"description": "Avec destination : toutes (défaut) concerne cette destination ; creation construit ou convertit vers elle ; suppression démolit ou convertit vers un autre usage ; existant exige une surface avant travaux. Une surface inconnue ne vaut pas zéro."
}
},
"additionalProperties": false
}| rayon_m | any | Rayon autour du centre en mètres (défaut 500, max 25000) |
| date_max | any | Borne maximale inclusive au format ISO 'AAAA-MM-JJ', ex: '2026-09-30'. Omettre pour ne pas fixer de maximum. |
| date_min | any | Borne minimale inclusive au format ISO 'AAAA-MM-JJ', ex: '2026-09-15' (défaut 2021-01-01). Pour une plage, utiliser date_min et date_max séparément, pas une plage dans ce champ. |
| type_bien | any | Type de bien vendu : 'maison', 'appartement' ou 'local' (local commercial, industriel ou assimilé) |
| parcelle_id | any | IDU d'une parcelle au centre de la zone |
| prix_max_eur | any | Prix de vente maximal en euros, ex: 400000 |
| prix_min_eur | any | Prix de vente minimal en euros, ex: 150000 |
| surface_max_m2 | any | Surface bâtie maximale en m², ex: 120 |
| surface_min_m2 | any | Surface bâtie minimale en m², ex: 60 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lat": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Latitude du centre (avec 'lng')"
},
"lng": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Longitude du centre (avec 'lat')"
},
"tri": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"date",
"distance"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Tri des ventes (défaut : date décroissante ; distance pour les plus proches)"
},
"limit": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 50,
"minimum": 1
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Ventes par page (défaut 20, max 50)"
},
"offset": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 5000,
"minimum": 0
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante."
},
"address": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"minLength": 3
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Adresse postale au centre de la zone"
},
"commune": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Nom de la commune, ex: 'Angers'. Pour une commune homonyme, préciser son code entre parenthèses : 'Thénac (17444)' (code INSEE), 'Thénac (17460)' (code postal) ou 'Thénac (17)' (département). Couvre toute la commune (ignore 'rayon_m')."
},
"rayon_m": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"maximum": 25000,
"minimum": 50
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Rayon autour du centre en mètres (défaut 500, max 25000)"
},
"date_max": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Borne maximale inclusive au format ISO 'AAAA-MM-JJ', ex: '2026-09-30'. Omettre pour ne pas fixer de maximum."
},
"date_min": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Borne minimale inclusive au format ISO 'AAAA-MM-JJ', ex: '2026-09-15' (défaut 2021-01-01). Pour une plage, utiliser date_min et date_max séparément, pas une plage dans ce champ."
},
"type_bien": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"maison",
"appartement",
"local"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Type de bien vendu : 'maison', 'appartement' ou 'local' (local commercial, industriel ou assimilé)"
},
"parcelle_id": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"maxLength": 14,
"minLength": 14
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "IDU d'une parcelle au centre de la zone"
},
"prix_max_eur": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Prix de vente maximal en euros, ex: 400000"
},
"prix_min_eur": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Prix de vente minimal en euros, ex: 150000"
},
"surface_max_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface bâtie maximale en m², ex: 120"
},
"surface_min_m2": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Surface bâtie minimale en m², ex: 60"
}
},
"additionalProperties": false
}| Le retour lui-même : ce qui manque, ce qui ne marche pas ou ce qui serait utile, avec le résultat attendu |
| origine* | string | 'utilisateur' si l'utilisateur a demandé lui-même à envoyer ce retour, 'assistant' si l'IA l'a proposé et que l'utilisateur a accepté |
| cas_usage* | string | Ce que l'utilisateur cherchait à accomplir, en termes généraux, ex: 'comparer le prix au m² d'une maison avec les ventes récentes du quartier avant une offre d'achat à Nantes' |
| accord_utilisateur* | boolean | true : l'utilisateur a accepté dans la conversation l'envoi de ce retour. Sans son accord, ne pas appeler l'outil. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"type",
"origine",
"accord_utilisateur",
"cas_usage",
"message"
],
"properties": {
"type": {
"enum": [
"fonctionnalite",
"donnees_manquantes",
"bug",
"positif",
"autre"
],
"type": "string",
"description": "'fonctionnalite' (outil, filtre ou usage souhaité), 'donnees_manquantes' (donnée absente, incomplète ou trop ancienne), 'bug' (erreur ou résultat faux), 'positif' (ce qui a été utile), 'autre'"
},
"outils": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 20
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Noms des outils Parcellaire appelés pendant la conversation, dans l'ordre, ex: ['find_parcelles_by_address', 'search_ventes_dvf']"
},
"profil": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"acheteur",
"proprietaire",
"locataire",
"professionnel_immobilier",
"investisseur",
"collectivite",
"developpeur",
"etude",
"inconnu"
],
"type": "string"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
],
"description": "Profil de l'utilisateur, seulement s'il ressort clairement de la conversation : 'acheteur', 'proprietaire' (ou vendeur), 'locataire', 'professionnel_immobilier' (agent, notaire, diagnostiqueur, promoteur, géomètre), 'investisseur', 'collectivite', 'developpeur', 'etude' (presse, recherche, analyse de marché). Omettre sinon."
},
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "Le retour lui-même : ce qui manque, ce qui ne marche pas ou ce qui serait utile, avec le résultat attendu"
},
"origine": {
"enum": [
"utilisateur",
"assistant"
],
"type": "string",
"description": "'utilisateur' si l'utilisateur a demandé lui-même à envoyer ce retour, 'assistant' si l'IA l'a proposé et que l'utilisateur a accepté"
},
"cas_usage": {
"type": "string",
"maxLength": 300,
"minLength": 10,
"description": "Ce que l'utilisateur cherchait à accomplir, en termes généraux, ex: 'comparer le prix au m² d'une maison avec les ventes récentes du quartier avant une offre d'achat à Nantes'"
},
"accord_utilisateur": {
"type": "boolean",
"const": true,
"description": "true : l'utilisateur a accepté dans la conversation l'envoi de ce retour. Sans son accord, ne pas appeler l'outil."
}
},
"additionalProperties": false
}