{"openapi":"3.1.0","info":{"title":"synergieloc — API immobilière pour les IA","version":"1.0.0","description":"Calculs immobiliers français réglementaires exacts (loi 89-462, décret 87-713) : révision IRL, régularisation de charges, quittances et courriers conformes. Clé API : https://synergieloc.fr/api-ia — Serveur MCP : https://synergieloc.fr/mcp","contact":{"email":"contact@synergieloc.fr","url":"https://synergieloc.fr/api-ia"}},"servers":[{"url":"https://synergieloc.fr"}],"paths":{"/api/v1/signup":{"post":{"tags":["api-ia"],"summary":"Api V1 Signup","description":"Auto-provisionnement d'une clé API GRATUITE — AUCUN email requis, aucune\nattente. Pensé pour qu'une IA/agent qui découvre le serveur MCP ou l'API\nreparte avec une clé fonctionnelle dans le même échange (voir aussi l'outil\nMCP `obtenir_cle_api`, identique). Body : {name, [email]} — `name` identifie\nl'appelant (ex. « Claude », « MonAgent »), `email` est facultatif (double de\nla clé envoyé si fourni, jamais utilisé à autre chose).\n30 jours d'accès illimité à compter de MAINTENANT, puis EVAL_DAILY_MINUTES\nminutes/jour, sans\ndate limite. Limité par IP pour éviter l'abus (contact@synergieloc.fr en cas\nde besoin légitime au-delà).","operationId":"api_v1_signup_api_v1_signup_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/me":{"get":{"tags":["api-ia"],"summary":"Api V1 Me","description":"Infos de la clé : plan, quota, unités consommées ce mois.","operationId":"api_v1_me_api_v1_me_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tarifs":{"get":{"tags":["api-ia"],"summary":"Api V1 Tarifs","description":"TARIFS lisibles par une machine — GRATUIT, sans clé.\n\nUn agent ne lit pas une page HTML avant d'intégrer : il doit pouvoir\napprendre où passe la frontière gratuit/payant, ce que coûte chaque appel et\nà quelle date la promotion s'arrête. Cet endpoint est cette réponse, et il\nest cité par le descripteur MCP et par /usage.","operationId":"api_v1_tarifs_api_v1_tarifs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/usage":{"get":{"tags":["api-ia"],"summary":"Api V1 Usage","description":"Consommation réelle : minutes (plan eval) et/ou unités + journal récent.\n0 unité — pour suivre le quota avant d'enchaîner des appels métier.","operationId":"api_v1_usage_api_v1_usage_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"post":{"tags":["api-ia"],"summary":"Api V1 Feedback","description":"Canal de retour des IA (0 unité, toujours accessible). L'IA envoie ses\nremarques pour améliorer l'app. Body : {message, [context]}.","operationId":"api_v1_feedback_api_v1_feedback_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/irl/revision":{"post":{"tags":["api-ia"],"summary":"Api V1 Irl Revision","description":"Révision annuelle de loyer indexée IRL (art. 17-1 loi 89-462).\nBody : {loyer_actuel, irl_reference, irl_nouveau, [charges_actuelles]}.\nL'appelant fournit les indices INSEE (T de référence du bail et nouveau T).","operationId":"api_v1_irl_revision_api_v1_irl_revision_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/regularisation/charges":{"post":{"tags":["api-ia"],"summary":"Api V1 Regul Charges","description":"Régularisation annuelle des charges locatives (décret 87-713).\nBody : {provisions_encaissees, tantiemes_locataire, tantiemes_total,\n        charges: [{libelle, montant, recuperable(bool, def=true)}],\n        [jours_occupation, jours_periode=365]}.","operationId":"api_v1_regul_charges_api_v1_regularisation_charges_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/quittance":{"post":{"tags":["api-ia"],"summary":"Api V1 Quittance","description":"Quittance de loyer conforme (art. 21 loi 89-462), PDF (défaut) ou HTML.\nBody : {bailleur_nom, bailleur_adresse, locataire_nom, logement_adresse,\n        [locataire_adresse], periode, loyer, charges, date_paiement,\n        [lieu, date_emission, format:'pdf'|'html']}.\nMise en page enveloppe à fenêtre : destinataire à DROITE. Préférer\nlocataire_adresse (postale) distincte de logement_adresse (bien loué).","operationId":"api_v1_quittance_api_v1_documents_quittance_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/dxf":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Dxf","description":"CAO pour agents IA : décrivez une scène en JSON, recevez un fichier DXF\nouvrable dans AutoCAD. Coordonnées plan XY en millimètres, hauteurs en Z.\nBody : {murs:[{x1,y1,x2,y2,hauteur,epaisseur}], boites:[{x,y,l,p,h,z,rotation}],\n        plan:[{x1,y1,x2,y2}], cercles:[{x,y,r}], [format:'json']}.\nSchéma complet + exemples : GET /api/v1/cao/schema.","operationId":"api_v1_cao_dxf_api_v1_cao_dxf_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/metres":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Metres","description":"Métrés chiffrés d'une scène CAO : linéaire et surface de murs, surface et\nvolume des boîtes (mobilier, cloisons, dalles…), emprise au sol — de quoi\nalimenter directement un devis. Même format de scène que /cao/dxf.\nSchéma complet + exemples : GET /api/v1/cao/schema. Alias : /cao/quantites.","operationId":"api_v1_cao_metres_api_v1_cao_metres_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/quantites":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Quantites","description":"Alias de /cao/metres (nom alternatif fréquent : « quantitatif de devis »).","operationId":"api_v1_cao_quantites_api_v1_cao_quantites_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/render":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Render","description":"Aperçu visuel d'une scène CAO en vue de dessus (plan XY) — utile pour\nqu'un agent IA vérifie visuellement ce qu'il vient de générer avant de le\nlivrer. Body : mêmes champs que /cao/dxf, plus [format:'svg'|'png']\n(défaut svg, vectoriel). Schéma complet + exemples : GET /api/v1/cao/schema.","operationId":"api_v1_cao_render_api_v1_cao_render_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/pdf":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Pdf","description":"PLANCHE TECHNIQUE haute qualité d'une scène CAO, en PDF (défaut) ou HTML :\nvue de dessus (plan), élévation de face, élévation de côté ET vue\naxonométrique ombrée (pseudo-3D, pas un simple plan filaire), avec cotes\n(largeur/profondeur/hauteur) et métrés — en un seul document présentable.\nPortes/fenêtres (body.ouvertures) incrustées sur leur mur. Toiture : sans\nbody.toitures, un toit plat est auto-généré sur l'emprise de tous les murs\n(sans quoi le bâtiment resterait ouvert vu de dessus/en axo) ; avec\nbody.toitures, composez librement plat/deux_pans/quatre_pans/conique/\ndome/chien_assis/personnalise, chaque entrée pouvant viser un\nsous-ensemble de murs (bâtiment en L, lucarne en plus du toit principal…).\nBody : mêmes champs que /cao/dxf, plus [ouvertures, toitures, titre,\nauteur, format:'pdf'|'html']. Schéma complet + exemples : GET\n/api/v1/cao/schema.","operationId":"api_v1_cao_pdf_api_v1_cao_pdf_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/verifier":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Verifier","description":"Audit géométrique d'une scène CAO — GRATUIT, sans clé API.\n\nDétecte les erreurs fréquentes des agents (allège d'ouverture en altitude\nabsolue, lucarne chien_assis flottante, étage sans fenêtres, garde-corps\nhors emprise…) AVANT dxf/pdf/rendu. Inclut le contrôle d'intégrité (clos\net couvert, `integrite`) ET la complétude documentaire (`documents` : un\nplan complet par niveau, chaque étage desservi par un escalier qui y\nARRIVE ou un ascenseur, trémies protégées NF P01-012).\nRetourne alertes + conseils de correction.\nWorkflow : GET /cao/schema → composer → POST /cao/verifier → corriger →\nmetres/rendu/pdf/dxf.","operationId":"api_v1_cao_verifier_api_v1_cao_verifier_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/schema":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Schema","description":"Schéma documenté de la scène CAO (format commun à /cao/dxf, /cao/metres,\n/cao/render) avec exemples prêts à copier. Pas de clé API requise — pour\nlaisser un agent IA découvrir le format avant de commander une clé.","operationId":"api_v1_cao_schema_api_v1_cao_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/agent-playbook":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Agent Playbook","description":"Playbook versionné pour agents IA — GRATUIT, sans clé.\n\nQuery ?domaine=cao|documents|irl|securite|workflow (optionnel).\nÉquivalent MCP : outil bonnes_pratiques.","operationId":"api_v1_agent_playbook_api_v1_agent_playbook_get","parameters":[{"name":"domaine","in":"query","required":false,"schema":{"type":"string","default":"","title":"Domaine"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bonnes-pratiques":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Bonnes Pratiques","description":"Même contenu que GET /agent-playbook — body JSON {domaine?} pour MCP.","operationId":"api_v1_bonnes_pratiques_api_v1_bonnes_pratiques_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/decide":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Agent Decide","description":"Décision commerciale pour Make AI Agent (infos in → actions out).\n\nMake collecte ; Synergieloc décide démarchage / campagne / infos manquantes.\nAuth obligatoire + rate-limit IP.","operationId":"api_v1_agent_decide_api_v1_agent_decide_post","parameters":[{"name":"X-Make-Secret","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Make-Secret"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/demarchage":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Agent Demarchage","description":"Envoie l'offre commerciale Synergieloc au prospect (SMTP).\n\nAuth : header ``X-Make-Secret`` (= MAKE_DEMARCHAGE_SECRET) **ou** clé API\n``X-API-Key``. Body : prospect_email, prospect_nom?, prospect_entreprise?,\ncontexte?, cible? (persona), produit?, agent_nom? (ignoré — marque fixe).","operationId":"api_v1_agent_demarchage_api_v1_agent_demarchage_post","parameters":[{"name":"X-Make-Secret","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Make-Secret"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/visite/objectifs":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Objectifs","description":"Catalogue des OBJECTIFS de la visite 4K — GRATUIT, sans clé API.\n\nFocales exprimées en équivalent plein format 24×36, comme en photographie\nd'architecture, avec le champ de vision correspondant en 16:9. À passer à\nPOST /cao/visite/plan (objectif.focale_interieur_mm, focale_exterieur_mm…).","operationId":"api_v1_cao_visite_objectifs_api_v1_cao_visite_objectifs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cao/visite/plan":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Plan","description":"PLAN DE TOURNAGE de la visite 4K : objectif + chemin de caméra.\n\nBody = scène CAO (GET /cao/schema) + réglages de mise en scène :\n  - duree_s (8–900 s, défaut 60 ; 480–600 pour une visite d'agence), fps (24|30|60), resolution ('4k'|'1440p'|'1080p')\n  - mode : 'deco' (bien meublé) | 'nu' (coque plâtre)\n  - objectif : {focale_interieur_mm, focale_exterieur_mm, focale_entree_mm,\n                focale_escalier_mm, focale_cloture_mm, focale_min_mm,\n                focale_max_mm, adaptatif}\n  - cadence  : {hauteur_oeil_mm, vitesse_int_mm_s, vitesse_ext_mm_s,\n                vitesse_transition_mm_s, pose_piece_s}\n    `pose_piece_s` (défaut 9 s) = durée du BEAT D'INSPECTION joué au centre de\n    chaque pièce : tour complet à 360° sur place, regard vers le sol, regard\n    vers le plafond, puis recul avec ouverture de l'objectif jusqu'à\n    `focale_min_mm` pour la vue d'ensemble. Sous 6 s ces mouvements ne se\n    lisent plus (alerte `pose_trop_courte`).\n  - chemin   : OPTIONNEL — vos propres points [{position:{x,y,z}, vise:{x,y,z},\n               focale_mm, pose_s, plan}] ; ils remplacent le chemin calculé et\n               sont vérifiés (hors emprise, dans un mur, focale extrême…).\n\nRetourne le plan JSON à donner tel quel au moteur 4K :\n`CAD_startCinematicTour({plan})` dans l'éditeur CAO (ou collé dans le champ\n« Plan de caméra piloté » du dialogue Visite 4K). Le rendu vidéo lui-même est\nfait par le GPU du navigateur — il n'y a plus de rendu vidéo côté serveur.","operationId":"api_v1_cao_visite_plan_api_v1_cao_visite_plan_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/visite/studio":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Studio","description":"Ouvre un STUDIO DE RENDU public pour la Visite 4K — sans compte, sans connexion.\n\nBody = scène CAO (GET /cao/schema) + les mêmes réglages que\nPOST /cao/visite/plan (duree_s, fps, resolution, mode, objectif{}, cadence{},\nchemin[] optionnel). Vous pouvez aussi fournir `plan_camera` : un plan de\ntournage déjà obtenu de /cao/visite/plan, repris tel quel. (Ne l'appelez pas\n`plan` : ce nom est déjà pris par le champ « lignes de référence 2D » de la\nscène — un dict y est toutefois toléré et interprété comme le plan caméra.)\n\nRetourne une URL à ouvrir dans N'IMPORTE QUEL navigateur (ou un navigateur\npiloté) : la page charge le moteur de visite, rejoue le plan et télécharge le\nMP4 en 3840×2160. Le rendu se fait sur le GPU du poste qui ouvre la page —\nil n'y a pas de rendu vidéo côté serveur.\n\nLe jeton est l'identifiant : imprévisible, valable 2 h, et il ne donne accès\nqu'à la scène que vous venez de poster. Rien n'est conservé au-delà.","operationId":"api_v1_cao_visite_studio_api_v1_cao_visite_studio_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/visite/studio/{jeton}":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Studio Charge","description":"Charge utile d'un studio (objets + plan de tournage). Le JETON fait office\nd'identifiant : pas de clé API ici, c'est la page publique qui appelle.","operationId":"api_v1_cao_visite_studio_charge_api_v1_cao_visite_studio__jeton__get","parameters":[{"name":"jeton","in":"path","required":true,"schema":{"type":"string","title":"Jeton"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/integrite":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Integrite","description":"CONTRÔLE D'INTÉGRITÉ de la construction — GRATUIT, sans clé API.\n\nRépond à une seule question : le bâtiment est-il réellement **clos et\ncouvert** ? Ce sont les défauts qu'on ne voit qu'en confrontant les éléments\nentre eux, et qui ne se remarquent sinon qu'une fois la vidéo rendue :\n\n  · `enveloppe_percee` — une extrémité de mur ne rejoint rien. Les jonctions\n    en T et les jambages de porte sont reconnus : pas de fausse alerte.\n  · `bande_ouverte_entre_niveaux` / `niveaux_qui_se_recouvrent`\n  · `mur_etage_sans_appui` — un mur d'étage qui flotte\n  · `toit_ouvert` — des murs du dernier niveau sous aucune toiture\n  · `toiture_sous_les_murs` — le toit tranche le bâtiment\n  · `ouvertures_chevauchantes`\n  · `murs_composantes_isolees` — îlots de murs jointifs mais détachés de la\n    maison (piliers, murets, « murs en vrac ») : l'enveloppe principale est\n    close, pourtant l'extérieur est un chantier. `propose: null` = retirer.\n  · `murs_hors_racine` — des murs égarés sous une autre clé (`niveaux[]`…) :\n    rien ne serait contrôlé, la scène passerait pour valide à tort\n\nEt surtout, il AIDE À CORRIGER : `correctifs[]` désigne le champ exact et la\nvaleur à y écrire — `{\"cible\":\"murs[3].x2\",\"actuel\":10400,\"propose\":11000,\n\"raison\":\"souder sur murs[4].x1 (écart 600 mm)\"}`, ou\n`{\"cible\":\"murs[12]\",\"propose\":null}` pour retirer un mur en vrac. Quand deux\nextrémités sont libres l'une en face de l'autre, la soudure est proposée au\nMILIEU, pour que les correctifs restent applicables ensemble.\n\nBody : la scène CAO (GET /cao/schema), plus deux options :\n  - `appliquer: true`  → renvoie aussi `scene_corrigee`, la scène patchée ;\n  - `revalider: true`  → et le contrôle rejoué dessus, pour vérifier d'un\n    seul appel que la correction ferme bien le bâtiment.\n\nConçu pour être appelé souvent : indexation spatiale, quelques millisecondes\nsur des scènes de plusieurs centaines de murs (`duree_ms` dans la réponse).","operationId":"api_v1_cao_integrite_api_v1_cao_integrite_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/documents":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Documents","description":"CONTRÔLE DE COMPLÉTUDE DOCUMENTAIRE — GRATUIT, sans clé API.\n\nLa planche PDF (/cao/pdf) livre un plan complet PAR NIVEAU + fiches\ntechniques. Ce contrôle dit si la liasse sera défendable devant un\nprofessionnel — 4 étages exigent 4 plans complets ET desservis :\n\n  · `element_hors_plan` — escalier/garde-corps dont le z ne se rattache\n    à aucun niveau : il disparaîtrait de TOUS les plans ;\n  · `niveau_non_desservi` (critique) — aucun escalier n'ARRIVE à cet étage\n    et aucun ascenseur ne le couvre : étage inaccessible sur les plans ;\n  · `arrivee_sans_protection` — trémie sans garde-corps ni cage murée\n    (NF P01-012) ;\n  · `hauteur_niveau_insuffisante` — moins de 2 200 mm entre deux niveaux.\n\n`couverture` = le sommaire annoncé de la liasse : chaque plan de niveau\navec son contenu (murs, ouvertures, escaliers, garde-corps), plans\ntechniques, élévations, axonométrie, métrés.\n\nBody : la scène CAO (GET /cao/schema), plus deux options :\n  - `appliquer: true` → `scene_corrigee`, la scène patchée (correctifs z) ;\n  - `revalider: true` → `apres_correction`, le contrôle rejoué dessus.\n\nWorkflow : cao_verifier (qui inclut CE contrôle) → corriger → cao_pdf.","operationId":"api_v1_cao_documents_api_v1_cao_documents_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/visite/commandes":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Commandes","description":"Catalogue du PILOTAGE CAMÉRA — GRATUIT, sans clé API.\n\nLes mêmes actions sont disponibles de trois façons : au clavier dans le studio\nde rendu, par `POST /api/v1/cao/visite/camera`, et par l'outil MCP\n`cao_visite_camera`. Ce catalogue est la source unique — si une touche change,\nelle change ici.","operationId":"api_v1_cao_visite_commandes_api_v1_cao_visite_commandes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cao/visite/camera":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Visite Camera","description":"PILOTER la caméra : une séquence d'actions → un nouveau point de vue.\n\nLa visite calculée est une chorégraphie complète ; cet endpoint sert à\nREPRENDRE LA MAIN sur une vue précise — recadrer une façade, monter voir le\nfaîtage, entrer dans la pièce d'à côté — sans réécrire un chemin à la main.\n\nBody :\n  - la scène CAO (`murs`, …, cf. GET /cao/schema) — OPTIONNELLE mais vivement\n    conseillée : c'est elle qui apporte la détection de murs (un pas qui\n    entrerait dans une cloison est refusé et signalé) et les repères de pièces ;\n  - `depuis` : {position, vise, focale_mm} — le point de vue de départ, tel\n    qu'il sort de `chemin` dans /cao/visite/plan. Absent : vue d'ensemble du\n    bâtiment (ou hauteur d'œil à l'origine si la scène manque) ;\n  - `actions` : la séquence, en codes (`avancer`) ou en touches (`ctrl+8`),\n    avec répétitions (`\"avancer x3\"` ou `{code:\"avancer\", repetitions:3}`) ;\n  - `reglages` : pas_mm, pas_altitude_mm, pas_rotation_deg, facteur_zoom,\n    focale_min_mm, focale_max_mm, grand_pas.\n\nRetourne l'état final, l'état après CHAQUE action (avec le motif des pas\nrefusés), et un `chemin` prêt à être rendu en 4K par /cao/visite/studio.\nCatalogue des actions (gratuit) : GET /api/v1/cao/visite/commandes.","operationId":"api_v1_cao_visite_camera_api_v1_cao_visite_camera_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cao/mobilier":{"get":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Mobilier","description":"CATALOGUE DE MOBILIER ET DE DÉCORATION — GRATUIT, sans clé API.\n\nUn agent qui « meuble » une maison avec des `boites[]` produit des cubes\ngris : c'est ce que donnait l'API jusqu'ici, faute de vocabulaire. Ce\ncatalogue est ce vocabulaire — de vrais objets, modélisés en volumes, qui\napparaissent dans la Visite 4K comme sur la planche PDF.\n\nÀ lire AVANT de composer une scène meublée, en même temps que /cao/schema.","operationId":"api_v1_cao_mobilier_api_v1_cao_mobilier_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cao/ifc":{"post":{"tags":["api-ia","api-ia"],"summary":"Api V1 Cao Ifc","description":"CAO pour agents IA : décrivez une scène en JSON (même format que\n/cao/dxf), recevez un fichier IFC4 — le format d'échange BIM standard,\nouvrable dans Revit/ArchiCAD/Solibri. GUID réel par élément, matériaux\navec propriétés physiques (masse volumique, conductivité thermique).\nLimite : les ouvertures sont des objets IfcDoor/IfcWindow correctement\nclassés et positionnés, sans trou booléen découpé dans le mur.\nBody : identique à /cao/dxf. [format:'json'] renvoie {ifc, elements, unites}\nau lieu d'un fichier téléchargeable. Schéma complet : GET /api/v1/cao/schema.","operationId":"api_v1_cao_ifc_api_v1_cao_ifc_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/avenant-irl":{"post":{"tags":["api-ia"],"summary":"Api V1 Avenant Irl","description":"Courrier de révision de loyer IRL prêt à envoyer (PDF, ou format:'html').\nBody : {bailleur_nom, locataire_nom, logement_adresse, [locataire_adresse],\n        loyer_actuel, irl_reference, irl_nouveau, date_effet,\n        [bailleur_adresse, trimestre_reference, trimestre_nouveau, lieu, date_emission]}.\nMise en page enveloppe à fenêtre : destinataire à DROITE.","operationId":"api_v1_avenant_irl_api_v1_documents_avenant_irl_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/avis-echeance":{"post":{"tags":["api-ia"],"summary":"Api V1 Avis Echeance","description":"Avis d'échéance / appel de loyer (PDF ou HTML) — service agents IA.\nBody : bailleur_*, locataire_*, logement_adresse, periode, date_echeance,\nloyer/charges ou lignes[], [iban, bic, reference, lieu, format].","operationId":"api_v1_avis_echeance_api_v1_documents_avis_echeance_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/relance":{"post":{"tags":["api-ia"],"summary":"Api V1 Relance","description":"Relance impayé niveaux 1–5 (PDF/HTML) — service agents IA.\nBody : niveau, bailleur_*, locataire_*, montant_du, [detail[], logement_adresse, lieu, format].","operationId":"api_v1_relance_api_v1_documents_relance_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/crg":{"post":{"tags":["api-ia"],"summary":"Api V1 Crg","description":"Compte rendu de gestion simplifié (PDF/HTML) — service agents IA.\nDestinataire = propriétaire (proprietaire_adresse). Body : agence_*/bailleur_*,\nproprietaire_*, periode, recettes[], depenses[], [honoraires, solde, biens_adresses].","operationId":"api_v1_crg_api_v1_documents_crg_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fiscal/synthese":{"post":{"tags":["api-ia"],"summary":"Api V1 Fiscal Synthese","description":"Synthèse fiscale revenus fonciers (micro vs réel) — service agents IA.\nBody : recettes_brutes, charges_deductibles, [annee, proprietaire_nom,\nproprietaire_adresse, format=json|html|pdf]. Stateless — pas d'accès compta.\nGarde-fou : résultat à titre indicatif, dans la limite des documents fournis ;\npour toute décision, contacter un professionnel.","operationId":"api_v1_fiscal_synthese_api_v1_fiscal_synthese_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gerance/declaration-paiement":{"post":{"tags":["api-ia"],"summary":"Api V1 Declaration Paiement","description":"Déclaration de paiement (le client confirme : payé ? date ? montant ?) →\nproposition d'écriture comptable + prochaine action (quittance ou reçu).\n1 unité (irl). Stateless — pas d'accès banque.","operationId":"api_v1_declaration_paiement_api_v1_gerance_declaration_paiement_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/mandat-gerance":{"post":{"tags":["api-ia"],"summary":"Api V1 Mandat Gerance","description":"Mandat de gestion (loi Hoguet) PDF/HTML — service agents. Dossier local client.","operationId":"api_v1_mandat_gerance_api_v1_documents_mandat_gerance_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/candidature":{"post":{"tags":["api-ia"],"summary":"Api V1 Candidature","description":"Dossier de candidature locataire PDF/HTML — service agents.","operationId":"api_v1_candidature_api_v1_documents_candidature_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gerance/annonce-location":{"post":{"tags":["api-ia"],"summary":"Api V1 Annonce Location","description":"BROUILLON d'annonce de location uniquement (texte + HTML).\nAucune publication sur synergieloc.fr — validation opérateur exclusive.\nToute tentative publier=true est refusée (400). 1 unité.","operationId":"api_v1_annonce_location_api_v1_gerance_annonce_location_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/mouvement-locataire":{"post":{"tags":["api-ia"],"summary":"Api V1 Mouvement Locataire","description":"Entrée ou sortie locataire (checklist + solde de tout compte) PDF/HTML.\nBody : type=entree|sortie, bailleur_*, locataire_*, logement_adresse,\n[date_effet, checklist[], solde_lignes[], depot_garantie, retenues, format].","operationId":"api_v1_mouvement_locataire_api_v1_documents_mouvement_locataire_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/edl":{"post":{"tags":["api-ia"],"summary":"Api V1 Edl","description":"État des lieux d'entrée ou de sortie (PDF/HTML) — décret 2016-382.\nBody : type=entree|sortie, bailleur_*, locataire_*, logement_adresse,\n[pieces[]/rooms[], compteurs[], cles[], etat_general, proprete, format].","operationId":"api_v1_edl_api_v1_documents_edl_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/bon-intervention":{"post":{"tags":["api-ia"],"summary":"Api V1 Bon Intervention","description":"Bon / demande d'intervention (PDF/HTML) — service agents IA.\nBody : titre, description, [adresse_intervention, urgence, echeance,\ncout_estime, prestataire_*, agence_*, format].","operationId":"api_v1_bon_intervention_api_v1_documents_bon_intervention_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partenaire/pack":{"get":{"tags":["api-ia"],"summary":"Api V1 Pack Partenaire","description":"Catalogue gratuit : apps Espace Partenaire → outils MCP (0 unité, sans clé).","operationId":"api_v1_pack_partenaire_api_v1_partenaire_pack_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["api-ia"],"summary":"Api V1 Pack Partenaire Post","description":"Même contenu que GET — body ignoré (compat MCP).","operationId":"api_v1_pack_partenaire_post_api_v1_partenaire_pack_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/fiche-mission":{"post":{"tags":["api-ia"],"summary":"Api V1 Fiche Mission","description":"Fiche mission / chantier (PDF/HTML) — app Missions du portail partenaire.","operationId":"api_v1_fiche_mission_api_v1_documents_fiche_mission_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/devis-travaux":{"post":{"tags":["api-ia"],"summary":"Api V1 Devis Travaux","description":"Devis travaux (PDF/HTML) — app Factures du portail partenaire.","operationId":"api_v1_devis_travaux_api_v1_documents_devis_travaux_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/liste-materiaux":{"post":{"tags":["api-ia"],"summary":"Api V1 Liste Materiaux","description":"Liste matériaux / panier (PDF/HTML) — app Panier du portail partenaire.","operationId":"api_v1_liste_materiaux_api_v1_documents_liste_materiaux_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/confirmation-rdv":{"post":{"tags":["api-ia"],"summary":"Api V1 Confirmation Rdv","description":"Confirmation de rendez-vous (PDF/HTML) — app Agenda.","operationId":"api_v1_confirmation_rdv_api_v1_documents_confirmation_rdv_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/note-frais":{"post":{"tags":["api-ia"],"summary":"Api V1 Note Frais","description":"Note de frais (PDF/HTML) — app Frais.","operationId":"api_v1_note_frais_api_v1_documents_note_frais_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/journal-kilometrique":{"post":{"tags":["api-ia"],"summary":"Api V1 Journal Kilometrique","description":"Journal kilométrique + IK (PDF/HTML) — app Kilométrique.","operationId":"api_v1_journal_kilometrique_api_v1_documents_journal_kilometrique_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/compte-rendu-chantier":{"post":{"tags":["api-ia"],"summary":"Api V1 Compte Rendu Chantier","description":"Compte-rendu d'avancement chantier (PDF/HTML) — app Chantier IA.","operationId":"api_v1_compte_rendu_chantier_api_v1_documents_compte_rendu_chantier_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/relance-facture-client":{"post":{"tags":["api-ia"],"summary":"Api V1 Relance Facture Client","description":"Relance facture client BTP (PDF/HTML) — app Factures en retard.","operationId":"api_v1_relance_facture_client_api_v1_documents_relance_facture_client_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/conformite-artisan":{"post":{"tags":["api-ia"],"summary":"Api V1 Conformite Artisan","description":"Checklist conformité artisan RC Pro / décennale / URSSAF / KBIS — app Conformité.","operationId":"api_v1_conformite_artisan_api_v1_documents_conformite_artisan_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/facturx":{"post":{"tags":["api-ia"],"summary":"Api V1 Facturx","description":"Facture Factur-X (PDF/A-3 + XML EN 16931 CII) — service agents IA.\nBody : invoice_number, invoice_date, seller{}, buyer{}, lines[]\n(description, quantity, unit_price HT, vat_rate). Optionnel : due_date, notes.\nformat=preview → PDF simple sans XML ; défaut = Factur-X complet.","operationId":"api_v1_facturx_api_v1_documents_facturx_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"security":[{"ApiKeyAuth":[]}]}