L'API
Les mêmes faits que les pages, en JSON. Sans clé, sans quota, sans compte : la matière est publiée sous Licence Ouverte, et la faire payer reviendrait à revendre ce que l'État donne. Les chemins et les noms de champs sont en anglais ; les valeurs du document restent telles quelles, en français.
Les quatre adresses
/api/plan/{insee}le document d'urbanisme d'une commune, ses zones, l'état de sa lecture, et - quand la commune est compilée - la règle générale de chaque zone pour chacune des sept questions.
Essayer : https://edifiable.fr/api/plan/31395
/api/plan/{insee}/zone/{zone}une zone du règlement : ses règles en clair, chacune avec sa valeur, la condition qui la déclenche et la phrase du document qui la porte, puis ses articles mot pour mot.
/api/plan/{insee}/street/{street}la zone au droit d'une rue, les zones qu'elle longe à 120 m, ce que le plan graphique impose ici, les règles du chapitre, les prescriptions et servitudes dessinées autour.
Essayer : https://edifiable.fr/api/plan/31395/street/avenue-jacques-douzans
/api/plan/{insee}/permitles pièces d'une demande de permis de construire pour une maison individuelle, et ce qui les déclenche sur ce territoire.
Le contrat OpenAPI 3.1, généré depuis le code qui sert ces adresses : https://edifiable.fr/api/openapi.json. Chaque réponse porte un en-tête Link vers ce contrat et vers cette page.
Ce qu'une réponse porte
- Une valeur compilée ne voyage jamais seule. Chaque cas d'une règle rend sa
value, la conditionwhenqui la déclenche et lasentencedu règlement qui la porte. La zone UA de Muret plafonne à 9 m dans la bande de 15 m et à 6 m au-delà : la condition fait partie de la réponse. - Un cas dont la phrase ne se retrouve plus dans le document n'est pas rendu, et
incomplete: truele dit. Un chiffre que rien ne soutient ne sort par aucune surface. - Les sept questions ont une clé stable (
topic) : usage, hauteur, emprise, voie, limites, stationnement, verts. La question en français est dansquestion. nullveut dire « la source ne le dit pas », jamais une chaîne vide ni un zéro. Une commune sans document répond 200 avecdocument: null: c'est un fait, pas une erreur.- La même enveloppe sur chaque succès :
source(d'où vient la donnée),served_by(qui a répondu),terms,documentation,notice(la retenue : une lecture automatique ne remplace pas le certificat d'urbanisme). Ces noms sont réservés à l'enveloppe. - Toute adresse dans un corps est absolue, et chaque réponse nomme la page HTML (
page_url) et son jumeau Markdown (markdown_url) qui disent la même chose à une personne et à un agent.
La promesse
- Additive, sans numéro de version. Un champ peut apparaître ; aucun ne disparaît ni ne change de sens sous un appelant, et une adresse ne bouge pas. Les adresses du premier jour (
/api/plu/…,/api/voie/…,/api/permis/…) répondent 308 vers les adresses actuelles. - Un ETag faible sur chaque réponse,
If-None-Matchhonoré, 304 vide. Chaque réponse se range cinq minutes au bord ; les sources amont sont rangées une journée. - CORS ouvert (
access-control-allow-origin: *),etagetlinkexposés. Pas de borne de débit : rien n'est à protéger. - Hors index (
x-robots-tag: noindex) : lisible par une machine, pas indexable comme une page.
Les refus
Tout refus est un application/problem+json (RFC 9457), sans enveloppe et no-store. Son champ type est l'une des ancres ci-dessous ; instance porte le chemin demandé, et received ce qui a été lu quand cela aide à corriger.
invalid-insee-code400- le code INSEE ne fait pas cinq caractères (2A et 2B en Corse). Un code postal n'est pas un code INSEE.
municipality-not-found404- aucune commune ne porte ce code. Les codes changent au 1er janvier quand des communes fusionnent.
zone-not-found404- aucun article n'est lu pour cette zone. Le refus énumère les zones lues de la commune.
invalid-street400- le nom de voie fait moins de deux caractères.
street-not-found404- aucune voie de ce nom dans la commune à la Base Adresse Nationale.
method-not-allowed405- la méthode n'est ni GET, ni HEAD, ni OPTIONS. La réponse porte `Allow`.
not-found404- rien n'est servi à cette adresse sous /api/.
Les autres formes des mêmes faits
- Le jumeau Markdown de chaque page. Toute page de commune, de zone ou de rue existe aussi à la même adresse suivie de
.md: /plu/muret-31395.md, /plu/muret-31395/ua.md, /plu/muret-31395/voie/avenue-jacques-douzans.md. C'est la forme la plus simple à lire pour un agent, et chaque page HTML la déclare enrel="alternate". - Le serveur MCP, à https://edifiable.fr/mcp (alias
/api/mcp) : sans état, POST seulement, révisions 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. Les clients à poignéeinitializeet les clients modernes passent par le même point d'entrée. 4 outils, qui rendent le même texte que les jumeaux : get_french_urbanism_zone_rules, search_french_urbanism_regulation, get_french_urbanism_rules_for_street, get_french_building_permit_pieces. Déclaré à l'annuaire officiel sous le nomfr.edifiable/edifiable. - /llms.txt, ce que le site sert, pour les assistants.
Citer
Les données viennent du Géoportail de l'urbanisme, du Code officiel géographique, de Géorisques et de la Base Adresse Nationale, sous Licence Ouverte 2.0 (Etalab) : la réutilisation est libre, en citant la source. Le champ source de chaque réponse porte la phrase à recopier.