{
  "info": {
    "name": "PermisAPI - Tour des cas d'usage",
    "description": "# PermisAPI - API REST des permis de construire France\n\nCollection officielle pour découvrir PermisAPI en moins de 5 minutes. 1,2 million de permis Sitadel 2013-2026, enrichis (Score MDB, ventes immobilières voisines, zonage PLU, risques naturels, cadastre, SIRENE).\n\n## Démarrage\n\n1. **Récupère ta clé API** sur https://permisapi.fr/dashboard (plan Free 500 req/mois sans carte bancaire)\n2. **Colle ta clé** dans la variable de collection `API_KEY` (Variables → API_KEY)\n3. **Lance la requête \"Health check\"** pour valider la connectivité\n4. **Lance \"Mon compte\"** pour valider l'authentification\n5. **Explore les 7 dossiers** ci-dessous : Démarrage → Parcourir → Analyser → Investiguer → Entreprises → Statistiques → Automations\n\n## Variables incluses\n\n- `BASE_URL` : https://api.permisapi.fr (prod)\n- `API_KEY` : ta clé perso (à remplir)\n- `NUM_PA_PARIS` : 07512026V0125 (Paris 20, score 65, parcelle avec fallback testée)\n- `NUM_PA_SAINT_DENIS` : 0930662500027 (Saint-Denis, contractors NAF 43.21A testés)\n- `NUM_PA_NICE` : 00608817S0275 (Nice 34 878 m², economics 61 M EUR testé)\n- `COMMUNE_CODE_PARIS` : 75056\n- `DEP_CODE_PARIS` : 75\n\n## Couverture par plan\n\n| Plan | Départements | Quota mensuel | Endpoints Pro+ |\n|---|---|---|---|\n| Free (0 EUR) | 1 au choix (par défaut 75) | 500 req | Non |\n| Explorer (49 EUR) | 5 au choix (par défaut 75/69/13/33/31) | 10 000 req | Non |\n| Pro (199 EUR) | France entière | 50 000 req | Oui |\n| Business (499 EUR) | France entière | 500 000 req | Oui + bulk + CSV + RBAC |\n| Enterprise (1 999 EUR+) | France entière | 100 M req | Oui + SLA + DPA + SSO + multi-tenant |\n\n## Liens utiles\n\n- Documentation complète : https://api.permisapi.fr/docs\n- Tableau de bord : https://permisapi.fr/dashboard\n- Tarifs : https://permisapi.fr/#pricing\n- Connecteur Claude / ChatGPT (MCP) : https://permisapi.fr/mcp\n- Statut : https://permisapi.fr/status\n- Confidentialité : https://permisapi.fr/legal/privacy\n- Garantie de stabilité API : https://permisapi.fr/legal/garantie-stabilite-api\n\n## Sources de données\n\nDonnées Sitadel publiées par le SDES (Ministère de la Transition Écologique). Enrichissements : SIRENE (INSEE), ventes immobilières (Cerema DVF+), zonage PLU (Géoportail de l'Urbanisme), risques naturels (Géorisques BRGM), cadastre (DGFiP), adresses (BAN). Licence Ouverte Etalab 2.0.\n\n## Contact\n\nQuestion technique ou commerciale : evan@permisapi.fr. Réponse sous 24h ouvrées.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_postman_id": "permisapi-public-collection-sprint21-2026"
  },
  "variable": [
    {
      "key": "BASE_URL",
      "value": "https://api.permisapi.fr",
      "type": "string",
      "description": "URL de production. Ne pas modifier."
    },
    {
      "key": "API_KEY",
      "value": "pk_live_REPLACE_ME",
      "type": "string",
      "description": "Ta clé API personnelle. Récupère-la depuis https://permisapi.fr/dashboard après inscription gratuite (plan Free 500 req/mois sans carte bancaire)."
    },
    {
      "key": "NUM_PA_PARIS",
      "value": "07512026V0125",
      "type": "string",
      "description": "Permis Paris 20 (184 RUE PELLEPORT), score MDB 65 high, parcelle avec fallback cadastre testée. Fonctionne pour tous les plans Free / Explorer / Pro / Business / Enterprise."
    },
    {
      "key": "NUM_PA_SAINT_DENIS",
      "value": "0930662500027",
      "type": "string",
      "description": "Permis Saint-Denis (2 RUE DE LORRAINE), score MDB 52, idéal pour tester parcelles-voisines (5 voisins rayon 200 m) et contractors (3 entreprises NAF 43.21A électricité). Plans Pro et plus uniquement (dép 93 hors Free)."
    },
    {
      "key": "NUM_PA_NICE",
      "value": "00608817S0275",
      "type": "string",
      "description": "Permis Nice 643 logements (AXE NORD SUD PEM AÉROPORT), surface 34 878 m², budget chantier médian 61,3 M EUR. Idéal pour tester economics. Plans Pro et plus uniquement (dép 06 hors Free / Explorer)."
    },
    {
      "key": "COMMUNE_CODE_PARIS",
      "value": "75056",
      "type": "string",
      "description": "Code INSEE Paris (ville-mère PLM). Utilisé pour stats commune. ST_Union des 20 arrondissements 75101 à 75120 pour commune-boundary."
    },
    {
      "key": "DEP_CODE_PARIS",
      "value": "75",
      "type": "string",
      "description": "Code département Paris. Toujours accessible Free."
    }
  ],
  "auth": {
    "type": "apikey",
    "apikey": [
      {"key": "key", "value": "X-API-Key"},
      {"key": "value", "value": "{{API_KEY}}"},
      {"key": "in", "value": "header"}
    ]
  },
  "item": [
    {
      "name": "0. Démarrage",
      "description": "Premières requêtes pour valider la connectivité et l'authentification. Aucun coût quota sur /health et /v1/public/try-it (publics).",
      "item": [
        {
          "name": "Health check (public, sans auth)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/health",
              "host": ["{{BASE_URL}}"],
              "path": ["health"]
            },
            "description": "Endpoint public, sans clé requise. Retourne { status: ok, environment, commit }. Sert à vérifier que l'API est en ligne et que tu peux la joindre depuis ton réseau (DNS, pare-feu, etc.)."
          }
        },
        {
          "name": "Try-it public sans clé (1 permis aléatoire Paris)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/public/try-it?dep_code={{DEP_CODE_PARIS}}",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "public", "try-it"],
              "query": [
                {"key": "dep_code", "value": "{{DEP_CODE_PARIS}}", "description": "Code département (obligatoire). Plafonné 50 essais / jour / IP / département."}
              ]
            },
            "description": "Endpoint public sans clé API, plafonné 50 essais par jour par IP par département. Retourne 1 permis aléatoire du département choisi avec enrichissements (sirene + dvf + score). Sert à évaluer la qualité des données avant de créer un compte."
          }
        },
        {
          "name": "Mon compte (premier appel avec clé)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/me",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "me"]
            },
            "description": "Premier appel authentifié. Retourne ton plan actuel, ton quota mensuel, ton usage en cours, tes départements autorisés (Free / Explorer), et si tu es admin d'un compte d'équipe (Business / Enterprise). Sert à valider que ta clé fonctionne et à calibrer ton script."
          }
        },
        {
          "name": "Mon usage (30 derniers jours)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/me/usage?days=30",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "me", "usage"],
              "query": [
                {"key": "days", "value": "30", "description": "1 à 90 jours"}
              ]
            },
            "description": "Détail de tes appels API sur la fenêtre choisie : par endpoint, par jour, et statut HTTP. Utile pour optimiser ton script et repérer les requêtes inutiles."
          }
        }
      ]
    },
    {
      "name": "1. Parcourir les permis",
      "description": "Retrouver et lister les permis selon des filtres simples (commune, type, année) ou géographiques (rayon autour d'un point, parcelle cadastrale).",
      "item": [
        {
          "name": "Liste les 5 derniers permis du département Paris",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits?dep_code={{DEP_CODE_PARIS}}&limit=5",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits"],
              "query": [
                {"key": "dep_code", "value": "{{DEP_CODE_PARIS}}"},
                {"key": "limit", "value": "5"}
              ]
            },
            "description": "Retourne 5 permis du département 75 (Paris), triés par date de délivrance descendante. Coût quota : 1 unité par appel + 1 unité par permis retourné (limit). Disponible sur tous les plans."
          }
        },
        {
          "name": "Filtres combinés (commune + type + année + score)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits?comm_code=75118&permit_type=PC_LOGEMENT&an_depot=2026&min_score=70&limit=10",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits"],
              "query": [
                {"key": "comm_code", "value": "75118", "description": "Code commune INSEE Paris 18e"},
                {"key": "permit_type", "value": "PC_LOGEMENT", "description": "PC_LOGEMENT / PC_LOCAUX / PA / PD / DP_LOGEMENT / DP_LOCAUX"},
                {"key": "an_depot", "value": "2026", "description": "Année de dépôt"},
                {"key": "min_score", "value": "70", "description": "Score MDB minimum 0-100. Pro+ requis. Coût quota spécial : limit unités (anti-abus)"},
                {"key": "limit", "value": "10"}
              ]
            },
            "description": "Permis logement Paris 18e en 2026 avec Score MDB 70 et plus. Le filtre min_score est un raccourci puissant : il évite N appels /score individuels. Coût quota : limit unités (reflétant le travail équivalent). Pro+ requis."
          }
        },
        {
          "name": "Permis proches d'un point (rayon 3 km autour de Notre-Dame)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/near?lat=48.8566&lng=2.3522&radius_m=3000&limit=20",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "near"],
              "query": [
                {"key": "lat", "value": "48.8566", "description": "Latitude WGS84"},
                {"key": "lng", "value": "2.3522", "description": "Longitude WGS84. Attention : `lng` pas `lon`"},
                {"key": "radius_m", "value": "3000", "description": "Rayon en mètres, 10 à 10000"},
                {"key": "limit", "value": "20"}
              ]
            },
            "description": "Recherche géospatiale via PostGIS ST_DWithin. Retourne les permis dans le rayon triés par distance croissante. Utile pour audits projet immobilier ou prospection MDB sur un quartier."
          }
        },
        {
          "name": "Détail d'un permis (Paris 20)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}"]
            },
            "description": "Fiche complète du permis 07512026V0125 (184 RUE PELLEPORT, Paris 20). Tous les champs Sitadel + enrichissements basiques (géocoding BAN, Score MDB v0.3, risque tier, PLU zone). Coût quota : 1 unité."
          }
        },
        {
          "name": "Recherche par parcelle cadastrale (Pro+)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/by-cadastre?dep_code={{DEP_CODE_PARIS}}&commune_code=75120&section=BR&numero=0125",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "by-cadastre"],
              "query": [
                {"key": "dep_code", "value": "{{DEP_CODE_PARIS}}"},
                {"key": "commune_code", "value": "75120", "description": "Code INSEE commune"},
                {"key": "section", "value": "BR", "description": "Section cadastrale (2 lettres)"},
                {"key": "numero", "value": "0125", "description": "Numéro parcelle (padding 0 sur 4 caractères)"}
              ]
            },
            "description": "Trouve les permis qui ont touché une parcelle cadastrale donnée. Couvre les cas où Sitadel pad les numéros avec des zéros et où pas (matching élargi). Plans Pro et plus uniquement."
          }
        }
      ]
    },
    {
      "name": "2. Analyser un permis (Pro+)",
      "description": "Enrichir un permis avec ses métadonnées analytiques : identité demandeur SIRENE, Score d'opportunité MDB v0.3 avec 11 signaux pondérés, ventes immobilières voisines DVF, budget chantier estimé avec décomposition 8 lots, vue 360 composite. Tous ces endpoints sont réservés aux plans Pro et plus.",
      "item": [
        {
          "name": "Identité demandeur SIRENE (qui a déposé ?)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/sirene",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "sirene"]
            },
            "description": "Retourne la fiche SIRENE complète du demandeur : raison sociale, SIREN, SIRET, code APE / NAF, adresse siège, état administratif, date de création, statut de diffusion (public / restreint). Permet de détecter SCI fraîchement créée, promoteur connu, particulier. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Score d'opportunité MDB v0.3",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/score",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "score"]
            },
            "description": "Score 0 à 100 + tier (low / medium / high / premium). Heuristique pondérée v0.3 sur 11 signaux : type permis, surface, prix m² DVF voisin, activité départementale, profil demandeur, cohérence DVF / permis, densité INSEE, risques naturels, PLU constructible, ancienneté SIRET, ratio parcelle / bâtiments existants. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Explication détaillée du score MDB (11 signaux)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/score/explain",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "score", "explain"]
            },
            "description": "Décomposition transparente du Score MDB en 11 signaux pondérés : libellé FR, doctrine sous-jacente, valeur observée, contribution au score final, interprétation FR contextualisée. Plus top 3 drivers et top 3 freins. Sert à justifier le score en comité crédit ou face à un client. Coût quota : 2 unités (composite). Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Ventes immobilières voisines (DVF)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/dvf?limit=5",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "dvf"],
              "query": [
                {"key": "limit", "value": "5", "description": "1 à 5, par défaut 3"},
                {"key": "type_local", "value": "1,2,4", "description": "1=Maison 2=Appartement 3=Dépendance 4=Local commercial", "disabled": true},
                {"key": "min_year", "value": "2024", "description": "Filtre temporel transactions", "disabled": true}
              ]
            },
            "description": "Top K transactions DVF (ventes immobilières officielles) les plus pertinentes à proximité, sur 5 ans glissants. Score combiné distance + proximité temporelle + match type de bien. Rayon adaptatif 50 m / 150 m / 400 m selon densité communale INSEE. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Budget chantier estimé (Nice 34 878 m², 61 M EUR)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_NICE}}/economics",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_NICE}}", "economics"]
            },
            "description": "Budget chantier estimé en EUR (fourchette basse / médiane / haute) + décomposition par lot (8 lots avec codes NAF) + scénario détecté (construction neuve / rénovation / surélévation / extension / aménagement / changement de destination) + marché local DVF par commune (22 574 communes couvertes) + marge brute MDB potentielle. Calibré sur moyennes nationales Capeb + FFB + intuition métier. Cas Nice 643 logements : 61,3 M EUR médian, +128 M EUR de marge brute potentielle. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Vue 360 composite (6 sous-features en 1 appel)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/360",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "360"]
            },
            "description": "Combine 6 sous-features en 1 appel HTTP : détail + sirene + dvf + score MDB + zonage PLU + risques BRGM. Parallélisation côté serveur des appels live PLU + Risques (latence 5 à 7 secondes typique). Best-effort : si une sous-feature échoue, son champ vaut null et l'erreur est listée dans fetch_errors. Coût quota transparent via le header X-RateLimit-Cost : 6 unités pour Pro+ (anti-abus). Plans Pro et plus uniquement.\n\nNote : l'interface UI Vue 360 a été retirée du tableau de bord au sprint 19. Endpoint et SDK conservés 12 mois par engagement de stabilité contractuelle."
          }
        }
      ]
    },
    {
      "name": "3. Investiguer le terrain (Pro+)",
      "description": "Investiguer le contexte géographique d'un permis : zonage urbanisme PLU, risques naturels et industriels, géométrie de la parcelle cadastrale, bâtiments déjà construits, parcelles voisines, polygone de la commune. Tous ces endpoints sont réservés aux plans Pro et plus, sauf commune-boundary (public).",
      "item": [
        {
          "name": "Zonage urbanisme PLU",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/plu",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "plu"]
            },
            "description": "Pour un permis donné, retourne son zonage urbanisme PLU : UA / UB urbain (constructible), AU à urbaniser, A agricole, N naturelle. Verdict `constructible` booléen + raison juridique explicite. Source live Géoportail de l'Urbanisme via apicarto.ign.fr (latence 200 à 500 ms). Si la commune n'a pas digitalisé son PLU (environ 20 % des communes FR), retourne has_plu=false. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Risques naturels et industriels (Géorisques BRGM)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/risks",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "risks"]
            },
            "description": "Risques connus sur la commune : inondation (avec PPRi associé), séisme, mouvement de terrain, retrait-gonflement d'argile, ICPE proches (Seveso ou ICPE simple) dans 1 km. Score agrégé 0 à 100 + tier qualitatif (low / moderate / high / critical). Source live Géorisques (BRGM + Ministère de la Transition Écologique). Plans Pro et plus uniquement. V0.3 commune-level."
          }
        },
        {
          "name": "Géométrie de la parcelle (avec fallback)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/parcelle",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "parcelle"]
            },
            "description": "Polygone cadastral de la parcelle (GeoJSON), surface officielle DGFiP, cadastre_id. Si la géométrie principale du permis n'est pas disponible, applique le fallback cadastre_parcelles_full (sprint 19 j3) : lookup en 2 étapes (PK index sur 95 % des cas + scan filtré commune_code BTREE pour 5 % de préfixes non standards) + PLM mapping bidirectionnel Paris / Lyon / Marseille + padding zéro numéro géré. La réponse indique fallback_used: true / false. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Bâtiments existants sur la parcelle",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_PARIS}}/batiments-existants",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_PARIS}}", "batiments-existants"]
            },
            "description": "Liste les bâtiments cadastraux déjà présents sur la parcelle (avant le permis). Champs DGFiP : id_batiment, geom (Polygon GeoJSON), surface_au_sol, hauteur_max si dispo. Permet de détecter parcelles nues, terrains à rénover, surélévations potentielles. Plans Pro et plus uniquement.\n\n**Note** : retourne HTTP 404 si le permis n'a pas de géométrie cadastre disponible (matching spatial impossible). Survient sur environ 20 à 30 % des permis (commune hors couverture cadastre digital DGFiP ou refs cadastrales Sitadel obsolètes). Réessaye après le prochain refresh mensuel ou utilise /parcelle qui dispose d'un fallback (sprint 19 j3)."
          }
        },
        {
          "name": "Parcelles voisines (rayon configurable 10 à 2 000 m)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_SAINT_DENIS}}/parcelles-voisines?radius_m=200&limit=10",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_SAINT_DENIS}}", "parcelles-voisines"],
              "query": [
                {"key": "radius_m", "value": "200", "description": "Rayon 10 à 2000 m, par défaut 200"},
                {"key": "limit", "value": "10", "description": "1 à 50, par défaut 10"}
              ]
            },
            "description": "Pattern d'activité local : parcelles cadastrales voisines avec leurs permis associés (s'il y en a). Centre = lat / lng du permis si géocodée BAN, sinon centroïde cadastre. Filtre PostGIS ST_DWithin sur 94 M de parcelles France. Exclut la parcelle source. Killer feature MDB : voir si les parcelles autour sont actives (signal de quartier en mutation). Cas Saint-Denis : 5 voisins de 9 à 60 m. Coût quota composite : 1 + len(neighbors). Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Recherche parcelle par identifiant cadastre (Pro+)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/parcelles/75103000AT0042",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "parcelles", "75103000AT0042"]
            },
            "description": "Lookup direct par identifiant cadastre DGFiP (14 caractères : commune_code 5 + préfixe 3 + section 2 + numéro 4). Retourne polygone GeoJSON + surface DGFiP + commune. Plans Pro et plus uniquement."
          }
        },
        {
          "name": "Polygone GeoJSON de la commune (public, sans auth)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/public/commune-boundary/{{COMMUNE_CODE_PARIS}}",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "public", "commune-boundary", "{{COMMUNE_CODE_PARIS}}"]
            },
            "description": "Polygone GeoJSON officiel de la commune (cadastre DGFiP). Pour les villes PLM (Paris 75056 / Lyon 69123 / Marseille 13055), applique ST_Union des arrondissements à la volée (1 s typique). Public, sans clé, sans quota. Utile pour overlay cartographique en surcouche des permis."
          }
        }
      ]
    },
    {
      "name": "4. Entreprises BTP locales (Pro+)",
      "description": "Identifier les entreprises BTP actives à proximité d'un permis, filtrées par code NAF (spécialité). Cas d'usage : prospection fournisseurs BTP, sourcing sous-traitants. 1 086 952 établissements BTP SIRENE actifs France, 76,4 % géolocalisés WGS84.",
      "item": [
        {
          "name": "Entreprises BTP par lot et localisation (Saint-Denis électricité)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/{{NUM_PA_SAINT_DENIS}}/contractors?naf_codes=43.21A&radius_m=5000&limit=10",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "{{NUM_PA_SAINT_DENIS}}", "contractors"],
              "query": [
                {"key": "naf_codes", "value": "43.21A", "description": "Codes NAF séparés par virgule. 43.21A = installation électrique, 43.22A = plomberie, 43.39A = peinture, etc."},
                {"key": "radius_m", "value": "5000", "description": "Rayon en mètres, 100 à 50000"},
                {"key": "limit", "value": "10", "description": "1 à 50"}
              ]
            },
            "description": "Entreprises BTP filtrées par codes NAF, triées par distance croissante. Display name calculé par priorité : dénomination usuelle > dénomination unité légale (sprint 19 j2) > enseigne > sigle > prénom1 + nom UL > nom seul. Cas Saint-Denis NAF 43.21A : MAELEC + autres électriciens. Plans Pro et plus uniquement."
          }
        }
      ]
    },
    {
      "name": "5. Statistiques",
      "description": "Statistiques agrégées sur les permis : par commune, département, région, et tendances temporelles. Densité urbaine et marché local DVF disponibles sur Business et plus.",
      "item": [
        {
          "name": "Stats commune (Paris)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/stats/commune/{{COMMUNE_CODE_PARIS}}",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "stats", "commune", "{{COMMUNE_CODE_PARIS}}"]
            },
            "description": "Agrégats sur une commune : total permis, accordés, refusés, 12 derniers mois, tendance d'une année sur l'autre. Inclut PLM merge pour Paris / Lyon / Marseille (somme des arrondissements)."
          }
        },
        {
          "name": "Stats département (Paris)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/stats/departement/{{DEP_CODE_PARIS}}",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "stats", "departement", "{{DEP_CODE_PARIS}}"]
            },
            "description": "Agrégats par département (75 Paris, 69 Rhône, etc.). Total, répartition par type, surface moyenne."
          }
        },
        {
          "name": "Tendances mensuelles département",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/stats/trends?dep_code={{DEP_CODE_PARIS}}&group_by=month",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "stats", "trends"],
              "query": [
                {"key": "dep_code", "value": "{{DEP_CODE_PARIS}}"},
                {"key": "group_by", "value": "month", "description": "month / quarter / year"}
              ]
            },
            "description": "Série temporelle du nombre de permis depuis 2013, groupée par mois / trimestre / année. Utile pour un graphique de tendance."
          }
        },
        {
          "name": "Last day (compteur en direct, public)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/public/latest-day",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "public", "latest-day"]
            },
            "description": "Compteur live : date du dernier jour ingéré + count + count sur 7 jours. Public, sans clé. Sert au compteur dynamique de la landing."
          }
        },
        {
          "name": "Densité urbaine commune (Business+, Paris 18e)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/stats/commune/75118/density",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "stats", "commune", "75118", "density"]
            },
            "description": "Densité urbaine de la commune : nombre de parcelles, nombre de bâtiments cadastraux (durs / légers), surface bâtie au sol, surface bâtie / surface commune. Matérialisé via cache `commune_density_stats` (34 870 communes couvertes). Exemple Paris 18e : 6 929 parcelles, 7 896 bâtiments. Plans Business et plus uniquement.\n\n**Note** : utilise un code commune arrondissement (75101 à 75120 pour Paris, 69381 à 69389 pour Lyon, 13201 à 13216 pour Marseille). Les villes-mères PLM (75056, 69123, 13055) ne sont pas dans le cache density (elles utilisent la somme des arrondissements implicite ailleurs)."
          }
        }
      ]
    },
    {
      "name": "6. Automations (alertes, bulk, export, feedback)",
      "description": "Automatiser les requêtes récurrentes : alertes webhooks signées HMAC (Explorer+), bulk enrichment (Business+), export CSV (Business+), feedback Score MDB.",
      "item": [
        {
          "name": "Lister mes alertes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{BASE_URL}}/v1/alerts",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "alerts"]
            },
            "description": "Toutes mes alertes (actives + en pause) + secrets HMAC + statistiques de délivrance."
          }
        },
        {
          "name": "Créer une alerte webhook (Paris 18e rénovations)",
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Paris 18e rénovations\",\n  \"center_lat\": 48.8898,\n  \"center_lng\": 2.3445,\n  \"radius_km\": 3,\n  \"webhook_url\": \"https://webhook.site/your-id\",\n  \"permit_types\": [\"PC_LOGEMENT\"],\n  \"min_superficie\": 50\n}"
            },
            "url": {
              "raw": "{{BASE_URL}}/v1/alerts",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "alerts"]
            },
            "description": "Crée une alerte webhook signée HMAC SHA256 (header X-PermisAPI-Signature: sha256=...). Remplace webhook_url par https://webhook.site/ pour tester sans serveur, ou par ton endpoint Make / Zapier / n8n / Power Automate. Plans Explorer et plus.\n\nCorps de chaque webhook entrant : payload JSON avec le permis complet + signature HMAC dans le header. Validation côté serveur : recalcule hmac_sha256(webhook_secret, body) et compare avec le header."
          }
        },
        {
          "name": "Bulk enrichment (Business+, jusqu'à 1 000 lignes)",
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\"lat\": 48.8566, \"lng\": 2.3522, \"row_id\": \"client_row_1\"},\n    {\"lat\": 48.874806, \"lng\": 2.397986, \"row_id\": \"client_row_2\"},\n    {\"address\": \"184 RUE PELLEPORT 75020 PARIS\", \"row_id\": \"client_row_3\"}\n  ],\n  \"enrichments\": [\"score\", \"dvf\", \"plu\", \"risks\"]\n}"
            },
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/bulk-enrich",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "bulk-enrich"]
            },
            "description": "Enrichit en masse jusqu'à 1 000 lignes par appel : 3 modes d'entrée (lat / lng OU adresse OU commune+section+numéro). 1 unité quota par ligne. Cas d'usage : PropTech 10 000 adresses CRM, foncière 500 adresses patrimoine, MDB liste de parcelles. Plans Business et plus uniquement."
          }
        },
        {
          "name": "Export CSV bulk (Business+)",
          "request": {
            "method": "GET",
            "header": [{"key": "Accept", "value": "text/csv"}],
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/export?dep_code={{DEP_CODE_PARIS}}&permit_type=PC_LOGEMENT&max_rows=5000",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "export"],
              "query": [
                {"key": "dep_code", "value": "{{DEP_CODE_PARIS}}"},
                {"key": "permit_type", "value": "PC_LOGEMENT", "description": "PC_LOGEMENT / PC_LOCAUX / PA / PD / DP_LOGEMENT / DP_LOCAUX", "disabled": true},
                {"key": "date_from", "value": "2024-01-01", "disabled": true},
                {"key": "date_to", "value": "2024-12-31", "disabled": true},
                {"key": "max_rows", "value": "5000", "description": "Cap Business 100 000 / Enterprise 1 000 000 par défaut"}
              ]
            },
            "description": "Export streaming CSV (séparateur ; + BOM UTF-8 + en-têtes FR) de permis filtrés. 15 colonnes fixes (num_pa, dep_code, comm_code, adr_localite_ter, adr_codpost_ter, permit_type, etat_pa, an_depot, date_reelle_autorisation, superficie_terrain, siren_dem, denom_dem, lat, lng, geocoding_score). Plans Business et plus uniquement (403 sinon)."
          }
        },
        {
          "name": "Recherche par polygone GeoJSON (Business+)",
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"polygon\": {\n    \"type\": \"Polygon\",\n    \"coordinates\": [[\n      [2.346, 48.857],\n      [2.358, 48.857],\n      [2.358, 48.864],\n      [2.346, 48.864],\n      [2.346, 48.857]\n    ]]\n  },\n  \"permit_types\": [\"PC_LOGEMENT\", \"PC_LOCAUX\"],\n  \"limit\": 50\n}"
            },
            "url": {
              "raw": "{{BASE_URL}}/v1/permits/inside-polygon",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "permits", "inside-polygon"]
            },
            "description": "Recherche les permis à l'intérieur d'un polygone GeoJSON personnalisé (max 100 sommets, surface max 50 km²). Killer feature pour foncières patrimoniales et MDB qui veulent scanner un quartier exact. Cas démo : Île de la Cité + Saint-Louis Paris. Plans Business et plus uniquement."
          }
        },
        {
          "name": "Score MDB feedback (qualité du score reçu)",
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"num_pa\": \"{{NUM_PA_SAINT_DENIS}}\",\n  \"score_received\": 52,\n  \"tier_received\": \"medium\",\n  \"useful\": true,\n  \"accuracy\": \"correct\",\n  \"comment\": \"Score cohérent : SCI fraîchement créée, parcelle 200 m², quartier dynamique. Je vais investiguer.\",\n  \"recommendation\": \"Peut-être ajouter un signal sur l'ancienneté du SIRET demandeur.\"\n}"
            },
            "url": {
              "raw": "{{BASE_URL}}/v1/score/feedback",
              "host": ["{{BASE_URL}}"],
              "path": ["v1", "score", "feedback"]
            },
            "description": "Feedback sur la qualité du Score MDB reçu. Stocké en base + email à evan@permisapi.fr (Reply-To = ton email). Sert à entraîner le modèle V1.0 ML. Anti-spam : 1 feedback / num_pa / 60 s. Plans Pro et plus uniquement."
          }
        }
      ]
    }
  ]
}
