API et exports pour les professionnels
Lire depuis votre logiciel les biens, les documents et les échéances de votre organisation. En lecture seule, avec une clé que vous créez et révoquez vous-même.
L'API donne à un logiciel (votre outil de transaction, de gestion locative, un tableur ou un script) le même regard que la page « Échéances » et le passeport de chaque bien : ce qui est demandé, ce qui est déposé, ce qui expire et d'après quelle règle.
Ce qu'elle fait, et ce qu'elle ne fait pas
- Lecture seule. Il n'existe pas d'API d'écriture : on ne crée, ne modifie ni ne supprime rien par l'API. Les biens s'ajoutent dans l'application, un par un ou par import d'adresses.
- Une organisation par clé. Une clé ne lit que les biens de l'organisation qui l'a créée. Les espaces personnels n'ont pas d'accès API.
- Pas de connecteur prêt à l'emploi. Nous n'avons pas de connecteur avec un logiciel du marché (transaction, gestion, notaires) pour l'instant : l'intégration se fait de votre côté, avec ces points d'entrée.
- Des données déclarées, pas certifiées. Les dates et statuts viennent des documents déposés et de nos règles sourcées. I Love Immo n'est ni l'administration, ni un notaire, ni un diagnostiqueur certifié : chaque statut renvoie à la règle, à ses sources et à sa date de vérification.
Authentification
Un propriétaire ou un administrateur de l'organisation crée une clé dans Organisation › Accès API, en lui donnant un nom (celui du logiciel qui l'utilisera). La clé complète, de la forme `ili_live_…`, est affichée une seule fois : nous n'en gardons qu'une empreinte. Perdue, elle se remplace par une nouvelle ; compromise, elle se révoque en un clic et cesse aussitôt de fonctionner.
Chaque requête porte la clé dans l'en-tête `Authorization` :
curl https://www.iloveimmo.fr/api/v1/biens/ \
-H "Authorization: Bearer ili_live_VOTRE_CLE"- Les adresses se terminent par une barre oblique (/api/v1/biens/). Sans elle, le serveur répond par une redirection 308 vers l'adresse avec barre.
- Les réponses sont en JSON (UTF-8), jamais mises en cache (Cache-Control: no-store). Les dates sont au format ISO 8601.
- Gardez la clé côté serveur, dans le coffre de secrets de votre logiciel : jamais dans une page web, un e-mail ou un dépôt de code.
Points d'entrée
Tous en GET. Les exemples de réponses sont fictifs (« Exemple », Exempleville) ; les champs et leur forme sont exactement ceux renvoyés.
GET/api/v1/biens/
Les biens actifs de l'organisation, du plus récemment créé au plus ancien, avec leur santé documentaire et leur état de préparation pour une vente et pour une location.
- page
- Numéro de page, à partir de 1 (1 par défaut).
- per_page
- Biens par page, de 1 à 100 (25 par défaut).
- q
- Recherche dans le nom, l'adresse, la référence client, la ville, le code postal ou l'identifiant.
- archives
- 1 pour inclure les biens archivés (archived_at renseigné).
curl "https://www.iloveimmo.fr/api/v1/biens/?per_page=1&q=MANDAT" \
-H "Authorization: Bearer ili_live_VOTRE_CLE"{
"data": [
{
"id": "bien_exemple0000000001",
"label": "Exemple — Appartement T3",
"client_ref": "MANDAT-0001",
"address": {
"label": "1 Rue de l'Exemple 00000 Exempleville",
"postcode": "00000",
"city": "Exempleville",
"citycode": "00000",
"ban_id": "00000_0000_00001",
"lat": null,
"lon": null
},
"parcel_id": "000000000A0001",
"parcel_confirmed": false,
"property_type": "appartement",
"property_type_label": "Appartement",
"project": "vendre",
"created_at": "2026-10-05T09:12:45.361Z",
"updated_at": "2026-10-05T09:14:02.118Z",
"archived_at": null,
"transferred_at": null,
"health": { "score": 100, "label": "Prêt", "basis": 1 },
"readiness": [
{
"project": "vendre",
"state": "a_verifier",
"missing": [],
"expiring": [],
"to_check": [
{ "id": "etat-des-risques", "name": "État des risques" },
{ "id": "amiante", "name": "État mentionnant la présence ou l'absence d'amiante" }
]
},
{
"project": "louer",
"state": "a_completer",
"missing": [
{ "id": "surface-habitable", "name": "Mesurage de la surface habitable (loi Boutin)" },
{ "id": "bail", "name": "Contrat de location" }
],
"expiring": [],
"to_check": [{ "id": "etat-des-risques", "name": "État des risques" }]
}
],
"ruleset_version": "2026-10",
"url": "https://www.iloveimmo.fr/app/biens/bien_exemple0000000001/"
}
],
"pagination": { "page": 1, "per_page": 1, "total": 1, "pages": 1 }
}- health.score va de 0 à 100 ; il vaut null quand rien n'est encore obligatoire pour le projet du bien. basis est le nombre de documents obligatoires sur lequel il est calculé.
- readiness donne, pour une vente puis pour une location : state (pret, a_completer ou a_verifier), les documents obligatoires manquants ou expirés (missing), ceux qui expirent bientôt (expiring) et ceux dont l'obligation dépend d'une information encore inconnue sur le bien (to_check).
- url ouvre le passeport du bien dans l'application, pour une personne connectée membre de l'organisation.
- Les listes ci-dessus sont raccourcies pour l'exemple.
GET/api/v1/biens/{id}/
Un bien, avec en plus sa checklist (chaque document, son statut et la règle qui le demande, avec ses sources), les métadonnées de ses documents et ses échéances.
- archives
- 1 pour lire un bien archivé.
curl https://www.iloveimmo.fr/api/v1/biens/bien_exemple0000000001/ \
-H "Authorization: Bearer ili_live_VOTRE_CLE"{
"data": {
"id": "bien_exemple0000000001",
"label": "Exemple — Appartement T3",
"…": "mêmes champs que dans la liste",
"checklist": {
"project": "vendre",
"ruleset_version": "2026-10",
"evaluated_at": "2026-10-05",
"items": [
{
"document": { "id": "dpe", "name": "Diagnostic de performance énergétique" },
"status": "requis",
"document_status": "valide",
"expires_at": "2035-03-01",
"document_id": "doc_exemple0000000001",
"missing_facts": [],
"rule": {
"id": "dpe.vente",
"summary": "Obligatoire pour vendre un logement ou un bâtiment. Les classes énergie et climat doivent figurer dans l'annonce.",
"sources": [
{ "label": "Diagnostic de performance énergétique (DPE)", "url": "https://www.service-public.gouv.fr/particuliers/vosdroits/F16096" },
{ "label": "Article L271-4 du code de la construction et de l'habitation", "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000049398848" }
],
"last_checked": "2026-10-01",
"review": "non_relu"
}
}
]
},
"documents": [
{
"id": "doc_exemple0000000001",
"type": "dpe",
"type_name": "Diagnostic de performance énergétique",
"title": "DPE",
"issuer": "Cabinet Exemple",
"issued_at": "2025-03-01",
"expires_at": null,
"version": 1,
"latest": true,
"status": "valide",
"source": "upload",
"created_at": "2026-10-05T09:14:02.118Z",
"file": {
"name": "dpe-exemple.pdf",
"size": 184320,
"mime": "application/pdf",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"url": "https://www.iloveimmo.fr/api/v1/biens/bien_exemple0000000001/documents/doc_exemple0000000001/fichier/"
}
}
],
"deadlines": [
{
"document": { "id": "dpe", "name": "Diagnostic de performance énergétique" },
"required": true,
"status": "valide",
"expires_at": "2035-03-01",
"reason": "Valable 10 ans.",
"document_id": "doc_exemple0000000001"
}
]
}
}- checklist.items[].status dit si le document est demandé pour le projet : requis, a_verifier (selon une information à préciser, listée dans missing_facts), a_disposition, recommande ou a_venir.
- document_status et documents[].status disent où en est le document déposé : valide, expire_bientot, expire, a_verifier (date manquante) ou manquant. Une ancienne version porte le statut remplace.
- rule.review indique si la règle a été relue (non_relu, relu, valide) ; last_checked est la date de dernière vérification de ses sources.
- documents ne contient que des métadonnées. file vaut null pour un document enregistré sans fichier ; sinon file.url mène au fichier.
GET/api/v1/biens/{id}/documents/{docId}/fichier/
Le fichier d'un document, tel qu'il a été déposé ou produit, avec son type MIME et son nom d'origine.
- archives
- 1 pour un document d'un bien archivé.
curl -o dpe.pdf https://www.iloveimmo.fr/api/v1/biens/bien_exemple0000000001/documents/doc_exemple0000000001/fichier/ \
-H "Authorization: Bearer ili_live_VOTRE_CLE"HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="dpe-exemple.pdf"; filename*=UTF-8''dpe-exemple.pdf
Cache-Control: no-store
(contenu du fichier)- Vérifiez l'intégrité du fichier reçu avec file.sha256 donné par le détail du bien.
GET/api/v1/echeances/
Les documents à traiter sur tous les biens de l'organisation, du plus urgent au moins urgent : expirés, manquants alors qu'obligatoires, à vérifier, ou qui expirent bientôt. C'est la liste « À traiter » de la page Échéances.
- avant
- Date AAAA-MM-JJ : ajoute les documents encore valides qui expirent ce jour-là ou avant, et retire ceux dont l'échéance est postérieure. Les documents manquants (sans date) restent dans la liste.
- page, per_page
- Comme pour la liste des biens.
- archives
- 1 pour inclure les biens archivés.
curl "https://www.iloveimmo.fr/api/v1/echeances/?avant=2026-12-31" \
-H "Authorization: Bearer ili_live_VOTRE_CLE"{
"data": [
{
"property": {
"id": "bien_exemple0000000001",
"label": "Exemple — Appartement T3",
"client_ref": "MANDAT-0001",
"address": "1 Rue de l'Exemple 00000 Exempleville"
},
"document": { "id": "etat-des-risques", "name": "État des risques" },
"required": false,
"status": "expire",
"expires_at": "2026-08-10",
"reason": "Valable 6 mois.",
"document_id": "doc_exemple0000000002"
}
],
"pagination": { "page": 1, "per_page": 25, "total": 1, "pages": 1 }
}Limites
- 120 requêtes par minute et par clé. Au-delà, la réponse est 429 avec l'en-tête Retry-After (en secondes). Chaque réponse porte X-RateLimit-Limit et X-RateLimit-Remaining.
- 100 biens au plus par page.
- 20 clés actives au plus par organisation.
- Les statuts sont recalculés à chaque requête, à la date du jour, avec les règles en vigueur (ruleset_version).
Erreurs
Toute erreur répond en JSON, avec un code stable à tester dans votre logiciel et un message en français à afficher :
{
"error": {
"code": "cle_revoquee",
"message": "Cette clé API a été révoquée."
}
}| Statut | code | Cas |
|---|---|---|
| 400 | parametre_invalide | Un paramètre est mal formé (page, per_page, avant). |
| 401 | authentification_requise | En-tête Authorization absent ou mal formé. |
| 401 | cle_invalide | Clé inconnue. |
| 401 | cle_revoquee | Clé révoquée. |
| 403 | espace_personnel | La clé appartient à un espace personnel : l'API est réservée aux organisations. |
| 404 | introuvable | Bien ou document inexistant, ou appartenant à une autre organisation (les deux cas répondent pareil). |
| 404 | sans_fichier / fichier_introuvable | Le document n'a pas de fichier, ou le fichier n'est plus lisible. |
| 404 | point_d_entree_inconnu | Adresse inconnue sous /api/v1/. |
| 405 | lecture_seule | Méthode d'écriture (POST, PUT, PATCH, DELETE) : l'API est en lecture seule. |
| 429 | trop_de_requetes | Limite de requêtes atteinte : attendre la durée indiquée par Retry-After. |
| 500 | erreur_interne | Erreur de notre côté : réessayez plus tard. |
Exports et import CSV
Sans clé API, les membres d'une organisation exportent et importent depuis l'application, connectés avec leur compte (ces adresses ne s'utilisent pas avec une clé). Les fichiers CSV sont en UTF-8 avec BOM, séparés par des points-virgules, chaque valeur entre guillemets, lignes terminées par CRLF : ils s'ouvrent tels quels dans un tableur.
Export des biens
Organisation › Portefeuille › Exporter en CSV, ou Compte › Liste des biens (CSV). Adresse : /api/export/biens/, avec ?org=identifiant pour une seule organisation.
Une ligne par bien actif (les biens archivés n'y sont pas). Sans le paramètre org, tous les espaces dont vous êtes membre.
- id
- Identifiant du bien (le même que dans l'API).
- nom
- Nom donné au bien.
- reference
- Référence client (mandat, lot…).
- adresse
- Adresse complète.
- parcelle
- Identifiant cadastral de la parcelle.
- type
- Type de bien, en clair (Appartement, Maison…).
- projet
- Projet : vendre, louer, acheter, renover, gerer ou stocker.
- sante
- Score de santé documentaire de 0 à 100 (vide si rien n'est obligatoire).
- manquants
- Identifiants des documents obligatoires manquants, séparés par des espaces.
- a_renouveler
- Documents expirés ou qui expirent bientôt, sous la forme identifiant:AAAA-MM-JJ, séparés par des espaces.
- version_regles
- Version des règles utilisée pour le calcul.
"id";"nom";"reference";"adresse";"parcelle";"type";"projet";"sante";"manquants";"a_renouveler";"version_regles"Export des documents
Compte › Tous mes documents (ZIP). Adresse : /api/export/documents/, avec ?org=identifiant pour une seule organisation.
Une archive ZIP : un dossier par bien actif, toutes les versions de chaque document (fichier nommé type-vVERSION-nom d'origine), et un fichier index.csv, une ligne par document, au même format que ci-dessus.
- bien
- Dossier du bien dans l'archive.
- adresse
- Adresse du bien.
- document
- Type de document, en clair.
- titre
- Titre saisi ou lu sur le document.
- etabli_le
- Date d'établissement (AAAA-MM-JJ).
- expire_le
- Date d'expiration écrite sur le document, si elle existe.
- version
- Numéro de version pour ce type de document.
- source
- upload (déposé), generated (produit par I Love Immo), provider (livré par un diagnostiqueur) ou import (repris lors d'un import).
- fichier
- Chemin du fichier dans l'archive (vide pour un document sans fichier).
"bien";"adresse";"document";"titre";"etabli_le";"expire_le";"version";"source";"fichier"Import d'adresses
Biens › Importer des biens
L'import ne lit pas de fichier : on colle une liste dans le formulaire. Une adresse par ligne, 200 lignes au plus ; une référence client facultative après un point-virgule. Les lignes vides et celles de moins de 5 caractères sont ignorées. Le type de bien et le projet se choisissent une fois pour toute la liste ; chaque adresse est cherchée dans la Base Adresse Nationale.
8 boulevard du Port 00000 Exempleville ; Lot 12
14 rue de l'Exemple 00000 Exempleville ; Mandat 2451
3 place de l'Exemple 00000 ExemplevilleUn besoin que l'API ne couvre pas encore (écriture, webhooks, connecteur avec votre logiciel) ? Dites-le‑nous : nous ne promettons pas de date, mais ces demandes décident de la suite.
Nous écrire