LogiScan

Complétude d'une annonce : POST /v1/listings/completeness

Pour une agence qui complète ses fiches, ou un outil qui guide une saisie. Pur et sans réseau : rien n'est lu ailleurs que dans ce que vous envoyez.

POST /v1/listings/completeness 0,05 crédits Complétude d'une annonce

La requête

Deux formes, exclusives l'une de l'autre : listing, une annonce structurée (commune, bien, diagnostic, description — jamais de lien ni de référence, que le schéma ne connaît pas) ; ou text, le texte d'une page, lu par le lecteur du site puis jeté.

tous_les_champs: true rend la liste entière des champs manquants. Par défaut, le service en rend trois au plus — ceux que le site demande à un visiteur, parce qu'un formulaire de plus de trois cases n'est plus une aide.

POST /v1/listings/completeness Ce qui manque à une annonce 0,05 crédits

Une annonce structurée (listing) ou un texte (text). Par défaut, trois champs au plus — ceux que le site demande à un visiteur ; tous_les_champs rend la liste entière, pour une agence qui complète ses fiches.

curl
curl -s -X POST 'https://logiscan.fr/v1/listings/completeness' \
  -H 'Authorization: Bearer lsk_test_VOTRE_CLE' \
  -H 'Content-Type: application/json' \
  -d '{"listing": {"commune": {"nom": "Villeneuve-sur-Fixture", "code_postal": "99999"}, "property": {"type_bien": "appartement", "surface_m2": 65, "nb_pieces": 3}}, "tous_les_champs": true}'
Python · httpx
import httpx

CLE = "lsk_test_VOTRE_CLE"

reponse = httpx.post(
    "https://logiscan.fr/v1/listings/completeness",
    json={"listing": {"commune": {"nom": "Villeneuve-sur-Fixture", "code_postal": "99999"}, "property": {"type_bien": "appartement", "surface_m2": 65, "nb_pieces": 3}}, "tous_les_champs": true},
    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/listings/completeness", {
  method: "POST",
  headers: { Authorization: `Bearer ${CLE}`, "Content-Type": "application/json" },
  body: JSON.stringify({"listing": {"commune": {"nom": "Villeneuve-sur-Fixture", "code_postal": "99999"}, "property": {"type_bien": "appartement", "surface_m2": 65, "nb_pieces": 3}}, "tous_les_champs": true}),
});
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
{
  "billed": false,
  "mode": "test",
  "cost_credits": 0.0,
  "suffisant": false,
  "champs": [
    {
      "champ": "dpe.conso_kwh_m2_an",
      "intitule": "Consommation en kWh/m²/an",
      "pourquoi": "C'est le chiffre qui rapproche le plus sûrement une annonce de son diagnostic : il se recoupe directement avec celui du diagnostic officiel, là où la lettre seule est bien moins précise.",
      "aide": "Cherchez le bloc « Diagnostic de performance énergétique » de l'annonce : la date et la consommation y figurent, souvent en petits caractères sous les lettres."
    },
    {
      "champ": "dpe.date_etablissement",
      "intitule": "Date de réalisation du DPE",
      "pourquoi": "Une date au jour près ne concerne qu'une poignée de diagnostics dans une commune, et resserre énormément la recherche.",
      "aide": "Cherchez le bloc « Diagnostic de performance énergétique » de l'annonce : la date et la consommation y figurent, souvent en petits caractères sous les lettres."
    },
    {
      "champ": "dpe.classe_energie",
      "intitule": "Classe énergie (A à G)",
      "pourquoi": "Sept classes seulement : c'est moins précis qu'une consommation, mais cela écarte déjà six diagnostics sur sept.",
      "aide": "Cherchez le bloc « Diagnostic de performance énergétique » de l'annonce : la date et la consommation y figurent, souvent en petits caractères sous les lettres."
    },
    {
      "champ": "dpe.numero_ademe",
      "intitule": "Numéro ADEME du DPE (13 caractères)",
      "pourquoi": "Il désigne le diagnostic à lui seul et résout l'adresse d'un coup. Il vient en dernier parce qu'il est rarement affiché, pas parce qu'il vaudrait moins.",
      "aide": "Cherchez le bloc « Diagnostic de performance énergétique » de l'annonce : la date et la consommation y figurent, souvent en petits caractères sous les lettres."
    },
    {
      "champ": "property.prix_eur",
      "intitule": "Prix affiché",
      "pourquoi": "Sans le prix, la comparaison aux ventes voisines n'a rien à comparer : l'analyse dira où est le bien et ce qu'il y a autour, jamais si son prix tient la route.",
      "aide": "Il est affiché en gros en haut de l'annonce. Reprenez le prix affiché, honoraires compris s'ils le sont — c'est celui-là que la page montre."
    }
  ],
  "message": "5 information(s) manquent et amélioreraient nettement le résultat. L'analyse reste possible sans elles.",
  "champs_lus": [
    "commune.code_postal",
    "commune.nom",
    "property.nb_pieces",
    "property.surface_m2",
    "property.type_bien"
  ],
  "tous_les_champs": true
}

Lire la réponse

suffisant dit s'il vaut la peine de demander quelque chose. champs liste les manques, du plus discriminant au moins : chacun porte champ (le nom du contrat, préfixé de sa famille — dpe.date_etablissement), intitule (en français, tel qu'on l'afficherait), pourquoi (ce que ce champ apporterait) et aide (où le trouver sur une page d'annonce). champs_lus est la liste des champs que l'annonce renseignait déjà.

L'ordre suit un barème : d'abord ce qui rend la recherche possible (commune, type, surface), puis ce qui départage (consommation, date et classe du diagnostic, étage, année), puis ce qui note (le prix). Le numéro ADEME ferme la marche : décisif mais presque jamais affiché.

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.