Integrez les permis de construire de France dans votre produit en < 1 jour
Ne perdez pas 2 semaines a coder l'import des données Sitadel (4 formats CSV différents), le geocoding par lot BAN, l'enrichissement SIRENE. Tout est déjà livre : SDK Python officiel, specification OpenAPI 3, collection Postman, notifications webhook signees cryptographiquement (HMAC).
Ce qui coince aujourd'hui
Sources publiques techniquement fragiles
Sitadel = 4 CSVs mensuels avec conventions différentes (35 colonnes, varchars tronques, dates multi-format). BAN = limite 50 req/s sans auth. SIRENE = 7 req/s, JSON nested, NAF format a points. Maintenance = > 2j-dev / mois.
Délai de mise en marché contraint
Votre investisseur attend des resultats dans 3 mois. Passer 3 semaines sur l'integration de données publiques est impensable. Vous avez besoin d'une couche de données déjà servie (data-layer-as-a-service).
Volume de requêtes variable (pic de demande au lancement)
Vous ne savez pas a priori si votre produit va faire 500 ou 50k req/jour. Vous engager dans un contrat Enterprise avant validation marche = risque. Vous voulez du paiement a l'usage (pay-as-you-go) ou une tarification qui s'adapte au volume.
Ce que PermisAPI apporte
SDK Python officiel (typed, async-ready)
`pip install permisapi-client`. Client sync + async, pagination iter_all(), exceptions typees (PermisAPIRateLimited, PermisAPIQuotaExceeded). Couvert par 15 tests unit via respx.
from permisapi_client import PermisAPI
client = PermisAPI(api_key="pk_live_...")
for p in client.permits.iter_all(dep_code="75"):
print(p["num_pa"], p["adr_localite_ter"])Webhook HMAC pour alertes temps reel
POST signes HMAC-SHA256 avec replay protection (idempotent sur alert_id + permit_id). Compatible Next.js API route, Vercel Edge Functions, Cloudflare Workers.
// Next.js API route
export async function POST(req) {
const body = await req.text();
const sig = req.headers.get("x-permisapi-signature");
const expected = crypto.createHmac("sha256",
process.env.WEBHOOK_SECRET).update(body).digest("hex");
if (sig !== expected) return new Response("401", {status:401});
// processer le payload ...
}Plan gratuit généreux pour preuve de concept (POC)
500 req/mois gratuit, pas de carte bleue. Suffisant pour prototyper et tester l'intégration. Quand le volume décolle, montez de plan en libre-service via Stripe (4 plans visibles, pas de mur 'contactez notre commercial').
Prix au m² des ventes voisines pour enrichir vos données
Pour chaque permis intégré dans votre produit, un appel REST retourne les top 5 ventes immobilieres voisines (données publiques DVF Etalab) avec valeur fonciere, surface batie, type. 5 ms de latence (recherche par index), pas un proxy sur Etalab. Vous evitez de coder votre propre pipeline DVF (environ 5 jours de développement) et vous heritez du recalcul mensuel automatise.
from permisapi_client import PermisAPI
client = PermisAPI(api_key="pk_live_...")
matches = client.permits.dvf("0930662500027", limit=5)
for m in matches["matches"]:
print(m["valeur_fonciere"], m["surface_reelle_bati"])Zonage urbanisme PLU pour scoring constructibilite
Pour chaque permis, l'endpoint /plu retourne le zonage urbanisme officiel (UA/UB urbain, AU à urbaniser, A agricole, N naturelle) avec verdict booléen constructible et raison juridique. Source live Géoportail de l'Urbanisme. Idéal pour enrichir ton produit avec un signal de constructibilité fiable, sans avoir à scraper 36 000 PLU communaux. Plan Pro et plus.
plu = client.permits.plu("0930662500027")
if plu["has_plu"]:
z = plu["zonage"]
if z["constructible"]:
score += 50 # zone constructible
else:
score -= 30 # zone protégéeCross-ref Géorisques pour scoring risques
Pour chaque permis, l'endpoint /risks retourne les risques naturels et technologiques connus sur la commune (inondation, séisme, argile, ICPE) avec un score agrégé 0-100. Idéal pour enrichir un scoring de pré-faisabilité dans ton produit. Source live API Géorisques (BRGM + Ministère), gratuit et officiel. Plan Pro et plus.
risks = client.permits.risks("0930662500027")
risk_score = risks["risk_score"]
if risk_score > 60:
flag_high_risk(permit_id)
for r in risks["risks"]:
if r["has_ppr"]:
store_ppr(permit_id, r["ppr_type"])MCP server pour intégrations LLM (Claude / ChatGPT / Cursor)
Notre serveur MCP officiel (permisapi-mcp sur PyPI) permet à n'importe quel client Model Context Protocol-compatible d'appeler les 18 outils en langage naturel : recherche, score MDB et son explication transparente (les 11 signaux détaillés), prix DVF voisins, parcelle cadastre, parcelles voisines, polygone GeoJSON custom, statistiques densité commune, budget chantier estimé (Capeb + INSEE ICP-BT), entreprises BTP locales par lot (SIRENE) et plus. Vos users qui utilisent Claude Desktop, Claude.ai web (OAuth zéro install) ou Cursor peuvent enrichir leurs prompts avec PermisAPI sans coder. Gratuit pour tous les plans (limité uniquement par le quota du plan).
# Côté user final - 1 commande pip install permisapi-mcp # Puis dans Claude / Cursor / Windsurf : "Liste les permis que mon scoring algorithme va analyser cette semaine, dans le 33, score > 70"
OpenAPI 3.0 spec exportable
https://api.permisapi.fr/openapi.json. Genere votre propre SDK via openapi-generator si Python / TS ne vous conviennent pas. PHP, Ruby, Java, Go tous generables.
docker run --rm -v "${PWD}:/local" \
openapitools/openapi-generator-cli generate \
-i /local/openapi.json \
-g php -o /local/sdk-phpPlan recommande pour ce profil
Demarrez en Explorer pour la preuve de concept (5 000 req/mois, 10 alertes, historique 6 mois). Passez en Pro quand vos vrais utilisateurs arrivent (50 000 req/mois, enrichissement SIRENE complet, 50 alertes).
ROI attendu : Eviter 3 semaines de développement d'integration = 15-25 k€ d'equivalent freelance.
Si vous etes dans ce cas, ce n'est probablement pas pour vous
- Startup en pre-product (pas encore d'utilisateurs reels) : concentrez-vous sur le coeur de produit, revenez quand vous avez 50+ utilisateurs.
- Produit 100% B2C grand public (les permis sont une donnee B2B).
- Exigence de temps de reponse < 50 ms (95e percentile) : on est a 3-5 s sur le 95e percentile, avec un demarrage a froid Railway.
Startup PropTech : intégrer PermisAPI dans un pipeline Next.js + Postgres (cache TTL + récepteur webhook)
Lire le tutoriel pas a pas avec code pret a copier →