{"id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","type":"API","name":"[Observatoire habitat] Observatoire Local des Loyers","slug":"observatoire-habitat-observatoire-local-des-loyers","description":"L’Observatoire local des loyers (OLL 13) collecte des données portant sur les loyers du parc privé à l’exception des logements des HLM, des Sociétés d’Economie Mixte (SEM) et des logements en maîtrise d’ouvrage d’insertion. Cette collecte est réalisée auprès des bailleurs institutionnels, des adm...","free_access_class":"FREE_NO_AUTH","auth_type":"NONE","homepage_url":"https://data.ampmetropole.fr/explore/dataset/oll-complet/","docs_url":"https://data.ampmetropole.fr/explore/dataset/oll-complet/","repo_url":null,"status":"ACTIVE","verification_state":"VERIFIED","tags":[],"logo_url":"https://s3-eu-west-1.amazonaws.com/aws-ec2-eu-1-opendatasoft-staticfileset/ampmetropole/favicon?tstamp=158498047026","primary_source_url":"https://data.ampmetropole.fr/explore/dataset/oll-complet/","extraction_confidence":"0.40","created_at":"2026-07-24T18:05:58.540Z","updated_at":"2026-10-21T08:13:28.689Z","last_verified_at":"2026-10-21T08:13:28.689Z","deprecated_at":null,"ranking_score":62,"last_ranked_at":"2026-10-18T21:41:06.908Z","last_seen_at":null,"last_validated_at":null,"last_uptime_at":"2026-10-12T00:20:00.520Z","popularity_score":"0.0000","maintenance_score":"0.7000","institution_id":"d014fa31-f333-4e94-80a3-ea8b4459cfd5","institution_type":"MUNICIPALITY","country_code":"FR","official_confidence":40,"proof_summary":"40% - Official domain (ampmetropole.fr)","source_seed_url":null,"is_public_sector":true,"published_at":"2026-07-25T17:07:00.000Z","geographic_scope":"LOCAL","name_en":"[Housing Observatory] Local Rent Observatory","description_en":"This API provides access to data collected by the Local Rent Observatory (OLL 13) on rents in the private housing stock within the Aix-Marseille-Provence Metropolis. It excludes social housing (HLM), mixed-economy company (SEM) housing, and insertion-managed housing. Data is gathered from institutional landlords, property management administrators, and other private-sector sources. The dataset is maintained by the Aix-Marseille-Provence Metropolis and is useful for analyzing local rental market trends, monitoring housing affordability, and supporting public policy on housing within the metropolitan area.","native_lang":"fr","access_level":"direct","formats":["CSV"],"capability_tier":"live","trust_score":50.75,"merged_into_entry_id":null,"identity_key":"API|https://data.ampmetropole.fr/explore/dataset/oll-complet|[observatoire habitat] observatoire local des loyers","upstream_ref":"data.ampmetropole.fr:dataset:oll-complet","content_changed_at":null,"institution":null,"title_qualifier":null,"access":{"level":"direct","primary":{"kind":"download","label":"Export CSV","method":"GET","url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/exports/csv","format":"CSV","source":"query_example","runnable":true,"direct":true},"actions":[{"kind":"download","label":"Export CSV","method":"GET","url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/exports/csv","format":"CSV","source":"query_example","runnable":true,"direct":true},{"kind":"query","label":"List records","method":"GET","url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?limit=20","source":"query_example","runnable":true,"direct":true},{"kind":"query","label":"Select & filter","method":"GET","url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?select=objectid%2Cmillesime%2Ccommune&where=millesime+is+not+null&limit=20","source":"query_example","runnable":true,"direct":true},{"kind":"query","label":"Run verified request","method":"GET","url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet","source":"probe","runnable":true},{"kind":"landing","label":"Read the docs","method":"GET","url":"https://data.ampmetropole.fr/explore/dataset/oll-complet/","source":"docs","runnable":false}],"formats":["CSV"]},"maturity":{"entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","granularity":"entry","granularity_label":"One unit = one catalog entry. A PROXY for the SCOPE.md §4 ladder, which governs source families, not entries: a family with 400 entries moves this reading 400 times as much as a family with one. Never compare or combine with the source_family reading.","level":"joinable","level_index":5,"level_label":"Joinable","meaning":"Canonical identifiers and concepts mapped","counts_as_coverage":true,"blocked_by":null,"rungs":[{"level":"discovered","level_index":1,"label":"Discovered","meaning":"Source and metadata recorded","evidence":"membership of the named population the ladder is taken over","counts_as_coverage":false,"met":true,"reached":true,"criterion":"TRUE"},{"level":"verified","level_index":2,"label":"Verified","meaning":"Access tested successfully","evidence":"entries.verification_state = 'VERIFIED'","counts_as_coverage":false,"met":true,"reached":true,"criterion":"entries.verification_state = 'VERIFIED'"},{"level":"profiled","level_index":3,"label":"Profiled","meaning":"Schema, dimensions and licence understood","evidence":"a data profile with at least one field (entry_data_profiles.field_count > 0)","counts_as_coverage":false,"met":true,"reached":true,"criterion":"EXISTS (SELECT 1 FROM entry_data_profiles p WHERE p.entry_id = entries.id AND COALESCE(p.field_count, 0) > 0)"},{"level":"executable","level_index":4,"label":"Executable","meaning":"Queries run through Commodity","evidence":"entries.capability_tier = 'live' — today's proxy for \"queryable through us\"","counts_as_coverage":true,"met":true,"reached":true,"criterion":"entries.capability_tier = 'live'"},{"level":"joinable","level_index":5,"label":"Joinable","meaning":"Canonical identifiers and concepts mapped","evidence":"a field link to a canonical identifier whose sampled VALUES match its format","counts_as_coverage":true,"met":true,"reached":true,"criterion":"EXISTS (SELECT 1 FROM entry_field_links efl WHERE efl.entry_id = entries.id AND efl.identifier_id IS NOT NULL AND efl.value_status = 'match')"},{"level":"reproducible","level_index":6,"label":"Reproducible","meaning":"Snapshots and transformation evidence retained","evidence":"at least one retained evidence manifest (migration 078)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM evidence_manifests em WHERE em.entry_id = entries.id)"},{"level":"guaranteed","level_index":7,"label":"Guaranteed","meaning":"Monitored against an operational reliability target","evidence":"an active reliability target with a named monitor (migration 096)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_reliability_targets rt WHERE rt.entry_id = entries.id AND rt.is_active = true)"}],"officialness":{"basis":"catalog_inherited","label":"Inherited from the upstream catalog: this item came from a trusted official government catalog, and that provenance — not per-item proof — is the warrant. Its own proof score is below 80 or it matched no registered institution (apps/worker/src/connectors/catalog/qualify-store.ts).","proof_confidence":40,"proven_threshold":80,"institution_id":"d014fa31-f333-4e94-80a3-ea8b4459cfd5","definition":"CASE WHEN COALESCE(entries.is_public_sector, false) IS NOT TRUE THEN 'not_official' WHEN COALESCE(entries.official_confidence, 0) >= 80 AND entries.institution_id IS NOT NULL THEN 'per_item_proven' ELSE 'catalog_inherited' END"},"source_family":{"key":"data.ampmetropole.fr","label":"One unit = one source family, approximated by the serving host of the entry's primary source URL (e.g. bdl.stat.gov.pl). A COMPUTED stand-in for the curated families of SCOPE.md §5, which no table holds yet. A family sits at the highest level any of its entries has reached, because a family is integrated to the depth of its deepest working integration. Never compare or combine with the entry reading."},"generated_at":"2026-10-23T01:11:49.581Z"},"api_details":{"id":"a4e0e397-4a0e-40c7-b8a3-f02032876d5b","entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","base_url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet","openapi_url":null,"graphql_url":null,"api_version":null,"spec_format":null,"endpoints_count":null,"endpoints":[],"rate_limit_info":null,"free_tier_limits":null,"ping_url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet","created_at":"2026-07-24T18:05:58.692Z","updated_at":"2026-07-24T18:05:58.692Z"},"dataset_details":{"id":"9608ffbb-76ce-41c4-91d9-9a2e8faf82aa","entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","upstream_issued":null,"upstream_modified":"2026-08-20T13:22:33.000Z","themes":[],"update_frequency":null,"temporal_start":null,"temporal_end":null,"spatial_coverage":null,"landing_page":null,"license_id":null,"license_raw":null,"has_documentation":false,"has_data_dictionary":false,"has_versioning":false,"source_portal":"opendatasoft","source_portal_url":"https://data.ampmetropole.fr","created_at":"2026-07-24T18:10:35.222Z","updated_at":"2026-10-20T12:26:30.397Z","publisher":null,"publisher_url":null,"distributions":[],"license":null},"license":{"id":"lo-2.0","spdx_id":"etalab-2.0","name":"Licence Ouverte 2.0 (France / Etalab)","url":"https://www.etalab.gouv.fr/wp-content/uploads/2017/04/ETALAB-Licence-Ouverte-v2.0.pdf","is_open":true,"is_redistributable":true,"requires_attribution":true,"category":"national","notes":null,"created_at":"2026-06-12T16:29:19.729Z"},"reuse":{"license_id":"lo-2.0","license_name":"Licence Ouverte 2.0 (France / Etalab)","license_url":"https://www.etalab.gouv.fr/wp-content/uploads/2017/04/ETALAB-Licence-Ouverte-v2.0.pdf","commercial_use":{"status":"yes","value":true},"redistribution":{"status":"yes","value":true},"attribution_required":{"status":"yes","value":true},"share_alike":{"status":"no","value":false},"personal_data_warning":{"status":"yes","value":true},"cache_and_mirror":{"status":"yes","value":true},"undetermined":[],"basis":"licence_text","confidence":0.95,"confidence_tier":"high","source_text":"Texte de la licence - le reutilisateur est libre \"de la communiquer, la reproduire, la copier ; de l'adapter, la modifier, l'extraire et la transformer, notamment pour creer des Informations derivees ; de la diffuser, la redistribuer, la publier et la transmettre, de l'exploiter a titre commercial\". Seule obligation : \"mentionner la paternite de l'Information : sa source (a minima le nom du Concedant) et la date de la derniere mise a jour\". Le texte rappelle que le reutilisateur doit respecter \"le cadre legal relatif a la protection des donnees a caractere personnel\". Aucune clause de partage a l'identique n'est imposee.","source_url":"https://github.com/etalab/licence-ouverte/blob/master/LO.md","reviewed_at":null},"license_raw":"https://www.etalab.gouv.fr/wp-content/uploads/2017/04/ETALAB-Licence-Ouverte-v2.0.pdf","latest_check":{"id":"d7d9bed5-899f-4224-8971-d52fe1e48535","entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","status":"VERIFIED","last_checked_at":"2026-10-21T08:13:28.389Z","p50_latency_ms":1761,"p95_latency_ms":null,"last_error":null,"consecutive_failures":0,"created_at":"2026-07-25T09:31:34.098Z","updated_at":"2026-10-21T08:13:28.389Z","consecutive_successes":41,"probe_url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet","probe_method":"GET","probe_http_status":200,"probe_content_type":"application/json; charset=utf-8","probe_succeeded_at":"2026-10-21T08:13:28.389Z"},"data_profile":{"id":"fdcde250-3845-41e2-8918-8387306bf013","entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","profile_source":"opendatasoft","profile_kind":"dataset","dataset_id":"oll-complet","fields":[{"name":"objectid","type":"int","label":null,"fill_pct":100,"filterable":true,"description":null,"description_en":"Internal record identifier."},{"name":"millesime","type":"text","label":"Millésime","fill_pct":100,"filterable":true,"description":null,"description_en":"Reference year of the rent data."},{"name":"commune","type":"text","label":"Nom de Commune","fill_pct":100,"filterable":true,"description":null,"description_en":"Name of the municipality."},{"name":"iris","type":"text","label":"Code IRIS (court)","fill_pct":85.6,"filterable":true,"description":null,"description_en":"Short IRIS statistical area code."},{"name":"code_iris","type":"int","label":null,"fill_pct":85.6,"filterable":true,"description":null,"description_en":"Full numeric IRIS statistical area code."},{"name":"nom_iris","type":"text","label":"Nom de l'IRIS","fill_pct":92.8,"filterable":true,"description":null,"description_en":"Name of the IRIS statistical area."},{"name":"zone","type":"text","label":null,"fill_pct":100,"filterable":true,"description":null,"description_en":"Rent observatory zone identifier."},{"name":"nb_enq","type":"int","label":"Nombre d'enquêtes","fill_pct":100,"filterable":true,"description":null,"description_en":"Number of surveys used to compute the statistics."},{"name":"plr","type":"text","label":"Parc locatif restreint","fill_pct":100,"filterable":true,"description":null,"description_en":"Indicates whether the area has a restricted rental stock."},{"name":"s_q1","type":"double","label":"Loyer du 1er quartile (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"First quartile rent in euros per square metre per month."},{"name":"s_med","type":"double","label":"Loyer médian (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent in euros per square metre per month."},{"name":"s_q3","type":"double","label":"Loyer du 3e quartile (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Third quartile rent in euros per square metre per month."},{"name":"s_t1","type":"double","label":"Loyer médian des T1 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for one-room units, euros per square metre per month."},{"name":"s_t2","type":"double","label":"Loyer médian des T2 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for two-room units, euros per square metre per month."},{"name":"s_t3","type":"double","label":"Loyer médian des T3 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for three-room units, euros per square metre per month."},{"name":"s_t4p","type":"double","label":"Loyer médian des T4 et plus (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for four-room-plus units, euros per square metre per month."},{"name":"s_t1b","type":"double","label":"Loyer bas des T1 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for one-room units, euros per square metre."},{"name":"s_t2b","type":"double","label":"Loyer bas des T2 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for two-room units, euros per square metre."},{"name":"s_t3b","type":"double","label":"Loyer bas des T3 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for three-room units, euros per square metre."},{"name":"s_t4pb","type":"double","label":"Loyer bas des T4 et plus (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for four-room-plus units, euros per square metre."},{"name":"s_t1h","type":"double","label":"Loyer haut des T1 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for one-room units, euros per square metre."},{"name":"s_t2h","type":"double","label":"Loyer haut des T2 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for two-room units, euros per square metre."},{"name":"s_t3h","type":"double","label":"Loyer haut des T3 (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for three-room units, euros per square metre."},{"name":"s_t4ph","type":"double","label":"Loyer haut des T4 et plus (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for four-room-plus units, euros per square metre."},{"name":"s_maib","type":"double","label":"Loyer bas des maisons (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for houses, euros per square metre."},{"name":"s_mai","type":"double","label":"Loyer médian des maisons (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for houses, euros per square metre per month."},{"name":"s_maih","type":"double","label":"Loyer haut des maisons (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for houses, euros per square metre."},{"name":"s_appb","type":"double","label":"Loyer bas des appartements (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for apartments, euros per square metre."},{"name":"s_app","type":"double","label":"Loyer médian des appartements (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for apartments, euros per square metre per month."},{"name":"s_apph","type":"double","label":"Loyer haut des appartements (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for apartments, euros per square metre."},{"name":"s_av46","type":"double","label":"Loyer médian des logements construits avant 1946 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for dwellings built before 1946, euros per square metre per month."},{"name":"s_46_70","type":"double","label":"Loyer médian des logements construits entre 1946 et 1970 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for dwellings built between 1946 and 1970, euros per square metre per month."},{"name":"s_71_90","type":"double","label":"Loyer médian des logements construits entre 1971 et 1990 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for dwellings built between 1971 and 1990, euros per square metre per month."},{"name":"s_91_05","type":"double","label":"Loyer médian des logements construits entre 1991 et 2005 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for dwellings built between 1991 and 2005, euros per square metre per month."},{"name":"s_ap05","type":"double","label":"Loyer médian des logements construits après 2005 (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for dwellings built after 2005, euros per square metre per month."},{"name":"s_locmob","type":"double","label":"Loyer bas des nouveaux locataires (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for newly arrived tenants, euros per square metre."},{"name":"s_locmo","type":"double","label":"Loyer médian des nouveaux locataires (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for newly arrived tenants, euros per square metre per month."},{"name":"s_locmoh","type":"double","label":"Loyer haut des nouveaux locataires (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for newly arrived tenants, euros per square metre."},{"name":"s_locstab","type":"double","label":"Loyer bas des locataires stables (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Lower-bound rent for long-term tenants, euros per square metre."},{"name":"s_locsta","type":"double","label":"Loyer médian des locataires stables (€ mensuels/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median rent for long-term tenants, euros per square metre per month."},{"name":"s_locstah","type":"double","label":"Loyer haut des locataires stables (€/m²)","fill_pct":100,"filterable":true,"description":null,"description_en":"Upper-bound rent for long-term tenants, euros per square metre."},{"name":"m_q1","type":"int","label":"Loyer du 1er quartile (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"First quartile monthly rent in euros."},{"name":"m_med","type":"int","label":"Loyer médian (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent in euros."},{"name":"m_q3","type":"int","label":"Loyer du 3e quartile (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Third quartile monthly rent in euros."},{"name":"m_t1","type":"int","label":"Loyer médian des T1 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for one-room units, in euros."},{"name":"m_t2","type":"int","label":"Loyer médian des T2 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for two-room units, in euros."},{"name":"m_t3","type":"int","label":"Loyer médian des T3 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for three-room units, in euros."},{"name":"m_t4p","type":"int","label":"Loyer médian des T4 et plus (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for four-room-plus units, in euros."},{"name":"m_mai","type":"int","label":"Loyer médian des maisons (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for houses, in euros."},{"name":"m_app","type":"int","label":"Loyer médian des appartements (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for apartments, in euros."},{"name":"m_av46","type":"int","label":"Loyer médian des logements construits avant 1946 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for dwellings built before 1946, in euros."},{"name":"m_46_70","type":"int","label":"Loyer médian des logements construits entre 1946 et 1970 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for dwellings built between 1946 and 1970, in euros."},{"name":"m_71_90","type":"int","label":"Loyer médian des logements construits entre 1971 et 1990 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for dwellings built between 1971 and 1990, in euros."},{"name":"m_91_05","type":"int","label":"Loyer médian des logements construits entre 1991 et 2005 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for dwellings built between 1991 and 2005, in euros."},{"name":"m_ap05","type":"int","label":"Loyer médian des logements construits après 2005 (€ mensuels)","fill_pct":100,"filterable":true,"description":null,"description_en":"Median monthly rent for dwellings built after 2005, in euros."},{"name":"m_locmo","type":"int","label":"Loyer médian des locataires mobiles (€ mensuels)","fill_pct":99.9,"filterable":true,"description":null,"description_en":"Median monthly rent for newly arrived tenants, in euros."},{"name":"m_locsta","type":"int","label":"Loyer médian des locataires stables (€ mensuels)","fill_pct":99.9,"filterable":true,"description":null,"description_en":"Median monthly rent for long-term tenants, in euros."},{"name":"sm_med","type":"int","label":"Surface moyenne de la médiane","fill_pct":100,"filterable":true,"description":null,"description_en":"Average dwelling surface area for the median rent group."},{"name":"sm_mai","type":"int","label":"Surface moyenne des maisons","fill_pct":100,"filterable":true,"description":null,"description_en":"Average surface area of houses."},{"name":"sm_app","type":"int","label":"Surface moyenne des appartements","fill_pct":100,"filterable":true,"description":null,"description_en":"Average surface area of apartments."},{"name":"sm_locmo","type":"int","label":"Surface moyenne pour les nouveaux locataires","filterable":true,"description":null,"description_en":"Average dwelling surface area for newly arrived tenants."},{"name":"sm_locsta","type":"int","label":"Surface moyenne pour les locataires stables","filterable":true,"description":null,"description_en":"Average dwelling surface area for long-term tenants."},{"name":"codeinsee","type":"text","label":"Code commune INSEE","filterable":true,"description":null,"description_en":"INSEE municipality code."},{"name":"shape_area","type":"double","label":"st_area(shape)","filterable":true,"description":null,"description_en":"Area of the geographic shape."},{"name":"shape_length","type":"double","label":"st_perimeter(shape)","filterable":true,"description":null,"description_en":"Perimeter length of the geographic shape."},{"name":"geo_shape","type":"geo_shape","label":null,"filterable":false,"description":null,"description_en":"Geographic boundary geometry of the area."},{"name":"geo_point_2d","type":"geo_point_2d","label":null,"filterable":false,"description":null,"description_en":"Geographic centroid coordinates of the area."},{"name":"commune_regroupee","type":"text","label":null,"filterable":true,"description":null,"description_en":"Name of the grouped municipality used for aggregation."}],"field_count":68,"sample_records":[{"plr":"Non","iris":null,"m_q1":633,"m_q3":930,"m_t1":487,"m_t2":653,"m_t3":820,"s_q1":11.8,"s_q3":16.3,"s_t1":18.5,"s_t2":16,"s_t3":13.1,"zone":"2","m_app":737,"m_mai":850,"m_med":760,"m_t4p":1030,"s_app":14.2,"s_mai":12.7,"s_med":13.9,"s_t1b":16.7,"s_t1h":21.4,"s_t2b":14.2,"s_t2h":17.9,"s_t3b":11.6,"s_t3h":14.4,"s_t4p":12.2,"m_ap05":810,"m_av46":715,"nb_enq":2832,"s_ap05":15,"s_appb":12.4,"s_apph":16.8,"s_av46":12.9,"s_maib":10.7,"s_maih":15.2,"s_t4pb":10.7,"s_t4ph":13.5,"sm_app":55,"sm_mai":81,"sm_med":62,"commune":"Mimet","m_46_70":700,"m_71_90":720,"m_91_05":870,"m_locmo":776,"s_46_70":13,"s_71_90":14.7,"s_91_05":14,"s_locmo":15.3,"m_locsta":754,"nom_iris":null,"objectid":12887,"s_locmob":13.6,"s_locmoh":18.3,"s_locsta":13.3,"sm_locmo":54,"code_iris":null,"codeinsee":"13062","geo_shape":"[large value omitted]","millesime":"2023","s_locstab":11.4,"s_locstah":15.4,"sm_locsta":66,"shape_area":18877247.56000097,"geo_point_2d":{"lat":43.41256873026226,"lon":5.498408109865552},"shape_length":23099.736418047745,"commune_regroupee":"Mimet"},{"plr":"non","iris":"0403","m_q1":625,"m_q3":932,"m_t1":500,"m_t2":660,"m_t3":820,"s_q1":11.8,"s_q3":16.2,"s_t1":17.5,"s_t2":15,"s_t3":13.3,"zone":"3","m_app":720,"m_mai":1000,"m_med":750,"m_t4p":904,"s_app":14,"s_mai":12.6,"s_med":13.8,"s_t1b":15.9,"s_t1h":21.5,"s_t2b":13.4,"s_t2h":17,"s_t3b":11.8,"s_t3h":14.8,"s_t4p":11.1,"m_ap05":690,"m_av46":580,"nb_enq":3228,"s_ap05":15.5,"s_appb":12,"s_apph":16.4,"s_av46":13.3,"s_maib":9.7,"s_maih":15.1,"s_t4pb":9.4,"s_t4ph":12.4,"sm_app":58,"sm_mai":88,"sm_med":64,"commune":"Marseille 8e Arrondissement","m_46_70":620,"m_71_90":700,"m_91_05":670,"m_locmo":800,"s_46_70":12.7,"s_71_90":13,"s_91_05":14.9,"s_locmo":14.7,"m_locsta":620,"nom_iris":"Lord Duveen","objectid":13832,"s_locmob":12.7,"s_locmoh":16.8,"s_locsta":13.4,"sm_locmo":64,"code_iris":132080403,"codeinsee":"13208","geo_shape":{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[5.382858295545783,43.279067083574674],[5.384114751502144,43.27930665403565],[5.38495448165961,43.279477113064324],[5.386594203537747,43.27980989010807],[5.386847345465715,43.27982499728027],[5.38708922803615,43.279806154017976],[5.387190589043572,43.279814714089134],[5.3872239336036625,43.27975727965701],[5.387777095011983,43.27877759574687],[5.387465898722672,43.27869897642456],[5.387074672009216,43.278650923252236],[5.386749674408172,43.27862570461565],[5.385850161332638,43.27855827569467],[5.386015172518307,43.27790215934978],[5.3860235668110645,43.27786687546397],[5.386153841386195,43.27735372019168],[5.386996353118024,43.277443104618825],[5.387412034981501,43.277487017603484],[5.3873892188200765,43.27741192499499],[5.38720140213143,43.27674290393665],[5.387148017828949,43.27655419170236],[5.387146563951191,43.27654882406023],[5.387026073907735,43.27616720298486],[5.38695218540267,43.27592944596163],[5.3867638495137715,43.275336933210674],[5.386681463600214,43.275072365136786],[5.38667897359412,43.2749824241646],[5.386708066101255,43.274911584597106],[5.38686243641228,43.2745940882151],[5.384891171374693,43.27428213866951],[5.384427518482408,43.27540112235442],[5.383665279543995,43.27716386452464],[5.383219565320633,43.2782113518295],[5.382858295545783,43.279067083574674]]]},"properties":{}},"millesime":"2024","s_locstab":11.4,"s_locstah":15.7,"sm_locsta":51,"shape_area":141041.55999993416,"geo_point_2d":{"lat":43.277276963489264,"lon":5.385375152564627},"shape_length":1937.6829088582215,"commune_regroupee":"Marseille"},{"plr":"Non","iris":"0408","m_q1":617,"m_q3":910,"m_t1":470,"m_t2":635,"m_t3":800,"s_q1":11.5,"s_q3":15.8,"s_t1":17.7,"s_t2":14.9,"s_t3":12.9,"zone":"3","m_app":705,"m_mai":900,"m_med":740,"m_t4p":910,"s_app":13.6,"s_mai":12,"s_med":13.2,"s_t1b":15.9,"s_t1h":21,"s_t2b":13.1,"s_t2h":16.7,"s_t3b":11.5,"s_t3h":14.3,"s_t4p":10.9,"m_ap05":796,"m_av46":662,"nb_enq":3460,"s_ap05":15,"s_appb":11.8,"s_apph":16,"s_av46":13,"s_maib":9.9,"s_maih":14.3,"s_t4pb":9.2,"s_t4ph":12.3,"sm_app":56,"sm_mai":82,"sm_med":61,"commune":"Marseille 9e Arrondissement","m_46_70":734,"m_71_90":801,"m_91_05":739,"m_locmo":790,"s_46_70":12.8,"s_71_90":12.4,"s_91_05":13.9,"s_locmo":14.3,"m_locsta":720,"nom_iris":"Lanciers-Cyclamens","objectid":13248,"s_locmob":11.1,"s_locmoh":15.2,"s_locsta":13,"sm_locmo":59,"code_iris":132090408,"codeinsee":"13209","geo_shape":"[large value omitted]","millesime":"2023","s_locstab":11.1,"s_locstah":15.2,"sm_locsta":62,"shape_area":123965.3950004359,"geo_point_2d":{"lat":43.24643144477619,"lon":5.397958603476644},"shape_length":1916.8597618966965,"commune_regroupee":"Marseille"},{"plr":"Non","iris":"0102","m_q1":520,"m_q3":710,"m_t1":420,"m_t2":550,"m_t3":650,"s_q1":9.3,"s_q3":12.9,"s_t1":13.9,"s_t2":12.6,"s_t3":10.5,"zone":"8","m_app":605,"m_mai":730,"m_med":622,"m_t4p":720,"s_app":11.1,"s_mai":11.3,"s_med":11.1,"s_t1b":12.4,"s_t1h":15.8,"s_t2b":11.1,"s_t2h":14.9,"s_t3b":9.3,"s_t3h":11.7,"s_t4p":9.4,"m_ap05":660,"m_av46":580,"nb_enq":2782,"s_ap05":11.6,"s_appb":9.5,"s_apph":12.9,"s_av46":11.1,"s_maib":8.4,"s_maih":12.7,"s_t4pb":8.1,"s_t4ph":10.8,"sm_app":57,"sm_mai":75,"sm_med":59,"commune":"Salon-de-Provence","m_46_70":630,"m_71_90":593,"m_91_05":650,"m_locmo":650,"s_46_70":10.4,"s_71_90":11,"s_91_05":12,"s_locmo":11.8,"m_locsta":608,"nom_iris":"Pilon Blanc-Pavillon","objectid":13007,"s_locmob":10,"s_locmoh":13.8,"s_locsta":10.9,"sm_locmo":58,"code_iris":131030102,"codeinsee":"13103","geo_shape":"[large value omitted]","millesime":"2023","s_locstab":9,"s_locstah":12.6,"sm_locsta":59,"shape_area":834122.8299993875,"geo_point_2d":{"lat":43.64400889485861,"lon":5.103313497664206},"shape_length":4756.645339022087,"commune_regroupee":"Salon-de-Provence"},{"plr":"Non","iris":"0116","m_q1":562,"m_q3":815,"m_t1":450,"m_t2":600,"m_t3":745,"s_q1":10.5,"s_q3":15.2,"s_t1":16.9,"s_t2":14.3,"s_t3":11.8,"zone":"4","m_app":650,"m_mai":980,"m_med":673,"m_t4p":803,"s_app":12.6,"s_mai":13.1,"s_med":12.6,"s_t1b":15,"s_t1h":20,"s_t2b":12.1,"s_t2h":16,"s_t3b":10.5,"s_t3h":13.3,"s_t4p":10.2,"m_ap05":719,"m_av46":645,"nb_enq":4223,"s_ap05":14.2,"s_appb":10.5,"s_apph":15.1,"s_av46":12.5,"s_maib":10.9,"s_maih":15.5,"s_t4pb":9.2,"s_t4ph":11.4,"sm_app":58,"sm_mai":79,"sm_med":61,"commune":"Istres","m_46_70":680,"m_71_90":708,"m_91_05":716,"m_locmo":700,"s_46_70":11.8,"s_71_90":11.5,"s_91_05":13.6,"s_locmo":13.6,"m_locsta":668,"nom_iris":"Rassuen","objectid":13073,"s_locmob":11.6,"s_locmoh":16.3,"s_locsta":12.3,"sm_locmo":58,"code_iris":130470116,"codeinsee":"13047","geo_shape":"[large value omitted]","millesime":"2023","s_locstab":10.2,"s_locstah":15,"sm_locsta":62,"shape_area":6833661.375002627,"geo_point_2d":{"lat":43.483588161616986,"lon":4.981192570002268},"shape_length":17406.35668746636,"commune_regroupee":"Istres"}],"record_count":"1212","data_size_bytes":null,"dataset_count":null,"query_examples":[{"url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?limit=20","curl":"curl -s 'https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?limit=20' -H 'Accept: application/json'","label":"List records","method":"GET","description":"First 20 records of the dataset as JSON."},{"url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?select=objectid%2Cmillesime%2Ccommune&where=millesime+is+not+null&limit=20","curl":"curl -s 'https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/records?select=objectid%2Cmillesime%2Ccommune&where=millesime+is+not+null&limit=20' -H 'Accept: application/json'","label":"Select & filter","method":"GET","description":"Project specific fields (objectid, millesime, commune) and filter with ODSQL where clauses."},{"url":"https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/exports/csv","curl":"curl -sL 'https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/oll-complet/exports/csv' -o dataset.csv","label":"Export CSV","method":"GET","description":"Full dataset export as CSV (also available: json, parquet, xlsx)."}],"status":"ok","error_message":null,"profiled_at":"2026-10-20T12:26:29.345Z","run_id":"c5177fbb-bc1c-463f-bd15-8d5cbc84cd26","created_at":"2026-07-24T18:10:34.634Z","updated_at":"2026-10-20T12:26:29.345Z","license_raw":"https://www.etalab.gouv.fr/wp-content/uploads/2017/04/ETALAB-Licence-Ouverte-v2.0.pdf","license_id":"lo-2.0","consecutive_failure_count":0,"last_error_at":null,"last_error_message":null,"previewable":true,"personal_data":{"status":"none","basis":"no_person_column_cited","grain":"none","allowed":true,"columns":{"direct_identifiers":[],"family_names":[],"given_names":[],"attributes":[],"unresolved_names":[],"measures":["nb_enq"],"entity_identifiers":[]},"publication":null,"publication_evidence":null,"notice":"personal data: no cited column names a natural person (the cited columns are all this reads)"}},"datasets":[],"limits":[{"id":"5960a869-cce8-4fbd-b7f3-88609ff7ce05","entry_id":"a4c2139e-6b1e-49f5-a13a-b03495a7a1cd","limit_type":"requests_per_day","value":"5000","unit":"requests","period":"day","scope":"per-ip","source_id":null,"claim_type":"measured","confidence":"0.90","observed_at":"2026-10-20T12:26:30.558Z"}],"source_access":{"status":"accessed_despite_disallow","host":"data.ampmetropole.fr","requested_path_prefix":"/api/explore/v2.1/","robots_url":"https://data.ampmetropole.fr/robots.txt","user_agent_group":"*","robots_rule":"Disallow: /api/","robots_read_at":"2026-08-25T11:29:21.471Z","decision_ref":"owner decision 2026-08-22, recorded in docs/PROGRESS.md NEEDS-HUMAN: public-sector open-data portals whose purpose is machine access; the directive is an Opendatasoft vendor default reflecting no publisher intent. Concern raised and overruled; see the row.","note":"This answer is derived from a host whose robots.txt DISALLOWS the path Commodity requests, and Commodity requests it anyway under the decision named in `decision_ref`. The rule is quoted verbatim so you can read it yourself. Commodity does not send a user-agent it is not, so any `Allow` granted to a named crawler in that file is not claimed here."},"field_provenance_source_access":{"status":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"THIS PLATFORM’S READING OF ITS OWN CONDUCT: that it requests a path this host forbids. No publisher asserts it and none was asked to","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"host":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"the host Commodity addressed, lowercased and stripped of scheme and port by this platform so that one host has one row and one reading","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"requested_path_prefix":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"THE PATH THE VERDICT IS ABOUT, derived from the base URLs this platform stores for the host — not `/`, and not an assumed `/api/`. A verdict about a path we do not call would describe someone else’s traffic","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"robots_url":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"where the file was fetched from — composed by this platform from the host, at the one location the protocol fixes, so it can be re-fetched and the reading disputed","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"user_agent_group":{"basis":"stored_sample","derived":false,"upstream_field":"the `User-agent` line the deciding rule sits under","transform":"the group heading that made the rule OURS, verbatim from the stored file. Where it is `*` the directive addresses everyone; a group naming another crawler was not applied, because Commodity does not send a user-agent it is not","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"robots_rule":{"basis":"stored_sample","derived":false,"upstream_field":"the directive line of the matching group","transform":"THE PUBLISHER’S OWN LINE, QUOTED AND UNCUT, as read from robots.txt at the moment below and stored — not fetched for this request, and not part of this response’s payload. It is here so the verdict beside it can be checked rather than taken from us","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"robots_read_at":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"OUR CLOCK when the file was read, never a `Date` header the origin sent. It bounds how stale this reading may be: a publisher can have changed the file since","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"decision_ref":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"WHO DECIDED TO CALL IT ANYWAY, AND WHEN. Recorded by this platform and required by the database before the exception may exist at all, so it can never be anonymous","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}},"note":{"basis":"platform_computed","derived":true,"upstream_field":null,"transform":"this platform’s sentence explaining what the reader is holding. Written here, by us, and not a quotation of anybody","cells":{"rows":1,"delivered":1,"empty":0,"stringified":0,"truncated":0}}},"manifest":{"answer_sha256":"8b43543acd47d5dc59a20aff3db34aad58b91a2538f9353b66dfd99d434ae0cc","answer_sha256_rule":"sha256 (hex, UTF-8) of JSON.stringify(this body) after deleting the keys listed in manifest.stamped_keys from manifest, and deleting manifest itself if it is then empty. The hash was computed before the stamp existed, so no field of the stamp is inside it.","stamped_keys":["answer_sha256","answer_sha256_rule","stamped_keys","row_count","row_count_basis","live","live_basis","created_at","created_at_basis","durable_citation"],"row_count":89,"row_count_basis":"Objects that are elements of a JSON array anywhere in this body, excluding manifest. Not a claim about which collection is the answer. Largest single collection: data_profile.fields[] (68 rows).","live":false,"live_basis":"This body was replayed from the worker edge cache (x-edge-cache: hit); the bytes, and therefore answer_sha256, are those of the execution that filled the cache.","created_at":"2026-10-23T01:12:48.997Z","created_at_basis":"When this response body was assembled, deliberately OUTSIDE the hashed bytes so the same answer hashes identically on every request. Not the upstream read time — that is provenance[].retrieved_at. A zone-cached replay carries the assembly time, not your receipt time.","durable_citation":"This manifest is produced at response time and is NOT stored. A durable, replayable citation is persisted only on an explicit cite: GET /api/v1/entries/{id-or-slug}/evidence, or the MCP cite_query tool. Both are entry-scoped, because evidence_manifests is entry-shaped; a domain answer spanning several sources has no single entry and cannot be persisted through that path."}}