PermisAPI
03 · PropTech

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ée

Cross-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-php

Plan recommande pour ce profil

Plan Explorer puis Pro
49 puis 199 € / mois

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.

Voir tous les plans

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.
Tutoriel complet

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 →