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 (changements de propriétaire, rôles d'évaluation, permis), 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 (gouvernements, organismes publics, municipalité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 du Canada. Elle couvre aujourd'hui le Québec : une position ailleurs au Canada répond
outside_coverage. 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, lots du cadastre, immeuble et unités d'évaluation à cette adresse |
building |
L'immeuble par le rôle d'évaluation : type, année, niveaux, logements, emprise ; potentiel solaire à Montréal |
property |
L'unité d'évaluation : surfaces, évaluation, valeur estimée aujourd'hui, et sa vie (propriétaires, rôles, permis) |
risks |
Aléas au point dans les secteurs cartographiés, terrains contaminés autour |
market |
Ventes enregistrées, valeurs au rôle, loyers, rendement, taxe foncière, inoccupation, permis 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 |
residents |
Revenus des habitants du quartier |
urbanism |
Zonage à Montréal et à Québec, zone agricole sur tout le territoire |
Le prix d'une vente une à une n'est pas publié au Québec : le bien est décrit par le rôle d'évaluation foncière, et le marché se lit à la municipalité ou à la région. La couverture exacte de chaque champ est servie par
GET /catalog/fields.Démarrage rapide
Tout ce que l'API sait d'une adresse à Montréal :
curl "https://app.open-connect.io/api/v1/ca/report?address=4585%20rue%20Saint-Denis%20Montr%C3%A9al" \ -H "Authorization: Bearer oc_live_7f3c…"
Seulement le bien et le marché d'un point :
curl "https://app.open-connect.io/api/v1/ca/report?lat=45.5246&lng=-73.5840&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/ca/report?lat=45.5246&lng=-73.5840 Authorization: Bearer oc_live_7f3c9a1e5b2d4c6f8a0b1c2d3e4f5a6b
- Une clé commence par
oc_live_(production) ouoc_test_(bac à sable, mêmes données, quotas réduits, réponses marquées"sandbox": truedansmeta). - 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
403avec le codecountry_not_allowed; un domaine hors de votre clé répond403avec le codedomain_not_allowed, et un rapport complet l'omet en le signalant dansmeta.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 : le Québec |
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,lngen paramètres ;latitude,longitudeen 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
nullquand la donnée n'existe pas à cet endroit, et l'objetmissingdu 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) ouen, par le paramètrelocaleou l'en-têteAccept-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 |
|---|---|
CAD |
Montant en dollars canadiens |
CAD/year |
Montant annuel (revenu, taxe foncière) |
CAD/month |
Loyer mensuel |
CAD/100CAD |
Taux de taxe en dollars par 100 $ d'évaluation |
% |
Pourcentage (3.2 signifie 3,2 %) |
ratio |
Facteur multiplicatif |
count |
Nombre |
m2 |
Surface en mètres carrés |
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 |
Canada | CA |
administrative_area_level1 |
Province | Code officiel de la province (24, Québec) |
administrative_area_level2 |
Région administrative | Code officiel de la région (06, Montréal) |
administrative_area_level3 |
MRC ou territoire équivalent | Code officiel de la MRC |
locality |
Municipalité | Code géographique (66023, Montréal) |
sublocality_level1 |
Arrondissement (Montréal, Québec…) | Code officiel de l'arrondissement |
rental_survey_area |
Quartier d'enquête locative | Code open-connect (Q10600120) |
postal_code_prefix |
Région de tri d'acheminement (RTA) : les trois premiers caractères du code postal | La RTA (H2J) |
Le quartier d'enquête locative est hors de la suite
sublocality : il est plus grand qu'un arrondissement et déborde parfois sur plusieurs municipalités. Il n'a pas de code officiel unique ; open-connect lui donne le sien (Q + région d'enquête + quartier).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_5VR8T2KQ9H", "property_id": "prp_7NQ4W1ZD6X" }
- 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}ouGET /buildings/{id}. - Quand deux biens se révèlent n'en faire qu'un, l'identifiant abandonné répond
301vers celui qui est gardé. - Les numéros officiels utiles au client (numéros de lot du cadastre) 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": "locality", "code": "66023", "name": "Montréal" }
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": 3.0, "unit": "%", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "rental_vacancy_rate", "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.Répartition
Le nombre d'observations par classe :
{ "unit": "count", "total": 23360, "buckets": [ { "code": "under_250k", "max": 250000, "count": 1357 }, { "code": "250k_500k", "min": 250000, "max": 500000, "count": 6746 }, { "code": "over_500k", "min": 500000, "count": 15257 } ] }
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": 179.9, "unit": "m2", "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }
| 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 |
|---|---|
assessment_roll |
Rôle d'évaluation foncière |
permit |
Permis de construction ou de transformation (Montréal et Québec) |
Événement
Un fait daté de la vie d'un bien, avec la confiance de son rattachement au bien :
{ "id": "evt_1NTK8F4RZB", "type": "transfer", "date": "2021-07-05", "attachment": { "level": "sure", "reason": "roll_unit", "label": "Unité d'évaluation du rôle à cette adresse" }, "transfer": { "price": null } }
type |
Événement | Objet porté |
|---|---|---|
transfer |
Changement de propriétaire, sans prix publié | transfer |
assessment |
Évaluation foncière d'un nouveau rôle | assessment |
permit |
Permis de construction ou de transformation (Montréal et Québec) | permit |
attachment.level vaut sure quand le document désigne ce bien sans ambiguïté (l'unité d'évaluation du rôle est à cette adresse), 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": "flood", "level": "high", "scope": "point", "label": "Zone de grand courant" }
| Champ | Description | | |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | |
|
|
|
|
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | |
|
type | flood, landslide, coastal_erosion ||
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 l'inondation,
high est une crue fréquente (période de retour de 30 ans au plus), moderate une crue moyenne (de l'ordre de 100 ans), low une crue rare. Le détail est servi par GET /catalog/hazards.Lieu
Un point d'intérêt, avec sa distance au point demandé :
{ "id": "plc_CEE082CD", "category": "transport.bus", "name": "Saint-Denis / du Mont-Royal", "address": null, "latitude": 45.52416, "longitude": -73.58315, "distance_m": 86, "walk_minutes": 1, "lines": [ "31", "361" ] }
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 :
- Les adresses officielles du pays, au numéro : la position est celle de l'adresse.
- Les adresses déjà résolues par open-connect, pour une adresse absente des listes officielles (une adresse trop récente, une graphie inhabituelle).
- 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 lots d'un lieu, et les identifiants de l'immeuble et des unités d'évaluation 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/ca/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 municipalité seulement) |
address |
objet \ | null |
geocoding |
objet \ | null |
zones |
objet | Les zones du point, une clé par niveau ; null pour un niveau absent (sublocality_level1 dans une municipalité sans arrondissement) |
parcel |
objet \ | null |
building_id |
chaîne \ | null |
property_ids |
liste | Les unités d'évaluation de l'immeuble ou de l'adresse |
nearest_property_id |
chaîne \ | null |
Le rôle d'évaluation ne publie pas le code postal :
zipcode vaut null pour une adresse que nous ne connaissons que par lui.{ "data": { "location": { "latitude": 45.524712, "longitude": -73.583935, "precision": "address", "address": { "label": "4585 rue Saint-Denis, Montréal", "street_number": "4585", "street_name": "rue Saint-Denis", "zipcode": null, "locality": "Montréal" }, "geocoding": { "query": "4585 rue Saint-Denis Montréal", "matched": "4585 rue Saint-Denis, Montréal", "method": "official_addresses", "alternatives": [] }, "zones": { "country": { "level": "country", "code": "CA", "name": "Canada" }, "administrative_area_level1": { "level": "administrative_area_level1", "code": "24", "name": "Québec" }, "administrative_area_level2": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "administrative_area_level3": { "level": "administrative_area_level3", "code": "66", "name": "Montréal" }, "locality": { "level": "locality", "code": "66023", "name": "Montréal" }, "sublocality_level1": { "level": "sublocality_level1", "code": "REM21", "name": "Le Plateau-Mont-Royal" }, "rental_survey_area": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "postal_code_prefix": { "level": "postal_code_prefix", "code": "H2J", "name": "H2J" } }, "parcel": { "lots": [ "1443981" ] }, "building_id": "bld_5VR8T2KQ9H", "property_ids": [ "prp_7NQ4W1ZD6X" ], "nearest_property_id": "prp_7NQ4W1ZD6X" } }, "meta": { "request_id": "req_7KQ2M9XW4D1HZB", "api_version": "1.0", "generated_at": "2026-10-12T09:02:11Z", "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/ca/report
Query Parameters
| Parameter | Type | Description |
|---|---|---|
lat, lng, address
|
Voir Localiser | |
include |
chaîne | Domaines à calculer, séparés par des virgules : 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 |
radius |
entier | Rayon en mètres des listes (lieux, permis, terrains contaminé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 4585 rue Saint-Denis, à Montréal (abrégé) :
{ "data": { "location": { "latitude": 45.524712, "longitude": -73.583935, "precision": "address", "address": { "label": "4585 rue Saint-Denis, Montréal", "street_number": "4585", "street_name": "rue Saint-Denis", "zipcode": null, "locality": "Montréal" }, "geocoding": { "query": "4585 rue Saint-Denis Montréal", "matched": "4585 rue Saint-Denis, Montréal", "method": "official_addresses", "alternatives": [] }, "zones": { "country": { "level": "country", "code": "CA", "name": "Canada" }, "administrative_area_level1": { "level": "administrative_area_level1", "code": "24", "name": "Québec" }, "administrative_area_level2": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "administrative_area_level3": { "level": "administrative_area_level3", "code": "66", "name": "Montréal" }, "locality": { "level": "locality", "code": "66023", "name": "Montréal" }, "sublocality_level1": { "level": "sublocality_level1", "code": "REM21", "name": "Le Plateau-Mont-Royal" }, "rental_survey_area": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "postal_code_prefix": { "level": "postal_code_prefix", "code": "H2J", "name": "H2J" } }, "parcel": { "lots": [ "1443981" ] }, "building_id": "bld_5VR8T2KQ9H", "property_ids": [ "prp_7NQ4W1ZD6X" ], "nearest_property_id": "prp_7NQ4W1ZD6X" }, "building": { "status": "ok", "id": "bld_5VR8T2KQ9H", "type": "house", "address": "4585 rue Saint-Denis, Montréal (Québec)", "construction_year": { "value": 1947, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "levels": { "value": null, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "dwellings": { "value": 1, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "footprint_m2": 164.2, "energy_potential": { "solar_pv_mwh_year": 13.1 }, "missing": { "levels": "not_found" } }, "property": { "status": "ok", "id": "prp_7NQ4W1ZD6X", "building_id": "bld_5VR8T2KQ9H", "type": "house", "address": "4585 rue Saint-Denis, Montréal (Québec)", "floor_area_m2": { "value": 179.9, "unit": "m2", "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "land_area_m2": { "value": 194.2, "unit": "m2", "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "dwellings": 1, "construction_year": { "value": 1947, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "last_transfer_on": "2021-07-05", "value_today": { "value": 1041400, "unit": "CAD", "as_of": "2026-01-01", "method": "assessment_market_factor", "reliability": "medium" }, "assessment": { "roll_year": 2026, "market_date": "2024-07-01", "unit": "CAD", "land_value": 514600, "building_value": 526800, "total_value": 1041400, "previous_value": 913500, "change": 14.0 }, "events": [ { "id": "evt_6WJD2Q9MXH", "type": "assessment", "date": "2026-01-01", "attachment": { "level": "sure", "reason": "roll_unit", "label": "Unité d'évaluation du rôle à cette adresse" }, "assessment": { "roll_year": 2026, "market_date": "2024-07-01", "total_value": { "value": 1041400, "unit": "CAD" }, "previous_value": { "value": 913500, "unit": "CAD" }, "change": 14.0 } } ], "story": "Changement de propriétaire en juillet 2021 ; évalué 1 041 400 $ au rôle 2026, 14 % de plus qu'au rôle précédent", "others": [], "missing": {} }, "market": { "status": "ok", "registered_sales": { "count": { "value": 23360, "unit": "count", "period": { "start": "2025-09-01", "end": "2026-08-31" }, "zone": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "registered_sales_count_12m", "updated_on": "2026-10-09", "stale": false }, "change": { "value": -6.9, "unit": "%", "period": { "start": "2025-09-01", "end": "2026-08-31" }, "zone": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "registered_sales_change_1y", "updated_on": "2026-10-09", "stale": false }, "by_price_band": { "unit": "count", "total": 23360, "buckets": [ { "code": "under_250k", "max": 250000, "count": 1357 }, { "code": "250k_500k", "min": 250000, "max": 500000, "count": 6746 }, { "code": "over_500k", "min": 500000, "count": 15257 } ] } }, "assessed_values": { "average_single_family": { "value": 625650, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_single_family_mean", "updated_on": "2026-10-09", "stale": false }, "average_per_dwelling": { "value": 363162, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_per_dwelling_mean", "updated_on": "2026-10-09", "stale": false }, "market_factor": { "value": 1.0, "unit": "ratio", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessment_market_factor", "updated_on": "2026-10-09", "stale": false } }, "average_rent": { "studio": { "value": 1083, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "one_bedroom": { "value": 1298, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "two_bedrooms": { "value": 1348, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "three_bedrooms_plus": { "value": 1692, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false } }, "gross_yield": null, "property_tax": { "rates": { "residential": { "value": 0.4631, "unit": "CAD/100CAD", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "residential_property_tax_rate", "updated_on": "2026-10-09", "stale": false } }, "estimate": { "value": 4823, "unit": "CAD/year", "property_id": "prp_7NQ4W1ZD6X", "excludes": [ "agglomeration_taxes", "municipal_fees", "school_tax" ] } }, "rental_vacancy": { "value": 4.2, "unit": "%", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "low", "range": null, "definition": "rental_vacancy_rate", "updated_on": "2026-10-09", "stale": false }, "permits_nearby": { "count": 276, "dwellings_created": 395, "items": [ { "date": "2026-08-10", "nature": "conversion", "destination": "housing", "dwellings_created": null, "status": "authorized", "distance_m": 167 }, { "date": "2026-08-07", "nature": "conversion", "destination": "commercial", "dwellings_created": 2, "status": "authorized", "distance_m": 415 } ] }, "missing": { "gross_yield": "not_found" } }, "residents": { "status": "ok", "income": { "total_mean": { "value": 69874, "unit": "CAD/year", "period": { "start": "2021-01-01", "end": "2021-12-31" }, "zone": { "level": "postal_code_prefix", "code": "H2J", "name": "H2J" }, "sample_size": 20820, "reliability": "high", "range": null, "definition": "total_income_mean_per_return", "updated_on": "2026-10-09", "stale": false } }, "missing": {} } }, "meta": { "request_id": "req_4FJ9W2NA6XR3KQ", "api_version": "1.0", "generated_at": "2026-10-12T09:05:20Z", "warnings": [], "sandbox": false } }
Immeuble
Le bâtiment qui porte le bien, décrit par le rôle d'évaluation foncière et l'empreinte des bâtiments : type, année de construction, niveaux, logements et emprise au sol. Pour une maison, l'immeuble est la maison elle-même, et ses champs sont aussi décrits dans le bien.
Endpoints
GET https://app.open-connect.io/api/v1/ca/building
GET https://app.open-connect.io/api/v1/ca/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 |
dwellings |
Caractéristique | Nombre de logements |
footprint_m2 |
nombre \ | null |
energy_potential |
objet |
solar_pv_mwh_year : production photovoltaïque possible sur la toiture. Montréal seulement |
{ "data": { "building": { "status": "ok", "id": "bld_5VR8T2KQ9H", "type": "house", "address": "4585 rue Saint-Denis, Montréal (Québec)", "construction_year": { "value": 1947, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "levels": { "value": null, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "dwellings": { "value": 1, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "footprint_m2": 164.2, "energy_potential": { "solar_pv_mwh_year": 13.1 }, "missing": { "levels": "not_found" } } }, "meta": { "request_id": "req_2WD8F5QN3TJ6KA", "api_version": "1.0", "generated_at": "2026-10-12T09:02:40Z", "warnings": [], "sandbox": false } }
Le bien
L'unité d'évaluation du rôle foncier : une maison, un plex, un logement en copropriété divise. Ses caractéristiques, sa valeur estimée aujourd'hui et sa vie. Une adresse peut porter plusieurs unités : la route décrit la plus proche du point et liste les autres, que
property_id permet de choisir.Endpoints
GET https://app.open-connect.io/api/v1/ca/property
GET https://app.open-connect.io/api/v1/ca/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 |
floor_area_m2 |
Caractéristique | Aire de plancher du rôle d'évaluation, qui n'est pas une surface habitable |
land_area_m2 |
Caractéristique | Terrain, pour une maison |
dwellings |
entier \ | null |
construction_year |
Caractéristique | Année de construction du bien, ou à défaut de l'immeuble |
last_transfer_on |
date \ | null |
value_today |
objet \ | null |
assessment |
objet \ | null |
events[] |
liste d'Événements | La vie du bien, de la plus récente à la plus ancienne : changements de propriétaire, rôles successifs, et permis à Montréal et à Québec |
story |
chaîne \ | null |
others[] |
liste | Les autres unités de l'immeuble, en résumé : id, type, floor_area_m2, dwellings, last_event_on
|
{ "data": { "property": { "status": "ok", "id": "prp_7NQ4W1ZD6X", "building_id": "bld_5VR8T2KQ9H", "type": "house", "address": "4585 rue Saint-Denis, Montréal (Québec)", "floor_area_m2": { "value": 179.9, "unit": "m2", "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "land_area_m2": { "value": 194.2, "unit": "m2", "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "dwellings": 1, "construction_year": { "value": 1947, "unit": null, "document": { "type": "assessment_roll", "date": "2026-01-01" }, "alternatives": [] }, "last_transfer_on": "2021-07-05", "value_today": { "value": 1041400, "unit": "CAD", "as_of": "2026-01-01", "method": "assessment_market_factor", "reliability": "medium" }, "assessment": { "roll_year": 2026, "market_date": "2024-07-01", "unit": "CAD", "land_value": 514600, "building_value": 526800, "total_value": 1041400, "previous_value": 913500, "change": 14.0 }, "events": [ { "id": "evt_6WJD2Q9MXH", "type": "assessment", "date": "2026-01-01", "attachment": { "level": "sure", "reason": "roll_unit", "label": "Unité d'évaluation du rôle à cette adresse" }, "assessment": { "roll_year": 2026, "market_date": "2024-07-01", "total_value": { "value": 1041400, "unit": "CAD" }, "previous_value": { "value": 913500, "unit": "CAD" }, "change": 14.0 } }, { "id": "evt_1NTK8F4RZB", "type": "transfer", "date": "2021-07-05", "attachment": { "level": "sure", "reason": "roll_unit", "label": "Unité d'évaluation du rôle à cette adresse" }, "transfer": { "price": null } } ], "story": "Changement de propriétaire en juillet 2021 ; évalué 1 041 400 $ au rôle 2026, 14 % de plus qu'au rôle précédent", "others": [], "missing": {} } }, "meta": { "request_id": "req_MUEDJLFWOVV62C", "api_version": "1.0", "generated_at": "2026-10-11T05:12:41Z", "warnings": [], "sandbox": false } }
Valeur estimée
value_today donne une valeur indicative du bien aujourd'hui, jamais une expertise. Le prix d'une vente n'étant pas publié, elle part du rôle d'évaluation :method |
Calcul |
|---|---|
assessment_market_factor |
Valeur au rôle multipliée par le facteur que la municipalité publie pour la ramener aux prix du marché |
La valeur au rôle décrit le marché à la date d'évaluation du rôle (
assessment.market_date) : reliability baisse quand cette date s'éloigne.Risques
Les aléas au point et les terrains contaminés autour.
Endpoint
GET https://app.open-connect.io/api/v1/ca/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 : inondation, glissement de terrain et érosion des berges, dans les secteurs cartographiés |
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[]
|
polluted_sites.inside[] |
liste | Terrains contaminés qui contiennent 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 (contaminated_land), status (confirmed, under_treatment, remediated, unknown), name, address, distance_m, updated_on
|
{ "data": { "risks": { "status": "ok", "hazards": [], "not_assessed": [], "summary": { "highest_level": null, "notable": [], "assessed": [ "flood", "landslide", "coastal_erosion" ], "not_assessed": [] }, "polluted_sites": { "inside": [], "counts": { "contaminated_land": 18 }, "items": [ { "type": "contaminated_land", "status": "remediated", "name": null, "address": null, "distance_m": 129, "updated_on": "2025-12-02" }, { "type": "contaminated_land", "status": "remediated", "name": null, "address": "908 à 1200, boulevard Montmorency, Québec (Québec), G1J 3V9", "distance_m": 131, "updated_on": "2011-04-07" } ] }, "missing": {} } }, "meta": { "request_id": "req_VPB1EVRUVUZQZV", "api_version": "1.0", "generated_at": "2026-10-11T05:15:11Z", "warnings": [], "sandbox": false } }
Marché
Ce que vaut et rapporte un bien dans ce quartier : les ventes enregistrées et les valeurs au rôle, les loyers et le rendement, la taxe foncière, l'inoccupation, et ce qui se construit autour. Le prix d'une vente une à une n'est pas publié : le marché se lit à la municipalité ou à la région.
Endpoints
GET https://app.open-connect.io/api/v1/ca/market GET https://app.open-connect.io/api/v1/ca/market/permits
La seconde route sert la liste complète, paginée, des permis autour du point (
page, per_page jusqu'à 100).Query Parameters
| Parameter | Type | Description |
|---|---|---|
lat, lng, address
|
Voir Localiser | |
property_id |
chaîne | Le bien dont calculer le rendement et la taxe foncière ; par défaut, le plus proche |
radius |
entier | Rayon des permis, de 100 à 2000 ; 500 par défaut |
locale |
chaîne |
fr ou en
|
Réponse :
data.market| Champ | Type | Description |
|---|---|---|
registered_sales |
objet \ | null |
assessed_values |
objet \ | null |
average_rent |
objet \ | null |
gross_yield |
Mesure \ | null |
property_tax |
objet |
rates.residential : taux résidentiel de la municipalité, en CAD par 100 CAD d'évaluation ; estimate : le montant annuel pour le bien (valeur au rôle × taux), avec excludes[], ce qu'il ne compte pas (taxes d'agglomération, tarifs municipaux, taxe scolaire) |
rental_vacancy |
Mesure \ | null |
permits_nearby |
objet \ | null |
{ "data": { "market": { "status": "ok", "registered_sales": { "count": { "value": 23360, "unit": "count", "period": { "start": "2025-09-01", "end": "2026-08-31" }, "zone": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "registered_sales_count_12m", "updated_on": "2026-10-09", "stale": false }, "change": { "value": -6.9, "unit": "%", "period": { "start": "2025-09-01", "end": "2026-08-31" }, "zone": { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "registered_sales_change_1y", "updated_on": "2026-10-09", "stale": false }, "by_price_band": { "unit": "count", "total": 23360, "buckets": [ { "code": "under_250k", "max": 250000, "count": 1357 }, { "code": "250k_500k", "min": 250000, "max": 500000, "count": 6746 }, { "code": "over_500k", "min": 500000, "count": 15257 } ] } }, "assessed_values": { "average_single_family": { "value": 625650, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_single_family_mean", "updated_on": "2026-10-09", "stale": false }, "average_per_dwelling": { "value": 363162, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_per_dwelling_mean", "updated_on": "2026-10-09", "stale": false }, "market_factor": { "value": 1.0, "unit": "ratio", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessment_market_factor", "updated_on": "2026-10-09", "stale": false } }, "average_rent": { "studio": { "value": 1083, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "one_bedroom": { "value": 1298, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "two_bedrooms": { "value": 1348, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "three_bedrooms_plus": { "value": 1692, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false } }, "gross_yield": null, "property_tax": { "rates": { "residential": { "value": 0.4631, "unit": "CAD/100CAD", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "residential_property_tax_rate", "updated_on": "2026-10-09", "stale": false } }, "estimate": { "value": 4823, "unit": "CAD/year", "property_id": "prp_7NQ4W1ZD6X", "excludes": [ "agglomeration_taxes", "municipal_fees", "school_tax" ] } }, "rental_vacancy": { "value": 4.2, "unit": "%", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "rental_survey_area", "code": "Q10600120", "name": "Plateau-Mont-Royal" }, "sample_size": null, "reliability": "low", "range": null, "definition": "rental_vacancy_rate", "updated_on": "2026-10-09", "stale": false }, "permits_nearby": { "count": 276, "dwellings_created": 395, "items": [ { "date": "2026-08-10", "nature": "conversion", "destination": "housing", "dwellings_created": null, "status": "authorized", "distance_m": 167 }, { "date": "2026-08-07", "nature": "conversion", "destination": "commercial", "dwellings_created": 2, "status": "authorized", "distance_m": 415 }, { "date": "2026-06-18", "nature": "conversion", "destination": "housing", "dwellings_created": null, "status": "authorized", "distance_m": 346 } ] }, "missing": { "gross_yield": "not_found" } } }, "meta": { "request_id": "req_K3VD8QW1TZ6MHN", "api_version": "1.0", "generated_at": "2026-10-11T05:13:26Z", "warnings": [], "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/ca/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 |
{ "data": { "places": { "status": "ok", "counts": { "transport": 112, "health": 25, "school": 18, "food": 130, "shop": 207, "outing": 391, "service": 45, "beauty": 73, "sport": 26, "leisure": 47, "tourism": 15 }, "items": [ { "id": "plc_72CFFC16", "category": "beauty.beauty_salon", "name": "Centre Médico-Esthétique", "address": null, "latitude": 45.5247386, "longitude": -73.5840197, "distance_m": 7, "walk_minutes": 0, "lines": null }, { "id": "plc_9F13902E", "category": "beauty.hairdresser", "name": "Le Margo", "address": "4585 Rue Saint-Denis", "latitude": 45.5246231, "longitude": -73.5839857, "distance_m": 11, "walk_minutes": 0, "lines": null }, { "id": "plc_4C28435C", "category": "beauty.beauty_salon", "name": "Ongles Spa Elite", "address": "4593 Rue Saint-Denis", "latitude": 45.5246693, "longitude": -73.5840919, "distance_m": 13, "walk_minutes": 0, "lines": null }, { "id": "plc_CB6F32EB", "category": "outing.bar", "name": "Café Montiran", "address": "4597 Rue Saint-Denis", "latitude": 45.5247047, "longitude": -73.5841651, "distance_m": 18, "walk_minutes": 0, "lines": null }, { "id": "plc_B37C8B65", "category": "outing.restaurant", "name": "La Matraca", "address": null, "latitude": 45.5247338, "longitude": -73.5842269, "distance_m": 23, "walk_minutes": 0, "lines": null }, { "id": "plc_E07BB1C8", "category": "outing.bar", "name": "Clébard", "address": "4557 Rue Saint-Denis", "latitude": 45.5244711, "longitude": -73.5837027, "distance_m": 32, "walk_minutes": 0, "lines": null }, { "id": "plc_3C95CBDB", "category": "health.dentist", "name": null, "address": "4615 Rue Saint-Denis", "latitude": 45.5248021, "longitude": -73.5843784, "distance_m": 36, "walk_minutes": 0, "lines": null }, { "id": "plc_335B2056", "category": "outing.restaurant", "name": "Dek Sen", "address": "4621 Rue Saint-Denis", "latitude": 45.5248335, "longitude": -73.5844416, "distance_m": 42, "walk_minutes": 1, "lines": null }, { "id": "plc_CEE082CD", "category": "transport.bus", "name": "Saint-Denis / du Mont-Royal", "address": null, "latitude": 45.52416, "longitude": -73.58315, "distance_m": 86, "walk_minutes": 1, "lines": [ "31", "361" ] }, { "id": "plc_8506E9FD", "category": "transport.bus", "name": "Saint-Denis / De Bienville", "address": null, "latitude": 45.525028, "longitude": -73.585052, "distance_m": 93, "walk_minutes": 1, "lines": [ "31", "361" ] } ], "missing": {} } }, "meta": { "request_id": "req_5HB3R7PC2YV9NE", "api_version": "1.0", "generated_at": "2026-10-12T09:03:05Z", "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, à vol d'oiseau, et les listes autour.
Endpoint
GET https://app.open-connect.io/api/v1/ca/access
Réponse :
data.access| Champ | Type | Description |
|---|---|---|
nearest.station |
Lieu \ | null |
nearest.airport |
Lieu \ | null |
nearest.highway_access |
Lieu \ | null |
nearest.school |
Lieu \ | null |
stations[], airports[], highway_accesses[], fuel_stations[], charging_stations[]
|
listes de Lieux | Les plus proches de chaque sorte |
Une gare est une gare de trains : les stations de métro sont des lieux de la catégorie
transport.subway.{ "data": { "access": { "status": "ok", "nearest": { "station": { "id": "plc_83DD454E", "category": "transport.train_station", "name": "Gare centrale de Montréal", "address": null, "latitude": 45.500285, "longitude": -73.5671623, "distance_m": 3014, "walk_minutes": 38, "lines": null }, "airport": { "id": "plc_A7736855", "category": "transport.airport", "name": "Aéroport métropolitain de Montréal", "address": "6400 Route de l'Aéroport - J3Y 8Y9 Longueuil", "latitude": 45.5197673, "longitude": -73.4138544, "distance_m": 13262, "walk_minutes": 166, "lines": null }, "highway_access": { "id": "plc_C27F8D28", "category": "transport.highway_access", "name": "Sortie 74 — 40", "address": null, "latitude": 45.557181, "longitude": -73.6151544, "distance_m": 4353, "walk_minutes": 54, "lines": null }, "school": { "id": "plc_9B1C04F4", "category": "school.higher_education", "name": "Conservatoire de musique de Montréal", "address": "4750, avenue Henri-Julien - H2T2C8 Montréal", "latitude": 45.52345, "longitude": -73.586343, "distance_m": 234, "walk_minutes": 3, "lines": null } }, "stations": [ { "id": "plc_83DD454E", "category": "transport.train_station", "name": "Gare centrale de Montréal", "address": null, "latitude": 45.500285, "longitude": -73.5671623, "distance_m": 3014, "walk_minutes": 38, "lines": null } ], "airports": [ { "id": "plc_A7736855", "category": "transport.airport", "name": "Aéroport métropolitain de Montréal", "address": "6400 Route de l'Aéroport - J3Y 8Y9 Longueuil", "latitude": 45.5197673, "longitude": -73.4138544, "distance_m": 13262, "walk_minutes": 166, "lines": null }, { "id": "plc_8023649F", "category": "transport.airport", "name": "Aéroport international Montréal-Trudeau", "address": "975 Boulevard Roméo-Vachon Nord - H4Y 1H1 Dorval", "latitude": 45.467431, "longitude": -73.7452169, "distance_m": 14092, "walk_minutes": 176, "lines": null } ], "highway_accesses": [ { "id": "plc_C27F8D28", "category": "transport.highway_access", "name": "Sortie 74 — 40", "address": null, "latitude": 45.557181, "longitude": -73.6151544, "distance_m": 4353, "walk_minutes": 54, "lines": null }, { "id": "plc_12E4312A", "category": "transport.highway_access", "name": "Sortie 75 — 40", "address": null, "latitude": 45.5595942, "longitude": -73.6098035, "distance_m": 4371, "walk_minutes": 55, "lines": null } ], "fuel_stations": [ { "id": "plc_7D4F3121", "category": "transport.fuel", "name": "Esso", "address": null, "latitude": 45.5268917, "longitude": -73.5899456, "distance_m": 527, "walk_minutes": 7, "lines": null }, { "id": "plc_77986757", "category": "transport.fuel", "name": "Petro-Canada", "address": null, "latitude": 45.5171885, "longitude": -73.5894809, "distance_m": 942, "walk_minutes": 12, "lines": null }, { "id": "plc_F1549E17", "category": "transport.fuel", "name": "Ultramar", "address": null, "latitude": 45.5178499, "longitude": -73.5922516, "distance_m": 1001, "walk_minutes": 13, "lines": null } ], "charging_stations": [ { "id": "plc_4C6A4E2A", "category": "transport.charging_station", "name": "Circuit électrique", "address": null, "latitude": 45.5246598, "longitude": -73.5829847, "distance_m": 74, "walk_minutes": 1, "lines": null }, { "id": "plc_C69042F7", "category": "transport.charging_station", "name": "Circuit électrique", "address": null, "latitude": 45.5250622, "longitude": -73.585967, "distance_m": 163, "walk_minutes": 2, "lines": null }, { "id": "plc_48C5FBBC", "category": "transport.charging_station", "name": "Circuit électrique", "address": null, "latitude": 45.5265168, "longitude": -73.5853477, "distance_m": 229, "walk_minutes": 3, "lines": null } ], "missing": {} } }, "meta": { "request_id": "req_9TX4K2LW8QF3MA", "api_version": "1.0", "generated_at": "2026-10-12T09:03:31Z", "warnings": [], "sandbox": false } }
Habitants
Qui vit dans le quartier : le revenu des déclarants, publié à la région de tri d'acheminement (
postal_code_prefix).Endpoint
GET https://app.open-connect.io/api/v1/ca/residents
Réponse :
data.residents| Champ | Type | Description |
|---|---|---|
income.total_mean |
Mesure | Revenu total moyen par déclaration, en CAD par an |
{ "data": { "residents": { "status": "ok", "income": { "total_mean": { "value": 69874, "unit": "CAD/year", "period": { "start": "2021-01-01", "end": "2021-12-31" }, "zone": { "level": "postal_code_prefix", "code": "H2J", "name": "H2J" }, "sample_size": 20820, "reliability": "high", "range": null, "definition": "total_income_mean_per_return", "updated_on": "2026-10-09", "stale": false } }, "missing": {} } }, "meta": { "request_id": "req_3NC6V8DR1PJ5WE", "api_version": "1.0", "generated_at": "2026-10-12T09:03:52Z", "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/ca/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 |
agricultural_zone |
booléen \ | null |
Ces informations sont indicatives : seule la municipalité, par un certificat ou un permis, engage sur ce qui est permis.
{ "data": { "urbanism": { "status": "ok", "document": { "type": "land_use_plan", "name": null, "approved_on": null, "url": null }, "zone": { "code": null, "label": "Mixte", "family": "urban", "description": "Intermédiaire · densité minimale 165 log./ha", "regulation_url": null }, "agricultural_zone": false, "missing": {} } }, "meta": { "request_id": "req_6QM1Z5HB9KD2TC", "api_version": "1.0", "generated_at": "2026-10-12T09:04:10Z", "warnings": [], "sandbox": false } }
Zones
Le marché et les habitants d'une zone, sans position : les loyers et la taxe foncière d'une municipalité, les ventes d'une région administrative.
Endpoint
GET https://app.open-connect.io/api/v1/ca/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 municipalité de Montréal :
GET /zones/locality/66023 ; sa région administrative : GET /zones/administrative_area_level2/06.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.
La municipalité de Montréal, marché seulement (
include=market) :{ "data": { "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "parents": [ { "level": "country", "code": "CA", "name": "Canada" }, { "level": "administrative_area_level1", "code": "24", "name": "Québec" }, { "level": "administrative_area_level2", "code": "06", "name": "Montréal" }, { "level": "administrative_area_level3", "code": "66", "name": "Montréal" } ], "market": { "status": "ok", "assessed_values": { "average_single_family": { "value": 625650, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_single_family_mean", "updated_on": "2026-10-09", "stale": false }, "average_per_dwelling": { "value": 363162, "unit": "CAD", "period": { "start": "2025-01-01", "end": "2025-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessed_value_per_dwelling_mean", "updated_on": "2026-10-09", "stale": false }, "market_factor": { "value": 1.0, "unit": "ratio", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "assessment_market_factor", "updated_on": "2026-10-09", "stale": false } }, "average_rent": { "studio": { "value": 1014, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "one_bedroom": { "value": 1111, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "two_bedrooms": { "value": 1348, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false }, "three_bedrooms_plus": { "value": 1692, "unit": "CAD/month", "period": { "start": "2025-10-01", "end": "2025-10-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "average_rent", "updated_on": "2026-10-09", "stale": false } }, "property_tax": { "rates": { "residential": { "value": 0.4631, "unit": "CAD/100CAD", "period": { "start": "2026-01-01", "end": "2026-12-31" }, "zone": { "level": "locality", "code": "66023", "name": "Montréal" }, "sample_size": null, "reliability": "high", "range": null, "definition": "residential_property_tax_rate", "updated_on": "2026-10-09", "stale": false } } }, "missing": {} } }, "meta": { "request_id": "req_8VL3D6QS2FH7NB", "api_version": "1.0", "generated_at": "2026-10-12T09:04:44Z", "warnings": [], "sandbox": false } }
Les zones enfants d'une zone (les municipalités d'une MRC, les arrondissements d'une municipalité) :
GET https://app.open-connect.io/api/v1/ca/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/ca/catalog/domains
{ "data": { "domains": [ { "id": "location", "label": "Adresse et position", "routes": [ "/api/v1/ca/location" ], "fields": [ "latitude", "longitude", "precision", "address", "geocoding", "zones", "parcel", "building_id", "property_ids", "nearest_property_id" ] }, { "id": "building", "label": "L'immeuble", "routes": [ "/api/v1/ca/building", "/api/v1/ca/buildings/{building_id}" ], "fields": [ "id", "type", "address", "construction_year", "levels", "dwellings", "footprint_m2", "energy_potential" ] }, { "id": "property", "label": "Le bien", "routes": [ "/api/v1/ca/property", "/api/v1/ca/properties/{property_id}" ], "fields": [ "id", "building_id", "type", "address", "floor_area_m2", "land_area_m2", "dwellings", "construction_year", "last_transfer_on", "value_today", "assessment", "events", "story", "others" ] }, { "id": "risks", "label": "Risques", "routes": [ "/api/v1/ca/risks" ], "fields": [ "hazards", "not_assessed", "summary", "polluted_sites" ] }, { "id": "market", "label": "Marché", "routes": [ "/api/v1/ca/market", "/api/v1/ca/market/permits" ], "fields": [ "registered_sales", "assessed_values", "average_rent", "gross_yield", "property_tax", "rental_vacancy", "permits_nearby" ] }, { "id": "places", "label": "Lieux", "routes": [ "/api/v1/ca/places" ], "fields": [ "counts", "items" ] }, { "id": "access", "label": "Accès", "routes": [ "/api/v1/ca/access" ], "fields": [ "nearest", "stations", "airports", "highway_accesses", "fuel_stations", "charging_stations" ] }, { "id": "residents", "label": "Habitants", "routes": [ "/api/v1/ca/residents" ], "fields": [ "income" ] }, { "id": "urbanism", "label": "Urbanisme", "routes": [ "/api/v1/ca/urbanism" ], "fields": [ "document", "zone", "agricultural_zone" ] } ] }, "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/ca/catalog/fields
{ "data": { "fields": [ { "definition": "registered_sales_count_12m", "label": "Ventes enregistrées sur douze mois", "unit": "count", "update_frequency": "monthly", "coverage": { "status": "available" } }, { "definition": "registered_sales_change_1y", "label": "Évolution sur un an des ventes enregistrées sur douze mois", "unit": "%", "update_frequency": "monthly", "coverage": { "status": "available" } }, { "definition": "assessed_value_single_family_mean", "label": "Valeur moyenne au rôle d'une résidence unifamiliale", "unit": "CAD", "update_frequency": "yearly", "coverage": { "status": "available" } }, { "definition": "assessed_value_per_dwelling_mean", "label": "Valeur moyenne au rôle par logement", "unit": "CAD", "update_frequency": "yearly", "coverage": { "status": "available" } }, { "definition": "assessment_market_factor", "label": "Facteur qui ramène les valeurs du rôle d'évaluation aux prix du marché", "unit": "ratio", "update_frequency": "yearly", "coverage": { "status": "available" } }, { "definition": "average_rent", "label": "Loyer mensuel moyen des logements locatifs, pour la taille de logement du champ", "unit": "CAD/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": "residential_property_tax_rate", "label": "Taux de la taxe foncière résidentielle", "unit": "CAD/100CAD", "update_frequency": "yearly", "coverage": { "status": "available" } }, { "definition": "rental_vacancy_rate", "label": "Taux d'inoccupation des logements locatifs", "unit": "%", "update_frequency": "yearly", "coverage": { "status": "available" } }, { "definition": "total_income_mean_per_return", "label": "Revenu total moyen par déclaration", "unit": "CAD/year", "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/ca/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/ca/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.
- 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_onde chaque mesure : date de notre dernière mise à jour de la valeur. -
stalede chaque mesure :truequand 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. -
periodde chaque mesure : la période réellement décrite. Une statistique publiée en 2026 peut décrire 2023.