Integrez les permis de construire France dans votre produit en < 1 jour
Ne perdez pas 2 semaines a coder l'ingestion CSV Sitadel, le parsing des 4 schemas, le geocoding batch BAN, le pipeline SIRENE. On l'a fait pour vous, avec SDK Python, OpenAPI spec, Postman collection et webhooks HMAC.
Ce qui coince aujourd'hui
Sources publiques techniquement fragiles
Sitadel = 4 CSVs mensuels avec conventions differentes (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.
Time-to-market contraint
Votre investisseur attend des resultats dans 3 mois. Passer 3 semaines sur l'ingestion de data publique est un non-starter. Vous avez besoin d'un 'data layer as a service'.
Volume de requêtes variable (demand spike au launch)
Vous ne savez pas a priori si votre produit va faire 500 ou 50k req/jour. Lock-in un contrat enterprise avant validation = risque. Vous voulez du PAYG ou un pricing qui scale.
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 ...
}Free tier genereux pour POC
500 req/mois gratuit, pas de carte bleue. Suffisant pour prototyper + intégration test. Quand le volume decolle, upgrade self-serve via Stripe Checkout (4 plans visibles, pas de 'contact sales' wall).
DVF cross-ref pour enrichir votre data layer
Pour chaque permis ingere dans votre produit, un appel REST retourne les top 5 transactions immobilieres voisines avec valeur fonciere, surface bati, type. 5 ms de latence (B-tree lookup), pas un proxy sur Etalab. Vous evitez de coder votre propre pipeline DVF (~5j-dev) et vous heritez du recalcul mensuel automatise.
from permisapi_client import PermisAPI
client = PermisAPI(api_key="pk_live_...")
matches = client.permits.dvf("PC07404021K1", limit=5)
for m in matches["matches"]:
print(m["valeur_fonciere"], m["surface_reelle_bati"])Cross-ref PLU pour scoring constructibilité
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("PC07404021K1")
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("PC07404021K1")
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 6 endpoints clés en langage naturel. Vos users qui utilisent Claude Desktop 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 le POC (5 000 req/mois, 10 alertes, historique 6 mois). Passez en Pro quand vos vrais users arrivent (50 000 req/mois, enrichment SIRENE complet, 50 alertes).
ROI attendu : Eviter 3 semaines-dev d'ingestion = 15-25k EUR d'equivalent freelance.
Si vous etes dans ce cas, ce n'est probablement pas pour vous
- Startup pre-product sans users (focalisez sur le core, revenez quand vous avez 50+ users)
- Produit 100% B2C grand public (permis = data B2B)
- Exigence latence < 50 ms p95 sur endpoint API (on est a 3-5s p95 avec cold start Railway)
Startup PropTech : intégrer PermisAPI dans un pipeline Next.js + Postgres (cache TTL + webhook receiver)
Lire le tutoriel step-by-step avec code copiable →