PermisAPI
Docs

Démarrer avec PermisAPI.

Trois façons d'utiliser PermisAPI selon votre profil. Toutes partent de la même clé d'API gratuite. Choisissez celle qui vous parle ; les autres sections restent accessibles plus bas.

Premiers pas selon votre profil

01 - Sans coder

Tableau de bord visuel

Explorez l'API depuis une interface graphique : sélecteurs déroulants, boutons, carte interactive avec polygones cadastre. Aucune ligne de code.

  1. 01Connectez-vous au tableau de bord avec votre clé d'API
  2. 02Ouvrez « Explorer sans coder » dans les actions principales
  3. 03Choisissez un cas d'usage typique (marchand de biens, architecte, PropTech) ou un onglet précis
  4. 04Renseignez quelques filtres, cliquez « Lancer la recherche », les résultats s'affichent sur la carte
Ouvrir le tableau de bordVoir un cas marchand de biens
02 - Avec Claude / ChatGPT

Connecteur MCP officiel

Demandez en français à votre assistant IA ; il appelle les bonnes fonctions PermisAPI pour vous. Fonctionne avec Claude Desktop, Cursor, Windsurf. Gratuit pour tous les plans.

  1. 01Installez le connecteur en une commande : pip install permisapi-mcp
  2. 02Renseignez votre clé d'API dans la configuration de votre assistant (Claude Desktop, Cursor, Windsurf)
  3. 03Redémarrez l'application
  4. 04Demandez en français : « trouve les permis de logement à Bordeaux ce mois avec un score d'opportunité > 70 »
Voir le guide MCP completCompatible Claude / ChatGPT / Cursor
03 - Avec du code

SDK Python ou appels HTTP

Intégrez PermisAPI dans votre application ou pipeline de données. SDK Python officiel, ou appels HTTP REST directs (curl, fetch, requests, etc.) avec n'importe quel langage.

  1. 01Récupérez votre clé d'API sur le tableau de bord
  2. 02Installez le SDK Python : pip install permisapi-client (ou utilisez curl, fetch, etc.)
  3. 03Authentifiez chaque appel avec l'entête X-API-Key : VOTRE_CLE
  4. 04Voyez la référence des endpoints juste en dessous, et la doc Swagger interactive pour les schémas complets
Aller à la référence des endpointsOpenAPI / Swagger UI

Vous pouvez combiner les trois chemins. Par exemple : configurer une alerte webhook depuis l'explorateur visuel, recevoir les notifications dans Make ou Zapier, et utiliser le SDK Python dans un script qui enrichit votre CRM.

Tester dans Postman

Essayez l'API en 5 minutes depuis Postman

Collection officielle PermisAPI prête à l'emploi : 34 requêtes organisées en 7 dossiers (Démarrage, Parcourir, Analyser, Investiguer, Entreprises, Statistiques, Automations). 3 exemples préremplis Paris / Saint-Denis / Nice avec valeurs réelles testées en prod.

  1. 01Récupérez votre clé d'API sur le tableau de bord (plan Free 500 req/mois sans carte bancaire)
  2. 02Cliquez sur Tester dans Postman ci-dessous, ou téléchargez la collection JSON
  3. 03Collez votre clé dans la variable de collection API_KEY
  4. 04Lancez Health check puis Mon compte pour valider, puis explorez les 7 dossiers

Aucun compte Postman requis pour télécharger la collection. Importez le fichier .json dans n'importe quel client API : Postman, Insomnia, Bruno, Hoppscotch, etc.

Référence technique

Référence des endpoints (pour développeurs)

Tous les endpoints avec exemples curl / Python / JavaScript prêts à copier. Pour la référence complète avec schémas et codes d'erreur, voyez Swagger UI.

01

1. Obtenir une clé

Rends-toi sur la page pricing et clique Demarrer gratuitement. Tu recois immediatement ta cle au format pk_live_.... Elle est aussi copiee dans localStorage pour le dashboard.

Aucune carte requise pour le plan Free (500 req/mois).

01.5

1.5. MCP server (Claude / ChatGPT / Cursor)

Pour utiliser PermisAPI dans Claude Desktop, Cursor ou Windsurf en langage naturel sans coder : pip install permisapi-mcp et configure ton client MCP. Guide complet sur permisapi.fr/mcp. 18 outils, gratuit pour tous les plans, installation en 2 minutes (ou OAuth web sans installation pour Claude.ai).

02

2. Ton premier appel

Tous les endpoints exigent le header X-API-Key. Exemple minimal :

PythonSDK officiel disponible sur PyPI : pip install permisapi-client. Pagination, async, gestion typée des erreurs et alertes webhook incluses. Voir pypi.org/project/permisapi-client.

permisapi-client sur PyPIUptime PermisAPI (30 jours)
export KEY="pk_live_xxx"
curl -H "X-API-Key: $KEY" https://api.permisapi.fr/v1/me

La reponse contient ton plan, ton quota mensuel et la date de rotation de quota.

03

3. Endpoints principaux

GET/v1/permitsPlan : Free

Lister les permis

11 filtres (département, commune, type, dates, superficie, SIREN). Pagination 200/page max.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits?dep_code=75&limit=5"
Exemple de reponse
{
  "items": [
    {
      "num_pa": "PC 075 115 24 B0001",
      "dep_code": "75",
      "comm_code": "75115",
      "adr_localite_ter": "Paris",
      "permit_type": "PC_LOGEMENT",
      "etat_pa": 1,
      "date_reelle_autorisation": "2024-03-12",
      "superficie_terrain": 420,
      "geocoded": true,
      "lat": 48.8417,
      "lng": 2.3221
    }
  ],
  "pagination": { "page": 1, "total": 2847, "pages": 570 }
}
GET/v1/permits/nearPlan : Free

Recherche géographique

PostGIS ST_DWithin : tous les permis dans un rayon autour d'un point GPS.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/near?lat=48.85&lng=2.35&radius_m=500"
GET/v1/stats/commune/{code}Plan : Free

Stats par commune

Total, accordés/refusés/instruction, top 10 types, YoY, avg superficie.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/stats/commune/75115"
POST/v1/alertsPlan : Explorer+

Créer une alerte webhook

PermisAPI POST un JSON signe HMAC a ton URL a chaque nouveau permis matchant.

curl -X POST -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Paris 18e renovations",
    "center_lat": 48.88, "center_lng": 2.35,
    "radius_km": 3,
    "permit_types": ["PC_LOGEMENT"],
    "webhook_url": "https://tonapp.fr/permisapi-hook"
  }' \
  "https://api.permisapi.fr/v1/alerts"
GET/v1/permits/{num_pa}/sirenePlan : Pro+

Enrichissement SIRENE du demandeur

Fiche INSEE officielle : raison sociale, NAF, état admin, date création. Particulier vs promoteur vs concurrent.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/0930662500027/sirene"
GET/v1/permits/by-cadastrePlan : Pro+

Recherche par parcelle cadastrale

Tous les permis (PC, PA, PD, DP) sur une parcelle donnée. Section + numéro INSEE.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/by-cadastre?section=AB&numero=126"
GET/v1/permits/{num_pa}/dvfPlan : Pro+

Cross-ref DVF (valeur fonciere)

Top 5 transactions immobilieres voisines (5 ans glissants 2021-2025). Score combine distance + temporalite + type.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/0930662500027/dvf?limit=5"
GET/v1/permits/{num_pa}/scorePlan : Pro+

Score Opportunite MDB v0.1

Note 0-100 + tier (low/medium/high/premium) qui predit si un permis est une opportunite Marchand de Biens. Heuristique ponderee 7 signaux.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/0930662500027/score"
GET/v1/permits/{num_pa}/pluPlan : Pro+

Zonage urbanisme PLU

Zone urbaine / a urbaniser / agricole / naturelle + verdict constructible. Source live Géoportail de l'Urbanisme via apicarto.ign.fr.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/0930662500027/plu"
Exemple de reponse
{
  "num_pa": "0930662500027",
  "lat": 48.8566, "lng": 2.3522,
  "has_plu": true,
  "zonage": {
    "code": "UB",
    "libelle": "Zone urbaine de densite moyenne",
    "type_zone": "U",
    "constructible": true,
    "constructible_reason": "Zone urbaine constructible (zonage U).",
    "plu_revision_date": "2018-04-12",
    "plu_partition": "DU_PLU_75056_001"
  },
  "other_zones": [],
  "source": "Géoportail de l'Urbanisme via apicarto.ign.fr"
}
GET/v1/permits/{num_pa}/risksPlan : Pro+

Géorisques BRGM

Risques naturels (inondation, seisme, argile) + ICPE proches + score 0-100. Source live API Géorisques.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/0930662500027/risks"
Exemple de reponse
{
  "num_pa": "0930662500027",
  "comm_code": "75116",
  "risk_score": 37,
  "risk_tier": "moderate",
  "risks": [
    {"code": "INONDATION", "label": "Inondation", "has_ppr": true, "ppr_type": "PPRi"},
    {"code": "RGA", "label": "Retrait-gonflement argile", "has_ppr": false}
  ],
  "icpe_proches": [
    {"nom": "USINE X", "regime": "ICPE soumis", "distance_m": 850}
  ],
  "source": "Géorisques (BRGM + Ministere Transition Ecologique)",
  "disclaimer": "Heuristique commune-level, pas un diagnostic juridique."
}
GET/v1/permits/exportPlan : Business+

Export bulk CSV (streaming)

Export streaming CSV avec 15 colonnes fixes. Cap 100k lignes Business / 1M Enterprise. Filtres dep_code, permit_type, date_from/to, etat_pa, max_rows.

curl -H "X-API-Key: $KEY" \
  "https://api.permisapi.fr/v1/permits/export?dep_code=75&permit_type=PC_LOGEMENT" \
  -o paris_logements.csv
PUT/v1/me/preferences/dep-codesPlan : Free / Explorer

Choisir ses departements cibles

Plan Free : 1 dep, plan Explorer : 5 deps. Choix DEFINITIF (anti-rotation, force décision metier). Upgrade plan debloque un nouveau choix.

curl -X PUT -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"dep_codes": ["33"]}' \
  "https://api.permisapi.fr/v1/me/preferences/dep-codes"
04

4. Vérifier un webhook d'alerte

Chaque webhook arrive avec le header X-PermisAPI-Signature: sha256=<hex>. Verifie-le en temps constant avec hmac.compare_digest.

# Le webhook arrive avec le header X-PermisAPI-Signature
# Format : sha256=<hex>
# Compute ton hex localement avec openssl :
echo -n "$BODY" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET"
# Compare avec le header recu (pas de string comparison : use compare-digest)
05

5. Codes d'erreur

CodeErrorRaison
400validation_errorparamètre invalide (ex: dep_code mal forme)
401unauthorizedheader X-API-Key manquant ou clé inconnue
403forbiddencompte désactivé (contact support)
429rate_limit_exceededquota minute ou mois atteint
500internal_errorbug cote serveur (log Sentry)
503database_errorDB indisponible ou Stripe timeout
06

6. Limites par plan

PlanRequetesBurstAlertesPrix
Free500 / mois10 / min1 alerte0 EUR
Explorer5 000 / mois60 / min10 alertes49 EUR
Pro50 000 / mois300 / min50 alertes199 EUR
Business500 000 / mois1 000 / min200 alertes499 EUR
Enterprisejusqu'a 100M / mois20 000 / min10 000 alertesa partir de 1 999 EUR