{"openapi":"3.1.0","info":{"title":"OKLÉON — API d'intégration · bac à sable","version":"1.0.0","summary":"Lire et alimenter le portefeuille et les dossiers d'un espace OKLÉON.","description":"Cette surface existe pour qu'un logiciel tiers — gérance, portail maison, tableau de bord — lise le portefeuille et les dossiers d'un espace, et les alimente.\n\n## L'espace est dans l'adresse\nIl n'y a pas d'`api.okleon.fr` : chaque agence a son hôte, et **c'est l'hôte qui choisit la base**. Une clé présentée sur `agence-a.okleon.fr` ne peut donc rien toucher chez `agence-b` — l'isolation n'est pas une règle qu'on applique, c'est la structure elle-même.\n\n## S'authentifier\n`Authorization: Bearer ok_live_…`, **ou** `X-Api-Key: ok_live_…`.\n\n⚠️ Les deux ne sont pas là par coquetterie : certains hébergements PHP retirent l'en-tête `Authorization` avant qu'il n'atteigne le script. Si vous recevez un 401 alors que vous êtes sûr de votre clé, passez à `X-Api-Key` — il ne dépend d'aucun réglage serveur. `/ping` vous dit par quelle voie votre clé est arrivée.\n\n⛔ Il n'y a **pas de CORS**, volontairement : une clé serveur n'a rien à faire dans le JavaScript d'une page. Appelez depuis votre serveur.\n\n## Se synchroniser\nCommencez par `/changements` : un flux unique, trié dans le temps, qui couvre toutes les collections **et les suppressions**. Stockez le `server_time` qu'il renvoie et repassez-le en `since` au prochain appel.\n\n⚠️ N'utilisez jamais l'heure de votre propre machine : deux horloges qui divergent d'une minute font sauter une minute de changements, en silence.\n\nLa pagination est un **curseur**, jamais un `OFFSET` : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit.\n\n## Ce qu'il faut savoir avant de coder\n· **Le statut d'un dossier se déduit**, il ne se pose pas.\n· **Le journal est en lecture seule**, et ses dates sont au format d'affichage français, pas en ISO 8601.\n· **Les identifiants `bien_…`, `loc_…`, `own_…`, `art_…` sont des chaînes.** Les convertir en entier les met silencieusement à zéro.\n· Une valeur vide ressort à `null`, jamais à `\"\"` : vous distinguez « pas renseigné » de « effacé ».\n· Lisez `/espace` d'abord : toutes les agences n'ont ni les mêmes options ni les mêmes types de sinistre.\n\n## Essayer sans compte client\n⭐ `https://demo.okleon.fr/api/v1/` est un bac à sable aux **données entièrement fictives**, avec des clés préfixées `ok_test_`. Branchez-vous dessus avant de demander l'accès à l'espace d'une vraie agence.\n\n## L'écriture\nElle s'ouvre **espace par espace**, à la demande de l'agence (`/espace` › `api.ecriture_ouverte`). Fermée, toute écriture répond `403 ecriture_fermee` — et ce document ne la décrit pas.\n\n· **Créer** : `POST /{collection}` avec l'en-tête `Idempotency-Key` (obligatoire) : si votre appel expire, réessayez avec la même clé, sans risque de doublon.\n· **Synchroniser** : `PUT /{collection}/ext:VOTRE_REF` crée la fiche si elle n'existe pas et la met à jour sinon. C'est la route d'un logiciel qui fait foi.\n· **Modifier** : `PATCH` avec `If-Match: <ETag lu>` (obligatoire). Si la fiche a changé à l'écran entre-temps : `412`, relisez et réappliquez. `If-Match: *` écrase en connaissance de cause.\n· **Relier** : un champ de référence accepte notre identifiant ou le vôtre (`\"owner_id\": \"ext:PROP-12\"`).\n· **Déclarer un sinistre** : `POST /sinistres`. L'urgence se DÉDUIT des faits (`reponses`) ; statut, urgence, référence et journal ne s'écrivent pas.\n· **Ne se fait pas** : supprimer (`405`), poser un statut, écrire au journal. Une sortie de locataire se pose (`date_sortie`).\n· Toutes les fautes d'un corps reviennent **d'un coup** (`422`, `error.erreurs`).\n· Quota d'écriture : 60 par minute, 5000 par jour.\n· Ce que vous écrivez ne vous revient **pas** en webhook (pas d'écho), et l'agence peut l'annuler pendant 90 jours depuis son écran.\n\n## Les webhooks\nAu lieu d'interroger `/changements` en boucle, faites-vous **prévenir**. L'agence déclare votre adresse (Administration → API → Webhooks) et l'associe à votre clé : vous recevez alors, en `POST` JSON, les changements que cette clé peut lire.\n\n· **Signature** : l'en-tête `X-Okleon-Signature: t=<unix>,v1=<hex>` porte un HMAC-SHA256 de `t + \".\" + corps brut`, calculé avec le secret `whsec_…` remis à la création. Comparez en temps constant, et refusez un `t` de plus de 300 secondes.\n· **Répondez 2xx vite** (moins de 10 s), puis traitez. Aucune redirection n'est suivie.\n· **Au moins une fois** : un envoi peut arriver deux fois. Écartez le doublon grâce à `id` (aussi dans l'en-tête `X-Okleon-Envoi`).\n· **Nouveaux essais** après 1 min, 5 min, 30 min, 2 h, 6 h, 12 h et 24 h. Au-delà (≈ 45 h), l'envoi est abandonné et l'adresse coupée : rattrapez alors par `/changements?since=` depuis le dernier `server_time` reçu.\n· **Pas de temps réel** : les envois partent au passage du planificateur de l'hébergement. Comptez quelques minutes.\n· L'ordre d'arrivée n'est pas garanti : fiez-vous à `at`, et relisez la fiche.\n\n⭐ **La bonne façon de se tenir à jour** — la moins coûteuse pour vous comme pour nous : à chaque webhook, relisez **seulement** les fiches annoncées (`GET /{collection}/{id}`) ; au-delà de 20 fiches, synchronisez par pages (`updated_since`) ; et gardez `/changements` en **filet de sécurité, une fois par heure**. Soit 24 appels par jour quand rien ne change, contre 1 440 en interrogeant à la minute. N'interrogez pas en boucle quand vous avez un webhook : ces appels comptent dans votre quota, et ils se voient dans nos journaux.","contact":{"name":"Documentation OKLÉON","url":"https://okleon.fr/developpeurs/"}},"servers":[{"url":"https://{espace}/api/v1","description":"L'espace de l'agence. Le bac à sable est `demo.okleon.fr`.","variables":{"espace":{"default":"demo.okleon.fr","description":"L'hôte de l'agence (ou demo.okleon.fr)."}}}],"tags":[{"name":"Système","description":"Se repérer, se synchroniser."},{"name":"Portefeuille","description":"Logements, personnes, et qui habite où."},{"name":"Dossiers","description":"Sinistres, devis, pièces jointes, permis."},{"name":"Référentiel","description":"Ce qui est propre à cet espace."}],"security":[{"apiKey":[]},{"bearer":[]}],"paths":{"/":{"get":{"tags":["Système"],"summary":"Le point d'entrée","description":"La seule route qui ne demande pas de clé : un développeur qui tâtonne doit trouver la documentation, pas un 401 sans explication.","security":[],"responses":{"200":{"description":"Le service et son adresse de documentation.","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"documentation":{"type":"string","format":"uri"},"authentification":{"type":"string"}}}}}}}}},"/openapi.json":{"get":{"tags":["Système"],"summary":"Ce document","description":"Public, et servi PAR ESPACE : les collections décrites sont celles que cet espace possède réellement.","security":[],"responses":{"200":{"description":"Le document OpenAPI 3.1.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/ping":{"get":{"tags":["Système"],"summary":"Ma clé est-elle bonne ?","description":"Le premier appel à faire. Il dit par quel en-tête la clé est arrivée (`source`) — précieux quand `Authorization` est retiré par un hébergement.","responses":{"200":{"description":"La clé est valide.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"espace":{"type":"string"},"cle":{"$ref":"#/components/schemas/Cle"}}}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/espace":{"get":{"tags":["Système"],"summary":"De quoi est fait cet espace","description":"⭐ À lire AVANT de coder quoi que ce soit de générique. Chaque agence n'a ni les mêmes options ni les mêmes types de sinistre : sans cette route, on code en dur ce qu'on a vu chez son premier client et on casse chez le deuxième.","responses":{"200":{"description":"La description de l'espace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Espace"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/changements":{"get":{"tags":["Système"],"summary":"Le flux unique des changements","description":"⭐ LE point d'entrée d'une synchronisation. Un seul flux pour toutes les collections, trié dans le temps, avec les suppressions.\n\n⚠️ Il est **déduit** des `updated_at` et des pierres tombales, jamais journalisé : l'application écrit dans ces tables depuis des dizaines de fichiers, et un journal qu'il faut penser à nourrir finit par mentir.\n\n⚠️ Une fiche supprimée à la main dans la base (phpMyAdmin) ne laisse pas de trace — c'est la limite assumée du procédé.\n\n⭐ Ne l'interrogez pas en boucle : faites-vous prévenir par **webhook**, et gardez cette route en filet de sécurité, une fois par heure.","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"Depuis quand. Utilisez le `server_time` du dernier appel."},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"Les changements, du plus ancien au plus récent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageChangements"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/biens":{"get":{"tags":["Portefeuille"],"summary":"Lister — biens","description":"Les logements.\n\nPortée requise : `biens:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/external_ref"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBiens"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Portefeuille"],"summary":"Créer — biens","description":"Portée requise : `biens:write`. L'identifiant est attribué par OKLÉON ; posez `external_ref` pour retrouver la fiche par VOTRE référence.\n\n`address_short` et `owner_name` se calculent chez nous (adresse composée, nom du propriétaire).","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreationBiens"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Biens"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/biens/{id}":{"get":{"tags":["Portefeuille"],"summary":"Une fiche — biens","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Biens"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"tags":["Portefeuille"],"summary":"Modifier — biens","description":"Portée requise : `biens:write`. Seuls les champs envoyés changent ; `null` efface.\n\n`address_short` et `owner_name` se calculent chez nous (adresse composée, nom du propriétaire).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationBiens"}}}},"responses":{"200":{"description":"Modifiée (ou déjà dans cet état).","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Biens"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}},"put":{"tags":["Portefeuille"],"summary":"Créer ou mettre à jour par VOTRE référence — biens","description":"⭐ La route d'une synchronisation : « ma fiche LOT-1234 ressemble à ceci ». `{id}` DOIT être `ext:VOTRE_REF`. Absente : créée (201, sans If-Match). Présente : mise à jour des champs envoyés (200, `If-Match` exigé — `*` pour écraser). Rejouable sans doublon. Portée requise : `biens:write`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Exigé si la fiche existe déjà."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationBiens"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Biens"}}}},"200":{"description":"Mise à jour.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Biens"}}}},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/locataires":{"get":{"tags":["Portefeuille"],"summary":"Lister — locataires","description":"Les occupants.\n\nPortée requise : `locataires:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/external_ref"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageLocataires"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Portefeuille"],"summary":"Créer — locataires","description":"Portée requise : `locataires:write`. L'identifiant est attribué par OKLÉON ; posez `external_ref` pour retrouver la fiche par VOTRE référence.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreationLocataires"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Locataires"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/locataires/{id}":{"get":{"tags":["Portefeuille"],"summary":"Une fiche — locataires","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Locataires"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"tags":["Portefeuille"],"summary":"Modifier — locataires","description":"Portée requise : `locataires:write`. Seuls les champs envoyés changent ; `null` efface.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationLocataires"}}}},"responses":{"200":{"description":"Modifiée (ou déjà dans cet état).","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Locataires"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}},"put":{"tags":["Portefeuille"],"summary":"Créer ou mettre à jour par VOTRE référence — locataires","description":"⭐ La route d'une synchronisation : « ma fiche LOT-1234 ressemble à ceci ». `{id}` DOIT être `ext:VOTRE_REF`. Absente : créée (201, sans If-Match). Présente : mise à jour des champs envoyés (200, `If-Match` exigé — `*` pour écraser). Rejouable sans doublon. Portée requise : `locataires:write`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Exigé si la fiche existe déjà."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationLocataires"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Locataires"}}}},"200":{"description":"Mise à jour.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Locataires"}}}},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/proprietaires":{"get":{"tags":["Portefeuille"],"summary":"Lister — proprietaires","description":"Les bailleurs, personnes physiques ou morales.\n\nPortée requise : `proprietaires:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/external_ref"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageProprietaires"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Portefeuille"],"summary":"Créer — proprietaires","description":"Portée requise : `proprietaires:write`. L'identifiant est attribué par OKLÉON ; posez `external_ref` pour retrouver la fiche par VOTRE référence.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreationProprietaires"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proprietaires"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/proprietaires/{id}":{"get":{"tags":["Portefeuille"],"summary":"Une fiche — proprietaires","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proprietaires"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"tags":["Portefeuille"],"summary":"Modifier — proprietaires","description":"Portée requise : `proprietaires:write`. Seuls les champs envoyés changent ; `null` efface.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationProprietaires"}}}},"responses":{"200":{"description":"Modifiée (ou déjà dans cet état).","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proprietaires"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}},"put":{"tags":["Portefeuille"],"summary":"Créer ou mettre à jour par VOTRE référence — proprietaires","description":"⭐ La route d'une synchronisation : « ma fiche LOT-1234 ressemble à ceci ». `{id}` DOIT être `ext:VOTRE_REF`. Absente : créée (201, sans If-Match). Présente : mise à jour des champs envoyés (200, `If-Match` exigé — `*` pour écraser). Rejouable sans doublon. Portée requise : `proprietaires:write`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Exigé si la fiche existe déjà."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationProprietaires"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proprietaires"}}}},"200":{"description":"Mise à jour.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proprietaires"}}}},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/occupations":{"get":{"tags":["Portefeuille"],"summary":"Lister — occupations","description":"⭐ QUI HABITE OÙ, et depuis quand. Sans elle, vous tirez des biens et des locataires : deux annuaires qui ne se parlent pas. C'est elle qui en fait un portefeuille.\n\nPortée requise : `occupations:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/external_ref"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOccupations"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Portefeuille"],"summary":"Créer — occupations","description":"Portée requise : `occupations:write`. L'identifiant est attribué par OKLÉON ; posez `external_ref` pour retrouver la fiche par VOTRE référence.\n\n⭐ Une sortie se POSE (`date_sortie`), elle ne se supprime pas. Un logement n'a qu'un occupant EN COURS : posez la sortie du précédent avant l'entrée du suivant (sinon 409 `occupation_en_cours`). `loc_id` et `bien_id` ne changent plus après la création.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreationOccupations"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupations"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/occupations/{id}":{"get":{"tags":["Portefeuille"],"summary":"Une fiche — occupations","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupations"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"tags":["Portefeuille"],"summary":"Modifier — occupations","description":"Portée requise : `occupations:write`. Seuls les champs envoyés changent ; `null` efface.\n\n⭐ Une sortie se POSE (`date_sortie`), elle ne se supprime pas. Un logement n'a qu'un occupant EN COURS : posez la sortie du précédent avant l'entrée du suivant (sinon 409 `occupation_en_cours`). `loc_id` et `bien_id` ne changent plus après la création.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationOccupations"}}}},"responses":{"200":{"description":"Modifiée (ou déjà dans cet état).","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupations"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}},"put":{"tags":["Portefeuille"],"summary":"Créer ou mettre à jour par VOTRE référence — occupations","description":"⭐ La route d'une synchronisation : « ma fiche LOT-1234 ressemble à ceci ». `{id}` DOIT être `ext:VOTRE_REF`. Absente : créée (201, sans If-Match). Présente : mise à jour des champs envoyés (200, `If-Match` exigé — `*` pour écraser). Rejouable sans doublon. Portée requise : `occupations:write`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Exigé si la fiche existe déjà."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationOccupations"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupations"}}}},"200":{"description":"Mise à jour.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupations"}}}},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/artisans":{"get":{"tags":["Portefeuille"],"summary":"Lister — artisans","description":"Les entreprises qui interviennent.\n\nPortée requise : `artisans:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/external_ref"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageArtisans"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Portefeuille"],"summary":"Créer — artisans","description":"Portée requise : `artisans:write`. L'identifiant est attribué par OKLÉON ; posez `external_ref` pour retrouver la fiche par VOTRE référence.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreationArtisans"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Artisans"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/artisans/{id}":{"get":{"tags":["Portefeuille"],"summary":"Une fiche — artisans","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Artisans"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"tags":["Portefeuille"],"summary":"Modifier — artisans","description":"Portée requise : `artisans:write`. Seuls les champs envoyés changent ; `null` efface.\n\nÉcrivez `nom` et `prenom` séparés : OKLÉON compose `name` (« Prénom Nom »).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationArtisans"}}}},"responses":{"200":{"description":"Modifiée (ou déjà dans cet état).","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Artisans"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}},"put":{"tags":["Portefeuille"],"summary":"Créer ou mettre à jour par VOTRE référence — artisans","description":"⭐ La route d'une synchronisation : « ma fiche LOT-1234 ressemble à ceci ». `{id}` DOIT être `ext:VOTRE_REF`. Absente : créée (201, sans If-Match). Présente : mise à jour des champs envoyés (200, `If-Match` exigé — `*` pour écraser). Rejouable sans doublon. Portée requise : `artisans:write`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`."},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Exigé si la fiche existe déjà."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModificationArtisans"}}}},"responses":{"201":{"description":"Créée.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Artisans"}}}},"200":{"description":"Mise à jour.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Artisans"}}}},"412":{"$ref":"#/components/responses/VersionPerimee"},"428":{"$ref":"#/components/responses/IfMatchRequis"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/devis":{"get":{"tags":["Dossiers"],"summary":"Lister — devis","description":"Les devis demandés aux artisans (portée `sinistres:read`).\n\nPortée requise : `sinistres:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDevis"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/devis/{id}":{"get":{"tags":["Dossiers"],"summary":"Une fiche — devis","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Devis"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/permis":{"get":{"tags":["Dossiers"],"summary":"Lister — permis","description":"Les permis de louer. Présent seulement si l'option est souscrite.\n\nPortée requise : `permis:read`.","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagePermis"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/permis/{id}":{"get":{"tags":["Dossiers"],"summary":"Une fiche — permis","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Permis"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/types":{"get":{"tags":["Référentiel"],"summary":"Lister — types","description":"Les types de sinistre de CET espace : chaque agence a les siens. ⚠️ Pas d'`updated_at` : ni delta ni curseur sur cette collection.\n\nPortée requise : `types:read`.","parameters":[{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"Une page de résultats.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageTypes"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/types/{id}":{"get":{"tags":["Référentiel"],"summary":"Une fiche — types","description":"Deux façons de la désigner : son identifiant OKLÉON, ou le vôtre préfixé `ext:` — pour n'avoir jamais à retenir nos identifiants.\n\n⭐ La réponse porte un `ETag`. Renvoyez-le en `If-None-Match` pour obtenir un 304 quand rien n'a bougé — et, pour écrire, en `If-Match` pour ne pas écraser une correction que vous n'aviez pas vue.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant OKLÉON, ou `ext:VOTRE_REF`.","example":"bien_000123"},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"L'ETag reçu précédemment."}],"responses":{"200":{"description":"La fiche.","headers":{"ETag":{"schema":{"type":"string"},"description":"Empreinte de cette version de la fiche."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Types"}}}},"304":{"description":"Rien n'a changé depuis votre ETag."},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/sinistres":{"get":{"tags":["Dossiers"],"summary":"Lister les dossiers","description":"⚠️ Par défaut la CORBEILLE n'est pas servie : un miroir qui l'avalerait rouvrirait chez vous des dossiers que le client a jetés.\n\nPortée requise : `sinistres:read`.","parameters":[{"$ref":"#/components/parameters/updated_since"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"},{"name":"archived","in":"query","description":"`0` (défaut) les dossiers vivants · `1` la corbeille seule · `all` les deux.","schema":{"type":"string","enum":["0","1","all"],"default":"0"}}],"responses":{"200":{"description":"Une page de dossiers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSinistres"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"tags":["Dossiers"],"summary":"Déclarer un sinistre","description":"Crée un dossier au statut « Reçu », comme une déclaration de l'espace locataire : référence `SGL-…` attribuée, urgence DÉDUITE des faits, gestionnaire prévenu, journal « Déclaré par <votre clé> (API) ». ⛔ `status`, `urgence`, `ref` et `journal` sont refusés (422 `champ_non_modifiable`). Un dossier ne se modifie pas par l'API.\n\nPortée requise : `sinistres:write`.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeclarationSinistre"}}}},"responses":{"201":{"description":"Dossier créé.","headers":{"ETag":{"schema":{"type":"string"},"description":"L'empreinte de la version écrite — à renvoyer en If-Match la prochaine fois."},"Location":{"schema":{"type":"string"},"description":"L'adresse de la fiche créée."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sinistre"}}}},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"405":{"$ref":"#/components/responses/NonAutorise"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/Validation"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/sinistres/{id}":{"get":{"tags":["Dossiers"],"summary":"Un dossier","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant du dossier, sa référence `SGL-…`, ou `ext:VOTRE_REF`."}],"responses":{"200":{"description":"Le dossier.","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sinistre"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/sinistres/{id}/journal":{"get":{"tags":["Dossiers"],"summary":"Le journal d'un dossier","description":"⚠️ **Lecture seule, et les dates ne sont pas des dates.** Le journal est stocké tel qu'il s'affiche à l'écran (« 16/09/2026 14:22 »), pas en ISO. On le renvoie tel quel plutôt que de feindre une précision qu'il n'a pas.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant du dossier, sa référence `SGL-…`, ou `ext:VOTRE_REF`."}],"responses":{"200":{"description":"Les entrées du journal, dans l'ordre.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageJournal"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/sinistres/{id}/fichiers":{"get":{"tags":["Dossiers"],"summary":"Les pièces jointes d'un dossier","description":"⭐ Aucune URL ne mène au fichier sur le disque : elles passent toutes par l'API, qui exige la clé. Un lien nu finirait reposté dans un mail.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"L'identifiant du dossier, sa référence `SGL-…`, ou `ext:VOTRE_REF`."}],"responses":{"200":{"description":"Les pièces.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageFichiers"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/fichiers/{id}/contenu":{"get":{"tags":["Dossiers"],"summary":"Le contenu d'une pièce","description":"Le binaire. Portée `sinistres:read`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Le fichier.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"$ref":"#/components/responses/Introuvable"},"401":{"$ref":"#/components/responses/NonAuthentifie"},"403":{"$ref":"#/components/responses/PorteeManquante"},"422":{"$ref":"#/components/responses/ParametreInvalide"},"429":{"$ref":"#/components/responses/Quota"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}}},"webhooks":{"changements":{"post":{"summary":"Des fiches ont changé","description":"Envoyé à l'adresse déclarée par l'agence. Vérifiez la signature AVANT de lire le corps, répondez 2xx, puis relisez les fiches avec votre clé.","parameters":[{"name":"X-Okleon-Signature","in":"header","required":true,"schema":{"type":"string"},"example":"t=1790000000,v1=5f2c…","description":"`t` = horodatage unix ; `v1` = HMAC-SHA256 hexadécimal de `t.corps` avec votre secret `whsec_…`."},{"name":"X-Okleon-Envoi","in":"header","required":true,"schema":{"type":"string"},"description":"Le même `id` que dans le corps."},{"name":"X-Okleon-Evenement","in":"header","required":true,"schema":{"type":"string","enum":["changements","essai"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvoiWebhook"}}}},"responses":{"2XX":{"description":"Reçu. Rien d'autre n'est lu dans votre réponse."},"default":{"description":"Tout le reste (y compris 3xx et délai dépassé) est un échec : l'envoi sera retenté."}},"security":[]}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Le repli qui marche partout : aucun hébergement ne le retire."},"bearer":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer ok_live_…`. ⚠️ Peut être retiré par certains hébergements PHP — voyez `X-Api-Key`."}},"parameters":{"limit":{"name":"limit","in":"query","description":"Taille de page.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},"cursor":{"name":"cursor","in":"query","description":"Le `next_cursor` de la réponse précédente.","schema":{"type":"string"}},"updated_since":{"name":"updated_since","in":"query","description":"Ne renvoie que ce qui a changé depuis cet instant (ISO 8601). ⚠️ Utilisez le `server_time` de /changements, pas l'heure de votre machine.","schema":{"type":"string","format":"date-time"},"example":"2026-09-16T00:00:00+02:00"},"external_ref":{"name":"external_ref","in":"query","description":"Retrouver une fiche par VOTRE référence.","schema":{"type":"string"}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Un identifiant unique PAR CRÉATION (un UUID). Si votre appel expire, réessayez avec la MÊME clé : vous recevrez la réponse d'origine (en-tête `Idempotent-Replayed: true`) au lieu d'un doublon. Gardée 24 h.","schema":{"type":"string","maxLength":80}},"IfMatch":{"name":"If-Match","in":"header","required":true,"description":"L'`ETag` lu par GET. Si la fiche a changé depuis, réponse 412 : relisez, réappliquez. `*` écrase sans vérifier — à réserver au logiciel qui fait foi.","schema":{"type":"string"}}},"responses":{"NonAuthentifie":{"description":"Clé absente ou invalide (`cle_absente`). ⚠️ Si vous envoyez bien un en-tête `Authorization` et recevez quand même ceci, votre hébergement l'a peut-être retiré : utilisez `X-Api-Key`, qui ne dépend d'aucun réglage serveur.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"PorteeManquante":{"description":"La clé n'a pas la portée demandée (`portee_manquante`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"Introuvable":{"description":"Fiche, route ou collection inconnue sur cet espace (`introuvable`, `route_inconnue`, `collection_inactive`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"ParametreInvalide":{"description":"Un paramètre n'a pas la forme attendue (`parametre_invalide`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"Quota":{"description":"Quota dépassé (`quota_minute` ou `quota_jour`). L'en-tête `Retry-After` dit combien de secondes attendre.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes à attendre avant de réessayer."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"ErreurServeur":{"description":"Erreur interne (`erreur_serveur`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"Indisponible":{"description":"Collection absente de la base de cet espace (`collection_indisponible`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"Validation":{"description":"Données refusées (`validation`). ⭐ `error.erreurs` liste TOUS les champs en faute d'un coup : `{champ, code, message}`, codes `champ_inconnu`, `champ_non_modifiable`, `requis`, `format`, `type`, `trop_long`, `valeur`, `reference_introuvable`, `incoherent`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"Conflit":{"description":"Conflit métier : `external_ref_existante` (la référence désigne déjà une fiche — `error.id` la donne), `occupation_en_cours` (le logement a un autre occupant en cours), `occupation_en_double`, `requete_en_cours` (même Idempotency-Key en vol).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"VersionPerimee":{"description":"La fiche a changé depuis votre lecture (`version_perimee`). `error.etag_actuel` donne l'ETag actuel.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"IfMatchRequis":{"description":"Modifier exige `If-Match` (`if_match_requis`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"NonAutorise":{"description":"Méthode non permise sur cette route (`methode_non_autorisee`, `suppression_non_disponible`, `collection_lecture_seule`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}},"schemas":{"Erreur":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"⭐ Le code est un CONTRAT : il ne change jamais. Branchez-vous dessus, pas sur le message, qui peut être reformulé."},"message":{"type":"string","description":"Lisible par un humain."},"documentation":{"type":"string","format":"uri"},"erreurs":{"type":"array","description":"En 422 `validation` : tous les champs en faute.","items":{"type":"object","properties":{"champ":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}},"etag_actuel":{"type":"string","description":"En 412 et 428 : l'ETag actuel de la fiche."},"id":{"type":"string","description":"En 409 `external_ref_existante` : la fiche qui porte déjà la référence."}}}}},"Cle":{"type":"object","properties":{"label":{"type":"string","description":"Le nom que le client a donné à la clé."},"source":{"type":"string","enum":["authorization","x-api-key"],"description":"⭐ Par quel en-tête la clé est arrivée. Si vous envoyez `Authorization` et lisez `x-api-key`, c'est que quelque chose l'a réécrit ; si vous lisez un 401, c'est qu'il a été retiré."},"portees":{"type":"array","items":{"type":"string"}}}},"Espace":{"type":"object","properties":{"espace":{"type":"object","properties":{"nom":{"type":"string"},"host":{"type":"string"},"bac_a_sable":{"type":"boolean","description":"Vrai sur demo.okleon.fr : données 100 % fictives."}}},"api":{"type":"object","properties":{"version":{"type":"string"},"ecriture_ouverte":{"type":"boolean"},"quota":{"type":"object","properties":{"minute":{"type":"integer"},"jour":{"type":"integer"}}},"limite_max":{"type":"integer"}}},"cle":{"$ref":"#/components/schemas/Cle"},"options":{"type":"object","additionalProperties":{"type":"boolean"}},"collections":{"type":"array","items":{"type":"string"},"description":"Ce que CETTE clé peut lire sur CET espace."},"statuts_sinistre":{"type":"array","items":{"type":"string"}},"statuts_deduits":{"type":"boolean","const":true,"description":"⚠️ Toujours vrai. Le statut d'un dossier se DÉDUIT de son état (un devis reçu, un accord, un bon de commande) : il ne se pose pas. Vouloir l'écrire est du temps perdu."},"urgences":{"type":"array","items":{"type":"string"}}}},"Changement":{"type":"object","properties":{"collection":{"type":"string"},"id":{"type":"string"},"external_ref":{"type":["string","null"]},"action":{"type":"string","enum":["cree","modifie","supprime"],"description":"⭐ `supprime` vient d'une pierre tombale : une fiche effacée disparaît de sa table, et sans cette trace votre miroir en garderait un fantôme pour toujours."},"at":{"type":"string","format":"date-time"}}},"EntreeJournal":{"type":"object","properties":{"texte":{"type":"string"},"auteur":{"type":"string"},"type":{"type":"string"},"date":{"type":"string","description":"⚠️ Format d'AFFICHAGE français (« 16/09/2026 14:22 »), pas ISO 8601."}}},"Fichier":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"nom":{"type":"string"},"taille":{"type":["integer","null"]},"mime":{"type":"string"},"ajoute_le":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","format":"uri","description":"À appeler avec votre clé, comme le reste."}}},"Sinistre":{"type":"object","properties":{"id":{"type":"integer"},"ref":{"type":["string","null"]},"external_ref":{"type":["string","null"]},"status":{"type":["string","null"]},"urgence":{"type":["string","null"]},"refuse":{"type":"object","properties":{"est_refuse":{"type":"boolean"},"motif":{"type":["string","null"]},"le":{"type":["string","null"],"format":"date-time"}}},"archive":{"type":"boolean"},"archive_le":{"type":["string","null"],"format":"date-time"},"reception":{"type":"object","properties":{"canal":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date-time"}}},"type":{"type":"object","properties":{"id":{"type":["string","null"]},"label":{"type":["string","null"]}}},"description":{"type":["string","null"]},"logement":{"type":"object","properties":{"bien_id":{"type":["string","null"]},"address":{"type":["string","null"]},"apt":{"type":["string","null"]},"floor":{"type":["string","null"]},"door":{"type":["string","null"]},"postal_code":{"type":["string","null"]},"city":{"type":["string","null"]},"resume":{"type":["string","null"]},"acces":{"type":"object","properties":{"mode":{"type":["string","null"]},"info":{"type":["string","null"]}}}}},"locataire":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]},"prenom":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]}}},"proprietaire":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"informe":{"type":["boolean","null"]},"informe_par":{"type":["string","null"]},"informe_le":{"type":["string","null"],"format":"date-time"}}},"dates":{"type":"object","properties":{"sinistre":{"type":["string","null"],"format":"date"},"info_locataire":{"type":["string","null"],"format":"date"}}},"assurance":{"type":"object","properties":{"a_declarer":{"type":["string","null"],"enum":["oui","non","sans_objet",null]},"locataire":{"type":"object","properties":{"nom":{"type":["string","null"]},"numero":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date"},"prevenue":{"type":["boolean","null"]}}},"proprietaire":{"type":"object","properties":{"nom":{"type":["string","null"]},"numero":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date"},"prevenue":{"type":["boolean","null"]}}},"syndic_informe":{"type":["boolean","null"]},"copro_informe":{"type":["boolean","null"]}}},"intervention":{"type":"object","properties":{"artisan_id":{"type":["string","null"]},"rdv_date":{"type":["string","null"],"format":"date"},"rdv_heure":{"type":["string","null"]},"rdv_notes":{"type":["string","null"]},"bon_de_commande":{"type":"object","properties":{"envoye":{"type":["boolean","null"]},"date":{"type":["string","null"],"format":"date"},"ref":{"type":["string","null"]}}},"debut":{"type":["string","null"],"format":"date"},"fin":{"type":["string","null"],"format":"date"},"confirmee":{"type":["boolean","null"]},"notes":{"type":["string","null"]}}},"finances":{"type":"object","properties":{"devis_retenu":{"type":["number","null"]},"devis_envoye_prop":{"type":["boolean","null"]},"accord_prop":{"type":["boolean","null"]},"accord_prop_le":{"type":["string","null"],"format":"date-time"},"facture_montant":{"type":["number","null"]},"facture_date":{"type":["string","null"],"format":"date"}}},"cloture":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date"},"notes":{"type":["string","null"]},"automatique":{"type":["boolean","null"]}}},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"EnvoiWebhook":{"type":"object","required":["id","evenement","espace","data"],"properties":{"id":{"type":"string","examples":["whe_1842"],"description":"⭐ Identifiant STABLE de l'envoi : tous les nouveaux essais d'un même envoi portent le même. Gardez ceux déjà traités et ignorez un doublon — la livraison est « au moins une fois »."},"evenement":{"type":"string","enum":["changements","essai"],"description":"`essai` : envoyé depuis l'écran de l'agence (« Envoyer un essai »), `data` est vide. Répondez 2xx, sans rien faire d'autre."},"espace":{"type":"string","description":"L'hôte de l'agence, ex. `demo.okleon.fr`."},"server_time":{"type":["string","null"],"format":"date-time","description":"L'heure du serveur au moment où l'envoi a été préparé. Utilisable comme `since` de /changements pour rattraper après une coupure."},"data":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/Changement"},"description":"Au plus 100 changements. ⚠️ Des IDENTIFIANTS seulement, jamais de coordonnées : relisez la fiche avec votre clé."}}},"PageChangements":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Changement"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."},"server_time":{"type":"string","format":"date-time","description":"⭐ L'heure du SERVEUR. C'est elle qu'il faut stocker comme point de reprise, jamais l'heure de votre machine : deux horloges qui divergent d'une minute font sauter une minute de changements."}}},"PageSinistres":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sinistre"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"PageJournal":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EntreeJournal"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"PageFichiers":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Fichier"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Biens":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant OKLÉON. ⚠️ Chaîne (bien_…, loc_…, own_…, art_…) : ne jamais convertir en entier."},"external_ref":{"type":["string","null"],"description":"Votre propre référence, si vous l'avez posée. Sert à retrouver VOTRE fiche sans retenir nos identifiants (filtre ?external_ref=, ou /{collection}/ext:VOTRE_REF)."},"api_source":{"type":["string","null"]},"owner_id":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"address":{"type":["string","null"]},"apt":{"type":["string","null"]},"floor":{"type":["string","null"]},"door":{"type":["string","null"]},"postal_code":{"type":["string","null"]},"city":{"type":["string","null"]},"address_short":{"type":["string","null"]},"type_bien":{"type":["string","null"]},"notes":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PageBiens":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Biens"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Locataires":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant OKLÉON. ⚠️ Chaîne (bien_…, loc_…, own_…, art_…) : ne jamais convertir en entier."},"external_ref":{"type":["string","null"],"description":"Votre propre référence, si vous l'avez posée. Sert à retrouver VOTRE fiche sans retenir nos identifiants (filtre ?external_ref=, ou /{collection}/ext:VOTRE_REF)."},"api_source":{"type":["string","null"]},"name":{"type":["string","null"]},"prenom":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]},"notes":{"type":["string","null"]},"portal_access":{"type":["boolean","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"emails":{"type":"array","items":{"type":"string"},"description":"Adresses secondaires. ⭐ Un locataire en a souvent plusieurs, et c'est souvent par l'une d'elles qu'arrive une déclaration."}}},"PageLocataires":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Locataires"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Proprietaires":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant OKLÉON. ⚠️ Chaîne (bien_…, loc_…, own_…, art_…) : ne jamais convertir en entier."},"external_ref":{"type":["string","null"],"description":"Votre propre référence, si vous l'avez posée. Sert à retrouver VOTRE fiche sans retenir nos identifiants (filtre ?external_ref=, ou /{collection}/ext:VOTRE_REF)."},"api_source":{"type":["string","null"]},"name":{"type":["string","null"]},"prenom":{"type":["string","null"]},"type_personne":{"type":["string","null"]},"civilite":{"type":["string","null"]},"siret":{"type":["string","null"]},"forme_juridique":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]},"adresse_postale":{"type":["string","null"]},"mandat":{"type":["string","null"]},"facturation_speciale":{"type":["boolean","null"]},"portal_access":{"type":["boolean","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PageProprietaires":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Proprietaires"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Occupations":{"type":"object","properties":{"id":{"type":"integer","description":"Identifiant OKLÉON. Entier."},"external_ref":{"type":["string","null"],"description":"Votre propre référence, si vous l'avez posée. Sert à retrouver VOTRE fiche sans retenir nos identifiants (filtre ?external_ref=, ou /{collection}/ext:VOTRE_REF)."},"api_source":{"type":["string","null"]},"loc_id":{"type":["string","null"]},"bien_id":{"type":["string","null"]},"date_entree":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_sortie":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PageOccupations":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Occupations"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Artisans":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant OKLÉON. ⚠️ Chaîne (bien_…, loc_…, own_…, art_…) : ne jamais convertir en entier."},"external_ref":{"type":["string","null"],"description":"Votre propre référence, si vous l'avez posée. Sert à retrouver VOTRE fiche sans retenir nos identifiants (filtre ?external_ref=, ou /{collection}/ext:VOTRE_REF)."},"api_source":{"type":["string","null"]},"name":{"type":["string","null"]},"prenom":{"type":["string","null"]},"specialty":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]},"portal_access":{"type":["boolean","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PageArtisans":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Artisans"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Devis":{"type":"object","properties":{"id":{"type":"integer","description":"Identifiant OKLÉON. Entier."},"sinistre_id":{"type":["integer","null"]},"artisan_id":{"type":["string","null"]},"artisan_name":{"type":["string","null"]},"channel":{"type":["string","null"]},"sent_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"amount":{"type":["number","null"]},"received_at":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"retenu":{"type":["boolean","null"]},"note":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PageDevis":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Devis"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Permis":{"type":"object","properties":{"id":{"type":"integer","description":"Identifiant OKLÉON. Entier."},"ref":{"type":["string","null"]},"regime":{"type":["string","null"]},"status":{"type":["string","null"]},"bien_id":{"type":["string","null"]},"owner_id":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"commune":{"type":["string","null"]},"autorite":{"type":["string","null"]},"tenant_name":{"type":["string","null"]},"tenant_prenom":{"type":["string","null"]},"tenant_email":{"type":["string","null"]},"tenant_phone":{"type":["string","null"]},"date_demande_cerfa":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_depot_diagnostics":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_rdv_diag":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"diagnostiqueur":{"type":["string","null"]},"date_depot_dossier":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_limite_instruction":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_accord_verbal":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_accord_papier":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"date_refus":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"decision":{"type":["string","null"]},"tacite":{"type":["boolean","null"]},"numero_autorisation":{"type":["string","null"]},"date_validite_fin":{"type":["string","null"],"format":"date","description":"Date seule, sans heure ni fuseau."},"motif_refus":{"type":["string","null"]},"diagnostics_ok":{"type":["boolean","null"]},"dossier_depose":{"type":["boolean","null"]},"travaux_requis":{"type":["boolean","null"]},"travaux_termines":{"type":["boolean","null"]},"archived":{"type":["boolean","null"]},"created_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]},"updated_at":{"type":["string","null"],"format":"date-time","examples":["2026-09-16T14:22:00+02:00"]}}},"PagePermis":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Permis"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"Types":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant OKLÉON. ⚠️ Chaîne (bien_…, loc_…, own_…, art_…) : ne jamais convertir en entier."},"label":{"type":["string","null"]},"icon":{"type":["string","null"]}}},"PageTypes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Types"}},"next_cursor":{"type":["string","null"],"description":"Curseur de la page suivante, ou null s'il n'y en a pas. À repasser tel quel dans ?cursor=. ⚠️ Jamais d'OFFSET : pendant une synchronisation, une fiche modifiée décalerait tout ce qui suit."}}},"CreationBiens":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"owner_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « proprietaires », ou le vôtre préfixé `ext:`."},"address":{"type":["string","null"]},"apt":{"type":["string","null"]},"floor":{"type":["string","null"]},"door":{"type":["string","null"]},"postal_code":{"type":["string","null"],"pattern":"^[0-9]{5}$"},"city":{"type":["string","null"]},"type_bien":{"type":["string","null"]},"notes":{"type":["string","null"]}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`).","required":["address"]},"ModificationBiens":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"owner_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « proprietaires », ou le vôtre préfixé `ext:`."},"address":{"type":["string","null"]},"apt":{"type":["string","null"]},"floor":{"type":["string","null"]},"door":{"type":["string","null"]},"postal_code":{"type":["string","null"],"pattern":"^[0-9]{5}$"},"city":{"type":["string","null"]},"type_bien":{"type":["string","null"]},"notes":{"type":["string","null"]}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`). Seuls les champs envoyés sont modifiés."},"CreationLocataires":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"notes":{"type":["string","null"]},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`).","required":["nom"]},"ModificationLocataires":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"notes":{"type":["string","null"]},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`). Seuls les champs envoyés sont modifiés."},"CreationProprietaires":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"type_personne":{"type":["string","null"],"enum":["physique","morale",null]},"civilite":{"type":["string","null"]},"siret":{"type":["string","null"],"description":"SIREN (9 chiffres) ou SIRET (14)."},"forme_juridique":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"adresse_postale":{"type":["string","null"]},"mandat":{"type":["string","null"]},"facturation_speciale":{"type":"boolean"},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`).","required":["nom"]},"ModificationProprietaires":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"type_personne":{"type":["string","null"],"enum":["physique","morale",null]},"civilite":{"type":["string","null"]},"siret":{"type":["string","null"],"description":"SIREN (9 chiffres) ou SIRET (14)."},"forme_juridique":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"adresse_postale":{"type":["string","null"]},"mandat":{"type":["string","null"]},"facturation_speciale":{"type":"boolean"},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`). Seuls les champs envoyés sont modifiés."},"CreationOccupations":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"loc_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « locataires », ou le vôtre préfixé `ext:`."},"bien_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « biens », ou le vôtre préfixé `ext:`."},"date_entree":{"type":["string","null"],"format":"date"},"date_sortie":{"type":["string","null"],"format":"date"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`).","required":["loc_id","bien_id"]},"ModificationOccupations":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"loc_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « locataires », ou le vôtre préfixé `ext:`."},"bien_id":{"type":["string","null"],"description":"Identifiant OKLÉON d'une fiche « biens », ou le vôtre préfixé `ext:`."},"date_entree":{"type":["string","null"],"format":"date"},"date_sortie":{"type":["string","null"],"format":"date"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`). Seuls les champs envoyés sont modifiés."},"CreationArtisans":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"specialty":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`).","required":["nom"]},"ModificationArtisans":{"type":"object","additionalProperties":false,"properties":{"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre référence."},"nom":{"type":["string","null"],"description":"Le NOM SEUL. OKLÉON compose `name` (« Prénom Nom »)."},"prenom":{"type":["string","null"]},"specialty":{"type":["string","null"]},"phone":{"type":["string","null"],"examples":["06 12 34 56 78"]},"email":{"type":["string","null"],"format":"email"},"portal_access":{"type":"boolean"}},"description":"⚠️ Liste blanche stricte : un champ inconnu est refusé (422 `champ_inconnu`). Seuls les champs envoyés sont modifiés."},"DeclarationSinistre":{"type":"object","additionalProperties":false,"required":["bien_id","type_id","description"],"properties":{"bien_id":{"type":"string","description":"Le logement : identifiant OKLÉON ou `ext:VOTRE_REF`."},"type_id":{"type":"string","description":"Un identifiant de GET /types."},"description":{"type":"string"},"loc_id":{"type":["string","null"],"description":"Le locataire qui déclare. Absent : l'occupant EN COURS du logement."},"reponses":{"type":"object","additionalProperties":{"type":"string","enum":["oui","non"]},"description":"Les faits constatés (`{\"coule\": \"oui\"}`). ⭐ L'urgence en est DÉDUITE : elle ne s'écrit jamais."},"dispo":{"type":["string","null"],"maxLength":200,"description":"Disponibilités du locataire."},"acces":{"type":["string","null"],"maxLength":50,"description":"Accès au logement."},"date_sinistre":{"type":["string","null"],"format":"date"},"external_ref":{"type":["string","null"],"maxLength":80,"description":"Votre numéro de ticket."}}}}}}