{
	"openapi": "3.1.0",
	"info": {
		"title": "La Grande Carte — public read API",
		"version": "1.0.0",
		"description": "Read access to the French open data La Grande Carte ingests: régions,\ndépartements, communes and cadastral parcels, plus the per-level\nstatistics and the per-parcel enrichments shown on the site.\n\n### Getting a key\n\nThere is no self-service signup. Email **contact@lagrandecarte.fr** with one or\ntwo lines about what you want to build; we issue a key by return mail.\nIt is free. Keys are per-integration, not per-user.\n\n### Authentication\n\nSend the key in the `X-API-Key` header. `Authorization: Bearer <key>`\nand `?api_key=<key>` also work — the latter is convenient in a browser\nbut do not ship a key inside a public front-end: it identifies your\nintegration and carries your quota.\n\n### Limits\n\nDefaults are 60 requests/minute and 5 000 requests/day per key. Every\nresponse carries `X-RateLimit-Limit`, `X-Quota-Limit`, `X-Quota-Used`\nand `X-Quota-Remaining`. If your use case needs more, ask — the limits\nare per key and we raise them for anything reasonable.\n\n### Licence and attribution\n\nThe underlying data is published under the Etalab Licence Ouverte 2.0.\nReuse is free, including commercially, provided you credit the source.\nCrediting \"La Grande Carte\" with a link to https://lagrandecarte.fr is\nenough; crediting the upstream producers directly is also fine.\n\n### Stability\n\n`/api/v1` will not break compatibly-named fields. Fields are added over\ntime as new sources are ingested, so parse defensively and ignore keys\nyou do not know."
	},
	"servers": [
		{
			"url": "https://lagrandecarte.fr",
			"description": "Production"
		}
	],
	"security": [
		{
			"ApiKeyHeader": []
		}
	],
	"tags": [
		{
			"name": "Régions",
			"description": "18 régions."
		},
		{
			"name": "Départements",
			"description": "96 départements — metropolitan France and Corsica. The overseas départements are not yet in the administrative-polygon table, so `/departements/971`…`976` return 404; their communes and parcels are available."
		},
		{
			"name": "Communes",
			"description": "~35 000 communes, overseas included."
		},
		{
			"name": "Parcelles",
			"description": "94.6 M cadastral parcels."
		},
		{
			"name": "Service",
			"description": "Discovery, no key required."
		}
	],
	"paths": {
		"/api/v1": {
			"get": {
				"tags": [
					"Service"
				],
				"summary": "Service index",
				"description": "Lists the endpoints and how to obtain a key. The only unauthenticated route.",
				"security": [],
				"responses": {
					"200": {
						"description": "Service description",
						"content": {
							"application/json": {
								"schema": {
									"type": "object"
								}
							}
						}
					}
				}
			}
		},
		"/api/v1/regions": {
			"get": {
				"tags": [
					"Régions"
				],
				"summary": "List régions",
				"description": "The 18 régions, code and name. No geometry — request a single région with `include=geometry` for that.",
				"responses": {
					"200": {
						"description": "Régions",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CodeNameList"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/regions/{code}": {
			"get": {
				"tags": [
					"Régions"
				],
				"summary": "One région",
				"parameters": [
					{
						"name": "code",
						"in": "path",
						"required": true,
						"description": "INSEE région code, 1–3 digits.",
						"schema": {
							"type": "string",
							"pattern": "^[0-9]{1,3}$"
						},
						"example": "24"
					},
					{
						"name": "include",
						"in": "query",
						"required": false,
						"description": "Comma-separated extras. `geometry` adds the polygon, `stats` the full statistics block, `departements` the child départements. An unknown value is rejected with 400 rather than ignored.",
						"schema": {
							"type": "string"
						},
						"examples": {
							"geometry": {
								"value": "geometry"
							},
							"stats": {
								"value": "stats"
							},
							"departements": {
								"value": "departements"
							}
						}
					}
				],
				"responses": {
					"200": {
						"description": "Région",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Region"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/departements": {
			"get": {
				"tags": [
					"Départements"
				],
				"summary": "List départements",
				"description": "The 96 metropolitan départements, Corsica as `2A`/`2B`. Overseas départements are missing from this table for now; use `/communes?departement=974` to reach their communes.",
				"parameters": [
					{
						"name": "region",
						"in": "query",
						"required": false,
						"description": "Restrict to one région.",
						"schema": {
							"type": "string"
						},
						"example": "24"
					}
				],
				"responses": {
					"200": {
						"description": "Départements",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CodeNameList"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/departements/{code}": {
			"get": {
				"tags": [
					"Départements"
				],
				"summary": "One département",
				"parameters": [
					{
						"name": "code",
						"in": "path",
						"required": true,
						"description": "Département code — 2 or 3 characters, `2A`/`2B` for Corsica. Overseas codes (`971`–`976`) return 404 until the overseas polygons are ingested.",
						"schema": {
							"type": "string",
							"pattern": "^[0-9AB]{2,3}$"
						},
						"example": "18"
					},
					{
						"name": "include",
						"in": "query",
						"required": false,
						"description": "Comma-separated extras. `geometry` adds the polygon, `stats` the full statistics block, `communes` the child communes. An unknown value is rejected with 400 rather than ignored.",
						"schema": {
							"type": "string"
						},
						"examples": {
							"geometry": {
								"value": "geometry"
							},
							"stats": {
								"value": "stats"
							},
							"communes": {
								"value": "communes"
							}
						}
					}
				],
				"responses": {
					"200": {
						"description": "Département",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Departement"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/communes": {
			"get": {
				"tags": [
					"Communes"
				],
				"summary": "List a département’s communes, or locate one by point",
				"description": "Requires either `departement` or a `lat`/`lon` pair. There is no unfiltered listing of the ~35 000 communes.",
				"parameters": [
					{
						"name": "departement",
						"in": "query",
						"required": false,
						"description": "Département code. Works for overseas codes (`971`–`976`) even though `/departements/{code}` does not yet.",
						"schema": {
							"type": "string"
						},
						"example": "18"
					},
					{
						"name": "lat",
						"in": "query",
						"required": false,
						"description": "WGS84 latitude, used with `lon`.",
						"schema": {
							"type": "number"
						},
						"example": 47.081
					},
					{
						"name": "lon",
						"in": "query",
						"required": false,
						"description": "WGS84 longitude, used with `lat`.",
						"schema": {
							"type": "number"
						},
						"example": 2.3988
					}
				],
				"responses": {
					"200": {
						"description": "Either a list (with `departement`) or a single commune (with `lat`/`lon`).",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"$ref": "#/components/schemas/CodeNameList"
										},
										{
											"$ref": "#/components/schemas/Commune"
										}
									]
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/communes/{code}": {
			"get": {
				"tags": [
					"Communes"
				],
				"summary": "One commune",
				"parameters": [
					{
						"name": "code",
						"in": "path",
						"required": true,
						"description": "5-character INSEE code (not the postal code).",
						"schema": {
							"type": "string",
							"pattern": "^[0-9AB]{5}$"
						},
						"example": "18033"
					},
					{
						"name": "include",
						"in": "query",
						"required": false,
						"description": "Comma-separated extras. `geometry` adds the polygon, `stats` the full statistics block (population, revenus, logement, emploi, sécurité, finances, élections, air, eau, santé…). An unknown value is rejected with 400 rather than ignored.",
						"schema": {
							"type": "string"
						},
						"examples": {
							"geometry": {
								"value": "geometry"
							},
							"stats": {
								"value": "stats"
							}
						}
					}
				],
				"responses": {
					"200": {
						"description": "Commune",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Commune"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/parcelles": {
			"get": {
				"tags": [
					"Parcelles"
				],
				"summary": "Locate the cadastral parcel at a point",
				"parameters": [
					{
						"name": "lat",
						"in": "query",
						"required": true,
						"schema": {
							"type": "number"
						},
						"example": 47.0810532
					},
					{
						"name": "lon",
						"in": "query",
						"required": true,
						"schema": {
							"type": "number"
						},
						"example": 2.3988324
					},
					{
						"name": "include",
						"in": "query",
						"required": false,
						"description": "Comma-separated extras. `geometry` adds the parcel polygon. An unknown value is rejected with 400 rather than ignored.",
						"schema": {
							"type": "string"
						},
						"examples": {
							"geometry": {
								"value": "geometry"
							}
						}
					}
				],
				"responses": {
					"200": {
						"description": "Parcel",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Parcelle"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/parcelles/{idu}": {
			"get": {
				"tags": [
					"Parcelles"
				],
				"summary": "One parcel by cadastral reference",
				"parameters": [
					{
						"name": "idu",
						"in": "path",
						"required": true,
						"description": "14-character IDU: INSEE code + prefix + section + number.",
						"schema": {
							"type": "string"
						},
						"example": "18033000IO0274"
					},
					{
						"name": "include",
						"in": "query",
						"required": false,
						"description": "Comma-separated extras. `geometry` adds the parcel polygon. An unknown value is rejected with 400 rather than ignored.",
						"schema": {
							"type": "string"
						},
						"examples": {
							"geometry": {
								"value": "geometry"
							}
						}
					}
				],
				"responses": {
					"200": {
						"description": "Parcel",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Parcelle"
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					}
				}
			}
		},
		"/api/v1/parcelles/{idu}/enrichments": {
			"get": {
				"tags": [
					"Parcelles"
				],
				"summary": "Everything known about a parcel",
				"description": "The full per-parcel payload behind the site’s info panel: risks, sales,\nurban planning, energy, nature, heritage, mobility, accessibility.\n\nThis is by far the most expensive endpoint — around 32 parallel PostGIS\nqueries against the parcel polygon, and it is not cached. It carries a\ntighter edge rate limit than the rest. Fetch it per parcel of interest,\nnot in a sweep.",
				"parameters": [
					{
						"name": "idu",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						},
						"example": "18033000IO0274"
					}
				],
				"responses": {
					"200": {
						"description": "Enrichments",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"idu": {
											"type": "string"
										},
										"codeInsee": {
											"type": "string"
										},
										"enrichments": {
											"$ref": "#/components/schemas/Enrichments"
										}
									}
								}
							}
						}
					},
					"400": {
						"$ref": "#/components/responses/InvalidParameter"
					},
					"401": {
						"$ref": "#/components/responses/Unauthorized"
					},
					"404": {
						"$ref": "#/components/responses/NotFound"
					},
					"429": {
						"$ref": "#/components/responses/RateLimited"
					},
					"503": {
						"$ref": "#/components/responses/Unavailable"
					}
				}
			}
		}
	},
	"components": {
		"securitySchemes": {
			"ApiKeyHeader": {
				"type": "apiKey",
				"in": "header",
				"name": "X-API-Key",
				"description": "Issued on request — email contact@lagrandecarte.fr."
			}
		},
		"responses": {
			"InvalidParameter": {
				"description": "A parameter is missing or malformed.",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"Unauthorized": {
				"description": "No key supplied, or the key is unknown or revoked.",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"NotFound": {
				"description": "No such région, département, commune or parcel.",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"RateLimited": {
				"description": "Per-minute rate limit or daily quota exhausted. `Retry-After` is set on the former.",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"Unavailable": {
				"description": "A downstream query failed. Safe to retry.",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			}
		},
		"schemas": {
			"Error": {
				"type": "object",
				"properties": {
					"error": {
						"type": "object",
						"properties": {
							"code": {
								"type": "string",
								"enum": [
									"missing_api_key",
									"invalid_api_key",
									"rate_limited",
									"quota_exceeded",
									"invalid_parameter",
									"not_found",
									"unavailable"
								]
							},
							"message": {
								"type": "string"
							},
							"documentation": {
								"type": "string"
							}
						}
					}
				}
			},
			"CodeNameList": {
				"type": "object",
				"properties": {
					"count": {
						"type": "integer"
					},
					"data": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"code": {
									"type": "string",
									"description": "Région or département code."
								},
								"codeInsee": {
									"type": "string",
									"description": "Commune INSEE code."
								},
								"name": {
									"type": "string"
								}
							}
						}
					}
				}
			},
			"Region": {
				"type": "object",
				"properties": {
					"kind": {
						"type": "string",
						"const": "region"
					},
					"code": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"areaKm2": {
						"type": "number"
					},
					"communeCount": {
						"type": "integer"
					},
					"departementCount": {
						"type": "integer"
					},
					"geometry": {
						"type": "object",
						"description": "GeoJSON Polygon or MultiPolygon, WGS84 (EPSG:4326).",
						"additionalProperties": true,
						"properties": {
							"type": {
								"type": "string",
								"enum": [
									"Polygon",
									"MultiPolygon"
								]
							},
							"coordinates": {
								"type": "array",
								"items": {}
							}
						}
					},
					"stats": {
						"$ref": "#/components/schemas/RegionStats"
					},
					"departements": {
						"$ref": "#/components/schemas/CodeNameList"
					}
				}
			},
			"Departement": {
				"type": "object",
				"properties": {
					"kind": {
						"type": "string",
						"const": "departement"
					},
					"code": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"regionCode": {
						"type": "string",
						"nullable": true
					},
					"regionName": {
						"type": "string",
						"nullable": true
					},
					"areaKm2": {
						"type": "number"
					},
					"communeCount": {
						"type": "integer"
					},
					"geometry": {
						"type": "object",
						"description": "GeoJSON Polygon or MultiPolygon, WGS84 (EPSG:4326).",
						"additionalProperties": true,
						"properties": {
							"type": {
								"type": "string",
								"enum": [
									"Polygon",
									"MultiPolygon"
								]
							},
							"coordinates": {
								"type": "array",
								"items": {}
							}
						}
					},
					"stats": {
						"$ref": "#/components/schemas/DeptStats"
					},
					"communes": {
						"$ref": "#/components/schemas/CodeNameList"
					}
				}
			},
			"Commune": {
				"type": "object",
				"properties": {
					"kind": {
						"type": "string",
						"const": "commune"
					},
					"codeInsee": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"deptCode": {
						"type": "string",
						"nullable": true
					},
					"deptName": {
						"type": "string",
						"nullable": true
					},
					"regionCode": {
						"type": "string",
						"nullable": true
					},
					"regionName": {
						"type": "string",
						"nullable": true
					},
					"areaKm2": {
						"type": "number"
					},
					"geometry": {
						"type": "object",
						"description": "GeoJSON Polygon or MultiPolygon, WGS84 (EPSG:4326).",
						"additionalProperties": true,
						"properties": {
							"type": {
								"type": "string",
								"enum": [
									"Polygon",
									"MultiPolygon"
								]
							},
							"coordinates": {
								"type": "array",
								"items": {}
							}
						}
					},
					"stats": {
						"$ref": "#/components/schemas/CommuneStats"
					}
				}
			},
			"Parcelle": {
				"type": "object",
				"properties": {
					"kind": {
						"type": "string",
						"const": "parcelle"
					},
					"idu": {
						"type": "string",
						"description": "Cadastral reference, 14 characters."
					},
					"codeInsee": {
						"type": "string"
					},
					"codeDep": {
						"type": "string"
					},
					"commune": {
						"type": "string"
					},
					"codeCom": {
						"type": "string"
					},
					"codeArr": {
						"type": "string",
						"nullable": true,
						"description": "Arrondissement, Paris/Lyon/Marseille only."
					},
					"section": {
						"type": "string"
					},
					"numero": {
						"type": "string"
					},
					"feuille": {
						"type": "integer"
					},
					"contenance": {
						"type": "integer",
						"description": "Cadastral area in m², as recorded by the DGFiP."
					},
					"geometry": {
						"type": "object",
						"description": "GeoJSON Polygon or MultiPolygon, WGS84 (EPSG:4326).",
						"additionalProperties": true,
						"properties": {
							"type": {
								"type": "string",
								"enum": [
									"Polygon",
									"MultiPolygon"
								]
							},
							"coordinates": {
								"type": "array",
								"items": {}
							}
						}
					}
				}
			},
			"CommuneStats": {
				"type": "object",
				"description": "Per-commune statistics. Every block is null or empty when the source has no data for that commune — absence is never zero.",
				"additionalProperties": true,
				"properties": {
					"finances": {
						"description": "Municipal accounts per year (DGFiP / OFGL).",
						"nullable": true
					},
					"revenus": {
						"description": "Median income, poverty rate, interdecile ratio (INSEE Filosofi).",
						"nullable": true
					},
					"population": {
						"description": "Population per census year (INSEE recensement).",
						"nullable": true
					},
					"logement": {
						"description": "Housing stock per year, vacancy and second homes (INSEE).",
						"nullable": true
					},
					"logementRP": {
						"description": "Main-residence detail (INSEE).",
						"nullable": true
					},
					"equipements": {
						"description": "Facility counts by family (INSEE BPE).",
						"nullable": true
					},
					"emploi": {
						"description": "Employment and unemployment (INSEE).",
						"nullable": true
					},
					"securite": {
						"description": "Recorded offences per year and category (SSMSI). Recorded facts, dependent on reporting and on police presence.",
						"nullable": true
					},
					"election": {
						"description": "Turnout and results (Ministère de l’Intérieur).",
						"nullable": true
					},
					"maire": {
						"description": "Mayor in office (RNE, refreshed monthly).",
						"nullable": true
					},
					"politicalScore": {
						"description": "Left/right positioning derived from published results.",
						"nullable": true
					},
					"municipalWave": {
						"description": "Three-election municipal trend.",
						"nullable": true
					},
					"presidentialWave": {
						"description": "Three-election presidential trend.",
						"nullable": true
					},
					"rankings": {
						"description": "National and departmental ranks on the main indicators.",
						"nullable": true
					},
					"climateAnomaly": {
						"description": "Temperature anomaly versus the reference period (Météo-France).",
						"nullable": true
					},
					"travelTime": {
						"description": "Road and rail travel times to Paris and to the préfecture.",
						"nullable": true
					},
					"waterQuality": {
						"description": "Tap-water compliance: nitrates, pesticides, bacteriology, lead.",
						"nullable": true
					},
					"airQuality": {
						"description": "Regulated pollutants (LCSQA / Géod’air). Ozone is a peak-season MDA8, not an annual mean.",
						"nullable": true
					},
					"apl": {
						"description": "Accessibility to general practitioners (DREES APL), in consultations per standardised inhabitant per year.",
						"nullable": true
					},
					"namedServices": {
						"description": "Nearest named hospital, school, station, supermarket.",
						"nullable": true
					},
					"geography": {
						"description": "Elevation, distance to coast and mountains.",
						"nullable": true
					},
					"nuisibles": {
						"description": "Reported pests (ANSES, GBIF).",
						"nullable": true
					},
					"anfr": {
						"description": "Mobile-network supports and 5G presence (ANFR).",
						"nullable": true
					}
				}
			},
			"DeptStats": {
				"type": "object",
				"description": "Per-département statistics. Aggregates are computed over the constituent communes.",
				"additionalProperties": true,
				"properties": {
					"population": {
						"description": "Latest population.",
						"nullable": true
					},
					"medianIncome": {
						"description": "Median household income.",
						"nullable": true
					},
					"povertyRate": {
						"description": "Poverty rate, percent.",
						"nullable": true
					},
					"unemploymentRate": {
						"description": "Unemployment rate, percent.",
						"nullable": true
					},
					"totalHousing": {
						"description": "Housing stock.",
						"nullable": true
					},
					"vacantHousing": {
						"description": "Vacant dwellings.",
						"nullable": true
					},
					"equipements": {
						"description": "Total facility count.",
						"nullable": true
					},
					"crimeRate": {
						"description": "Recorded offences per 1 000 inhabitants.",
						"nullable": true
					},
					"finances": {
						"description": "Departmental accounts per year (OFGL).",
						"nullable": true
					},
					"lifeExpectancy": {
						"description": "Life expectancy at birth.",
						"nullable": true
					},
					"rankings": {
						"description": "Rank among the 101 départements.",
						"nullable": true
					},
					"climateAnomaly": {
						"description": "Temperature anomaly versus the reference period.",
						"nullable": true
					},
					"populationTimeline": {
						"description": "Population per census year.",
						"nullable": true
					},
					"revenus": {
						"description": "Income timeline.",
						"nullable": true
					},
					"logement": {
						"description": "Housing timeline.",
						"nullable": true
					},
					"logementRP": {
						"description": "Main-residence detail.",
						"nullable": true
					},
					"equipementsDetail": {
						"description": "Facility counts by family.",
						"nullable": true
					},
					"emploi": {
						"description": "Employment detail.",
						"nullable": true
					},
					"securite": {
						"description": "Recorded offences per year and category.",
						"nullable": true
					},
					"election": {
						"description": "Turnout and results.",
						"nullable": true
					},
					"apl": {
						"description": "Accessibility to general practitioners.",
						"nullable": true
					},
					"politicalScore": {
						"description": "Left/right positioning.",
						"nullable": true
					},
					"municipalWave": {
						"description": "Municipal trend.",
						"nullable": true
					},
					"presidentialWave": {
						"description": "Presidential trend.",
						"nullable": true
					}
				}
			},
			"RegionStats": {
				"type": "object",
				"description": "Per-région statistics.",
				"additionalProperties": true,
				"properties": {
					"population": {
						"description": "Latest population.",
						"nullable": true
					},
					"medianIncome": {
						"description": "Median household income.",
						"nullable": true
					},
					"povertyRate": {
						"description": "Poverty rate, percent.",
						"nullable": true
					},
					"unemploymentRate": {
						"description": "Unemployment rate, percent.",
						"nullable": true
					},
					"totalHousing": {
						"description": "Housing stock.",
						"nullable": true
					},
					"vacantHousing": {
						"description": "Vacant dwellings.",
						"nullable": true
					},
					"equipements": {
						"description": "Total facility count.",
						"nullable": true
					},
					"crimeRate": {
						"description": "Recorded offences per 1 000 inhabitants.",
						"nullable": true
					},
					"finances": {
						"description": "Regional accounts per year.",
						"nullable": true
					},
					"pib": {
						"description": "GDP and GDP per capita per year.",
						"nullable": true
					},
					"demography": {
						"description": "Natural and migratory balance per period.",
						"nullable": true
					},
					"lifeExpectancy": {
						"description": "Life expectancy at birth.",
						"nullable": true
					},
					"rankings": {
						"description": "Rank among the 18 régions.",
						"nullable": true
					},
					"climateAnomaly": {
						"description": "Temperature anomaly versus the reference period.",
						"nullable": true
					},
					"election": {
						"description": "Turnout.",
						"nullable": true
					},
					"politicalScore": {
						"description": "Left/right positioning.",
						"nullable": true
					},
					"municipalWave": {
						"description": "Municipal trend.",
						"nullable": true
					},
					"presidentialWave": {
						"description": "Presidential trend.",
						"nullable": true
					}
				}
			},
			"Enrichments": {
				"type": "object",
				"description": "Everything attached to one parcel. Lists are empty and objects null when nothing applies — never a placeholder value.",
				"additionalProperties": true,
				"properties": {
					"address": {
						"description": "Best BAN address for the parcel.",
						"nullable": true
					},
					"banAddresses": {
						"description": "All BAN addresses inside the parcel footprint.",
						"nullable": true
					},
					"dvf": {
						"description": "Sales recorded on this parcel (DVF).",
						"nullable": true
					},
					"dvfNearby": {
						"description": "Comparable sales nearby.",
						"nullable": true
					},
					"dvfEstimate": {
						"description": "Indicative price per m² derived from nearby sales. An order of magnitude, not a valuation.",
						"nullable": true
					},
					"dpe": {
						"description": "Energy performance diagnostics published near the parcel (ADEME).",
						"nullable": true
					},
					"catnat": {
						"description": "Natural-disaster orders for the commune (GASPAR).",
						"nullable": true
					},
					"communeRisks": {
						"description": "Risks listed for the commune (DDRM).",
						"nullable": true
					},
					"riskPlans": {
						"description": "PPRN / PPRT / PPRM / AZI procedures.",
						"nullable": true
					},
					"tris": {
						"description": "Territoires à Risque important d’Inondation.",
						"nullable": true
					},
					"floodMarkers": {
						"description": "Historic flood markers.",
						"nullable": true
					},
					"rga": {
						"description": "Clay shrink-swell exposure.",
						"nullable": true
					},
					"radon": {
						"description": "Commune radon potential, categories 1 to 3.",
						"nullable": true
					},
					"seisme": {
						"description": "Seismic zone, 1 to 5.",
						"nullable": true
					},
					"icpe": {
						"description": "Classified installations nearby.",
						"nullable": true
					},
					"pollutedSites": {
						"description": "Former industrial sites (BASIAS). Past activity, not confirmed pollution.",
						"nullable": true
					},
					"qpv": {
						"description": "Priority urban district, if the parcel is inside one.",
						"nullable": true
					},
					"gpu": {
						"description": "Local plan zoning covering the parcel.",
						"nullable": true
					},
					"gpuPrescriptions": {
						"description": "Surface prescriptions from the urban plan.",
						"nullable": true
					},
					"sup": {
						"description": "Servitudes d’utilité publique.",
						"nullable": true
					},
					"rpg": {
						"description": "Declared crop group (RPG).",
						"nullable": true
					},
					"rpgBio": {
						"description": "Organic certification status (CartoBio).",
						"nullable": true
					},
					"aoc": {
						"description": "Delimited AOC wine area.",
						"nullable": true
					},
					"clc": {
						"description": "Corine Land Cover class.",
						"nullable": true
					},
					"bdforet": {
						"description": "Forest type (BD Forêt).",
						"nullable": true
					},
					"zonesVegetation": {
						"description": "Vegetation zones (BD TOPO).",
						"nullable": true
					},
					"soilPh": {
						"description": "Soil pH at 0–5 cm and 5–15 cm (SoilGrids).",
						"nullable": true
					},
					"protectedAreas": {
						"description": "Protected areas overlapping the parcel, strongest first.",
						"nullable": true
					},
					"coursEau": {
						"description": "Nearest watercourse.",
						"nullable": true
					},
					"planEau": {
						"description": "Nearest water body.",
						"nullable": true
					},
					"nearestRiverWater": {
						"description": "Nearest river-quality monitoring stations.",
						"nullable": true
					},
					"waterQuality": {
						"description": "Tap-water compliance for the commune.",
						"nullable": true
					},
					"monuments": {
						"description": "Protected historic monuments nearby (Mérimée).",
						"nullable": true
					},
					"sirene": {
						"description": "Business establishments within 50 m (SIRENE).",
						"nullable": true
					},
					"sireneTotal": {
						"description": "Count of those establishments.",
						"nullable": true
					},
					"roadTraffic": {
						"description": "Annual average daily traffic nearby, flagged when approximated from the same numbered road.",
						"nullable": true
					},
					"travelTime": {
						"description": "Travel times to Paris and to the préfecture.",
						"nullable": true
					},
					"fibre": {
						"description": "FTTH deployment status at the nearest building (ARCEP).",
						"nullable": true
					},
					"nearestIrve": {
						"description": "Nearest EV charge point.",
						"nullable": true
					},
					"nearestMobile": {
						"description": "Nearest mobile mast (ANFR).",
						"nullable": true
					},
					"schools": {
						"description": "Nearby schools with success rate and IPS.",
						"nullable": true
					},
					"nearestHospital": {
						"description": "Nearest hospital (FINESS).",
						"nullable": true
					},
					"nearestMsp": {
						"description": "Nearest multi-professional health centre.",
						"nullable": true
					},
					"nearestPharmacy": {
						"description": "Nearest pharmacy.",
						"nullable": true
					},
					"nearestGare": {
						"description": "Nearest railway station.",
						"nullable": true
					},
					"nearestGareTgv": {
						"description": "Nearest TGV station.",
						"nullable": true
					},
					"nearestAirport": {
						"description": "Nearest airport.",
						"nullable": true
					},
					"nearestSupermarket": {
						"description": "Nearest supermarket (OSM).",
						"nullable": true
					},
					"nearestHypermarket": {
						"description": "Nearest hypermarket.",
						"nullable": true
					},
					"nearestConvenience": {
						"description": "Nearest convenience store.",
						"nullable": true
					},
					"nearestMarketplace": {
						"description": "Nearest market place.",
						"nullable": true
					},
					"nearbyServices": {
						"description": "Aggregate counts of nearby services.",
						"nullable": true
					},
					"aerodromeServitude": {
						"description": "Aerodrome easement zone.",
						"nullable": true
					},
					"bdcaviteNearby": {
						"description": "Recorded underground cavities nearby.",
						"nullable": true
					},
					"bdmvtNearby": {
						"description": "Recorded ground movements nearby.",
						"nullable": true
					},
					"geography": {
						"description": "Elevation, distance to coast and mountains.",
						"nullable": true
					},
					"old": {
						"description": "Historic aerial imagery availability.",
						"nullable": true
					}
				}
			}
		}
	}
}