LogiScan

Analyser une annonce : POST /v1/analyses

Une requête, trois sources possibles. La réponse est la même quelle que soit la source : une résolution, des notes par rayon, des ventes, un environnement.

POST /v1/analyses 1 crédit Analyse d'une annonce par son lien · 0,6 crédits Analyse d'une annonce par son texte · 0,6 crédits Analyse d'une adresse postale

La requête

Le corps est un objet DemandeAnalyse avec une source parmi trois, et des rayons facultatifs.

ChampTypeRôle
source.listing_urlchaîne (URL)Le lien d'une annonce. Résolu d'abord par un agrégateur, puis lu par LogiScan si le site l'accepte. 1 crédit.
source.listing_textchaîneLe texte d'une page d'annonce, tel que copié. Lu par le même lecteur que le site, puis jeté. 0,6 crédit.
source.addresschaîneUne adresse postale, géocodée par la Base Adresse Nationale ; ban_id et facts (type, surface, prix…) facultatifs. 0,6 crédit.
radiiliste d'entiersLes rayons de comparaison en mètres, parmi 300, 500, 800, 1000, 1500 et 3000. Par défaut : 300, 500, 800 et 1000.
?wait=Nparamètre de requête, 0 à 60Attendre le résultat dans la requête, jusqu'à N secondes (le service plafonne à 20). Sinon 202 et une adresse à relire.

Les trois sources, et ce qu'elles donnent

  • Un lien : le chemin le plus riche. L'agrégateur rend l'annonce dédoublonnée avec ses diffuseurs (leur nombre et leurs portails ; jamais leurs adresses ni leurs photos), et le moteur travaille sur des faits complets. Les portails reconnus sont listés en bas de page ; un lien hors de cet index est lu directement par LogiScan si le site l'accepte, sinon la réponse est vide et facturée.
  • Un texte : le contenu d'une page collé tel quel. Le lecteur y reconnaît les formes de présentation (bloc d'étiquettes, ligne condensée, pavé réglementaire) ; le texte n'est ni journalisé, ni mis en mémoire, ni écrit en base.
  • Une adresse : pas de résolution à faire, le moteur décrit l'adresse donnée. Sans prix_eur dans facts, le Deal Score rend une fourchette d'estimation (annonce_incomplete) ; avec un prix, il note.
POST /v1/analyses?wait=20 Analyser une annonce par son lien 1 crédit

wait attend le résultat jusqu'à vingt secondes ; sinon la réponse est un 202 avec l'adresse où le relire (GET /v1/analyses/{id}). Un même lien demandé deux fois dans l'heure est servi d'une mémoire, au même tarif. Une réponse vide mais honnête — aucun candidat, pas assez de ventes — est facturée : le travail a été fait. Une source en panne ne l'est pas : billed vaut false et le crédit revient.

curl
curl -s -X POST 'https://logiscan.fr/v1/analyses?wait=20' \
  -H 'Authorization: Bearer lsk_test_VOTRE_CLE' \
  -H 'Content-Type: application/json' \
  -d '{"source": {"listing_url": "https://www.exemple.fr/annonces/12345"}, "radii": [300, 500, 800, 1000]}'
Python · httpx
import httpx

CLE = "lsk_test_VOTRE_CLE"

reponse = httpx.post(
    "https://logiscan.fr/v1/analyses?wait=20",
    json={"source": {"listing_url": "https://www.exemple.fr/annonces/12345"}, "radii": [300, 500, 800, 1000]},
    headers={"Authorization": f"Bearer {CLE}"},
    timeout=30,
)
print(reponse.status_code, reponse.json())
JavaScript · fetch
const CLE = "lsk_test_VOTRE_CLE";

const reponse = await fetch("https://logiscan.fr/v1/analyses?wait=20", {
  method: "POST",
  headers: { Authorization: `Bearer ${CLE}`, "Content-Type": "application/json" },
  body: JSON.stringify({"source": {"listing_url": "https://www.exemple.fr/annonces/12345"}, "radii": [300, 500, 800, 1000]}),
});
console.log(reponse.status, await reponse.json());
Réponse du bac à sable — ce qu'une clé lsk_test_ reçoit, données fictives
JSON · 200
{
  "id": "bac-a-sable",
  "statut": "termine",
  "billed": false,
  "source": "listing_url",
  "mode": "test",
  "cost_credits": 0.0,
  "resolution": {
    "request_id": "9336e3757bb54af38e9586bd707875da",
    "status": "resolved",
    "candidates": [
      {
        "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
        "ban_id": "99999_0001_00012",
        "lat": 47.501,
        "lon": 2.501,
        "parcelle": null,
        "confidence": 1.0,
        "method": "adresse_saisie",
        "matched_criteria": [
          "adresse choisie dans la Base Adresse Nationale"
        ],
        "diverged_criteria": [],
        "comparaisons": [],
        "position_approchee": false,
        "dpe_trouve": null
      }
    ],
    "confidence_label": "eleve",
    "resolved_by_level": null,
    "levels_attempted": [],
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "not_used",
      "education": "not_used",
      "arcep": "not_used",
      "atmo": "not_used",
      "transit": "not_used"
    },
    "search_area": null,
    "duration_ms": 0,
    "interrompue": false
  },
  "deal_scores": [
    {
      "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "par_rayon": {
        "300": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 300 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 300.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 300 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "500": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 500 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 500.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 500 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "800": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 800 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 800.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 800 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "1000": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 1000 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 1000.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 1000 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        }
      }
    }
  ],
  "comparables": [
    {
      "date": "2026-06-08",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "10 RUE DE L'EXEMPLE",
      "distance_m": 0.0
    },
    {
      "date": "2026-06-07",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "11 RUE DE L'EXEMPLE",
      "distance_m": 27.0
    },
    {
      "date": "2026-06-06",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "12 RUE DE L'EXEMPLE",
      "distance_m": 54.0
    },
    {
      "date": "2026-06-05",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "13 RUE DE L'EXEMPLE",
      "distance_m": 81.0
    },
    {
      "date": "2026-06-04",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "14 RUE DE L'EXEMPLE",
      "distance_m": 107.0
    },
    {
      "date": "2026-06-03",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "15 RUE DE L'EXEMPLE",
      "distance_m": 134.0
    },
    {
      "date": "2026-06-02",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "16 RUE DE L'EXEMPLE",
      "distance_m": 161.0
    },
    {
      "date": "2026-06-01",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "17 RUE DE L'EXEMPLE",
      "distance_m": 188.0
    },
    {
      "date": "2026-05-31",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "18 RUE DE L'EXEMPLE",
      "distance_m": 215.0
    },
    {
      "date": "2026-05-30",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "19 RUE DE L'EXEMPLE",
      "distance_m": 242.0
    }
  ],
  "enrichment": {
    "adresse": {
      "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "ban_id": "99999_0001_00012",
      "lat": 47.501,
      "lon": 2.501,
      "parcelle": null,
      "confidence": 1.0,
      "method": "adresse_saisie",
      "matched_criteria": [
        "adresse choisie dans la Base Adresse Nationale"
      ],
      "diverged_criteria": [],
      "comparaisons": [],
      "position_approchee": false,
      "dpe_trouve": null
    },
    "risques": {
      "inondation": {
        "concerne": true,
        "libelles": [],
        "atlas": [
          "Lot"
        ]
      },
      "seisme": {
        "zone": 1,
        "libelle": "1 - TRES FAIBLE"
      },
      "argiles": {
        "niveau": 2,
        "libelle": "Exposition moyenne"
      },
      "radon": {
        "potentiel": 1,
        "libelle": "Potentiel faible"
      },
      "risques_recenses": [
        {
          "code": "12",
          "libelle": "Mouvement de terrain"
        },
        {
          "code": "121",
          "libelle": "Affaissements et effondrements d'origine anthropique (anciennes carrières souterraines, hors mines)"
        },
        {
          "code": "123",
          "libelle": "Eboulement ou chutes de pierres et de blocs"
        },
        {
          "code": "124",
          "libelle": "Glissement de terrain"
        },
        {
          "code": "127",
          "libelle": "Tassements différentiels"
        },
        {
          "code": "16",
          "libelle": "Feu de forêt"
        },
        {
          "code": "23",
          "libelle": "Rupture de barrage"
        },
        {
          "code": "24",
          "libelle": "Transport de marchandises dangereuses"
        }
      ],
      "sites": [],
      "statuts": {
        "risques_recenses": "ok",
        "inondation": "ok",
        "seisme": "ok",
        "radon": "ok",
        "argiles": "ok",
        "sites": "ok"
      }
    },
    "urbanisme": {
      "zonage": {
        "code": "Ub",
        "libelle": "Zone urbaine : quartiers à densifier ou à restructurer",
        "type_zone": "U",
        "document": "PLUI",
        "date_validation": "2025-12-18"
      },
      "servitudes": [
        {
          "code": "AC1",
          "libelle": "COLLEGE GAMBETTA",
          "nature": "Périmètre des abords"
        },
        {
          "code": "T1",
          "libelle": "SUP T1 du Lot",
          "nature": "Zone de protection"
        },
        {
          "code": "PM1",
          "libelle": "PM1",
          "nature": "Enveloppe des zonages r?glementaires"
        }
      ],
      "statuts": {
        "zonage": "ok",
        "servitudes": "ok"
      }
    },
    "projets": [],
    "terrain": null,
    "solaire": null,
    "copropriete": null,
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "ok",
      "georisques": "ok",
      "gpu": "ok",
      "sitadel": "ok",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    }
  },
  "neighborhood": {
    "amenities": [
      {
        "categorie": "sante",
        "type": "Masseur kinésithérapeute",
        "nom": null,
        "distance_m": 348036.1,
        "code": "D233",
        "lat": 44.457760539675,
        "lon": 1.447585132636019
      },
      {
        "categorie": "sante",
        "type": "Infirmier",
        "nom": null,
        "distance_m": 348139.4,
        "code": "D232",
        "lat": 44.45634199299316,
        "lon": 1.450374463658037
      },
      {
        "categorie": "sante",
        "type": "Pédicure-podologue",
        "nom": null,
        "distance_m": 348153.2,
        "code": "D237",
        "lat": 44.457007419263995,
        "lon": 1.445613798237905
      },
      {
        "categorie": "sante",
        "type": "Structure psychiatrique en ambulatoire",
        "nom": null,
        "distance_m": 348242.9,
        "code": "D109",
        "lat": 44.45625098392544,
        "lon": 1.445183798617627
      },
      {
        "categorie": "sante",
        "type": "Psychologue",
        "nom": null,
        "distance_m": 348364.5,
        "code": "D243",
        "lat": 44.45495993149608,
        "lon": 1.446192134879147
      },
      {
        "categorie": "education",
        "type": "École maternelle",
        "nom": null,
        "distance_m": 348375.2,
        "code": "C101",
        "lat": 44.45475270686691,
        "lon": 1.446840309934811
      },
      {
        "categorie": "alimentation",
        "type": "Boulangerie",
        "nom": null,
        "distance_m": 348500.5,
        "code": "B203",
        "lat": 44.45364137495746,
        "lon": 1.446565373837412
      },
      {
        "categorie": "education",
        "type": "École primaire",
        "nom": null,
        "distance_m": 348594.2,
        "code": "C104",
        "lat": 44.45279354677859,
        "lon": 1.446460447750797
      },
      {
        "categorie": "education",
        "type": "Ufr",
        "nom": null,
        "distance_m": 348626.2,
        "code": "C501",
        "lat": 44.45251315825198,
        "lon": 1.446370103813196
      },
      {
        "categorie": "education",
        "type": "Institut universitaire",
        "nom": null,
        "distance_m": 348661.9,
        "code": "C502",
        "lat": 44.452196892756014,
        "lon": 1.446289545446312
      },
      {
        "categorie": "alimentation",
        "type": "Épicerie",
        "nom": null,
        "distance_m": 348698.9,
        "code": "B202",
        "lat": 44.45293670780534,
        "lon": 1.439818211021289
      },
      {
        "categorie": "education",
        "type": "Collège",
        "nom": null,
        "distance_m": 348936.2,
        "code": "C201",
        "lat": 44.4504552854695,
        "lon": 1.441549627874779
      }
    ],
    "schools": [
      {
        "nom": "Lycée polyvalent Gaston Monnerville",
        "type": "Lycée",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "lycee",
        "indicateurs": null
      },
      {
        "nom": "Section d'enseignement général et professionnel adapté du Collège Olivier de Magny",
        "type": "Collège",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "college",
        "indicateurs": null
      },
      {
        "nom": "Ecole élémentaire  Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347482.8,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46168794004309,
        "lon": 1.4546934307658848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole maternelle publique Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347581.3,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460885623948506,
        "lon": 1.4540452753864679,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole primaire publique P. Ségala",
        "type": "Ecole",
        "distance_m": 347997.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460156607721466,
        "lon": 1.4354300805942848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      }
    ],
    "transit_stops": [],
    "transit_source": null,
    "connectivity": {
      "fibre_disponible": null,
      "part_locaux_fibre": null,
      "technologies_filaires": [],
      "couverture_mobile": [],
      "statuts": {
        "fixe": "ok",
        "mobile": "ok"
      }
    },
    "antennes": [],
    "evenements": [],
    "air_quality": {
      "indice": 3,
      "libelle": "Dégradé",
      "date_indice": "2026-08-07",
      "polluants": [
        {
          "code": "o3",
          "libelle": "Ozone",
          "indice": 3
        },
        {
          "code": "no2",
          "libelle": "Dioxyde d'azote",
          "indice": 1
        },
        {
          "code": "pm10",
          "libelle": "Particules PM10",
          "indice": 1
        },
        {
          "code": "pm25",
          "libelle": "Particules fines PM2,5",
          "indice": 1
        },
        {
          "code": "so2",
          "libelle": "Dioxyde de soufre",
          "indice": 1
        }
      ],
      "source": "Atmo HDF",
      "zone": "LILLE"
    },
    "delinquance": null,
    "statuts": {
      "equipements": "ok",
      "ecoles": "ok",
      "resultats_ecoles": "ok",
      "transports": "not_used",
      "connectivite": "ok",
      "qualite_air": "ok",
      "delinquance": "not_used",
      "antennes": "ok",
      "evenements": "down"
    },
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    },
    "duration_ms": 40
  },
  "diffuseurs": {
    "nombre": 0,
    "portails": []
  },
  "sections": [
    {
      "nom": "resolution",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "enrichissement",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "quartier",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "deal_score",
      "statut": "ok",
      "detail": null
    }
  ],
  "sources_status": {
    "ademe": "not_used",
    "ademe_local": "not_used",
    "ban": "not_used",
    "ign": "not_used",
    "dvf": "ok",
    "cadastre": "ok",
    "georisques": "ok",
    "gpu": "ok",
    "sitadel": "ok",
    "bpe": "ok",
    "education": "ok",
    "arcep": "ok",
    "atmo": "ok",
    "transit": "not_used"
  },
  "duration_ms": 81
}
POST /v1/analyses?wait=20 Analyser le texte d'une annonce 0,6 crédits

Le texte est lu par le même lecteur que le site, puis jeté : il n'est ni journalisé, ni mis en mémoire, ni écrit en base.

curl
curl -s -X POST 'https://logiscan.fr/v1/analyses?wait=20' \
  -H 'Authorization: Bearer lsk_test_VOTRE_CLE' \
  -H 'Content-Type: application/json' \
  -d '{"source": {"listing_text": "Appartement T3 65 m² au 2e étage, Villeneuve-sur-Fixture (99999). DPE C. 189 000 €."}}'
Python · httpx
import httpx

CLE = "lsk_test_VOTRE_CLE"

reponse = httpx.post(
    "https://logiscan.fr/v1/analyses?wait=20",
    json={"source": {"listing_text": "Appartement T3 65 m² au 2e étage, Villeneuve-sur-Fixture (99999). DPE C. 189 000 €."}},
    headers={"Authorization": f"Bearer {CLE}"},
    timeout=30,
)
print(reponse.status_code, reponse.json())
JavaScript · fetch
const CLE = "lsk_test_VOTRE_CLE";

const reponse = await fetch("https://logiscan.fr/v1/analyses?wait=20", {
  method: "POST",
  headers: { Authorization: `Bearer ${CLE}`, "Content-Type": "application/json" },
  body: JSON.stringify({"source": {"listing_text": "Appartement T3 65 m² au 2e étage, Villeneuve-sur-Fixture (99999). DPE C. 189 000 €."}}),
});
console.log(reponse.status, await reponse.json());
Réponse du bac à sable — ce qu'une clé lsk_test_ reçoit, données fictives
JSON · 200
{
  "id": "bac-a-sable",
  "statut": "termine",
  "billed": false,
  "source": "listing_text",
  "mode": "test",
  "cost_credits": 0.0,
  "resolution": {
    "request_id": "9336e3757bb54af38e9586bd707875da",
    "status": "resolved",
    "candidates": [
      {
        "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
        "ban_id": "99999_0001_00012",
        "lat": 47.501,
        "lon": 2.501,
        "parcelle": null,
        "confidence": 1.0,
        "method": "adresse_saisie",
        "matched_criteria": [
          "adresse choisie dans la Base Adresse Nationale"
        ],
        "diverged_criteria": [],
        "comparaisons": [],
        "position_approchee": false,
        "dpe_trouve": null
      }
    ],
    "confidence_label": "eleve",
    "resolved_by_level": null,
    "levels_attempted": [],
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "not_used",
      "education": "not_used",
      "arcep": "not_used",
      "atmo": "not_used",
      "transit": "not_used"
    },
    "search_area": null,
    "duration_ms": 0,
    "interrompue": false
  },
  "deal_scores": [
    {
      "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "par_rayon": {
        "300": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 300 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 300.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 300 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "500": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 500 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 500.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 500 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "800": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 800 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 800.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 800 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "1000": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 1000 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 1000.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 1000 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        }
      }
    }
  ],
  "comparables": [
    {
      "date": "2026-06-08",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "10 RUE DE L'EXEMPLE",
      "distance_m": 0.0
    },
    {
      "date": "2026-06-07",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "11 RUE DE L'EXEMPLE",
      "distance_m": 27.0
    },
    {
      "date": "2026-06-06",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "12 RUE DE L'EXEMPLE",
      "distance_m": 54.0
    },
    {
      "date": "2026-06-05",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "13 RUE DE L'EXEMPLE",
      "distance_m": 81.0
    },
    {
      "date": "2026-06-04",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "14 RUE DE L'EXEMPLE",
      "distance_m": 107.0
    },
    {
      "date": "2026-06-03",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "15 RUE DE L'EXEMPLE",
      "distance_m": 134.0
    },
    {
      "date": "2026-06-02",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "16 RUE DE L'EXEMPLE",
      "distance_m": 161.0
    },
    {
      "date": "2026-06-01",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "17 RUE DE L'EXEMPLE",
      "distance_m": 188.0
    },
    {
      "date": "2026-05-31",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "18 RUE DE L'EXEMPLE",
      "distance_m": 215.0
    },
    {
      "date": "2026-05-30",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "19 RUE DE L'EXEMPLE",
      "distance_m": 242.0
    }
  ],
  "enrichment": {
    "adresse": {
      "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "ban_id": "99999_0001_00012",
      "lat": 47.501,
      "lon": 2.501,
      "parcelle": null,
      "confidence": 1.0,
      "method": "adresse_saisie",
      "matched_criteria": [
        "adresse choisie dans la Base Adresse Nationale"
      ],
      "diverged_criteria": [],
      "comparaisons": [],
      "position_approchee": false,
      "dpe_trouve": null
    },
    "risques": {
      "inondation": {
        "concerne": true,
        "libelles": [],
        "atlas": [
          "Lot"
        ]
      },
      "seisme": {
        "zone": 1,
        "libelle": "1 - TRES FAIBLE"
      },
      "argiles": {
        "niveau": 2,
        "libelle": "Exposition moyenne"
      },
      "radon": {
        "potentiel": 1,
        "libelle": "Potentiel faible"
      },
      "risques_recenses": [
        {
          "code": "12",
          "libelle": "Mouvement de terrain"
        },
        {
          "code": "121",
          "libelle": "Affaissements et effondrements d'origine anthropique (anciennes carrières souterraines, hors mines)"
        },
        {
          "code": "123",
          "libelle": "Eboulement ou chutes de pierres et de blocs"
        },
        {
          "code": "124",
          "libelle": "Glissement de terrain"
        },
        {
          "code": "127",
          "libelle": "Tassements différentiels"
        },
        {
          "code": "16",
          "libelle": "Feu de forêt"
        },
        {
          "code": "23",
          "libelle": "Rupture de barrage"
        },
        {
          "code": "24",
          "libelle": "Transport de marchandises dangereuses"
        }
      ],
      "sites": [],
      "statuts": {
        "risques_recenses": "ok",
        "inondation": "ok",
        "seisme": "ok",
        "radon": "ok",
        "argiles": "ok",
        "sites": "ok"
      }
    },
    "urbanisme": {
      "zonage": {
        "code": "Ub",
        "libelle": "Zone urbaine : quartiers à densifier ou à restructurer",
        "type_zone": "U",
        "document": "PLUI",
        "date_validation": "2025-12-18"
      },
      "servitudes": [
        {
          "code": "AC1",
          "libelle": "COLLEGE GAMBETTA",
          "nature": "Périmètre des abords"
        },
        {
          "code": "T1",
          "libelle": "SUP T1 du Lot",
          "nature": "Zone de protection"
        },
        {
          "code": "PM1",
          "libelle": "PM1",
          "nature": "Enveloppe des zonages r?glementaires"
        }
      ],
      "statuts": {
        "zonage": "ok",
        "servitudes": "ok"
      }
    },
    "projets": [],
    "terrain": null,
    "solaire": null,
    "copropriete": null,
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "ok",
      "georisques": "ok",
      "gpu": "ok",
      "sitadel": "ok",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    }
  },
  "neighborhood": {
    "amenities": [
      {
        "categorie": "sante",
        "type": "Masseur kinésithérapeute",
        "nom": null,
        "distance_m": 348036.1,
        "code": "D233",
        "lat": 44.457760539675,
        "lon": 1.447585132636019
      },
      {
        "categorie": "sante",
        "type": "Infirmier",
        "nom": null,
        "distance_m": 348139.4,
        "code": "D232",
        "lat": 44.45634199299316,
        "lon": 1.450374463658037
      },
      {
        "categorie": "sante",
        "type": "Pédicure-podologue",
        "nom": null,
        "distance_m": 348153.2,
        "code": "D237",
        "lat": 44.457007419263995,
        "lon": 1.445613798237905
      },
      {
        "categorie": "sante",
        "type": "Structure psychiatrique en ambulatoire",
        "nom": null,
        "distance_m": 348242.9,
        "code": "D109",
        "lat": 44.45625098392544,
        "lon": 1.445183798617627
      },
      {
        "categorie": "sante",
        "type": "Psychologue",
        "nom": null,
        "distance_m": 348364.5,
        "code": "D243",
        "lat": 44.45495993149608,
        "lon": 1.446192134879147
      },
      {
        "categorie": "education",
        "type": "École maternelle",
        "nom": null,
        "distance_m": 348375.2,
        "code": "C101",
        "lat": 44.45475270686691,
        "lon": 1.446840309934811
      },
      {
        "categorie": "alimentation",
        "type": "Boulangerie",
        "nom": null,
        "distance_m": 348500.5,
        "code": "B203",
        "lat": 44.45364137495746,
        "lon": 1.446565373837412
      },
      {
        "categorie": "education",
        "type": "École primaire",
        "nom": null,
        "distance_m": 348594.2,
        "code": "C104",
        "lat": 44.45279354677859,
        "lon": 1.446460447750797
      },
      {
        "categorie": "education",
        "type": "Ufr",
        "nom": null,
        "distance_m": 348626.2,
        "code": "C501",
        "lat": 44.45251315825198,
        "lon": 1.446370103813196
      },
      {
        "categorie": "education",
        "type": "Institut universitaire",
        "nom": null,
        "distance_m": 348661.9,
        "code": "C502",
        "lat": 44.452196892756014,
        "lon": 1.446289545446312
      },
      {
        "categorie": "alimentation",
        "type": "Épicerie",
        "nom": null,
        "distance_m": 348698.9,
        "code": "B202",
        "lat": 44.45293670780534,
        "lon": 1.439818211021289
      },
      {
        "categorie": "education",
        "type": "Collège",
        "nom": null,
        "distance_m": 348936.2,
        "code": "C201",
        "lat": 44.4504552854695,
        "lon": 1.441549627874779
      }
    ],
    "schools": [
      {
        "nom": "Lycée polyvalent Gaston Monnerville",
        "type": "Lycée",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "lycee",
        "indicateurs": null
      },
      {
        "nom": "Section d'enseignement général et professionnel adapté du Collège Olivier de Magny",
        "type": "Collège",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "college",
        "indicateurs": null
      },
      {
        "nom": "Ecole élémentaire  Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347482.8,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46168794004309,
        "lon": 1.4546934307658848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole maternelle publique Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347581.3,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460885623948506,
        "lon": 1.4540452753864679,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole primaire publique P. Ségala",
        "type": "Ecole",
        "distance_m": 347997.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460156607721466,
        "lon": 1.4354300805942848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      }
    ],
    "transit_stops": [],
    "transit_source": null,
    "connectivity": {
      "fibre_disponible": null,
      "part_locaux_fibre": null,
      "technologies_filaires": [],
      "couverture_mobile": [],
      "statuts": {
        "fixe": "ok",
        "mobile": "ok"
      }
    },
    "antennes": [],
    "evenements": [],
    "air_quality": {
      "indice": 3,
      "libelle": "Dégradé",
      "date_indice": "2026-08-07",
      "polluants": [
        {
          "code": "o3",
          "libelle": "Ozone",
          "indice": 3
        },
        {
          "code": "no2",
          "libelle": "Dioxyde d'azote",
          "indice": 1
        },
        {
          "code": "pm10",
          "libelle": "Particules PM10",
          "indice": 1
        },
        {
          "code": "pm25",
          "libelle": "Particules fines PM2,5",
          "indice": 1
        },
        {
          "code": "so2",
          "libelle": "Dioxyde de soufre",
          "indice": 1
        }
      ],
      "source": "Atmo HDF",
      "zone": "LILLE"
    },
    "delinquance": null,
    "statuts": {
      "equipements": "ok",
      "ecoles": "ok",
      "resultats_ecoles": "ok",
      "transports": "not_used",
      "connectivite": "ok",
      "qualite_air": "ok",
      "delinquance": "not_used",
      "antennes": "ok",
      "evenements": "down"
    },
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    },
    "duration_ms": 40
  },
  "diffuseurs": {
    "nombre": 0,
    "portails": []
  },
  "sections": [
    {
      "nom": "resolution",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "enrichissement",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "quartier",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "deal_score",
      "statut": "ok",
      "detail": null
    }
  ],
  "sources_status": {
    "ademe": "not_used",
    "ademe_local": "not_used",
    "ban": "not_used",
    "ign": "not_used",
    "dvf": "ok",
    "cadastre": "ok",
    "georisques": "ok",
    "gpu": "ok",
    "sitadel": "ok",
    "bpe": "ok",
    "education": "ok",
    "arcep": "ok",
    "atmo": "ok",
    "transit": "not_used"
  },
  "duration_ms": 81
}
POST /v1/analyses?wait=20 Analyser une adresse, sans annonce 0,6 crédits

Sans prix, le Deal Score ne note pas : il rend une fourchette (estimation basse, médiane, haute) à partir des ventes voisines, avec le statut annonce_incomplete. Avec prix_eur, il note.

curl
curl -s -X POST 'https://logiscan.fr/v1/analyses?wait=20' \
  -H 'Authorization: Bearer lsk_test_VOTRE_CLE' \
  -H 'Content-Type: application/json' \
  -d '{"source": {"address": "12 rue de l'\''Exemple 99999 Villeneuve-sur-Fixture", "facts": {"type_bien": "appartement", "surface_m2": 65}}, "radii": [500, 1000]}'
Python · httpx
import httpx

CLE = "lsk_test_VOTRE_CLE"

reponse = httpx.post(
    "https://logiscan.fr/v1/analyses?wait=20",
    json={"source": {"address": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture", "facts": {"type_bien": "appartement", "surface_m2": 65}}, "radii": [500, 1000]},
    headers={"Authorization": f"Bearer {CLE}"},
    timeout=30,
)
print(reponse.status_code, reponse.json())
JavaScript · fetch
const CLE = "lsk_test_VOTRE_CLE";

const reponse = await fetch("https://logiscan.fr/v1/analyses?wait=20", {
  method: "POST",
  headers: { Authorization: `Bearer ${CLE}`, "Content-Type": "application/json" },
  body: JSON.stringify({"source": {"address": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture", "facts": {"type_bien": "appartement", "surface_m2": 65}}, "radii": [500, 1000]}),
});
console.log(reponse.status, await reponse.json());
Réponse du bac à sable — ce qu'une clé lsk_test_ reçoit, données fictives
JSON · 200
{
  "id": "bac-a-sable",
  "statut": "termine",
  "billed": false,
  "source": "address",
  "mode": "test",
  "cost_credits": 0.0,
  "resolution": {
    "request_id": "9336e3757bb54af38e9586bd707875da",
    "status": "resolved",
    "candidates": [
      {
        "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
        "ban_id": "99999_0001_00012",
        "lat": 47.501,
        "lon": 2.501,
        "parcelle": null,
        "confidence": 1.0,
        "method": "adresse_saisie",
        "matched_criteria": [
          "adresse choisie dans la Base Adresse Nationale"
        ],
        "diverged_criteria": [],
        "comparaisons": [],
        "position_approchee": false,
        "dpe_trouve": null
      }
    ],
    "confidence_label": "eleve",
    "resolved_by_level": null,
    "levels_attempted": [],
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "not_used",
      "education": "not_used",
      "arcep": "not_used",
      "atmo": "not_used",
      "transit": "not_used"
    },
    "search_area": null,
    "duration_ms": 0,
    "interrompue": false
  },
  "deal_scores": [
    {
      "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "par_rayon": {
        "500": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 500 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 500.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 500 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        },
        "1000": {
          "statut": "calcule",
          "adresse": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
          "score": 6.0,
          "libelle": "dans le marché",
          "explication": "Prix affiché comparé à 10 vente(s) enregistrée(s) dans un rayon de 1000 m depuis moins de 3 ans, de surface voisine : l'écart à l'estimation médiane est de +5.0%.",
          "avertissement": null,
          "ecart_relatif": 0.05,
          "prix_m2_annonce": 2100.0,
          "prix_m2_median": 2000.0,
          "estimation_basse_eur": 200000.0,
          "estimation_mediane_eur": 200000.0,
          "estimation_haute_eur": 200000.0,
          "nb_comparables": 10,
          "ventes_examinees": 10,
          "rayon_m": 1000.0,
          "etapes": [
            {
              "etape": "un seul logement par vente",
              "restants": 10
            },
            {
              "etape": "nature « Vente »",
              "restants": 10
            },
            {
              "etape": "type de bien",
              "restants": 10
            },
            {
              "etape": "surface comparable",
              "restants": 10
            },
            {
              "etape": "vente récente",
              "restants": 10
            },
            {
              "etape": "prix au m² plausible",
              "restants": 10
            },
            {
              "etape": "à moins de 1000 m",
              "restants": 10
            }
          ],
          "mutations_comparables": [
            "2024-900000",
            "2024-900001",
            "2024-900002",
            "2024-900003",
            "2024-900004",
            "2024-900005",
            "2024-900006",
            "2024-900007",
            "2024-900008",
            "2024-900009"
          ],
          "methodology_version": "1.1",
          "sources_status": {
            "ademe": "not_used",
            "ademe_local": "not_used",
            "ban": "not_used",
            "ign": "not_used",
            "dvf": "ok",
            "cadastre": "not_used",
            "georisques": "not_used",
            "gpu": "not_used",
            "sitadel": "not_used",
            "bpe": "not_used",
            "education": "not_used",
            "arcep": "not_used",
            "atmo": "not_used",
            "transit": "not_used"
          },
          "duration_ms": 0
        }
      }
    }
  ],
  "comparables": [
    {
      "date": "2026-06-08",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "10 RUE DE L'EXEMPLE",
      "distance_m": 0.0
    },
    {
      "date": "2026-06-07",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "11 RUE DE L'EXEMPLE",
      "distance_m": 27.0
    },
    {
      "date": "2026-06-06",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "12 RUE DE L'EXEMPLE",
      "distance_m": 54.0
    },
    {
      "date": "2026-06-05",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "13 RUE DE L'EXEMPLE",
      "distance_m": 81.0
    },
    {
      "date": "2026-06-04",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "14 RUE DE L'EXEMPLE",
      "distance_m": 107.0
    },
    {
      "date": "2026-06-03",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "15 RUE DE L'EXEMPLE",
      "distance_m": 134.0
    },
    {
      "date": "2026-06-02",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "16 RUE DE L'EXEMPLE",
      "distance_m": 161.0
    },
    {
      "date": "2026-06-01",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "17 RUE DE L'EXEMPLE",
      "distance_m": 188.0
    },
    {
      "date": "2026-05-31",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "18 RUE DE L'EXEMPLE",
      "distance_m": 215.0
    },
    {
      "date": "2026-05-30",
      "prix_eur": 200000.0,
      "surface_m2": 100.0,
      "type_local": "Appartement",
      "voie": "19 RUE DE L'EXEMPLE",
      "distance_m": 242.0
    }
  ],
  "enrichment": {
    "adresse": {
      "label": "12 rue de l'Exemple 99999 Villeneuve-sur-Fixture (BAN)",
      "ban_id": "99999_0001_00012",
      "lat": 47.501,
      "lon": 2.501,
      "parcelle": null,
      "confidence": 1.0,
      "method": "adresse_saisie",
      "matched_criteria": [
        "adresse choisie dans la Base Adresse Nationale"
      ],
      "diverged_criteria": [],
      "comparaisons": [],
      "position_approchee": false,
      "dpe_trouve": null
    },
    "risques": {
      "inondation": {
        "concerne": true,
        "libelles": [],
        "atlas": [
          "Lot"
        ]
      },
      "seisme": {
        "zone": 1,
        "libelle": "1 - TRES FAIBLE"
      },
      "argiles": {
        "niveau": 2,
        "libelle": "Exposition moyenne"
      },
      "radon": {
        "potentiel": 1,
        "libelle": "Potentiel faible"
      },
      "risques_recenses": [
        {
          "code": "12",
          "libelle": "Mouvement de terrain"
        },
        {
          "code": "121",
          "libelle": "Affaissements et effondrements d'origine anthropique (anciennes carrières souterraines, hors mines)"
        },
        {
          "code": "123",
          "libelle": "Eboulement ou chutes de pierres et de blocs"
        },
        {
          "code": "124",
          "libelle": "Glissement de terrain"
        },
        {
          "code": "127",
          "libelle": "Tassements différentiels"
        },
        {
          "code": "16",
          "libelle": "Feu de forêt"
        },
        {
          "code": "23",
          "libelle": "Rupture de barrage"
        },
        {
          "code": "24",
          "libelle": "Transport de marchandises dangereuses"
        }
      ],
      "sites": [],
      "statuts": {
        "risques_recenses": "ok",
        "inondation": "ok",
        "seisme": "ok",
        "radon": "ok",
        "argiles": "ok",
        "sites": "ok"
      }
    },
    "urbanisme": {
      "zonage": {
        "code": "Ub",
        "libelle": "Zone urbaine : quartiers à densifier ou à restructurer",
        "type_zone": "U",
        "document": "PLUI",
        "date_validation": "2025-12-18"
      },
      "servitudes": [
        {
          "code": "AC1",
          "libelle": "COLLEGE GAMBETTA",
          "nature": "Périmètre des abords"
        },
        {
          "code": "T1",
          "libelle": "SUP T1 du Lot",
          "nature": "Zone de protection"
        },
        {
          "code": "PM1",
          "libelle": "PM1",
          "nature": "Enveloppe des zonages r?glementaires"
        }
      ],
      "statuts": {
        "zonage": "ok",
        "servitudes": "ok"
      }
    },
    "projets": [],
    "terrain": null,
    "solaire": null,
    "copropriete": null,
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "ok",
      "georisques": "ok",
      "gpu": "ok",
      "sitadel": "ok",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    }
  },
  "neighborhood": {
    "amenities": [
      {
        "categorie": "sante",
        "type": "Masseur kinésithérapeute",
        "nom": null,
        "distance_m": 348036.1,
        "code": "D233",
        "lat": 44.457760539675,
        "lon": 1.447585132636019
      },
      {
        "categorie": "sante",
        "type": "Infirmier",
        "nom": null,
        "distance_m": 348139.4,
        "code": "D232",
        "lat": 44.45634199299316,
        "lon": 1.450374463658037
      },
      {
        "categorie": "sante",
        "type": "Pédicure-podologue",
        "nom": null,
        "distance_m": 348153.2,
        "code": "D237",
        "lat": 44.457007419263995,
        "lon": 1.445613798237905
      },
      {
        "categorie": "sante",
        "type": "Structure psychiatrique en ambulatoire",
        "nom": null,
        "distance_m": 348242.9,
        "code": "D109",
        "lat": 44.45625098392544,
        "lon": 1.445183798617627
      },
      {
        "categorie": "sante",
        "type": "Psychologue",
        "nom": null,
        "distance_m": 348364.5,
        "code": "D243",
        "lat": 44.45495993149608,
        "lon": 1.446192134879147
      },
      {
        "categorie": "education",
        "type": "École maternelle",
        "nom": null,
        "distance_m": 348375.2,
        "code": "C101",
        "lat": 44.45475270686691,
        "lon": 1.446840309934811
      },
      {
        "categorie": "alimentation",
        "type": "Boulangerie",
        "nom": null,
        "distance_m": 348500.5,
        "code": "B203",
        "lat": 44.45364137495746,
        "lon": 1.446565373837412
      },
      {
        "categorie": "education",
        "type": "École primaire",
        "nom": null,
        "distance_m": 348594.2,
        "code": "C104",
        "lat": 44.45279354677859,
        "lon": 1.446460447750797
      },
      {
        "categorie": "education",
        "type": "Ufr",
        "nom": null,
        "distance_m": 348626.2,
        "code": "C501",
        "lat": 44.45251315825198,
        "lon": 1.446370103813196
      },
      {
        "categorie": "education",
        "type": "Institut universitaire",
        "nom": null,
        "distance_m": 348661.9,
        "code": "C502",
        "lat": 44.452196892756014,
        "lon": 1.446289545446312
      },
      {
        "categorie": "alimentation",
        "type": "Épicerie",
        "nom": null,
        "distance_m": 348698.9,
        "code": "B202",
        "lat": 44.45293670780534,
        "lon": 1.439818211021289
      },
      {
        "categorie": "education",
        "type": "Collège",
        "nom": null,
        "distance_m": 348936.2,
        "code": "C201",
        "lat": 44.4504552854695,
        "lon": 1.441549627874779
      }
    ],
    "schools": [
      {
        "nom": "Lycée polyvalent Gaston Monnerville",
        "type": "Lycée",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "lycee",
        "indicateurs": null
      },
      {
        "nom": "Section d'enseignement général et professionnel adapté du Collège Olivier de Magny",
        "type": "Collège",
        "distance_m": 347275.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46354320618618,
        "lon": 1.4550500739231473,
        "uai": null,
        "nature": "college",
        "indicateurs": null
      },
      {
        "nom": "Ecole élémentaire  Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347482.8,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.46168794004309,
        "lon": 1.4546934307658848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole maternelle publique Lucien Bénac Terre Rouge",
        "type": "Ecole",
        "distance_m": 347581.3,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460885623948506,
        "lon": 1.4540452753864679,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      },
      {
        "nom": "Ecole primaire publique P. Ségala",
        "type": "Ecole",
        "distance_m": 347997.4,
        "secteur": "Public",
        "education_prioritaire": null,
        "commune": "Cahors",
        "lat": 44.460156607721466,
        "lon": 1.4354300805942848,
        "uai": null,
        "nature": "primaire",
        "indicateurs": null
      }
    ],
    "transit_stops": [],
    "transit_source": null,
    "connectivity": {
      "fibre_disponible": null,
      "part_locaux_fibre": null,
      "technologies_filaires": [],
      "couverture_mobile": [],
      "statuts": {
        "fixe": "ok",
        "mobile": "ok"
      }
    },
    "antennes": [],
    "evenements": [],
    "air_quality": {
      "indice": 3,
      "libelle": "Dégradé",
      "date_indice": "2026-08-07",
      "polluants": [
        {
          "code": "o3",
          "libelle": "Ozone",
          "indice": 3
        },
        {
          "code": "no2",
          "libelle": "Dioxyde d'azote",
          "indice": 1
        },
        {
          "code": "pm10",
          "libelle": "Particules PM10",
          "indice": 1
        },
        {
          "code": "pm25",
          "libelle": "Particules fines PM2,5",
          "indice": 1
        },
        {
          "code": "so2",
          "libelle": "Dioxyde de soufre",
          "indice": 1
        }
      ],
      "source": "Atmo HDF",
      "zone": "LILLE"
    },
    "delinquance": null,
    "statuts": {
      "equipements": "ok",
      "ecoles": "ok",
      "resultats_ecoles": "ok",
      "transports": "not_used",
      "connectivite": "ok",
      "qualite_air": "ok",
      "delinquance": "not_used",
      "antennes": "ok",
      "evenements": "down"
    },
    "sources_status": {
      "ademe": "not_used",
      "ademe_local": "not_used",
      "ban": "not_used",
      "ign": "not_used",
      "dvf": "not_used",
      "cadastre": "not_used",
      "georisques": "not_used",
      "gpu": "not_used",
      "sitadel": "not_used",
      "bpe": "ok",
      "education": "ok",
      "arcep": "ok",
      "atmo": "ok",
      "transit": "not_used"
    },
    "duration_ms": 40
  },
  "diffuseurs": {
    "nombre": 0,
    "portails": []
  },
  "sections": [
    {
      "nom": "resolution",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "enrichissement",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "quartier",
      "statut": "ok",
      "detail": null
    },
    {
      "nom": "deal_score",
      "statut": "ok",
      "detail": null
    }
  ],
  "sources_status": {
    "ademe": "not_used",
    "ademe_local": "not_used",
    "ban": "not_used",
    "ign": "not_used",
    "dvf": "ok",
    "cadastre": "ok",
    "georisques": "ok",
    "gpu": "ok",
    "sitadel": "ok",
    "bpe": "ok",
    "education": "ok",
    "arcep": "ok",
    "atmo": "ok",
    "transit": "not_used"
  },
  "duration_ms": 81
}

Attendre ou relire : 200, 202 et GET /v1/analyses/{id}

Une analyse prend de quelques secondes à une vingtaine. Avec ?wait=20, la réponse arrive en ligne (200) dès qu'elle est prête. Sans attente, ou si le délai est dépassé, vous recevez 202 avec id, status: en_cours et status_url : relisez GET /v1/analyses/{id} (lui aussi accepte ?wait=). Un résultat reste lisible une heure ; ensuite 404 not_found. Un travail qui a échoué rend statut: echec, son code et sa raison — et le crédit a été rendu.

Lire la réponse

La réponse (ReponseAnalyse) est la même pour les trois sources. Les objets sont décrits champ par champ dans la référence ; voici comment les lire.

BlocCe qu'il ditComment le lire
resolutionLes adresses candidates, triées par confiance décroissante, cinq au plus.status dit si le moteur a tranché (resolved), hésite entre plusieurs (ambiguous) ou n'a rien (unresolved) — jamais s'il a raison. confidence_label (eleve ≥ 0,80, moyen ≥ 0,50, faible) vient du premier candidat. Chaque candidat porte sa method, ses critères qui concordent et divergent, et comparaisons : les deux valeurs face à face.
deal_scoresUne entrée par candidat, dans le même ordre ; pour chacun, une note par rayon demandé.statut: calcule → une note de 0 à 10 et un écart à la médiane ; donnees_insuffisantes → moins de huit ventes comparables, pas de note, et l'explication le dit ; annonce_incomplete → pas de prix : une fourchette (estimation_basse_eur, _mediane_eur, _haute_eur) ; source_indisponible → DVF muet, crédit rendu.
comparablesLes ventes retenues pour le premier candidat.Date, prix, surface, type, voie, distance. Ni parcelle, ni personne : DVF publie la vente, pas le vendeur.
enrichmentL'environnement de l'adresse retenue.Risques (inondation, séisme, argiles, radon), zonage d'urbanisme, chantiers autorisés à proximité, terrain, toiture. Chaque famille porte son statuts : un champ vide se lit « la source n'a rien dit », jamais « il n'y a rien ».
neighborhoodLa vie du quartier.Équipements, écoles (avec leurs résultats publiés — la valeur ajoutée prime sur le taux brut), arrêts de transport, connectivité, qualité de l'air. Même règle : une liste vide n'est pas un désert.
diffuseursCombien de portails publient cette annonce, et lesquels.Le nombre et les noms. Plusieurs agences pour un même bien → mandat non exclusif, probablement.
sections et sources_statusCe qui a marché et ce qui a manqué.Une section absente ou partielle dit pourquoi, en français ; sources_status donne l'état de chaque source publique (ok, degraded, down, not_used).
billed, cost_credits, modeLa facturation de cet appel.billed: false avec statut: termine = un rejeu par Idempotency-Key ou le bac à sable.

Jamais une adresse présentée comme sûre. Le moteur rend des candidats et dit combien il leur fait confiance ; c'est à votre programme, ou à votre utilisateur, de trancher — la carte du site fait exactement cela.

Idempotence et cache

Envoyez un en-tête Idempotency-Key (jusqu'à 200 caractères, à vous de le choisir) : rejouer le même appel pendant vingt-quatre heures rend la réponse du premier, avec billed: false. Un appel qui travaille encore sous la même clé répond 409 idempotency_in_progress. C'est ce qui rend un client sûr face à un réseau qui coupe : réessayez sans crainte de payer deux fois.

Indépendamment, un même lien demandé deux fois dans l'heure est servi de notre mémoire — vite, au tarif plein, avec un nouvel identifiant. Le cache protège nos coûts (l'agrégateur facture chaque résolution), ce n'est pas une remise : un cache gratuit apprendrait aux clients à sonder ce que d'autres ont demandé.

Concurrence

Une analyse à la fois par clé. Un second POST pendant qu'un premier travaille répond 429 too_many_inflight, avant même que le solde soit touché. Attendez le résultat, ou relisez-le par son identifiant. Le plafond d'appels par minute s'ajoute (voir Erreurs et plafonds).

Les liens d'annonce reconnus

Un lien d'annonce est d'abord résolu par un agrégateur (Stream Estate), qui a déjà collecté l'annonce et la rend avec ses diffuseurs : c'est ce qui permet de lire des portails qui refusent toute lecture serveur. Les portails ci-dessous sont ceux qu'il reconnaît. Un lien hors de cet index est lu directement par LogiScan si le site l'accepte (agences qui publient leurs données structurées) ; s'il refuse, l'appel rend une réponse sans candidat, facturée, et la seule voie qui reste est le texte de l'annonce.

  • leboncoin
  • SeLoger
  • Logic-Immo
  • PAP
  • Bien'ici
  • ParuVendu
  • Belles Demeures
  • Lux-Résidence
  • Immobilier des notaires

Liste relevée le 16 septembre 2026 sur l'index de l'agrégateur.

Miroir des diagnostics : dump ADEME chargé le 15/09/2026.Ventes : DVF, millésimes 2021, 2022, 2023, 2024, 2025 (Etalab). Le schéma qui fait foi est servi sur /v1/openapi.json.