API DVF — Mode d'emploi v7.18

Microservice autonome (SQLite, pas de MySQL) — DVF Etalab/Cerema, permis Sitadel, piscines OSM. Réponses JSON. Cette page : ?action=help ou l'URL nue.

Mode d'emploi. Base d'appel : https://dvf.facil.immo/ (HTTP GET, sauf rebuild*). L'IDU = identifiant cadastral 14 caractères (ex. 33550000CI0217) ; les 2 premiers = département. Les actions ADMIN exigent &token=CRON_TOKEN (cf. config.local.php). Les gros rebuilds passent par le CLI php cron_build_sqlite.php --dept=33 --force (pas de timeout).

Référence des sources de données (geo-dvf, Cerema DVF+, trou de couverture, fix) : docs/DVF_SOURCES_DONNEES.md · règle #40 · GUIDE §21.

DVF
ActionMéthodeParamètresDescriptionExemple
search GET idu Mutations DVF d'une parcelle (SQLite ou CSV + enrichissement Cerema API). Action par défaut. ?idu=33550000CI0217
extended GET idu, lon, lat
opt: contenance
Recherche étendue par bbox GPS — pour les grandes parcelles (>2000 m²). ?action=extended&idu=33550000CI0217&lon=-0.5727&lat=44.7697&contenance=360
unite GET idu Unité foncière complète (porteuse + parcelles associées) d'un IDU. ?action=unite&idu=33550000CI0217
search_by_address GET num, voie, cp
opt: citycode
Parcelles candidates à partir de l'adresse NOTARIALE DVF (≥2020 Etalab). Signal indépendant du géocodeur. ?action=search_by_address&num=4&voie=Rue%20Buffon&cp=33140&citycode=33550
Données / Santé
ActionMéthodeParamètresDescriptionExemple
stats GET Inventaire : départements disponibles (CSV + SQLite), fichiers Cerema & Etalab. ?action=stats
dvf_status GET dept Le .db du département est-il prêt ? (endpoint léger pour le polling JS). ?action=dvf_status&dept=33
db_health GET dept SANTÉ du .db : lignes par source (Etalab/Cerema), % adresses, plage d'années, verdict (ok / etalab_only / cerema_only / absent). Détecte la régression « .db sans Etalab ». ?action=db_health&dept=33
dvf_raw GET idu OU voie OU prefix
opt: dept, insee, num, source
DIAGNOSTIC : dump brut DVF. Par IDU (id_parcelle + ancien_id_parcelle), par rue (LIKE), par préfixe d'IDU (cluster voisins). Avec source=1 : GREP des fichiers SOURCE bruts (Etalab .gz + Cerema CSV) que le build lit → si l'IDU est dans la source mais pas dans le .db = build qui saute la ligne ; absent partout = pas dans DVF open data. ?action=dvf_raw&idu=33550000CI0217&source=1
test GET Validation du format CSV (parsing) + version de l'API. ?action=test
Sitadel / Piscine
ActionMéthodeParamètresDescriptionExemple
search_sitadel GET idu
opt: uf, num, voie, insee
Permis de construire DIDO/Sitadel par IDU (+ UF + adresse) → détection piscine déclarée. ?action=search_sitadel&idu=33550000CI0217
sitadel_samples GET dept
opt: limit, order (random|recent|old), year
Échantillon d'adresses avec piscine déclarée pour un département. ?action=sitadel_samples&dept=33&limit=20
sitadel_stats GET dept Stats de validation de la règle piscine (GROUP BY TYP_ANNEXE × I_PISCINE × période). ?action=sitadel_stats&dept=33
sitadel_raw GET idu OU insee + voie
opt: num
DIAGNOSTIC : dump brut des lignes Sitadel d'une parcelle/adresse (vérif alignement colonnes). ?action=sitadel_raw&idu=40192000AW1041
OSM
ActionMéthodeParamètresDescriptionExemple
osm_pools GET bbox Piscines OpenStreetMap dans une emprise (signal « visible », ODbL). bbox=lat_min,lon_min,lat_max,lon_max. ?action=osm_pools&bbox=44.769,-0.573,44.770,-0.572
Admin / Build
ActionMéthodeParamètresDescriptionExemple
rebuild
ADMIN
POST/GET dept, token Rebuild du .db SQLite DVF d'un département (Etalab + Cerema). HTTP ~60 s OVH : préférer le CLI cron_build_sqlite.php --dept=XX --force pour les gros depts. ?action=rebuild&dept=33&token=CRON_TOKEN
rebuild_sitadel
ADMIN
GET dept, token Build du .db SQLite Sitadel (permis/piscine) d'un département. ?action=rebuild_sitadel&dept=33&token=CRON_TOKEN
Aide
ActionMéthodeParamètresDescriptionExemple
help
page
GET Cette page (mode d'emploi + tableau des endpoints + self-check d'alignement). ?action=help

Règle d'or #39 — Tout nouvel endpoint (nouveau case dans index.php) DOIT être déclaré dans $ENDPOINTS (help.php). Le bandeau ci-dessus passe au ROUGE sinon : c'est le garde-fou qui empêche d'oublier la mise à jour.