Documentation
Référence API

Versions

Cette documentation décrit la version 1.0 de l'API open-connect, en cours de conception : les formes de réponse décrites ici sont le contrat visé, pas encore un service en ligne.
Une version vaut pour tous les pays : chaque pays a ses routes sous le même préfixe (/api/v1/fr/, /api/v1/ca/, /api/v1/be/), et chaque entrée de ce tableau nomme les pays qu'elle touche. Une version publiée ne change plus de forme : une clé ou une valeur nouvelle n'est servie qu'à partir de la version suivante, et un préfixe déjà en ligne ne reçoit que des corrections. Le numéro de correction suit le préfixe qui la sert : une 1.0.x est servie sous /api/v1/.

Version 1.0

Préfixe /api/v1/ · version de référence, en conception.
  • Tous les pays : rapport de localisation (une position ou une adresse, toutes les données disponibles par domaine, filtrables avec include), une route par domaine, indicateurs d'une zone sans position (/zones/…), catalogue (domaines, définitions des champs et leur couverture, catégories de lieux, types d'aléas)
  • France (/api/v1/fr/) : l'adresse, l'immeuble, le bien et sa vie, puis le quartier ; identifiants stables de l'immeuble, du bien et de chaque événement (/buildings/{id}, /properties/{id}) ; listes paginées des ventes, des autorisations d'urbanisme et des lieux
  • Canada, Québec (/api/v1/ca/) : l'adresse, l'immeuble et l'unité d'évaluation du rôle, puis le quartier ; identifiants stables (/buildings/{id}, /properties/{id}) ; listes paginées des permis et des lieux
  • Belgique (/api/v1/be/) : l'adresse, puis le quartier ; listes paginées des autorisations d'urbanisme et des lieux

Compatibilité

Un numéro de version s'écrit X.Y.Z. Le chiffre qui bouge dit ce que vous avez à faire.
Incrément Ce qui change Ce que vous avez à faire
X — refonte Nouveau modèle de ressources, d'authentification ou de pagination Une migration, annoncée en amont avec une date de fin de support
Y — rupture Une réponse change de forme : un champ ajouté, retiré, renommé, de type ou de valeur différente Rien dans l'immédiat : la nouvelle forme a sa propre URL, et la précédente continue de servir celle que vous connaissez
Z — ajout Une route ou un paramètre optionnel en plus. Rien de ce que vous lisez déjà Rien, l'URL ne change pas
Chaque rupture est publiée sous son propre préfixe d'URL, et un préfixe une fois publié ne change plus jamais de forme. Migrer se fait donc en changeant le préfixe dans vos appels, à votre rythme ; une intégration nouvelle part du préfixe le plus récent.
Un champ n'apparaît jamais dans une réponse servie par une URL que vous utilisez déjà : il attend la sienne.
Chaque réponse porte l'en-tête X-Api-Version avec la version effectivement servie : c'est le moyen le plus sûr de savoir quelle forme vous recevez.

Introduction

open-connect décrit un bien immobilier et ce qui l'entoure, à partir d'une adresse : où il se trouve, l'immeuble qui le porte, le bien lui-même et sa vie (ventes, diagnostics, autorisations de travaux), puis son quartier (marché, loyers, risques, lieux, accès, urbanisme, habitants). Vous envoyez une adresse ou une position, open-connect vous renvoie tout ce qu'il sait à cet endroit, ou seulement les domaines que vous demandez.
open-connect rassemble les données publiques du pays (administrations, instituts statistiques, collectivités), les contrôle et les unifie dans une nomenclature unique : mêmes noms, mêmes unités, mêmes niveaux de zones, quelle que soit la donnée d'origine. Chaque valeur porte la période qu'elle décrit et la date de sa dernière mise à jour.
Cette documentation décrit l'API de la France : métropole et départements d'outre-mer. Chaque pays a sa documentation et ses routes, sous la même version de l'API ; une clé s'ouvre pays par pays.
Le même moteur sert les fiches biens d'immosquare : une donnée visible dans nos fiches est une donnée que l'API sait servir, avec la même forme.

Domaines

Une réponse est découpée en domaines, dans l'ordre où l'on lit un bien : l'adresse, l'immeuble, le bien, puis le quartier. Chacun a sa route, et le rapport complet les assemble.
Domaine Contenu
location Adresse retenue, position et précision, zones, parcelle, immeuble et biens à cette adresse
building L'immeuble : construction, copropriété et syndic, diagnostics, ventes de l'immeuble, potentiel énergétique, risques
property Le bien : caractéristiques, valeur estimée aujourd'hui, et sa vie (ventes, diagnostics, autorisations)
risks Aléas au bâtiment, obligations, informations de la commune, sites et sols pollués autour
market Ventes autour, évolution des prix, loyers, rendement, fiscalité locale, vacance, ce qui se construit autour
places Lieux du quotidien et arrêts de transport autour, par catégorie, avec le temps à pied
access Gare, aéroport, accès autoroutier et école les plus proches, à pied et en voiture
residents Qui vit dans le quartier : revenus, ménages, logements
urbanism Document d'urbanisme applicable, zone, prescriptions, servitudes
Les ventes une à une sont publiées partout sauf en Alsace-Moselle et à Mayotte. La couverture exacte de chaque champ est servie par GET /catalog/fields.

Démarrage rapide

Tout ce que l'API sait d'une adresse à Nice :
curl "https://app.open-connect.io/api/v1/fr/report?address=6%20rue%20Assalit%2006000%20Nice" \
  -H "Authorization: Bearer oc_live_7f3c…"
Seulement le bien et le marché d'un point :
curl "https://app.open-connect.io/api/v1/fr/report?lat=43.706549&lng=7.268758&include=property,market" \
  -H "Authorization: Bearer oc_live_7f3c…"
La réponse porte toujours deux clés : data, les données par domaine, et meta, l'identifiant de la requête, la version servie et ce qui manque.
{
  "data": {
    "location": { "…": "…" },
    "property": { "status": "ok", "…": "…" },
    "market":   { "status": "ok", "…": "…" }
  },
  "meta": {
    "request_id": "req_01JA2Q8W6Y3K5V",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:12:44Z"
  }
}

Authentification

Chaque requête porte votre clé dans l'en-tête Authorization, au format Bearer :
GET /api/v1/fr/report?lat=43.706549&lng=7.268758
Authorization: Bearer oc_live_7f3c9a1e5b2d4c6f8a0b1c2d3e4f5a6b
  • Une clé commence par oc_live_ (production) ou oc_test_ (bac à sable, mêmes données, quotas réduits, réponses marquées "sandbox": true dans meta).
  • La clé n'est montrée qu'une fois, à sa création : nous n'en gardons qu'une empreinte. Une clé perdue se révoque et se remplace depuis votre espace client.
  • Une clé est ouverte pays par pays, et peut être limitée à certains domaines. Un pays hors de votre clé répond 403 avec le code country_not_allowed ; un domaine hors de votre clé répond 403 avec le code domain_not_allowed, et un rapport complet l'omet en le signalant dans meta.warnings.
  • La clé ne doit jamais être exposée dans un navigateur ou une application mobile : appelez l'API depuis votre serveur.
Pour obtenir une clé : contact@immosquare.com.

Quotas et limites

Chaque réponse annonce l'état de votre quota :
En-tête Valeur
X-RateLimit-Limit Requêtes autorisées par minute
X-RateLimit-Remaining Requêtes restantes dans la minute en cours
X-RateLimit-Reset Secondes avant la remise à zéro du compteur
X-Quota-Remaining Unités restantes sur la période de votre abonnement
X-Request-Id Identifiant de la requête, à nous transmettre en cas de besoin
X-Api-Version Version effectivement servie
Au-delà, l'API répond 429 avec un en-tête Retry-After en secondes. Un 429 est toujours temporaire : attendez le délai indiqué avant de renvoyer la requête.
Une route de domaine consomme une unité ; un rapport consomme une unité par domaine calculé. Une réponse servie depuis notre cache coûte la même chose qu'une réponse calculée : le cache sert à la vitesse, pas au décompte.

Erreurs

Une erreur répond avec un code HTTP et un corps stable, dont error.code ne change jamais d'une version à l'autre :
{
  "error": {
    "code": "invalid_parameter",
    "message": "lat doit être compris entre -90 et 90",
    "details": {
      "parameter": "lat",
      "value": "148.85"
    }
  },
  "meta": {
    "request_id": "req_01JA2Q8W6Y3K5V",
    "api_version": "1.0",
    "generated_at": "2026-10-11T08:12:44Z"
  }
}
HTTP error.code Cas
400 invalid_parameter Paramètre absent, mal formé ou hors bornes ; error.details.parameter le nomme
400 ambiguous_location lat/lng et address envoyés ensemble
401 unauthorized Clé absente, inconnue ou révoquée
403 country_not_allowed Pays hors de votre clé
403 domain_not_allowed Domaine hors de votre clé
404 address_not_found Adresse introuvable : renvoyez la requête avec des coordonnées
404 zone_not_found Zone inconnue (/zones/…)
404 property_not_found Identifiant de bien inconnu (/properties/…) ; un identifiant fusionné répond 301 vers celui qui est gardé
404 building_not_found Identifiant d'immeuble inconnu (/buildings/…)
422 outside_coverage Position hors du territoire que sert cette API : la France, métropole et départements d'outre-mer
429 rate_limited Trop de requêtes : attendre Retry-After
429 quota_exceeded Quota de la période épuisé
500 internal_error Erreur interne, sans détail technique : la requête peut être renvoyée plus tard
503 maintenance Maintenance annoncée : Retry-After donne la durée estimée
Une donnée momentanément indisponible ne fait pas échouer la requête : le domaine concerné répond "status": "partial" ou "unavailable", et meta.warnings explique ce qui manque. Seule une erreur de votre requête ou de notre service répond par un code d'erreur.

Conventions

  • Format : JSON en UTF-8, clés en anglais et en snake_case.
  • Nombres : toujours des nombres JSON, jamais des chaînes. Un montant est un nombre accompagné de son unité.
  • Dates : AAAA-MM-JJ ; horodatages en ISO 8601, en UTC (2026-10-11T08:12:44Z).
  • Positions : latitude et longitude en degrés décimaux WGS84 (lat, lng en paramètres ; latitude, longitude en réponse).
  • Distances : en mètres, à vol d'oiseau, dans distance_m.
  • Surfaces : en mètres carrés.
  • Absence : un champ documenté est toujours présent ; il vaut null quand la donnée n'existe pas à cet endroit, et l'objet missing du domaine dit pourquoi (voir Absences). Une liste vide vaut [].
  • Codes et libellés : les valeurs énumérées sont des codes stables (apartment, flood, high) ; quand un libellé lisible est utile, il est servi à côté, dans la langue demandée.
  • Langue : fr (par défaut) ou en, par le paramètre locale ou l'en-tête Accept-Language. Les noms propres (rues, communes, établissements) restent dans leur langue d'origine.
  • Noms : un nom n'a qu'une définition. Les noms communs à tous les pays d'open-connect (les objets décrits ici, les niveaux de zones, latitude, price_per_m2) y veulent dire la même chose ; une donnée propre à ce pays porte un nom propre, documenté seulement ici.

Unités

unit Sens
EUR Montant en euros
EUR/year Montant annuel (revenu, coût de l'énergie)
EUR/month Loyer mensuel
EUR/m2 Prix au mètre carré
EUR/m2/month Loyer mensuel au mètre carré
% Pourcentage (3.2 signifie 3,2 %)
count Nombre
m2 Surface en mètres carrés
kWh/m2/year Consommation d'énergie annuelle au mètre carré
kgCO2/m2/year Émissions de gaz à effet de serre annuelles au mètre carré
kWh/year Consommation ou production d'électricité annuelle
MWh/year Production possible annuelle (toiture entière)

Niveaux de zones

Les zones vont du plus large au plus fin. Les noms de niveaux sont ceux des composants d'adresse des géocodeurs, que reprennent les autres API d'immosquare et toutes les API d'open-connect :
level Zone Code
country France FR
administrative_area_level1 Région Code officiel de la région (93)
administrative_area_level2 Département Code officiel du département (06)
locality Commune Code officiel de la commune (06088)
sublocality_level1 Arrondissement (Paris, Lyon, Marseille) Code officiel de l'arrondissement
sublocality_level2 IRIS Code de l'IRIS (060881703)

Objets communs

Les domaines diffèrent, mais leurs valeurs sont toujours construites avec les mêmes objets, identiques dans tous les pays d'open-connect.

Identifiants

L'immeuble, le bien et chaque événement de sa vie portent un identifiant open-connect : bld_… pour un immeuble, prp_… pour un bien, evt_… pour un événement.
{
  "building_id": "bld_8K2QF7XM4T",
  "property_id": "prp_3HC9R2MW7A"
}
  • Un identifiant ne change jamais : il ne dépend d'aucune numérotation publique, qui change parfois d'une édition à l'autre. Vous pouvez l'enregistrer et revenir au bien plus tard par GET /properties/{id} ou GET /buildings/{id}.
  • Quand deux biens se révèlent n'en faire qu'un, l'identifiant abandonné répond 301 vers celui qui est gardé.
  • Les numéros officiels utiles au client (numéro d'un diagnostic, d'une autorisation d'urbanisme, référence cadastrale) sont servis à côté, dans les champs qui les concernent.

Zone

Une zone du découpage : son niveau, son code officiel et son nom.
{
  "level": "sublocality_level2",
  "code": "060881703",
  "name": "Raimbaldi"
}
Une valeur calculée autour du point, et non pour une zone (la médiane des ventes à moins de 500 m), porte une zone de niveau radius, dont le code est le rayon en mètres.

Mesure

Une valeur chiffrée, avec ce qu'il faut pour la lire honnêtement : son unité, sa période, la zone qu'elle décrit, sa fiabilité, sa définition et sa date de mise à jour.
{
  "value": 5079,
  "unit": "EUR/m2",
  "period": {
    "start": "2024-01-01",
    "end": "2025-12-31"
  },
  "zone": {
    "level": "radius",
    "code": "500",
    "name": "500 m autour du point"
  },
  "sample_size": 655,
  "reliability": "high",
  "range": null,
  "definition": "sales_median_price_per_m2_24m",
  "updated_on": "2026-10-09",
  "stale": false
}
Champ Type Description
value nombre La valeur
unit chaîne Unité
period objet Période décrite, start et end inclus ; null pour une donnée sans période (un taux en vigueur)
zone Zone Zone décrite. Elle peut être plus large que le point : open-connect sert la zone la plus fine qui a une valeur fiable. Un rayon autour du point est une zone de niveau radius
sample_size entier Nombre d'observations derrière la valeur (ventes, logements, déclarations), quand il est connu
reliability chaîne high, medium ou low : voir Fiabilité
range objet Intervalle : {"low": …, "high": …} (premier et troisième quartiles, fourchette de loyers)
definition chaîne Définition open-connect de la valeur, décrite dans GET /catalog/fields
updated_on date Date de notre dernière mise à jour de la valeur
stale booléen true quand la valeur est en retard sur son rythme de mise à jour : voir Fraîcheur
Deux mesures qui ne mesurent pas la même chose portent deux noms, même quand elles se ressemblent : un revenu médian par unité de consommation et un revenu médian par déclaration sont deux champs distincts.

Fiabilité

reliability Signification
high Assez d'observations, ou fiabilité publiée excellente ou très bonne
medium Utilisable avec prudence : échantillon réduit, fiabilité publiée « bonne »
low Indicatif seulement : petit échantillon, fiabilité publiée « passable »
open-connect ne sert jamais une valeur non publiée pour confidentialité ou manque de fiabilité : elle vaut alors null.

Série

Une suite de valeurs dans le temps, pour une même zone :
{
  "unit": "EUR/m2",
  "zone": {
    "level": "locality",
    "code": "06088",
    "name": "Nice"
  },
  "points": [
    {
      "period": {
        "start": "2014-01-01",
        "end": "2014-12-31"
      },
      "value": 3493,
      "sample_size": 5286
    },
    {
      "period": {
        "start": "2025-01-01",
        "end": "2025-12-31"
      },
      "value": 4853,
      "sample_size": 7255
    }
  ],
  "changes": {
    "1y": 2.4,
    "5y": 20.3,
    "since_start": 38.9
  }
}
changes donne l'évolution en pour cent sur 1 an, sur 5 ans et depuis le premier point de la série.

Caractéristique

Une caractéristique d'un immeuble ou d'un bien (surface, étage, année de construction) est relevée dans les documents publiés sur lui. Plusieurs documents peuvent la donner, avec des valeurs différentes : open-connect sert la plus sûre, et garde les autres à côté.
{
  "value": 80,
  "unit": "m2",
  "document": {
    "type": "sale",
    "date": "2025-12-19"
  },
  "alternatives": [
    {
      "value": 93.0,
      "document": {
        "type": "energy_diagnosis",
        "date": "2025-08-20"
      }
    },
    {
      "value": 94.2,
      "document": {
        "type": "energy_diagnosis",
        "date": "2024-06-13"
      }
    },
    {
      "value": 94.1,
      "document": {
        "type": "energy_diagnosis",
        "date": "2023-11-21"
      }
    }
  ]
}
Champ Type Description
value nombre, chaîne \ null
unit chaîne \ null
document objet Le document qui la porte : type et date
alternatives liste Les autres valeurs connues, chacune avec son document, de la plus récente à la plus ancienne
document.type Document
sale Acte de vente
energy_diagnosis Diagnostic de performance énergétique
building_record Fiche du bâtiment (construction, matériaux, équipements)
copro_registry Registre des copropriétés
permit Autorisation d'urbanisme

Événement

Un fait daté de la vie d'un bien, avec la confiance de son rattachement au bien :
{
  "id": "evt_5QW8N1XKTB",
  "type": "sale",
  "date": "2025-12-19",
  "attachment": {
    "level": "sure",
    "reason": "lot_in_deed",
    "label": "Lot 5 de la parcelle LB 31 cité dans l'acte"
  },
  "sale": {
    "price": {
      "value": 494800,
      "unit": "EUR"
    },
    "price_per_m2": {
      "value": 5251,
      "unit": "EUR/m2",
      "surface_basis": "carrez"
    },
    "surface": 94.23,
    "rooms": 5,
    "market_sale": true,
    "annexes": []
  }
}
type Événement Objet porté
sale Vente, avec son prix sale
energy_diagnosis Diagnostic de performance énergétique energy_diagnosis
permit Autorisation d'urbanisme (permis, déclaration) permit
attachment.level vaut sure quand le document désigne ce bien sans ambiguïté (le lot est cité dans l'acte, le diagnostic porte l'adresse et la surface du lot), probable quand il lui correspond par sa date, sa surface ou son étage sans le nommer. attachment.reason en donne le motif, codé ; attachment.label le dit en clair.

Aléa

Un risque naturel qui concerne le point, dans une nomenclature et une échelle communes à tous les pays d'open-connect :
{
  "type": "seismic",
  "level": "high",
  "scope": "building",
  "label": "Zone de sismicité 4, moyenne"
}
| Champ | Description | | |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| type | clay_shrink_swell, radon, seismic |
| level | very_low, low, moderate, high, very_high, ou present quand la carte dit seulement « dans la zone » | | |
| scope | building (exposition du bâtiment), point (zone cartographiée qui contient le point), locality (risque connu dans la commune, sans localisation) | | |
| label | Libellé lisible, dans la langue demandée | | |
Chaque type a une seule définition de ses niveaux, la même partout. Pour la sismicité, les cinq zones réglementaires vont de very_low à very_high ; pour le retrait-gonflement des argiles, l'exposition faible, moyenne ou forte donne low, moderate ou high. Le détail est servi par GET /catalog/hazards.

Lieu

Un point d'intérêt, avec sa distance au point demandé :
{
  "id": "plc_2646057F",
  "category": "transport.bus",
  "name": "Raimbaldi / Urfé",
  "address": null,
  "latitude": 43.707116,
  "longitude": 7.269178,
  "distance_m": 72,
  "walk_minutes": 1,
  "lines": [
    "57"
  ]
}
Les catégories forment une hiérarchie stable à deux niveaux, un groupe et sa catégorie (school, school.primary, health.pharmacy…), la même dans tous les pays : voir GET /catalog/categories. walk_minutes est estimé à 80 m par minute, à vol d'oiseau ; lines ne concerne que les arrêts de transport. Un même lieu publié plusieurs fois n'est servi qu'une fois.

Statut d'un domaine

Chaque domaine ouvre sur son statut :
status Signification
ok Toutes les données du domaine ont répondu
partial Une partie des données est momentanément indisponible : les champs concernés valent null, meta.warnings les nomme
not_covered Le domaine n'a aucune donnée publiée à cet endroit : le catalogue donne les territoires couverts
unavailable Les données du domaine sont momentanément indisponibles ; la requête peut être renvoyée plus tard
insufficient_precision La position est trop imprécise pour ce domaine (adresse trouvée à la rue ou à la commune seulement) : les données au bâtiment ne sont pas servies, plutôt que de décrire le mauvais immeuble

Absences

Un champ à null peut vouloir dire des choses très différentes. Chaque domaine porte un objet missing, qui donne la raison de chaque champ absent :
"missing": {
  "last_sale": "not_found",
  "copro": "not_applicable"
}
Raison Signification
not_covered Donnée non publiée sur ce territoire
not_applicable La donnée n'a pas de sens ici (pas de copropriété pour une maison)
insufficient_sample Trop peu d'observations pour une valeur fiable
suppressed Valeur non publiée (secret statistique, fiabilité insuffisante)
not_found Rien trouvé ici (aucun diagnostic pour ce bien, aucune vente connue)
not_assessed Le point est hors des secteurs cartographiés : l'absence de zone ne veut pas dire absence de risque
unavailable Donnée momentanément indisponible
insufficient_precision Position trop imprécise pour une donnée au bâtiment

Localiser

Toutes les routes de données prennent un lieu, de l'une de ces deux façons :
Paramètre Type Description
lat nombre Latitude WGS84, avec lng
lng nombre Longitude WGS84, avec lat
address chaîne Adresse postale complète, à la place de lat/lng : numéro, rue, code postal, ville
Le pays est celui de l'API appelée : une adresse est toujours cherchée dans ce pays, et une position hors de son territoire répond 422 avec le code outside_coverage.
Une adresse est cherchée dans cet ordre :
  1. Les adresses officielles du pays, au numéro : la position est celle de l'adresse.
  2. Les adresses déjà résolues par open-connect, pour une adresse absente des listes officielles (une adresse trop récente, une graphie inhabituelle).
  3. Notre géocodeur, en dernier recours. Le résultat est enregistré : la même adresse, envoyée ensuite par vous ou par un autre client, est résolue immédiatement à l'étape 2.
data.location dit toujours ce qui a été retenu, comment, et avec quelle précision : vérifiez-le avant d'afficher des données « à l'adresse ». Les données au bâtiment (immeuble, bien, aléas au bâtiment) ne sont servies que pour une précision building ou address.

Résoudre un lieu

Position, adresse, zones et parcelle d'un lieu, et les identifiants de l'immeuble et des biens qui s'y trouvent. Utile pour valider une adresse saisie, ou pour enregistrer l'identifiant d'un bien.
Endpoint
GET https://app.open-connect.io/api/v1/fr/location
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
locale chaîne fr ou en
Réponse : data.location
Champ Type Description
latitude, longitude nombre Position retenue
precision chaîne input (vos coordonnées), building (au bâtiment), address (au numéro), street (à la rue), locality (à la commune seulement)
address objet \ null
geocoding objet \ null
zones objet Les zones du point, une clé par niveau ; null pour un niveau absent (sublocality_level1 hors de Paris, Lyon et Marseille)
parcel objet \ null
building_id chaîne \ null
property_ids liste Les biens de l'immeuble ou de l'adresse
nearest_property_id chaîne \ null
{
  "data": {
    "location": {
      "latitude": 43.706549,
      "longitude": 7.268758,
      "precision": "address",
      "address": {
        "label": "6 Rue Assalit 06000 Nice",
        "street_number": "6",
        "street_name": "Rue Assalit",
        "zipcode": "06000",
        "locality": "Nice"
      },
      "geocoding": {
        "query": "6 rue Assalit 06000 Nice",
        "matched": "6 Rue Assalit 06000 Nice",
        "method": "official_addresses",
        "alternatives": []
      },
      "zones": {
        "country": {
          "level": "country",
          "code": "FR",
          "name": "France"
        },
        "administrative_area_level1": {
          "level": "administrative_area_level1",
          "code": "93",
          "name": "Provence-Alpes-Côte d'Azur"
        },
        "administrative_area_level2": {
          "level": "administrative_area_level2",
          "code": "06",
          "name": "Alpes-Maritimes"
        },
        "locality": {
          "level": "locality",
          "code": "06088",
          "name": "Nice"
        },
        "sublocality_level1": null,
        "sublocality_level2": {
          "level": "sublocality_level2",
          "code": "060881703",
          "name": "Raimbaldi"
        }
      },
      "parcel": {
        "id": "06088000LB0031",
        "reference": "LB 31",
        "area_m2": 340
      },
      "building_id": "bld_8K2QF7XM4T",
      "property_ids": [
        "prp_3HC9R2MW7A",
        "prp_6TDW4P8NQE",
        "prp_9FJX2K5RVA"
      ],
      "nearest_property_id": "prp_3HC9R2MW7A"
    }
  },
  "meta": {
    "request_id": "req_01JA2Q8W6Y3K5V",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:12:44Z",
    "warnings": [],
    "sandbox": false
  }
}

Rapport de localisation

Toutes les données d'un lieu en une requête, ou seulement les domaines demandés. Les domaines sont calculés en parallèle : un domaine lent ou indisponible n'empêche pas les autres de répondre.
Endpoint
GET https://app.open-connect.io/api/v1/fr/report
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
include chaîne Domaines à calculer, séparés par des virgules : building,property,market. Un domaine peut être restreint à certains de ses champs : property.events. Par défaut, tous ceux de votre clé. location est toujours servi
property_id chaîne Le bien à décrire, quand l'immeuble en compte plusieurs ; par défaut, le plus proche du point
property_type chaîne apartment ou house : ne sert que les valeurs de ce type
radius entier Rayon en mètres des listes (ventes, lieux, autorisations, sites pollués), de 100 à 2000. Par défaut, celui de chaque domaine
locale chaîne fr ou en
Dans un rapport, les listes sont abrégées à leurs premiers éléments ; la route du domaine sert la liste complète, paginée.
Réponse
Champ Type Description
data.location objet Voir Résoudre un lieu
data.<domaine> objet Une clé par domaine calculé, décrite dans la section du domaine. Chacune ouvre sur son status
meta.request_id chaîne Identifiant de la requête
meta.api_version chaîne Version servie
meta.generated_at chaîne Horodatage UTC du calcul
meta.warnings liste Ce qui manque et pourquoi : {"domain": "urbanism", "code": "data_unavailable", "message": "…"}
meta.sandbox booléen true avec une clé de test
Exemple au 6 rue Assalit, à Nice (abrégé) :
{
  "data": {
    "location": {
      "latitude": 43.706549,
      "longitude": 7.268758,
      "precision": "address",
      "address": {
        "label": "6 Rue Assalit 06000 Nice",
        "street_number": "6",
        "street_name": "Rue Assalit",
        "zipcode": "06000",
        "locality": "Nice"
      },
      "geocoding": {
        "query": "6 rue Assalit 06000 Nice",
        "matched": "6 Rue Assalit 06000 Nice",
        "method": "official_addresses",
        "alternatives": []
      },
      "zones": {
        "country": {
          "level": "country",
          "code": "FR",
          "name": "France"
        },
        "administrative_area_level1": {
          "level": "administrative_area_level1",
          "code": "93",
          "name": "Provence-Alpes-Côte d'Azur"
        },
        "administrative_area_level2": {
          "level": "administrative_area_level2",
          "code": "06",
          "name": "Alpes-Maritimes"
        },
        "locality": {
          "level": "locality",
          "code": "06088",
          "name": "Nice"
        },
        "sublocality_level1": null,
        "sublocality_level2": {
          "level": "sublocality_level2",
          "code": "060881703",
          "name": "Raimbaldi"
        }
      },
      "parcel": {
        "id": "06088000LB0031",
        "reference": "LB 31",
        "area_m2": 340
      },
      "building_id": "bld_8K2QF7XM4T",
      "property_ids": [
        "prp_3HC9R2MW7A",
        "prp_6TDW4P8NQE",
        "prp_9FJX2K5RVA"
      ],
      "nearest_property_id": "prp_3HC9R2MW7A"
    },
    "building": {
      "status": "ok",
      "id": "bld_8K2QF7XM4T",
      "type": "apartment_building",
      "address": "6 rue Assalit, 06000 Nice",
      "construction_year": {
        "value": 1920,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": [
          {
            "value": 1900,
            "document": {
              "type": "energy_diagnosis",
              "date": "2025-08-20"
            }
          }
        ]
      },
      "levels": {
        "value": 6,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": []
      },
      "dwellings": {
        "value": 11,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": [
          {
            "value": 10,
            "document": {
              "type": "copro_registry",
              "date": "2019-02-08"
            }
          }
        ]
      },
      "copro": {
        "name": "6 Assalit",
        "registration_number": "AD6789952",
        "registered_on": "2019-02-08",
        "regulation_on": "1985-10-31",
        "construction_period": "before_1949",
        "lots": {
          "total": 24,
          "dwellings": 10,
          "parking": 0
        },
        "manager": {
          "type": "professional",
          "name": "CABINET CRES",
          "siret": "82922664600018",
          "mandate_active": true,
          "mandate_ends_on": "2027-12-31"
        }
      },
      "energy_diagnoses": [
        {
          "date": "2025-08-20",
          "energy_class": "B",
          "energy_per_m2": 89.9,
          "surface": 93.0,
          "floor": 1,
          "number": "2506E2654098C",
          "property_id": "prp_3HC9R2MW7A"
        },
        {
          "date": "2025-07-25",
          "energy_class": "B",
          "energy_per_m2": 100.0,
          "surface": 132.7,
          "floor": 5,
          "number": "2506E2447083Z",
          "property_id": null
        }
      ],
      "sales": [
        {
          "date": "2025-12-19",
          "lot": "5",
          "property_id": "prp_3HC9R2MW7A",
          "type": "apartment",
          "rooms": 5,
          "surface": 80,
          "price": {
            "value": 494800,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 6185,
            "unit": "EUR/m2"
          }
        },
        {
          "date": "2025-05-16",
          "lot": "4",
          "property_id": "prp_6TDW4P8NQE",
          "type": "apartment",
          "rooms": 5,
          "surface": 124,
          "price": {
            "value": 500000,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 4032,
            "unit": "EUR/m2"
          }
        }
      ],
      "sales_attachment": "parcel",
      "median_price_per_m2_24m": {
        "value": 4753,
        "unit": "EUR/m2",
        "period": {
          "start": "2024-01-01",
          "end": "2025-12-31"
        },
        "zone": null,
        "sample_size": 4,
        "reliability": "low",
        "range": null,
        "definition": "building_median_price_per_m2_24m",
        "updated_on": "2026-10-09",
        "stale": false
      },
      "vs_sublocality_level2": 17.1,
      "risks": [
        {
          "type": "seismic",
          "level": "high",
          "scope": "building",
          "label": "Zone de sismicité 4, moyenne"
        },
        {
          "type": "clay_shrink_swell",
          "level": "moderate",
          "scope": "building",
          "label": "Exposition moyenne au retrait-gonflement des argiles"
        },
        {
          "type": "radon",
          "level": "low",
          "scope": "building",
          "label": "Potentiel radon faible (catégorie 1)"
        }
      ]
    },
    "property": {
      "status": "ok",
      "id": "prp_3HC9R2MW7A",
      "building_id": "bld_8K2QF7XM4T",
      "type": "apartment",
      "address": "6 rue Assalit, 06000 Nice",
      "lot": "5",
      "living_area_m2": {
        "value": 80,
        "unit": "m2",
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": [
          {
            "value": 93.0,
            "document": {
              "type": "energy_diagnosis",
              "date": "2025-08-20"
            }
          },
          {
            "value": 94.2,
            "document": {
              "type": "energy_diagnosis",
              "date": "2024-06-13"
            }
          },
          {
            "value": 94.1,
            "document": {
              "type": "energy_diagnosis",
              "date": "2023-11-21"
            }
          }
        ]
      },
      "carrez_area_m2": {
        "value": 94.23,
        "unit": "m2",
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": []
      },
      "rooms": {
        "value": 5,
        "unit": null,
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": []
      },
      "energy": {
        "scheme": "dpe_2021",
        "energy_class": "B",
        "energy_per_m2": 89.9,
        "climate_class": "A",
        "climate_per_m2": 3.3,
        "number": "2506E2654098C",
        "date": "2025-08-20"
      },
      "last_sale": {
        "date": "2025-12-19",
        "price": {
          "value": 494800,
          "unit": "EUR"
        },
        "price_per_m2": {
          "value": 5251,
          "unit": "EUR/m2"
        },
        "surface_basis": "carrez"
      },
      "value_today": {
        "value": 495000,
        "unit": "EUR",
        "as_of": "2026-04-01",
        "method": "indexed_last_sale",
        "reliability": "medium"
      },
      "vs_sublocality_level2": 29.4,
      "events": [
        {
          "id": "evt_5QW8N1XKTB",
          "type": "sale",
          "date": "2025-12-19",
          "attachment": {
            "level": "sure",
            "reason": "lot_in_deed",
            "label": "Lot 5 de la parcelle LB 31 cité dans l'acte"
          },
          "sale": {
            "price": {
              "value": 494800,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 5251,
              "unit": "EUR/m2",
              "surface_basis": "carrez"
            },
            "surface": 94.23,
            "rooms": 5,
            "market_sale": true,
            "annexes": []
          }
        },
        {
          "id": "evt_2MZP7D4HWC",
          "type": "energy_diagnosis",
          "date": "2025-08-20",
          "attachment": {
            "level": "sure",
            "reason": "surface_matches_lot",
            "label": "Surface du diagnostic égale à la surface Carrez du lot ; vendu 4 mois après"
          },
          "energy_diagnosis": {
            "number": "2506E2654098C",
            "scheme": "dpe_2021",
            "energy_class": "B",
            "energy_per_m2": 89.9,
            "climate_class": "A",
            "surface": 93.0,
            "floor": 1,
            "heating": {
              "energy": "electricity",
              "system": "individual"
            }
          }
        }
      ],
      "story": "Acheté 245 000 € en mars 2024, revendu 494 800 € en décembre 2025 (+102 % en 21 mois) ; entre ces ventes, l'étiquette passe de D à B et le chauffage du gaz à l'électricité",
      "others": [
        {
          "id": "prp_6TDW4P8NQE",
          "type": "apartment",
          "lot": "4",
          "floor": null,
          "living_area_m2": 124,
          "last_event_on": "2025-05-16"
        },
        {
          "id": "prp_9FJX2K5RVA",
          "type": "apartment",
          "lot": "7",
          "floor": null,
          "living_area_m2": 80,
          "last_event_on": "2019-07-03"
        }
      ]
    },
    "market": {
      "status": "partial",
      "sales_nearby": {
        "count": 855,
        "median_price_per_m2": {
          "value": 5079,
          "unit": "EUR/m2",
          "period": {
            "start": "2024-01-01",
            "end": "2025-12-31"
          },
          "zone": {
            "level": "radius",
            "code": "500",
            "name": "500 m autour du point"
          },
          "sample_size": 655,
          "reliability": "high",
          "range": null,
          "definition": "sales_median_price_per_m2_24m",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "items": [
          {
            "date": "2025-12-30",
            "address": "5 rue Assalit, 06000 Nice",
            "type": "apartment",
            "surface": 89,
            "rooms": 4,
            "price": {
              "value": 245000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 2753,
              "unit": "EUR/m2"
            },
            "distance_m": 27,
            "same_parcel": false
          },
          {
            "date": "2025-12-30",
            "address": "24 rue de Lépante, 06000 Nice",
            "type": "apartment",
            "surface": 89,
            "rooms": 4,
            "price": {
              "value": 330000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 3708,
              "unit": "EUR/m2"
            },
            "distance_m": 118,
            "same_parcel": false
          }
        ]
      },
      "price_trend": {
        "unit": "EUR/m2",
        "zone": {
          "level": "locality",
          "code": "06088",
          "name": "Nice"
        },
        "points": [
          {
            "period": {
              "start": "2014-01-01",
              "end": "2014-12-31"
            },
            "value": 3493,
            "sample_size": 5286
          },
          {
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "value": 4853,
            "sample_size": 7255
          }
        ],
        "changes": {
          "1y": 2.4,
          "5y": 20.3,
          "since_start": 38.9
        }
      },
      "rent_estimate": {
        "monthly": {
          "value": 1578,
          "unit": "EUR/month"
        },
        "per_m2": {
          "value": 19.73,
          "unit": "EUR/m2/month",
          "period": {
            "start": "2025-01-01",
            "end": "2025-12-31"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 21293,
          "reliability": "medium",
          "range": {
            "low": 13.9,
            "high": 28.01
          },
          "definition": "asking_rent_per_m2",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "change_1y": 6.1
      },
      "gross_yield": {
        "value": 3.8,
        "unit": "%",
        "period": {
          "start": "2025-01-01",
          "end": "2025-12-31"
        },
        "zone": null,
        "sample_size": null,
        "reliability": "medium",
        "range": null,
        "definition": "gross_rental_yield",
        "updated_on": "2026-10-09",
        "stale": false
      },
      "regulation": {
        "tense_zone": true,
        "rent_control": null,
        "abc_zone": "A"
      },
      "permits_nearby": {
        "count": 142,
        "dwellings_created": null,
        "items": [
          {
            "date": "2025-10-30",
            "nature": "conversion",
            "destination": "housing",
            "dwellings_created": 1,
            "status": "authorized",
            "distance_m": 324
          },
          {
            "date": "2025-10-24",
            "nature": "conversion",
            "destination": "housing",
            "dwellings_created": 61,
            "status": "authorized",
            "distance_m": 496
          }
        ]
      },
      "missing": {
        "regulation.rent_control": "not_covered",
        "permits_nearby.dwellings_created": "unavailable"
      }
    },
    "risks": {
      "status": "ok",
      "hazards": [
        {
          "type": "seismic",
          "level": "high",
          "scope": "building",
          "label": "Zone de sismicité 4, moyenne"
        },
        {
          "type": "clay_shrink_swell",
          "level": "moderate",
          "scope": "building",
          "label": "Exposition moyenne au retrait-gonflement des argiles"
        },
        {
          "type": "radon",
          "level": "low",
          "scope": "building",
          "label": "Potentiel radon faible (catégorie 1)"
        }
      ],
      "summary": {
        "highest_level": "high",
        "notable": [
          "seismic",
          "clay_shrink_swell"
        ],
        "assessed": [
          "seismic",
          "clay_shrink_swell",
          "radon"
        ],
        "not_assessed": [
          "flood",
          "landslide",
          "coastal_erosion",
          "wildfire"
        ]
      },
      "obligations": {
        "brush_clearing": false
      },
      "polluted_sites": {
        "inside": [],
        "counts": {
          "former_industrial_activity": 66,
          "soil_information_area": 0,
          "contaminated_land": 0,
          "suspected_land": 0
        },
        "items": [
          {
            "type": "former_industrial_activity",
            "status": "unknown",
            "name": "Desserte d'essence",
            "address": "14 bis boulevard Raimbaldi, Nice",
            "distance_m": 29,
            "updated_on": "2014-12-04"
          },
          {
            "type": "former_industrial_activity",
            "status": "unknown",
            "name": "Legnano Magnat-Debon",
            "address": "33 rue de Lépante, Nice",
            "distance_m": 32,
            "updated_on": "2014-12-04"
          }
        ]
      }
    }
  },
  "meta": {
    "request_id": "req_0VQ6N2TZK8HWDR",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:12:47Z",
    "warnings": [
      {
        "domain": "market",
        "code": "data_unavailable",
        "message": "Le nombre de logements créés par les autorisations d'urbanisme autour du point est momentanément indisponible."
      }
    ],
    "sandbox": false
  }
}

Immeuble

Le bâtiment qui porte le bien : sa construction, sa copropriété, tous ses diagnostics et toutes ses ventes. Pour une maison individuelle, l'immeuble est la maison elle-même, et la plupart de ces champs sont décrits dans le bien.
Endpoints
GET https://app.open-connect.io/api/v1/fr/building
GET https://app.open-connect.io/api/v1/fr/buildings/{building_id}
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser, pour la première route
locale chaîne fr ou en
Réponse : data.building
Champ Type Description
id chaîne Identifiant de l'immeuble
type chaîne apartment_building, house, mixed_use, other
address chaîne Adresse principale de l'immeuble
construction_year Caractéristique Année de construction
levels Caractéristique Nombre de niveaux
height_m Caractéristique Hauteur moyenne, en mètres
dwellings Caractéristique Nombre de logements
footprint_m2 nombre \ null
materials objet walls, roof : stone, brick, concrete, wood, tiles, slate, metal…
heritage objet historic_monument (nom et distance du monument historique le plus proche à moins de 500 m), protected_area (dans un périmètre ou un site patrimonial protégé)
social_housing objet dwellings : logements sociaux de l'immeuble
fiber chaîne \ null
legal_owners objet \ null
electricity_per_meter Série Électricité réellement consommée par compteur résidentiel, en kWh par an
energy_potential objet solar_pv_mwh_year (photovoltaïque possible sur la toiture), solar_thermal, geothermal_probe, geothermal_aquifer (favourable, eligible_with_expert_opinion, unfavourable), heat_network_distance_m
copro objet \ null
copro.manager objet \ null
energy_diagnoses[] liste Tous les diagnostics du bâtiment : date, energy_class, energy_per_m2, surface, floor, number, property_id
sales[] liste Toutes les ventes de l'immeuble depuis 2014, lot par lot : date, lot, property_id, type, rooms, surface, price, price_per_m2
sales_attachment chaîne parcel : les ventes sont rattachées par la parcelle, qui peut porter plusieurs bâtiments
median_price_per_m2_24m Mesure \ null
vs_sublocality_level2 nombre \ null
risks[] liste d'Aléas Aléas au bâtiment : radon, retrait-gonflement des argiles, sismicité
{
  "data": {
    "building": {
      "status": "ok",
      "id": "bld_8K2QF7XM4T",
      "type": "apartment_building",
      "address": "6 rue Assalit, 06000 Nice",
      "construction_year": {
        "value": 1920,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": [
          {
            "value": 1900,
            "document": {
              "type": "energy_diagnosis",
              "date": "2025-08-20"
            }
          }
        ]
      },
      "levels": {
        "value": 6,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": []
      },
      "height_m": {
        "value": 21.0,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": []
      },
      "dwellings": {
        "value": 11,
        "unit": null,
        "document": {
          "type": "building_record",
          "date": null
        },
        "alternatives": [
          {
            "value": 10,
            "document": {
              "type": "copro_registry",
              "date": "2019-02-08"
            }
          }
        ]
      },
      "footprint_m2": 316,
      "materials": {
        "walls": "stone",
        "roof": "tiles"
      },
      "heritage": {
        "historic_monument": {
          "name": "Majestic Palace Hôtel (ancien)",
          "distance_m": 145
        },
        "protected_area": true
      },
      "social_housing": {
        "dwellings": 0
      },
      "fiber": "connectable",
      "legal_owners": {
        "count": 2,
        "forms": {
          "sci": 2
        }
      },
      "electricity_per_meter": {
        "unit": "kWh/year",
        "zone": null,
        "points": [
          {
            "period": {
              "start": "2018-01-01",
              "end": "2018-12-31"
            },
            "value": 5912,
            "sample_size": 11
          },
          {
            "period": {
              "start": "2019-01-01",
              "end": "2019-12-31"
            },
            "value": 6271,
            "sample_size": 11
          },
          {
            "period": {
              "start": "2020-01-01",
              "end": "2020-12-31"
            },
            "value": 6017,
            "sample_size": 11
          },
          {
            "period": {
              "start": "2021-01-01",
              "end": "2021-12-31"
            },
            "value": 6799,
            "sample_size": 11
          },
          {
            "period": {
              "start": "2024-01-01",
              "end": "2024-12-31"
            },
            "value": 4806,
            "sample_size": 11
          }
        ],
        "changes": {
          "1y": null,
          "5y": -23.4,
          "since_start": -18.7
        }
      },
      "energy_potential": {
        "solar_pv_mwh_year": 26.0,
        "solar_thermal": "unfavourable",
        "geothermal_probe": "eligible_with_expert_opinion",
        "geothermal_aquifer": "eligible_with_expert_opinion",
        "heat_network_distance_m": null
      },
      "copro": {
        "name": "6 Assalit",
        "registration_number": "AD6789952",
        "registered_on": "2019-02-08",
        "regulation_on": "1985-10-31",
        "construction_period": "before_1949",
        "lots": {
          "total": 24,
          "dwellings": 10,
          "parking": 0
        },
        "manager": {
          "type": "professional",
          "name": "CABINET CRES",
          "siret": "82922664600018",
          "mandate_active": true,
          "mandate_ends_on": "2027-12-31"
        }
      },
      "energy_diagnoses": [
        {
          "date": "2025-08-20",
          "energy_class": "B",
          "energy_per_m2": 89.9,
          "surface": 93.0,
          "floor": 1,
          "number": "2506E2654098C",
          "property_id": "prp_3HC9R2MW7A"
        },
        {
          "date": "2025-07-25",
          "energy_class": "B",
          "energy_per_m2": 100.0,
          "surface": 132.7,
          "floor": 5,
          "number": "2506E2447083Z",
          "property_id": null
        },
        {
          "date": "2024-06-13",
          "energy_class": "C",
          "energy_per_m2": 122.3,
          "surface": 94.2,
          "floor": 1,
          "number": "2406E2150114B",
          "property_id": "prp_3HC9R2MW7A"
        },
        {
          "date": "2023-11-21",
          "energy_class": "D",
          "energy_per_m2": 189.0,
          "surface": 94.1,
          "floor": 0,
          "number": "2306E3961807N",
          "property_id": "prp_3HC9R2MW7A"
        },
        {
          "date": "2022-12-17",
          "energy_class": "C",
          "energy_per_m2": 156.2,
          "surface": 136.6,
          "floor": 1,
          "number": "2206E3229110V",
          "property_id": null
        },
        {
          "date": "2019-01-14",
          "energy_class": "C",
          "energy_per_m2": 92.0,
          "surface": 94.61,
          "floor": null,
          "number": "1906V2000261L",
          "property_id": null
        },
        {
          "date": "2019-01-14",
          "energy_class": null,
          "energy_per_m2": null,
          "surface": 94.61,
          "floor": null,
          "number": "1906V2000226M",
          "property_id": null
        }
      ],
      "sales": [
        {
          "date": "2025-12-19",
          "lot": "5",
          "property_id": "prp_3HC9R2MW7A",
          "type": "apartment",
          "rooms": 5,
          "surface": 80,
          "price": {
            "value": 494800,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 6185,
            "unit": "EUR/m2"
          }
        },
        {
          "date": "2025-05-16",
          "lot": "4",
          "property_id": "prp_6TDW4P8NQE",
          "type": "apartment",
          "rooms": 5,
          "surface": 124,
          "price": {
            "value": 500000,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 4032,
            "unit": "EUR/m2"
          }
        },
        {
          "date": "2025-01-07",
          "lot": "5",
          "property_id": "prp_3HC9R2MW7A",
          "type": "apartment",
          "rooms": 5,
          "surface": 80,
          "price": {
            "value": 437940,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 5474,
            "unit": "EUR/m2"
          }
        },
        {
          "date": "2024-03-22",
          "lot": "5",
          "property_id": "prp_3HC9R2MW7A",
          "type": "apartment",
          "rooms": 5,
          "surface": 80,
          "price": {
            "value": 245000,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 3062,
            "unit": "EUR/m2"
          }
        },
        {
          "date": "2019-07-03",
          "lot": "7",
          "property_id": "prp_9FJX2K5RVA",
          "type": "apartment",
          "rooms": null,
          "surface": 80,
          "price": {
            "value": 315000,
            "unit": "EUR"
          },
          "price_per_m2": {
            "value": 3938,
            "unit": "EUR/m2"
          }
        }
      ],
      "sales_attachment": "parcel",
      "median_price_per_m2_24m": {
        "value": 4753,
        "unit": "EUR/m2",
        "period": {
          "start": "2024-01-01",
          "end": "2025-12-31"
        },
        "zone": null,
        "sample_size": 4,
        "reliability": "low",
        "range": null,
        "definition": "building_median_price_per_m2_24m",
        "updated_on": "2026-10-09",
        "stale": false
      },
      "vs_sublocality_level2": 17.1,
      "risks": [
        {
          "type": "seismic",
          "level": "high",
          "scope": "building",
          "label": "Zone de sismicité 4, moyenne"
        },
        {
          "type": "clay_shrink_swell",
          "level": "moderate",
          "scope": "building",
          "label": "Exposition moyenne au retrait-gonflement des argiles"
        },
        {
          "type": "radon",
          "level": "low",
          "scope": "building",
          "label": "Potentiel radon faible (catégorie 1)"
        }
      ],
      "missing": {
        "energy_potential.heat_network_distance_m": "not_found",
        "electricity_per_meter.changes.1y": "not_found"
      }
    }
  },
  "meta": {
    "request_id": "req_7TN3KD9QW2LXHB",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:13:02Z",
    "warnings": [],
    "sandbox": false
  }
}

Le bien

Le logement lui-même, le lot d'un immeuble ou la maison : ses caractéristiques, sa valeur estimée aujourd'hui, et sa vie. Une adresse ne dit pas quel lot vous intéresse : la route décrit le bien le plus proche du point et liste les autres biens de l'immeuble, que property_id permet de choisir.
Endpoints
GET https://app.open-connect.io/api/v1/fr/property
GET https://app.open-connect.io/api/v1/fr/properties/{property_id}
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser, pour la première route
property_id chaîne Le bien à décrire parmi ceux de l'immeuble ; par défaut, le plus proche
locale chaîne fr ou en
Réponse : data.property
Champ Type Description
id chaîne Identifiant du bien
building_id chaîne Son immeuble
type chaîne apartment, house, multi_dwelling, commercial, land, other
address chaîne Adresse du bien
lot chaîne \ null
floor Caractéristique Étage, 0 pour le rez-de-chaussée
living_area_m2 Caractéristique Surface habitable
carrez_area_m2 Caractéristique Surface de la loi Carrez, pour un lot de copropriété
land_area_m2 Caractéristique Terrain, pour une maison
rooms Caractéristique Pièces principales
construction_year Caractéristique Année de construction du bien, ou à défaut de l'immeuble
energy objet \ null
heating Caractéristique energy (electricity, gas, oil, wood, heat_network…) et system (individual ou collective)
energy_cost_per_year Caractéristique Coût annuel estimé de l'énergie, en EUR
annexes liste Annexes vendues avec le bien : cellar, parking, garage, outbuilding
details objet \ null
renovation objet audits[] : audits énergétiques du bien, avec leurs scénarios (steps[] : energy_class, energy_per_m2, cost, savings_per_year)
last_sale objet \ null
value_today objet \ null
vs_sublocality_level2 nombre \ null
events[] liste d'Événements La vie du bien, de la plus récente à la plus ancienne
story chaîne \ null
price_history objet \ null
others[] liste Les autres biens de l'immeuble, en résumé : id, type, lot, floor, living_area_m2, last_event_on
{
  "data": {
    "property": {
      "status": "ok",
      "id": "prp_3HC9R2MW7A",
      "building_id": "bld_8K2QF7XM4T",
      "type": "apartment",
      "address": "6 rue Assalit, 06000 Nice",
      "lot": "5",
      "floor": {
        "value": 1,
        "unit": null,
        "document": {
          "type": "energy_diagnosis",
          "date": "2025-08-20"
        },
        "alternatives": [
          {
            "value": 0,
            "document": {
              "type": "energy_diagnosis",
              "date": "2023-11-21"
            }
          }
        ]
      },
      "living_area_m2": {
        "value": 80,
        "unit": "m2",
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": [
          {
            "value": 93.0,
            "document": {
              "type": "energy_diagnosis",
              "date": "2025-08-20"
            }
          },
          {
            "value": 94.2,
            "document": {
              "type": "energy_diagnosis",
              "date": "2024-06-13"
            }
          },
          {
            "value": 94.1,
            "document": {
              "type": "energy_diagnosis",
              "date": "2023-11-21"
            }
          }
        ]
      },
      "carrez_area_m2": {
        "value": 94.23,
        "unit": "m2",
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": []
      },
      "land_area_m2": null,
      "rooms": {
        "value": 5,
        "unit": null,
        "document": {
          "type": "sale",
          "date": "2025-12-19"
        },
        "alternatives": []
      },
      "construction_year": {
        "value": 1900,
        "unit": null,
        "document": {
          "type": "energy_diagnosis",
          "date": "2025-08-20"
        },
        "alternatives": [
          {
            "value": 1920,
            "document": {
              "type": "building_record",
              "date": null
            }
          }
        ]
      },
      "energy": {
        "scheme": "dpe_2021",
        "energy_class": "B",
        "energy_per_m2": 89.9,
        "climate_class": "A",
        "climate_per_m2": 3.3,
        "number": "2506E2654098C",
        "date": "2025-08-20"
      },
      "heating": {
        "value": {
          "energy": "electricity",
          "system": "individual"
        },
        "unit": null,
        "document": {
          "type": "energy_diagnosis",
          "date": "2025-08-20"
        },
        "alternatives": [
          {
            "value": {
              "energy": "gas",
              "system": "individual"
            },
            "document": {
              "type": "energy_diagnosis",
              "date": "2023-11-21"
            }
          }
        ]
      },
      "energy_cost_per_year": {
        "value": 993,
        "unit": "EUR/year",
        "document": {
          "type": "energy_diagnosis",
          "date": "2025-08-20"
        },
        "alternatives": []
      },
      "annexes": [],
      "details": {
        "heating": "Pompe à chaleur air/air récente, individuelle ; appoint électrique à effet Joule",
        "hot_water": "Ballon électrique à accumulation, individuel",
        "cooling": "Pompe à chaleur air/air",
        "ventilation": "Ventilation mécanique autoréglable, postérieure à 1982",
        "windows": "Double vitrage, menuiseries PVC, 30 % de surface vitrée",
        "orientation": "Traversant nord-sud, avec balcon",
        "walls": "Pierre de taille et moellons, 55 cm, isolation inconnue",
        "floors": "Plancher bas et plancher haut non isolés",
        "inertia": "Lourde",
        "renewables": null
      },
      "renovation": {
        "audits": []
      },
      "last_sale": {
        "date": "2025-12-19",
        "price": {
          "value": 494800,
          "unit": "EUR"
        },
        "price_per_m2": {
          "value": 5251,
          "unit": "EUR/m2"
        },
        "surface_basis": "carrez"
      },
      "value_today": {
        "value": 495000,
        "unit": "EUR",
        "as_of": "2026-04-01",
        "method": "indexed_last_sale",
        "reliability": "medium"
      },
      "vs_sublocality_level2": 29.4,
      "events": [
        {
          "id": "evt_5QW8N1XKTB",
          "type": "sale",
          "date": "2025-12-19",
          "attachment": {
            "level": "sure",
            "reason": "lot_in_deed",
            "label": "Lot 5 de la parcelle LB 31 cité dans l'acte"
          },
          "sale": {
            "price": {
              "value": 494800,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 5251,
              "unit": "EUR/m2",
              "surface_basis": "carrez"
            },
            "surface": 94.23,
            "rooms": 5,
            "market_sale": true,
            "annexes": []
          }
        },
        {
          "id": "evt_2MZP7D4HWC",
          "type": "energy_diagnosis",
          "date": "2025-08-20",
          "attachment": {
            "level": "sure",
            "reason": "surface_matches_lot",
            "label": "Surface du diagnostic égale à la surface Carrez du lot ; vendu 4 mois après"
          },
          "energy_diagnosis": {
            "number": "2506E2654098C",
            "scheme": "dpe_2021",
            "energy_class": "B",
            "energy_per_m2": 89.9,
            "climate_class": "A",
            "surface": 93.0,
            "floor": 1,
            "heating": {
              "energy": "electricity",
              "system": "individual"
            }
          }
        },
        {
          "id": "evt_7RKV3N9QXF",
          "type": "sale",
          "date": "2025-01-07",
          "attachment": {
            "level": "sure",
            "reason": "lot_in_deed",
            "label": "Lot 5 de la parcelle LB 31 cité dans l'acte"
          },
          "sale": {
            "price": {
              "value": 437940,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 4648,
              "unit": "EUR/m2",
              "surface_basis": "carrez"
            },
            "surface": 94.23,
            "rooms": 5,
            "market_sale": true,
            "annexes": []
          }
        },
        {
          "id": "evt_4HTB8W2LMP",
          "type": "energy_diagnosis",
          "date": "2024-06-13",
          "attachment": {
            "level": "sure",
            "reason": "surface_matches_lot",
            "label": "Surface du diagnostic égale à la surface Carrez du lot ; vendu 7 mois après"
          },
          "energy_diagnosis": {
            "number": "2406E2150114B",
            "scheme": "dpe_2021",
            "energy_class": "C",
            "energy_per_m2": 122.3,
            "climate_class": "A",
            "surface": 94.2,
            "floor": 1,
            "heating": {
              "energy": "electricity",
              "system": "individual"
            }
          }
        },
        {
          "id": "evt_9XCD5J1RNK",
          "type": "sale",
          "date": "2024-03-22",
          "attachment": {
            "level": "sure",
            "reason": "lot_in_deed",
            "label": "Lot 5 de la parcelle LB 31 cité dans l'acte"
          },
          "sale": {
            "price": {
              "value": 245000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 3063,
              "unit": "EUR/m2",
              "surface_basis": "living"
            },
            "surface": 80,
            "rooms": 5,
            "market_sale": true,
            "annexes": []
          }
        },
        {
          "id": "evt_3LQF6V8TZB",
          "type": "energy_diagnosis",
          "date": "2023-11-21",
          "attachment": {
            "level": "sure",
            "reason": "surface_matches_lot",
            "label": "Surface du diagnostic égale à la surface Carrez du lot ; vendu 4 mois après"
          },
          "energy_diagnosis": {
            "number": "2306E3961807N",
            "scheme": "dpe_2021",
            "energy_class": "D",
            "energy_per_m2": 189.0,
            "climate_class": "D",
            "surface": 94.1,
            "floor": 0,
            "heating": {
              "energy": "gas",
              "system": "individual"
            }
          }
        }
      ],
      "story": "Acheté 245 000 € en mars 2024, revendu 494 800 € en décembre 2025 (+102 % en 21 mois) ; entre ces ventes, l'étiquette passe de D à B et le chauffage du gaz à l'électricité",
      "price_history": {
        "sales": [
          {
            "date": "2024-03-22",
            "price_per_m2": {
              "value": 3063,
              "unit": "EUR/m2",
              "surface_basis": "living"
            }
          },
          {
            "date": "2025-01-07",
            "price_per_m2": {
              "value": 4648,
              "unit": "EUR/m2",
              "surface_basis": "carrez"
            }
          },
          {
            "date": "2025-12-19",
            "price_per_m2": {
              "value": 5251,
              "unit": "EUR/m2",
              "surface_basis": "carrez"
            }
          }
        ],
        "market": {
          "unit": "EUR/m2",
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "points": [
            {
              "period": {
                "start": "2014-01-01",
                "end": "2014-12-31"
              },
              "value": 3493,
              "sample_size": 5286
            },
            {
              "period": {
                "start": "2015-01-01",
                "end": "2015-12-31"
              },
              "value": 3458,
              "sample_size": 5753
            },
            {
              "period": {
                "start": "2016-01-01",
                "end": "2016-12-31"
              },
              "value": 3481,
              "sample_size": 6468
            },
            {
              "period": {
                "start": "2017-01-01",
                "end": "2017-12-31"
              },
              "value": 3572,
              "sample_size": 7326
            },
            {
              "period": {
                "start": "2018-01-01",
                "end": "2018-12-31"
              },
              "value": 3698,
              "sample_size": 7318
            },
            {
              "period": {
                "start": "2019-01-01",
                "end": "2019-12-31"
              },
              "value": 3854,
              "sample_size": 7996
            },
            {
              "period": {
                "start": "2020-01-01",
                "end": "2020-12-31"
              },
              "value": 4033,
              "sample_size": 7424
            },
            {
              "period": {
                "start": "2021-01-01",
                "end": "2021-12-31"
              },
              "value": 4239,
              "sample_size": 8075
            },
            {
              "period": {
                "start": "2022-01-01",
                "end": "2022-12-31"
              },
              "value": 4478,
              "sample_size": 8865
            },
            {
              "period": {
                "start": "2023-01-01",
                "end": "2023-12-31"
              },
              "value": 4688,
              "sample_size": 7174
            },
            {
              "period": {
                "start": "2024-01-01",
                "end": "2024-12-31"
              },
              "value": 4741,
              "sample_size": 6332
            },
            {
              "period": {
                "start": "2025-01-01",
                "end": "2025-12-31"
              },
              "value": 4853,
              "sample_size": 7255
            }
          ],
          "changes": {
            "1y": 2.4,
            "5y": 20.3,
            "since_start": 38.9
          }
        }
      },
      "others": [
        {
          "id": "prp_6TDW4P8NQE",
          "type": "apartment",
          "lot": "4",
          "floor": null,
          "living_area_m2": 124,
          "last_event_on": "2025-05-16"
        },
        {
          "id": "prp_9FJX2K5RVA",
          "type": "apartment",
          "lot": "7",
          "floor": null,
          "living_area_m2": 80,
          "last_event_on": "2019-07-03"
        }
      ],
      "missing": {
        "land_area_m2": "not_applicable",
        "details.renewables": "not_found"
      }
    }
  },
  "meta": {
    "request_id": "req_4RMX8V2JP6CQZD",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:13:19Z",
    "warnings": [],
    "sandbox": false
  }
}

Valeur estimée

value_today donne une valeur indicative du bien aujourd'hui, jamais une expertise :
method Calcul
indexed_last_sale Dernière vente portée à aujourd'hui par l'évolution des prix des logements de la région depuis sa date
Sans vente connue, value_today vaut null avec la raison not_found. reliability baisse avec l'ancienneté de la vente et l'écart du bien à son quartier.

Risques

Ce que dirait l'état des risques remis à l'acheteur : aléas au bâtiment et au point, obligations, informations de la commune, sites et sols pollués autour.
Endpoint
GET https://app.open-connect.io/api/v1/fr/risks
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
radius entier Rayon des sites pollués, en mètres, de 100 à 2000 ; 500 par défaut
locale chaîne fr ou en
Réponse : data.risks
Champ Type Description
hazards[] liste d'Aléas Aléas qui concernent le point, les plus élevés d'abord : radon, retrait-gonflement des argiles et sismicité, au bâtiment
not_assessed[] liste Types d'aléas que nous ne savons pas évaluer ici, ou dont le point est hors des secteurs cartographiés
summary objet highest_level, notable[] (aléas de niveau moderate ou plus), assessed[], not_assessed[]
obligations.brush_clearing booléen \ null
municipal.recognized_hazards[] liste Risques recensés pour la commune, dans nos types : type, label (les types d'aléas, plus industrial, dangerous_goods_transport, mining, dam_failure)
municipal.natural_disasters objet Catastrophes naturelles reconnues : total, latest[] (type, started_on, ended_on, decree_on)
municipal.prevention_plans[] liste Plans de prévention : nature (natural, technological, mining), hazards[], status (prescribed, approved, under_revision), approved_on
municipal.flood_atlas booléen Commune couverte par un atlas des zones inondables
polluted_sites.inside[] liste Sites dont le terrain contient le point : à signaler à l'acheteur
polluted_sites.counts objet Nombre de sites par type dans le rayon
polluted_sites.items[] liste Les plus proches : type (former_industrial_activity, soil_information_area, contaminated_land, suspected_land), status (suspected, confirmed, under_treatment, remediated, unknown), name, address, distance_m, updated_on
{
  "data": {
    "risks": {
      "status": "ok",
      "hazards": [
        {
          "type": "seismic",
          "level": "high",
          "scope": "building",
          "label": "Zone de sismicité 4, moyenne"
        },
        {
          "type": "clay_shrink_swell",
          "level": "moderate",
          "scope": "building",
          "label": "Exposition moyenne au retrait-gonflement des argiles"
        },
        {
          "type": "radon",
          "level": "low",
          "scope": "building",
          "label": "Potentiel radon faible (catégorie 1)"
        }
      ],
      "not_assessed": [
        "flood",
        "landslide",
        "coastal_erosion",
        "wildfire"
      ],
      "summary": {
        "highest_level": "high",
        "notable": [
          "seismic",
          "clay_shrink_swell"
        ],
        "assessed": [
          "seismic",
          "clay_shrink_swell",
          "radon"
        ],
        "not_assessed": [
          "flood",
          "landslide",
          "coastal_erosion",
          "wildfire"
        ]
      },
      "obligations": {
        "brush_clearing": false
      },
      "municipal": {
        "recognized_hazards": [
          {
            "type": "flood",
            "label": "Inondation"
          },
          {
            "type": "landslide",
            "label": "Mouvement de terrain"
          },
          {
            "type": "coastal_erosion",
            "label": "Recul du trait de côte"
          },
          {
            "type": "clay_shrink_swell",
            "label": "Retrait-gonflement des argiles"
          },
          {
            "type": "seismic",
            "label": "Séisme"
          },
          {
            "type": "wildfire",
            "label": "Feu de forêt"
          },
          {
            "type": "industrial",
            "label": "Risque industriel"
          },
          {
            "type": "dangerous_goods_transport",
            "label": "Transport de marchandises dangereuses"
          }
        ],
        "natural_disasters": {
          "total": 67,
          "latest": [
            {
              "type": "flood",
              "started_on": "2024-10-15",
              "ended_on": "2024-10-19",
              "decree_on": "2024-10-30"
            },
            {
              "type": "flood",
              "started_on": "2024-03-02",
              "ended_on": "2024-03-03",
              "decree_on": "2024-04-29"
            },
            {
              "type": "flood",
              "started_on": "2024-02-26",
              "ended_on": "2024-02-26",
              "decree_on": "2024-06-05"
            }
          ]
        },
        "prevention_plans": [
          {
            "nature": "natural",
            "hazards": [
              "flood"
            ],
            "status": "prescribed",
            "approved_on": null
          },
          {
            "nature": "natural",
            "hazards": [
              "landslide"
            ],
            "status": "approved",
            "approved_on": "2020-03-16"
          },
          {
            "nature": "natural",
            "hazards": [
              "seismic"
            ],
            "status": "approved",
            "approved_on": "2019-01-28"
          },
          {
            "nature": "natural",
            "hazards": [
              "wildfire"
            ],
            "status": "approved",
            "approved_on": "2017-02-07"
          },
          {
            "nature": "natural",
            "hazards": [
              "flood"
            ],
            "status": "approved",
            "approved_on": "2013-06-25"
          },
          {
            "nature": "natural",
            "hazards": [
              "landslide"
            ],
            "status": "approved",
            "approved_on": "2008-12-05"
          },
          {
            "nature": "natural",
            "hazards": [
              "flood"
            ],
            "status": "approved",
            "approved_on": "1999-11-17"
          }
        ],
        "flood_atlas": true
      },
      "polluted_sites": {
        "inside": [],
        "counts": {
          "former_industrial_activity": 66,
          "soil_information_area": 0,
          "contaminated_land": 0,
          "suspected_land": 0
        },
        "items": [
          {
            "type": "former_industrial_activity",
            "status": "unknown",
            "name": "Desserte d'essence",
            "address": "14 bis boulevard Raimbaldi, Nice",
            "distance_m": 29,
            "updated_on": "2014-12-04"
          },
          {
            "type": "former_industrial_activity",
            "status": "unknown",
            "name": "Legnano Magnat-Debon",
            "address": "33 rue de Lépante, Nice",
            "distance_m": 32,
            "updated_on": "2014-12-04"
          },
          {
            "type": "former_industrial_activity",
            "status": "unknown",
            "name": "Laverie Washmatic",
            "address": "13 rue Assalit, Nice",
            "distance_m": 47,
            "updated_on": "2014-12-04"
          }
        ]
      },
      "missing": {}
    }
  },
  "meta": {
    "request_id": "req_9HBW5T1NZK3QFM",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:13:37Z",
    "warnings": [],
    "sandbox": false
  }
}

Marché

Ce que vaut et rapporte un bien dans ce quartier : les ventes autour et l'évolution des prix, les loyers et le rendement, la fiscalité locale, la vacance, et ce qui se construit autour.
Endpoints
GET https://app.open-connect.io/api/v1/fr/market
GET https://app.open-connect.io/api/v1/fr/market/sales
GET https://app.open-connect.io/api/v1/fr/market/permits
Les deux dernières routes servent la liste complète, paginée, des ventes et des autorisations d'urbanisme autour du point (page, per_page jusqu'à 100).
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
property_type chaîne apartment ou house
property_id chaîne Le bien dont calculer le loyer indicatif et le rendement ; par défaut, le plus proche
radius entier Rayon des ventes et des autorisations, de 100 à 2000 ; 500 par défaut
months entier Période des ventes autour, de 12 à 60 mois ; 24 par défaut
locale chaîne fr ou en
Réponse : data.market
Champ Type Description
sales_nearby objet \ null
price_trend Série \ null
price_index Mesure \ null
rent_estimate objet \ null
gross_yield Mesure \ null
regulation objet \ null
property_tax objet rates : taux de la commune, de l'intercommunalité et de la taxe d'ordures ménagères. Le montant pour le bien n'est pas servi : la valeur locative cadastrale n'est pas publiée
private_vacancy objet \ null
permits_nearby objet \ null
{
  "data": {
    "market": {
      "status": "partial",
      "sales_nearby": {
        "count": 855,
        "median_price_per_m2": {
          "value": 5079,
          "unit": "EUR/m2",
          "period": {
            "start": "2024-01-01",
            "end": "2025-12-31"
          },
          "zone": {
            "level": "radius",
            "code": "500",
            "name": "500 m autour du point"
          },
          "sample_size": 655,
          "reliability": "high",
          "range": null,
          "definition": "sales_median_price_per_m2_24m",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "items": [
          {
            "date": "2025-12-30",
            "address": "5 rue Assalit, 06000 Nice",
            "type": "apartment",
            "surface": 89,
            "rooms": 4,
            "price": {
              "value": 245000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 2753,
              "unit": "EUR/m2"
            },
            "distance_m": 27,
            "same_parcel": false
          },
          {
            "date": "2025-12-30",
            "address": "24 rue de Lépante, 06000 Nice",
            "type": "apartment",
            "surface": 89,
            "rooms": 4,
            "price": {
              "value": 330000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 3708,
              "unit": "EUR/m2"
            },
            "distance_m": 118,
            "same_parcel": false
          },
          {
            "date": "2025-12-22",
            "address": "10 rue Miron, 06000 Nice",
            "type": "apartment",
            "surface": 75,
            "rooms": 3,
            "price": {
              "value": 279000,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 3720,
              "unit": "EUR/m2"
            },
            "distance_m": 129,
            "same_parcel": false
          },
          {
            "date": "2025-12-19",
            "address": "6 rue Assalit, 06000 Nice",
            "type": "apartment",
            "surface": 80,
            "rooms": 5,
            "price": {
              "value": 494800,
              "unit": "EUR"
            },
            "price_per_m2": {
              "value": 6185,
              "unit": "EUR/m2"
            },
            "distance_m": 11,
            "same_parcel": true
          },
          {
            "date": "2025-12-09",
            "address": "5 boulevard Raimbaldi, 06000 Nice",
            "type": "commercial",
            "surface": 35,
            "rooms": 0,
            "price": {
              "value": 220000,
              "unit": "EUR"
            },
            "price_per_m2": null,
            "distance_m": 47,
            "same_parcel": false
          }
        ]
      },
      "price_trend": {
        "unit": "EUR/m2",
        "zone": {
          "level": "locality",
          "code": "06088",
          "name": "Nice"
        },
        "points": [
          {
            "period": {
              "start": "2014-01-01",
              "end": "2014-12-31"
            },
            "value": 3493,
            "sample_size": 5286
          },
          {
            "period": {
              "start": "2015-01-01",
              "end": "2015-12-31"
            },
            "value": 3458,
            "sample_size": 5753
          },
          {
            "period": {
              "start": "2016-01-01",
              "end": "2016-12-31"
            },
            "value": 3481,
            "sample_size": 6468
          },
          {
            "period": {
              "start": "2017-01-01",
              "end": "2017-12-31"
            },
            "value": 3572,
            "sample_size": 7326
          },
          {
            "period": {
              "start": "2018-01-01",
              "end": "2018-12-31"
            },
            "value": 3698,
            "sample_size": 7318
          },
          {
            "period": {
              "start": "2019-01-01",
              "end": "2019-12-31"
            },
            "value": 3854,
            "sample_size": 7996
          },
          {
            "period": {
              "start": "2020-01-01",
              "end": "2020-12-31"
            },
            "value": 4033,
            "sample_size": 7424
          },
          {
            "period": {
              "start": "2021-01-01",
              "end": "2021-12-31"
            },
            "value": 4239,
            "sample_size": 8075
          },
          {
            "period": {
              "start": "2022-01-01",
              "end": "2022-12-31"
            },
            "value": 4478,
            "sample_size": 8865
          },
          {
            "period": {
              "start": "2023-01-01",
              "end": "2023-12-31"
            },
            "value": 4688,
            "sample_size": 7174
          },
          {
            "period": {
              "start": "2024-01-01",
              "end": "2024-12-31"
            },
            "value": 4741,
            "sample_size": 6332
          },
          {
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "value": 4853,
            "sample_size": 7255
          }
        ],
        "changes": {
          "1y": 2.4,
          "5y": 20.3,
          "since_start": 38.9
        }
      },
      "price_index": {
        "value": 1.3,
        "unit": "%",
        "period": {
          "start": "2025-04-01",
          "end": "2026-06-30"
        },
        "zone": {
          "level": "administrative_area_level1",
          "code": "93",
          "name": "Provence-Alpes-Côte d'Azur"
        },
        "sample_size": null,
        "reliability": "medium",
        "range": null,
        "definition": "price_index_change_1y",
        "updated_on": "2026-10-09",
        "stale": false
      },
      "rent_estimate": {
        "monthly": {
          "value": 1578,
          "unit": "EUR/month"
        },
        "per_m2": {
          "value": 19.73,
          "unit": "EUR/m2/month",
          "period": {
            "start": "2025-01-01",
            "end": "2025-12-31"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 21293,
          "reliability": "medium",
          "range": {
            "low": 13.9,
            "high": 28.01
          },
          "definition": "asking_rent_per_m2",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "change_1y": 6.1
      },
      "gross_yield": {
        "value": 3.8,
        "unit": "%",
        "period": {
          "start": "2025-01-01",
          "end": "2025-12-31"
        },
        "zone": null,
        "sample_size": null,
        "reliability": "medium",
        "range": null,
        "definition": "gross_rental_yield",
        "updated_on": "2026-10-09",
        "stale": false
      },
      "regulation": {
        "tense_zone": true,
        "rent_control": null,
        "abc_zone": "A"
      },
      "property_tax": {
        "rates": {
          "municipal": {
            "value": 35.3,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_municipal",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "intercommunal": {
            "value": 6.4,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_intercommunal",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "household_waste": {
            "value": 10.46,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "household_waste_tax_rate",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "total": {
            "value": 42.43,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_total",
            "updated_on": "2026-10-09",
            "stale": false
          }
        },
        "estimate": null
      },
      "private_vacancy": {
        "rate": {
          "value": 9.3,
          "unit": "%",
          "period": {
            "start": "2025-01-01",
            "end": "2025-01-01"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 222584,
          "reliability": "high",
          "range": null,
          "definition": "private_vacancy_rate",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "over_two_years": {
          "value": 2.5,
          "unit": "%",
          "period": {
            "start": "2025-01-01",
            "end": "2025-01-01"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 222584,
          "reliability": "high",
          "range": null,
          "definition": "private_vacancy_over_two_years_rate",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "permits_nearby": {
        "count": 142,
        "dwellings_created": null,
        "items": [
          {
            "date": "2025-10-30",
            "nature": "conversion",
            "destination": "housing",
            "dwellings_created": 1,
            "status": "authorized",
            "distance_m": 324
          },
          {
            "date": "2025-10-24",
            "nature": "conversion",
            "destination": "housing",
            "dwellings_created": 61,
            "status": "authorized",
            "distance_m": 496
          },
          {
            "date": "2025-10-16",
            "nature": null,
            "destination": null,
            "dwellings_created": null,
            "status": "authorized",
            "distance_m": 496
          },
          {
            "date": "2025-10-02",
            "nature": "conversion",
            "destination": "housing",
            "dwellings_created": 1,
            "status": "authorized",
            "distance_m": 101
          }
        ]
      },
      "missing": {
        "regulation.rent_control": "not_covered",
        "property_tax.estimate": "not_covered",
        "permits_nearby.dwellings_created": "unavailable"
      }
    }
  },
  "meta": {
    "request_id": "req_2KVQ7M4XD8RJTN",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:13:55Z",
    "warnings": [
      {
        "domain": "market",
        "code": "data_unavailable",
        "message": "Le nombre de logements créés par les autorisations d'urbanisme autour du point est momentanément indisponible."
      }
    ],
    "sandbox": false
  }
}

Lieux

Les lieux du quotidien et les arrêts de transport autour du point, rangés dans la taxonomie d'open-connect.
Endpoint
GET https://app.open-connect.io/api/v1/fr/places
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
radius entier Rayon en mètres, de 100 à 2000 ; 1000 par défaut
category chaîne Un groupe ou une catégorie de la taxonomie : school, transport.tram
page, per_page entier Pagination de items ; per_page jusqu'à 100
locale chaîne fr ou en
Réponse : data.places
Champ Type Description
counts objet Lieux dans le rayon par groupe : transport, health, school, food, shop, outing, service, beauty, sport, leisure, tourism
items[] liste de Lieux Du plus proche au plus loin
social_housing objet \ null
{
  "data": {
    "places": {
      "status": "ok",
      "counts": {
        "transport": 135,
        "health": 1523,
        "school": 139,
        "food": 288,
        "shop": 640,
        "outing": 777,
        "service": 531,
        "beauty": 382,
        "sport": 17,
        "leisure": 30,
        "tourism": 241
      },
      "items": [
        {
          "id": "plc_7A41C2E9",
          "category": "health.pharmacy",
          "name": "Pharmacie la Salamandre",
          "address": "6 rue Assalit, 06000 Nice",
          "latitude": 43.7065489,
          "longitude": 7.2687583,
          "distance_m": 0,
          "walk_minutes": 0,
          "lines": null
        },
        {
          "id": "plc_3E9B5D10",
          "category": "transport.charging_station",
          "name": "Nice Rp",
          "address": "6 rue Assalit, 06000 Nice",
          "latitude": 43.70652,
          "longitude": 7.26869,
          "distance_m": 6,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_C58F2A73",
          "category": "outing.restaurant",
          "name": "Dounia Zed",
          "address": "7 rue Assalit, 06000 Nice",
          "latitude": 43.70648,
          "longitude": 7.26884,
          "distance_m": 10,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_91D6E4B8",
          "category": "health.nurse",
          "name": null,
          "address": "8 rue Assalit, 06000 Nice",
          "latitude": 43.7064,
          "longitude": 7.26832,
          "distance_m": 39,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_4B72F0C5",
          "category": "health.physiotherapist",
          "name": null,
          "address": "31 rue de Lépante, 06000 Nice",
          "latitude": 43.70621,
          "longitude": 7.26858,
          "distance_m": 40,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_E03A8D61",
          "category": "food.convenience",
          "name": "Tisa",
          "address": "31 rue de Lépante, 06000 Nice",
          "latitude": 43.70621,
          "longitude": 7.26858,
          "distance_m": 40,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_2646057F",
          "category": "transport.bus",
          "name": "Raimbaldi / Urfé",
          "address": null,
          "latitude": 43.707116,
          "longitude": 7.269178,
          "distance_m": 72,
          "walk_minutes": 1,
          "lines": [
            "57"
          ]
        },
        {
          "id": "plc_6F19B3A2",
          "category": "transport.bus",
          "name": "Urfé",
          "address": null,
          "latitude": 43.707193,
          "longitude": 7.269288,
          "distance_m": 83,
          "walk_minutes": 2,
          "lines": [
            "64",
            "70"
          ]
        }
      ],
      "social_housing": {
        "dwellings": 655
      },
      "missing": {}
    }
  },
  "meta": {
    "request_id": "req_6PZD3H8NWQ1VKC",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:14:12Z",
    "warnings": [],
    "sandbox": false
  }
}

Accès

Se déplacer depuis le bien : la gare, l'aéroport, l'accès autoroutier et l'école les plus proches, avec le temps de trajet à pied et en voiture, et les listes autour.
Endpoint
GET https://app.open-connect.io/api/v1/fr/access
Réponse : data.access
Champ Type Description
nearest.station objet \ null
nearest.airport objet \ null
nearest.highway_access objet \ null
nearest.school objet \ null
stations[], airports[], highway_accesses[], fuel_stations[], charging_stations[] listes de Lieux Les plus proches de chaque sorte, à vol d'oiseau
Les temps de trajet (walk, drive) sont calculés par le réseau piéton et routier ; les listes donnent la distance à vol d'oiseau.
{
  "data": {
    "access": {
      "status": "ok",
      "nearest": {
        "station": {
          "id": "plc_B82E40D7",
          "category": "transport.train_station",
          "name": "Nice",
          "address": "Avenue Thiers, 06000 Nice",
          "latitude": 43.70483,
          "longitude": 7.26199,
          "distance_m": 577,
          "walk_minutes": 8,
          "lines": null,
          "walk": {
            "minutes": 13,
            "distance_m": 735
          },
          "drive": {
            "minutes": 5,
            "distance_m": 987
          }
        },
        "airport": {
          "id": "plc_0D5C7A94",
          "category": "transport.airport",
          "name": "Nice-Cote d'Azur",
          "address": "Rue Costes et Bellonte, 06200 Nice",
          "latitude": 43.66556,
          "longitude": 7.21461,
          "distance_m": 6303,
          "walk_minutes": 79,
          "lines": null,
          "walk": {
            "minutes": 113,
            "distance_m": 6741
          },
          "drive": {
            "minutes": 23,
            "distance_m": 7950
          }
        },
        "highway_access": {
          "id": "plc_A6E2913F",
          "category": "transport.highway_access",
          "name": "Sortie 54 (A8)",
          "address": null,
          "latitude": 43.7286523,
          "longitude": 7.2608911,
          "distance_m": 2538,
          "walk_minutes": 32,
          "lines": null,
          "walk": {
            "minutes": 47,
            "distance_m": 2788
          },
          "drive": {
            "minutes": 17,
            "distance_m": 7922
          }
        },
        "school": {
          "id": "plc_5C3B8E26",
          "category": "school.middle_school",
          "name": "Collège Roland Garros",
          "address": "10 boulevard de Cimiez, 06000 Nice",
          "latitude": 43.70724,
          "longitude": 7.27023,
          "distance_m": 141,
          "walk_minutes": 2,
          "lines": null,
          "walk": {
            "minutes": 9,
            "distance_m": 576
          },
          "drive": {
            "minutes": 6,
            "distance_m": 1038
          }
        }
      },
      "stations": [
        {
          "id": "plc_B82E40D7",
          "category": "transport.train_station",
          "name": "Nice",
          "address": "Avenue Thiers, 06000 Nice",
          "latitude": 43.70483,
          "longitude": 7.26199,
          "distance_m": 577,
          "walk_minutes": 8,
          "lines": null
        },
        {
          "id": "plc_19F7C3B0",
          "category": "transport.train_station",
          "name": "Nice Cp",
          "address": "Rue Alfred Binet, 06000 Nice",
          "latitude": 43.70896,
          "longitude": 7.25934,
          "distance_m": 803,
          "walk_minutes": 11,
          "lines": null
        },
        {
          "id": "plc_D24A6E85",
          "category": "transport.train_station",
          "name": "Gambetta",
          "address": "Boulevard Joseph Garnier, 06100 Nice",
          "latitude": 43.71038,
          "longitude": 7.2555,
          "distance_m": 1148,
          "walk_minutes": 15,
          "lines": null
        }
      ],
      "airports": [
        {
          "id": "plc_0D5C7A94",
          "category": "transport.airport",
          "name": "Nice-Cote d'Azur",
          "address": "Rue Costes et Bellonte, 06200 Nice",
          "latitude": 43.66556,
          "longitude": 7.21461,
          "distance_m": 6303,
          "walk_minutes": 79,
          "lines": null
        },
        {
          "id": "plc_8E61B5C2",
          "category": "transport.airport",
          "name": "Cannes-Mandelieu",
          "address": "245 avenue Francis Tonner, 06150 Cannes",
          "latitude": 43.54702,
          "longitude": 6.95413,
          "distance_m": 30919,
          "walk_minutes": 387,
          "lines": null
        }
      ],
      "highway_accesses": [
        {
          "id": "plc_A6E2913F",
          "category": "transport.highway_access",
          "name": "Sortie 54 (A8)",
          "address": null,
          "latitude": 43.7286523,
          "longitude": 7.2608911,
          "distance_m": 2538,
          "walk_minutes": 32,
          "lines": null
        },
        {
          "id": "plc_3A0D7F48",
          "category": "transport.highway_access",
          "name": "Sortie 55 (A8)",
          "address": null,
          "latitude": 43.7335951,
          "longitude": 7.2853348,
          "distance_m": 3289,
          "walk_minutes": 42,
          "lines": null
        }
      ],
      "fuel_stations": [
        {
          "id": "plc_F4C9126B",
          "category": "transport.fuel",
          "name": "Station Service",
          "address": "123 boulevard Gambetta, 06000 Nice",
          "latitude": 43.70752,
          "longitude": 7.25598,
          "distance_m": 1033,
          "walk_minutes": 13,
          "lines": null
        },
        {
          "id": "plc_62B8E0D3",
          "category": "transport.fuel",
          "name": "Esso",
          "address": null,
          "latitude": 43.7076514,
          "longitude": 7.2557371,
          "distance_m": 1054,
          "walk_minutes": 14,
          "lines": null
        },
        {
          "id": "plc_C7A35F19",
          "category": "transport.fuel",
          "name": "Total",
          "address": "29 bis avenue Paul Arène, 06000 Nice",
          "latitude": 43.7079591,
          "longitude": 7.2516525,
          "distance_m": 1384,
          "walk_minutes": 18,
          "lines": null
        }
      ],
      "charging_stations": [
        {
          "id": "plc_3E9B5D10",
          "category": "transport.charging_station",
          "name": "Nice Rp",
          "address": "6 rue Assalit, 06000 Nice",
          "latitude": 43.70652,
          "longitude": 7.26869,
          "distance_m": 6,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_0B4E9D72",
          "category": "transport.charging_station",
          "name": "Nice Rp",
          "address": "10 boulevard Raimbaldi, 06000 Nice",
          "latitude": 43.70722,
          "longitude": 7.26876,
          "distance_m": 75,
          "walk_minutes": 1,
          "lines": null
        },
        {
          "id": "plc_95F2A6C4",
          "category": "transport.charging_station",
          "name": "Nice Rp",
          "address": "23 avenue Desambrois, 06000 Nice",
          "latitude": 43.70547,
          "longitude": 7.27042,
          "distance_m": 180,
          "walk_minutes": 3,
          "lines": null
        }
      ],
      "missing": {}
    }
  },
  "meta": {
    "request_id": "req_8CJT2W6RMB5XHL",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:14:30Z",
    "warnings": [],
    "sandbox": false
  }
}

Habitants

Qui vit dans le quartier, sur la zone statistique la plus fine publiée : l'IRIS (sublocality_level2), ou la commune quand l'IRIS n'est pas diffusé.
Endpoint
GET https://app.open-connect.io/api/v1/fr/residents
Réponse : data.residents
Champ Type Description
income.disposable_median Mesure Revenu disponible médian par unité de consommation, en EUR par an
income.poverty_rate Mesure Part des personnes sous le seuil de pauvreté (60 % du revenu médian national), en %
households.owner_occupied_share Mesure Part des résidences principales occupées par leur propriétaire, en %
households.tenants_share Mesure Part des ménages locataires, en %, avec social_tenants_share
households.recent_movers_share Mesure Part des ménages installés depuis moins de deux ans, en %
households.long_settled_share Mesure Part des ménages installés depuis dix ans ou plus, en %
housing.dwellings Mesure Logements recensés
housing.second_homes_share Mesure Part des résidences secondaires, en %
housing.vacant_share Mesure Part des logements vacants au recensement, en %
housing.houses_share Mesure Part des maisons parmi les logements, en %
housing.built_before_1946_share Mesure Part des résidences principales construites avant 1946, en %
{
  "data": {
    "residents": {
      "status": "ok",
      "income": {
        "disposable_median": {
          "value": 18220,
          "unit": "EUR/year",
          "period": {
            "start": "2021-01-01",
            "end": "2021-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": null,
          "reliability": "high",
          "range": null,
          "definition": "disposable_income_median_per_consumption_unit",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "poverty_rate": {
          "value": 31.0,
          "unit": "%",
          "period": {
            "start": "2021-01-01",
            "end": "2021-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": null,
          "reliability": "high",
          "range": null,
          "definition": "poverty_rate_60",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "households": {
        "owner_occupied_share": {
          "value": 32.3,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "owner_occupied_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "tenants_share": {
          "value": 64.7,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "tenants_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "social_tenants_share": {
          "value": 5.4,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "social_tenants_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "recent_movers_share": {
          "value": 17.4,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "recent_movers_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "long_settled_share": {
          "value": 42.4,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "long_settled_share",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "housing": {
        "dwellings": {
          "value": 1310,
          "unit": "count",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": null,
          "reliability": "high",
          "range": null,
          "definition": "dwellings_count",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "second_homes_share": {
          "value": 11.0,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 1310,
          "reliability": "high",
          "range": null,
          "definition": "second_homes_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "vacant_share": {
          "value": 14.1,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 1310,
          "reliability": "high",
          "range": null,
          "definition": "vacant_dwellings_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "houses_share": {
          "value": 0.3,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 1310,
          "reliability": "high",
          "range": null,
          "definition": "houses_share",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "built_before_1946_share": {
          "value": 53.3,
          "unit": "%",
          "period": {
            "start": "2022-01-01",
            "end": "2022-12-31"
          },
          "zone": {
            "level": "sublocality_level2",
            "code": "060881703",
            "name": "Raimbaldi"
          },
          "sample_size": 981,
          "reliability": "high",
          "range": null,
          "definition": "built_before_1946_share",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "missing": {
        "income.taxable_median": "not_covered",
        "income.total_mean": "not_covered"
      }
    }
  },
  "meta": {
    "request_id": "req_3XNF9K7TQD2MWB",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:14:48Z",
    "warnings": [],
    "sandbox": false
  }
}

Urbanisme

Ce que dit la règle d'urbanisme au point : le document applicable, la zone, et ce qui s'y ajoute.
Endpoint
GET https://app.open-connect.io/api/v1/fr/urbanism
Query Parameters
Parameter Type Description
lat, lng, address Voir Localiser
geometry booléen true : sert le contour de la zone et de la parcelle en GeoJSON. Par défaut false
locale chaîne fr ou en
Réponse : data.urbanism
Champ Type Description
document objet \ null
zone objet \ null
prescriptions[] liste Règles particulières qui s'ajoutent à la zone : label, url
easements[] liste Servitudes d'utilité publique : code, label
Ces informations sont indicatives : seul le certificat d'urbanisme engage la commune.
{
  "data": {
    "urbanism": {
      "status": "ok",
      "document": {
        "type": "plui",
        "name": "PLUi Métropole Nice Côte d'Azur",
        "approved_on": "2026-07-27",
        "url": "https://www.geoportail-urbanisme.gouv.fr/document/by-id/9182e7f5d0c8c23c96dbf6d54afffaae"
      },
      "zone": {
        "code": "UBb1",
        "label": "Zone UB : quartiers urbains denses",
        "family": "urban",
        "description": null,
        "regulation_url": "https://data.geopf.fr/annexes/gpu/documents/DU_200030195/9182e7f5d0c8c23c96dbf6d54afffaae/200030195_reglement_20260727.pdf#page=64"
      },
      "prescriptions": [
        {
          "label": "Périmètre de mixité sociale",
          "url": "https://data.geopf.fr/annexes/gpu/documents/DU_200030195/9182e7f5d0c8c23c96dbf6d54afffaae/200030195_prescription_surf_17_00_20231130.pdf"
        },
        {
          "label": "Périmètre vélo",
          "url": "https://data.geopf.fr/annexes/gpu/documents/DU_200030195/9182e7f5d0c8c23c96dbf6d54afffaae/200030195_reglement_graphique_129_20191025.pdf"
        },
        {
          "label": "Normes de stationnement Corridor transports en commun (TC) secteur intermédiaire",
          "url": "https://data.geopf.fr/annexes/gpu/documents/DU_200030195/9182e7f5d0c8c23c96dbf6d54afffaae/200030195_reglement_graphique_128_20221006.pdf"
        }
      ],
      "easements": [
        {
          "code": "AC4",
          "label": "Site patrimonial remarquable"
        },
        {
          "code": "PM1",
          "label": "Plan de prévention des risques naturels"
        }
      ],
      "missing": {
        "zone.description": "not_found"
      }
    }
  },
  "meta": {
    "request_id": "req_5LWH1R8VCZ4TQP",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:15:05Z",
    "warnings": [],
    "sandbox": false
  }
}

Zones

Le marché et les habitants d'une zone, sans position : les prix d'une commune, les revenus d'un IRIS.
Endpoint
GET https://app.open-connect.io/api/v1/fr/zones/{level}/{code}
Paramètre de chemin Description
level Un niveau de zone
code Le code de la zone, tel que le sert data.location.zones
Par exemple, la commune de Nice : GET /zones/locality/06088 ; un IRIS : GET /zones/sublocality_level2/060881703.
Query Parameters
Parameter Type Description
include chaîne market, residents, ou les deux (par défaut)
geometry booléen true : sert le contour de la zone en GeoJSON, simplifié
locale chaîne fr ou en
La réponse porte la zone, ses zones parentes et les valeurs publiées pour elle, avec la même forme que les domaines. Seules les valeurs publiées pour ce niveau sont servies : une zone ne reçoit pas la valeur d'une zone plus large.
{
  "data": {
    "zone": {
      "level": "locality",
      "code": "06088",
      "name": "Nice"
    },
    "parents": [
      {
        "level": "country",
        "code": "FR",
        "name": "France"
      },
      {
        "level": "administrative_area_level1",
        "code": "93",
        "name": "Provence-Alpes-Côte d'Azur"
      },
      {
        "level": "administrative_area_level2",
        "code": "06",
        "name": "Alpes-Maritimes"
      }
    ],
    "market": {
      "status": "ok",
      "price_trend": {
        "unit": "EUR/m2",
        "zone": {
          "level": "locality",
          "code": "06088",
          "name": "Nice"
        },
        "points": [
          {
            "period": {
              "start": "2014-01-01",
              "end": "2014-12-31"
            },
            "value": 3493,
            "sample_size": 5286
          },
          {
            "period": {
              "start": "2015-01-01",
              "end": "2015-12-31"
            },
            "value": 3458,
            "sample_size": 5753
          },
          {
            "period": {
              "start": "2016-01-01",
              "end": "2016-12-31"
            },
            "value": 3481,
            "sample_size": 6468
          },
          {
            "period": {
              "start": "2017-01-01",
              "end": "2017-12-31"
            },
            "value": 3572,
            "sample_size": 7326
          },
          {
            "period": {
              "start": "2018-01-01",
              "end": "2018-12-31"
            },
            "value": 3698,
            "sample_size": 7318
          },
          {
            "period": {
              "start": "2019-01-01",
              "end": "2019-12-31"
            },
            "value": 3854,
            "sample_size": 7996
          },
          {
            "period": {
              "start": "2020-01-01",
              "end": "2020-12-31"
            },
            "value": 4033,
            "sample_size": 7424
          },
          {
            "period": {
              "start": "2021-01-01",
              "end": "2021-12-31"
            },
            "value": 4239,
            "sample_size": 8075
          },
          {
            "period": {
              "start": "2022-01-01",
              "end": "2022-12-31"
            },
            "value": 4478,
            "sample_size": 8865
          },
          {
            "period": {
              "start": "2023-01-01",
              "end": "2023-12-31"
            },
            "value": 4688,
            "sample_size": 7174
          },
          {
            "period": {
              "start": "2024-01-01",
              "end": "2024-12-31"
            },
            "value": 4741,
            "sample_size": 6332
          },
          {
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "value": 4853,
            "sample_size": 7255
          }
        ],
        "changes": {
          "1y": 2.4,
          "5y": 20.3,
          "since_start": 38.9
        }
      },
      "rent_estimate": {
        "monthly": null,
        "per_m2": {
          "value": 20.43,
          "unit": "EUR/m2/month",
          "period": {
            "start": "2025-01-01",
            "end": "2025-12-31"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 71615,
          "reliability": "high",
          "range": {
            "low": 15.44,
            "high": 27.04
          },
          "definition": "asking_rent_per_m2",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "change_1y": 4.8
      },
      "regulation": {
        "tense_zone": true,
        "rent_control": null,
        "abc_zone": "A"
      },
      "property_tax": {
        "rates": {
          "municipal": {
            "value": 35.3,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_municipal",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "intercommunal": {
            "value": 6.4,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_intercommunal",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "household_waste": {
            "value": 10.46,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "household_waste_tax_rate",
            "updated_on": "2026-10-09",
            "stale": false
          },
          "total": {
            "value": 42.43,
            "unit": "%",
            "period": {
              "start": "2025-01-01",
              "end": "2025-12-31"
            },
            "zone": {
              "level": "locality",
              "code": "06088",
              "name": "Nice"
            },
            "sample_size": null,
            "reliability": "high",
            "range": null,
            "definition": "property_tax_rate_total",
            "updated_on": "2026-10-09",
            "stale": false
          }
        },
        "estimate": null
      },
      "private_vacancy": {
        "rate": {
          "value": 9.3,
          "unit": "%",
          "period": {
            "start": "2025-01-01",
            "end": "2025-01-01"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 222584,
          "reliability": "high",
          "range": null,
          "definition": "private_vacancy_rate",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "over_two_years": {
          "value": 2.5,
          "unit": "%",
          "period": {
            "start": "2025-01-01",
            "end": "2025-01-01"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 222584,
          "reliability": "high",
          "range": null,
          "definition": "private_vacancy_over_two_years_rate",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "missing": {
        "rent_estimate.monthly": "not_applicable",
        "regulation.rent_control": "not_covered",
        "property_tax.estimate": "not_applicable"
      }
    },
    "residents": {
      "status": "ok",
      "income": {
        "disposable_median": {
          "value": 21570,
          "unit": "EUR/year",
          "period": {
            "start": "2021-01-01",
            "end": "2021-12-31"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 175096,
          "reliability": "high",
          "range": null,
          "definition": "disposable_income_median_per_consumption_unit",
          "updated_on": "2026-10-09",
          "stale": false
        },
        "poverty_rate": {
          "value": 22.0,
          "unit": "%",
          "period": {
            "start": "2021-01-01",
            "end": "2021-12-31"
          },
          "zone": {
            "level": "locality",
            "code": "06088",
            "name": "Nice"
          },
          "sample_size": 175096,
          "reliability": "high",
          "range": null,
          "definition": "poverty_rate_60",
          "updated_on": "2026-10-09",
          "stale": false
        }
      },
      "households": null,
      "housing": null,
      "missing": {
        "income.taxable_median": "not_covered",
        "income.total_mean": "not_covered",
        "households": "not_found",
        "housing": "not_found"
      }
    }
  },
  "meta": {
    "request_id": "req_H2XB6W9QDT4NKM",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:16:21Z",
    "warnings": [],
    "sandbox": false
  }
}
Les zones enfants d'une zone (les IRIS d'une commune, les communes d'un département) :
GET https://app.open-connect.io/api/v1/fr/zones/{level}/{code}/children

Catalogue

Ce que l'API de ce pays sait servir, la définition de chaque champ, les territoires qu'il couvre et son rythme de mise à jour. Ces routes ne consomment pas d'unité.

Liste des domaines

Les domaines, leurs routes et leurs champs.
GET https://app.open-connect.io/api/v1/fr/catalog/domains
{
  "data": {
    "domains": [
      {
        "id": "location",
        "label": "Adresse et position",
        "routes": [
          "/api/v1/fr/location"
        ],
        "fields": [
          "latitude",
          "longitude",
          "precision",
          "address",
          "geocoding",
          "zones",
          "parcel",
          "building_id",
          "property_ids",
          "nearest_property_id"
        ]
      },
      {
        "id": "building",
        "label": "L'immeuble",
        "routes": [
          "/api/v1/fr/building",
          "/api/v1/fr/buildings/{building_id}"
        ],
        "fields": [
          "id",
          "type",
          "address",
          "construction_year",
          "levels",
          "height_m",
          "dwellings",
          "footprint_m2",
          "materials",
          "heritage",
          "social_housing",
          "fiber",
          "legal_owners",
          "electricity_per_meter",
          "energy_potential",
          "copro",
          "energy_diagnoses",
          "sales",
          "sales_attachment",
          "median_price_per_m2_24m",
          "vs_sublocality_level2",
          "risks"
        ]
      },
      {
        "id": "property",
        "label": "Le bien",
        "routes": [
          "/api/v1/fr/property",
          "/api/v1/fr/properties/{property_id}"
        ],
        "fields": [
          "id",
          "building_id",
          "type",
          "address",
          "lot",
          "floor",
          "living_area_m2",
          "carrez_area_m2",
          "land_area_m2",
          "rooms",
          "construction_year",
          "energy",
          "heating",
          "energy_cost_per_year",
          "annexes",
          "details",
          "renovation",
          "last_sale",
          "value_today",
          "vs_sublocality_level2",
          "events",
          "story",
          "price_history",
          "others"
        ]
      },
      {
        "id": "risks",
        "label": "Risques",
        "routes": [
          "/api/v1/fr/risks"
        ],
        "fields": [
          "hazards",
          "not_assessed",
          "summary",
          "obligations",
          "municipal",
          "polluted_sites"
        ]
      },
      {
        "id": "market",
        "label": "Marché",
        "routes": [
          "/api/v1/fr/market",
          "/api/v1/fr/market/sales",
          "/api/v1/fr/market/permits"
        ],
        "fields": [
          "sales_nearby",
          "price_trend",
          "price_index",
          "rent_estimate",
          "gross_yield",
          "regulation",
          "property_tax",
          "private_vacancy",
          "permits_nearby"
        ]
      },
      {
        "id": "places",
        "label": "Lieux",
        "routes": [
          "/api/v1/fr/places"
        ],
        "fields": [
          "counts",
          "items",
          "social_housing"
        ]
      },
      {
        "id": "access",
        "label": "Accès",
        "routes": [
          "/api/v1/fr/access"
        ],
        "fields": [
          "nearest",
          "stations",
          "airports",
          "highway_accesses",
          "fuel_stations",
          "charging_stations"
        ]
      },
      {
        "id": "residents",
        "label": "Habitants",
        "routes": [
          "/api/v1/fr/residents"
        ],
        "fields": [
          "income",
          "households",
          "housing"
        ]
      },
      {
        "id": "urbanism",
        "label": "Urbanisme",
        "routes": [
          "/api/v1/fr/urbanism"
        ],
        "fields": [
          "document",
          "zone",
          "prescriptions",
          "easements"
        ]
      }
    ]
  },
  "meta": {
    "request_id": "req_T7KC1V5MQX9DWB",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:17:03Z",
    "warnings": [],
    "sandbox": false
  }
}

Définitions des champs

La définition de chaque champ : ce qu'il mesure, son unité, son rythme de mise à jour, et sa couverture quand elle ne s'étend pas à tout le pays (coverage : available, ou partial avec les territoires couverts).
GET https://app.open-connect.io/api/v1/fr/catalog/fields
{
  "data": {
    "fields": [
      {
        "definition": "sales_median_price_per_m2_24m",
        "label": "Prix médian au m² des logements vendus autour du point sur 24 mois",
        "unit": "EUR/m2",
        "update_frequency": "quarterly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "building_median_price_per_m2_24m",
        "label": "Prix médian au m² des logements vendus dans l'immeuble sur 24 mois",
        "unit": "EUR/m2",
        "update_frequency": "quarterly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "price_index_change_1y",
        "label": "Évolution sur un an de l'indice des prix des logements anciens de la région",
        "unit": "%",
        "update_frequency": "quarterly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "asking_rent_per_m2",
        "label": "Loyer mensuel charges comprises au m² des annonces, pour le type et la taille de logement",
        "unit": "EUR/m2/month",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "gross_rental_yield",
        "label": "Rendement locatif brut : loyer annuel rapporté à la valeur estimée du bien, avant charges et impôts",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "property_tax_rate_municipal",
        "label": "Taux communal de la taxe foncière sur les propriétés bâties",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "property_tax_rate_intercommunal",
        "label": "Taux intercommunal de la taxe foncière sur les propriétés bâties",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "property_tax_rate_total",
        "label": "Taux global de la taxe foncière sur les propriétés bâties, taxes additionnelles comprises",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "household_waste_tax_rate",
        "label": "Taux de la taxe d'enlèvement des ordures ménagères",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "private_vacancy_rate",
        "label": "Part des logements du parc privé vacants",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "private_vacancy_over_two_years_rate",
        "label": "Part des logements du parc privé vacants depuis plus de deux ans",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "disposable_income_median_per_consumption_unit",
        "label": "Revenu disponible médian par unité de consommation",
        "unit": "EUR/year",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "poverty_rate_60",
        "label": "Part des personnes sous le seuil de pauvreté, à 60 % du revenu médian national",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "owner_occupied_share",
        "label": "Part des résidences principales occupées par leur propriétaire",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "tenants_share",
        "label": "Part des ménages locataires",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "social_tenants_share",
        "label": "Part des ménages locataires d'un logement social",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "recent_movers_share",
        "label": "Part des ménages installés depuis moins de deux ans",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "long_settled_share",
        "label": "Part des ménages installés depuis dix ans ou plus",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "dwellings_count",
        "label": "Logements recensés",
        "unit": "count",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "second_homes_share",
        "label": "Part des résidences secondaires et logements occasionnels",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "vacant_dwellings_share",
        "label": "Part des logements vacants au recensement",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "houses_share",
        "label": "Part des maisons parmi les logements",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      },
      {
        "definition": "built_before_1946_share",
        "label": "Part des résidences principales construites avant 1946",
        "unit": "%",
        "update_frequency": "yearly",
        "coverage": {
          "status": "available"
        }
      }
    ]
  },
  "meta": {
    "request_id": "req_N4DQ8T2WXK6HVZ",
    "api_version": "1.0",
    "generated_at": "2026-10-12T08:17:20Z",
    "warnings": [],
    "sandbox": false
  }
}

Catégories de lieux

La taxonomie des lieux : groupes, catégories et libellés.
GET https://app.open-connect.io/api/v1/fr/catalog/categories?locale=fr

Liste des aléas

Les types d'aléas servis dans ce pays, et pour chacun ce que veut dire chaque niveau.
GET https://app.open-connect.io/api/v1/fr/catalog/hazards?locale=fr

Conditions d'utilisation des données

Les données servies proviennent de sources publiques réutilisables sous licences ouvertes, rassemblées, contrôlées et unifiées par open-connect. open-connect facture ce service (collecte, contrôle, unification, disponibilité), pas la donnée elle-même.
  • Mention : là où vous affichez des données d'open-connect, affichez la mention « Données open-connect, d'après des sources publiques », avec un lien vers la page de crédits qui recense les producteurs et leurs licences.
  • Personnes : ne cherchez pas à identifier une personne à partir des données servies, ni à les croiser avec des données nominatives. open-connect ne sert aucune donnée qui désigne un particulier : ni nom de propriétaire, ni demandeur d'autorisation d'urbanisme, ni entrepreneur individuel, ni praticien de santé libéral (servi par sa catégorie et son adresse, sans son nom), ni coordonnées personnelles. Les entreprises sont servies sous leur dénomination sociale.
  • Ventes : une page publique qui affiche des ventes une à une doit être exclue de l'indexation par les moteurs de recherche (noindex).
  • Rediffusion : les données servies ne peuvent pas être rediffusées en masse, ni servir à constituer une base de données mise à la disposition de tiers.

Fraîcheur

Chaque indicateur a son rythme de mise à jour : quotidien pour certains, annuel pour la plupart des statistiques ; le catalogue des champs le donne (update_frequency). open-connect vérifie chaque donnée au moins à ce rythme et publie une nouvelle valeur dans les jours qui suivent sa parution.
  • updated_on de chaque mesure : date de notre dernière mise à jour de la valeur.
  • stale de chaque mesure : true quand la valeur n'a pas été vérifiée depuis plus longtemps que son rythme le prévoit ; elle reste servie, mais il est prudent de le signaler.
  • period de chaque mesure : la période réellement décrite. Une statistique publiée en 2026 peut décrire 2023.