{"openapi":"3.1.0","info":{"title":"Aztec, portail installateur PAC","version":"0.1.0"},"paths":{"/cgu":{"get":{"summary":"Cgu","description":"Conditions générales d'utilisation en vigueur (rendu du fichier archivé legal/cgu_v<version>.md).","operationId":"cgu_cgu_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/mentions-legales":{"get":{"summary":"Mentions Legales","operationId":"mentions_legales_mentions_legales_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/confidentialite":{"get":{"summary":"Confidentialite","description":"Cookies utilisés, mesure d'audience, mesure d'activité des comptes suivis, conservation et droits.","operationId":"confidentialite_confidentialite_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog":{"get":{"summary":"Blog Index","operationId":"blog_index_blog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Article","operationId":"blog_article_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/guides":{"get":{"summary":"Guides Index","operationId":"guides_index_guides_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/guides/{slug}":{"get":{"summary":"Guide Article","operationId":"guide_article_guides__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/methode":{"get":{"summary":"Methode","operationId":"methode_methode_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/assistants-ia":{"get":{"summary":"Assistants Ia","description":"Connexion pas à pas du serveur MCP aux assistants IA, avec des exemples de demandes pour un particulier et pour un installateur.","operationId":"assistants_ia_assistants_ia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/observatoire":{"get":{"summary":"Observatoire Page","operationId":"observatoire_page_observatoire_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/a-propos":{"get":{"summary":"A Propos","operationId":"a_propos_a_propos_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/suivi/{token}":{"get":{"summary":"Suivi Client","description":"Page de suivi publique, sans authentification : le client consulte ici\nl'avancement de son dossier (statut commercial, note de l'installateur\nsi présente). Le lien contient un jeton aléatoire généré à la création du\ndossier (jamais l'identifiant interne) ; il est porté par le QR code de\nchaque page du PDF client (voir signature_pdf.py). Distincte du rapport\nclient complet, que l'installateur transmet lui-même.","operationId":"suivi_client_suivi__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"summary":"Login Get","operationId":"login_get_login_get","parameters":[{"name":"mdp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdp"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Login Post","operationId":"login_post_login_post","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_post_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cgu/acceptation":{"get":{"summary":"Cgu Acceptation Get","description":"Écran bloquant : première connexion, ou nouvelle version des CGU depuis la dernière acceptation.","operationId":"cgu_acceptation_get_cgu_acceptation_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Cgu Acceptation Post","description":"Enregistre la preuve d'acceptation (version, empreinte du texte, date UTC, IP, navigateur, cases cochées), seulement si les\nDEUX cases sont cochées : le contrôle est fait ici, côté serveur, le bouton désactivé n'est qu'un confort.","operationId":"cgu_acceptation_post_cgu_acceptation_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/logout":{"get":{"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mot-de-passe-oublie":{"get":{"summary":"Mot De Passe Oublie Get","operationId":"mot_de_passe_oublie_get_mot_de_passe_oublie_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Mot De Passe Oublie Post","operationId":"mot_de_passe_oublie_post_mot_de_passe_oublie_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_mot_de_passe_oublie_post_mot_de_passe_oublie_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reinitialiser-mot-de-passe/{token}":{"get":{"summary":"Reinitialiser Mot De Passe Get","operationId":"reinitialiser_mot_de_passe_get_reinitialiser_mot_de_passe__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Reinitialiser Mot De Passe Post","operationId":"reinitialiser_mot_de_passe_post_reinitialiser_mot_de_passe__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_reinitialiser_mot_de_passe_post_reinitialiser_mot_de_passe__token__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/extraire-dpe":{"post":{"summary":"Extraire Dpe","operationId":"extraire_dpe_admin_extraire_dpe_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extraire_dpe_admin_extraire_dpe_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/extraire-chaudiere":{"post":{"summary":"Extraire Chaudiere","operationId":"extraire_chaudiere_admin_extraire_chaudiere_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extraire_chaudiere_admin_extraire_chaudiere_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/extraire-radiateur":{"post":{"summary":"Extraire Radiateur","operationId":"extraire_radiateur_admin_extraire_radiateur_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extraire_radiateur_admin_extraire_radiateur_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/extraire-chaudiere-texte":{"post":{"summary":"Extraire Chaudiere Texte","description":"Secours de `extraire-chaudiere` quand il n'y a pas de photo claire : décrit la chaudière en texte libre.","operationId":"extraire_chaudiere_texte_admin_extraire_chaudiere_texte_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_extraire_chaudiere_texte_admin_extraire_chaudiere_texte_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/estimer-radiateur":{"post":{"summary":"Estimer Radiateur","description":"Puissance nominale estimée (ΔT50) d'un radiateur pour l'affichage en direct du formulaire installateur (table sourcée uniquement).","operationId":"estimer_radiateur_admin_estimer_radiateur_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_estimer_radiateur_admin_estimer_radiateur_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/nouveau-dossier":{"get":{"summary":"Admin Nouveau Dossier Get","operationId":"admin_nouveau_dossier_get_admin_nouveau_dossier_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Nouveau Dossier Post","operationId":"admin_nouveau_dossier_post_admin_nouveau_dossier_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_nouveau_dossier_post_admin_nouveau_dossier_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/modifier":{"get":{"summary":"Admin Modifier Dossier","description":"Réutilise le formulaire en mode édition, pré-rempli avec les valeurs actuelles du dossier.","operationId":"admin_modifier_dossier_admin_dossiers__submission_id__modifier_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Admin Modifier Dossier Post","description":"Modifie les champs d'un dossier existant puis relance l'analyse. Un fichier non redéposé est conservé tel quel\n(`gas_csv_deja_fourni` / `elec_csv_deja_fourni` dans la validation) : inutile de re-téléverser un fichier pour corriger une surface.","operationId":"admin_modifier_dossier_post_admin_dossiers__submission_id__modifier_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_modifier_dossier_post_admin_dossiers__submission_id__modifier_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plateforme":{"get":{"summary":"Plateforme Comptes","operationId":"plateforme_comptes_plateforme_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/plateforme/simulations":{"get":{"summary":"Plateforme Simulations","description":"Rapport sur les simulations du grand public : indicateurs, répartitions, besoins médians par époque de construction et liste des études.","operationId":"plateforme_simulations_plateforme_simulations_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/plateforme/mcp":{"get":{"summary":"Plateforme Mcp","description":"Rapport sur le connecteur MCP : appels par jour, outil, assistant et issue ; visites du simulateur et études venues d'un lien du connecteur.","operationId":"plateforme_mcp_plateforme_mcp_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/plateforme/simulations.csv":{"get":{"summary":"Plateforme Simulations Csv","operationId":"plateforme_simulations_csv_plateforme_simulations_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/plateforme/comptes/{installer_id}/marques":{"post":{"summary":"Plateforme Marques Pac","description":"Marques de PAC proposées à un compte (formulaire, liste des modèles, sélection automatique). Toutes cochées = tout le catalogue.","operationId":"plateforme_marques_pac_plateforme_comptes__installer_id__marques_post","parameters":[{"name":"installer_id","in":"path","required":true,"schema":{"type":"string","title":"Installer Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_plateforme_marques_pac_plateforme_comptes__installer_id__marques_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plateforme/factures":{"get":{"summary":"Plateforme Factures","description":"Toutes les factures d'abonnement : l'administrateur envoie lui-même chaque facture par e-mail (rien ne part automatiquement).","operationId":"plateforme_factures_plateforme_factures_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/plateforme/factures/{invoice_id}.pdf":{"get":{"summary":"Plateforme Facture Pdf","operationId":"plateforme_facture_pdf_plateforme_factures__invoice_id__pdf_get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plateforme/factures/emettre":{"post":{"summary":"Plateforme Factures Emettre","description":"Émet les factures en attente d'identité (après avoir renseigné les variables PAC_FACTURE_* du vendeur).","operationId":"plateforme_factures_emettre_plateforme_factures_emettre_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/plateforme/factures/{invoice_id}/envoyer":{"post":{"summary":"Plateforme Facture Envoyer","description":"Envoie la facture (PDF en pièce jointe) à l'adresse e-mail du compte client. Action manuelle de l'administrateur.","operationId":"plateforme_facture_envoyer_plateforme_factures__invoice_id__envoyer_post","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plateforme/se-connecter-comme/{username}":{"post":{"summary":"Usurper Compte","description":"L'administrateur plateforme entre dans le compte d'un installateur sans que ça compte comme de l'usage (voir usurpation.py).","operationId":"usurper_compte_plateforme_se_connecter_comme__username__post","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/usurpation/fin":{"post":{"summary":"Fin Usurpation","description":"Revient au compte de l'administrateur (seulement si le cookie signé porte bien une usurpation).","operationId":"fin_usurpation_usurpation_fin_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/dossiers":{"get":{"summary":"Admin List","operationId":"admin_list_admin_dossiers_get","parameters":[{"name":"statut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Statut"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/statut":{"post":{"summary":"Admin Update Statut","operationId":"admin_update_statut_admin_dossiers__submission_id__statut_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_update_statut_admin_dossiers__submission_id__statut_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/note":{"post":{"summary":"Admin Update Note","description":"Note libre laissee par l'installateur, affichee sur le rapport client\nsous une forme visuellement distincte du contenu calcule (voir\nrapport_client.html) : additive, jamais melangee au contenu genere par\nAztec, pour qu'un client ne puisse pas la confondre avec le resultat\ndu calcul.","operationId":"admin_update_note_admin_dossiers__submission_id__note_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_update_note_admin_dossiers__submission_id__note_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/note-interne":{"post":{"summary":"Admin Update Note Interne","description":"Note réservée à l'installateur : n'apparaît ni sur le rapport client, ni sur le PDF, ni sur le suivi.","operationId":"admin_update_note_interne_admin_dossiers__submission_id__note_interne_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_update_note_interne_admin_dossiers__submission_id__note_interne_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/suivi":{"post":{"summary":"Admin Add Suivi","operationId":"admin_add_suivi_admin_dossiers__submission_id__suivi_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_add_suivi_admin_dossiers__submission_id__suivi_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}":{"get":{"summary":"Admin Detail","operationId":"admin_detail_admin_dossiers__submission_id__get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/modele-pac":{"post":{"summary":"Admin Changer Modele Pac","description":"L'installateur retient un autre modèle de PAC de son catalogue (ou revient à l'estimation générique avec une valeur vide) : l'analyse est\nrelancée (le dossier ne compte qu'une fois dans le quota) et tous les documents, page installateur et PDF client, sont recalculés avec ce modèle.","operationId":"admin_changer_modele_pac_admin_dossiers__submission_id__modele_pac_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_changer_modele_pac_admin_dossiers__submission_id__modele_pac_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/supprimer":{"get":{"summary":"Admin Supprimer Dossier Get","description":"Page de confirmation : la suppression est définitive, elle ne part jamais d'un simple clic.","operationId":"admin_supprimer_dossier_get_admin_dossiers__submission_id__supprimer_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Admin Supprimer Dossier Post","description":"Supprime le dossier client et tout ce qui s'y rattache : résultat,\nrapport (page, PDF, lien de suivi client, qui n'ont pas d'existence\npropre), fichiers déposés, suivis après pose. Le journal d'événements et\nle décompte des études facturables sont conservés (voir db.delete_submission).","operationId":"admin_supprimer_dossier_post_admin_dossiers__submission_id__supprimer_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suivi":{"post":{"summary":"Suivi Evenements","description":"Reçoit les clics, champs touchés, abandons et erreurs du navigateur d'un compte suivi. Ignoré (204) pour tout autre compte.","operationId":"suivi_evenements_admin_suivi_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/dossiers/{submission_id}/progression":{"get":{"summary":"Admin Progression","description":"Événements réellement émis par l'analyse en cours (ou la dernière), à partir du n-ième.","operationId":"admin_progression_admin_dossiers__submission_id__progression_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Depuis"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/relancer":{"post":{"summary":"Admin Relancer","operationId":"admin_relancer_admin_dossiers__submission_id__relancer_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/rapport":{"get":{"summary":"Admin Rapport Client","description":"Aperçu du rapport client habillé (logo, couleur, contact du profil de marque) ; la signature Aztec y figure toujours.","operationId":"admin_rapport_client_admin_dossiers__submission_id__rapport_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dossiers/{submission_id}/rapport.pdf":{"get":{"summary":"Admin Rapport Client Pdf","description":"Version PDF téléchargeable du même rapport client (rendu depuis le même template HTML).","operationId":"admin_rapport_client_pdf_admin_dossiers__submission_id__rapport_pdf_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/guide":{"get":{"summary":"Admin Guide","description":"Visite guidée : plus de page dédiée, Aztec montre directement les écrans réels (voir static/visite.js). Ouvrir « Visite guidée »\nla (re)démarre à la première étape et renvoie vers le tableau de bord ; l'étape en cours est gardée côté serveur, donc la\nvisite se poursuit d'une page à l'autre et d'une session à l'autre.","operationId":"admin_guide_admin_guide_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/visite":{"post":{"summary":"Admin Visite","description":"Avance, termine (étape vide) ou quitte la visite guidée. Une étape inconnue met fin à la visite.","operationId":"admin_visite_admin_visite_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_visite_admin_visite_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/equipe":{"get":{"summary":"Admin Equipe","operationId":"admin_equipe_admin_equipe_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Equipe Add","operationId":"admin_equipe_add_admin_equipe_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_equipe_add_admin_equipe_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/mon-mot-de-passe":{"post":{"summary":"Admin Changer Mon Mot De Passe","operationId":"admin_changer_mon_mot_de_passe_admin_mon_mot_de_passe_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_changer_mon_mot_de_passe_admin_mon_mot_de_passe_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/equipe/{user_id}/supprimer":{"post":{"summary":"Admin Equipe Remove","operationId":"admin_equipe_remove_admin_equipe__user_id__supprimer_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/abonnement":{"get":{"summary":"Admin Abonnement","operationId":"admin_abonnement_admin_abonnement_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/abonnement/factures/{invoice_id}.pdf":{"get":{"summary":"Admin Facture Pdf","description":"Télécharge une facture émise de son propre compte (jamais celle d'un autre : 404).","operationId":"admin_facture_pdf_admin_abonnement_factures__invoice_id__pdf_get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/abonnement/checkout/{palier}":{"get":{"summary":"Admin Abonnement Checkout","operationId":"admin_abonnement_checkout_admin_abonnement_checkout__palier__get","parameters":[{"name":"palier","in":"path","required":true,"schema":{"type":"string","title":"Palier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/abonnement/portail":{"get":{"summary":"Admin Abonnement Portail","operationId":"admin_abonnement_portail_admin_abonnement_portail_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks/stripe":{"post":{"summary":"Webhooks Stripe","description":"Point d'entrée des webhooks Stripe (à configurer côté Stripe Dashboard\nvers <votre-domaine>/webhooks/stripe). Vérifie la signature avant tout\ntraitement — un événement dont la signature ne correspond pas est\nrejeté (400), jamais traité en aveugle.","operationId":"webhooks_stripe_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/marque":{"get":{"summary":"Admin Marque","operationId":"admin_marque_admin_marque_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/marque/{profile_id}":{"post":{"summary":"Admin Marque Update","operationId":"admin_marque_update_admin_marque__profile_id__post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_marque_update_admin_marque__profile_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_admin_add_suivi_admin_dossiers__submission_id__suivi_post":{"properties":{"fichier_suivi":{"type":"string","contentMediaType":"application/octet-stream","title":"Fichier Suivi"}},"type":"object","required":["fichier_suivi"],"title":"Body_admin_add_suivi_admin_dossiers__submission_id__suivi_post"},"Body_admin_changer_modele_pac_admin_dossiers__submission_id__modele_pac_post":{"properties":{"pac_modele":{"type":"string","title":"Pac Modele","default":""}},"type":"object","title":"Body_admin_changer_modele_pac_admin_dossiers__submission_id__modele_pac_post"},"Body_admin_changer_mon_mot_de_passe_admin_mon_mot_de_passe_post":{"properties":{"ancien_mot_de_passe":{"type":"string","title":"Ancien Mot De Passe"},"nouveau_mot_de_passe":{"type":"string","title":"Nouveau Mot De Passe"},"confirmation_mot_de_passe":{"type":"string","title":"Confirmation Mot De Passe"}},"type":"object","required":["ancien_mot_de_passe","nouveau_mot_de_passe","confirmation_mot_de_passe"],"title":"Body_admin_changer_mon_mot_de_passe_admin_mon_mot_de_passe_post"},"Body_admin_equipe_add_admin_equipe_post":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"nom":{"type":"string","title":"Nom","default":""},"email":{"type":"string","title":"Email","default":""}},"type":"object","required":["username","password"],"title":"Body_admin_equipe_add_admin_equipe_post"},"Body_admin_marque_update_admin_marque__profile_id__post":{"properties":{"couleur_accent_hex":{"type":"string","title":"Couleur Accent Hex","default":""},"contact_nom":{"type":"string","title":"Contact Nom","default":""},"contact_telephone":{"type":"string","title":"Contact Telephone","default":""},"contact_email":{"type":"string","title":"Contact Email","default":""},"logo":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Logo"}},"type":"object","title":"Body_admin_marque_update_admin_marque__profile_id__post"},"Body_admin_modifier_dossier_post_admin_dossiers__submission_id__modifier_post":{"properties":{"nom":{"type":"string","title":"Nom"},"email":{"type":"string","title":"Email"},"telephone":{"type":"string","title":"Telephone","default":""},"adresse":{"type":"string","title":"Adresse","default":""},"departement":{"type":"string","title":"Departement","default":""},"surface_m2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Surface M2"},"annee_construction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Annee Construction"},"altitude_m":{"type":"number","title":"Altitude M","default":0.0},"nb_niveaux":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Niveaux"},"consigne_actuelle_c":{"type":"number","title":"Consigne Actuelle C"},"chauffe_plus_ou_moins":{"type":"string","title":"Chauffe Plus Ou Moins","default":"pareil"},"consigne_cible_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consigne Cible C"},"puissance_souscrite_kva":{"type":"number","title":"Puissance Souscrite Kva"},"type_chauffage_actuel":{"type":"string","title":"Type Chauffage Actuel"},"type_emetteurs":{"type":"string","title":"Type Emetteurs","default":"radiateurs_recents"},"age_chaudiere":{"type":"string","title":"Age Chaudiere","default":"inconnu"},"usages_gaz":{"type":"string","title":"Usages Gaz","default":""},"ecs_surconsommation_confirmee":{"type":"string","title":"Ecs Surconsommation Confirmee","default":""},"design_outdoor_temp_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Design Outdoor Temp C"},"volume_reseau_l":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume Reseau L"},"travaux_isolation":{"type":"string","title":"Travaux Isolation","default":"non"},"date_travaux_isolation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Travaux Isolation"},"notes_contexte":{"type":"string","title":"Notes Contexte","default":""},"nb_occupants":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Occupants"},"emplacement_chauffe_eau":{"type":"string","title":"Emplacement Chauffe Eau","default":""},"volume_local_chauffe_eau_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume Local Chauffe Eau M3"},"periodes_absence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodes Absence"},"livraisons_fioul":{"type":"string","title":"Livraisons Fioul","default":""},"type_chauffage_electrique":{"type":"string","title":"Type Chauffage Electrique","default":""},"fichier_dpe":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Fichier Dpe"},"dpe_conso_kwh_m2_an_declaree":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dpe Conso Kwh M2 An Declaree"},"revenu_fiscal_reference":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenu Fiscal Reference"},"budget_travaux_estime_eur":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Travaux Estime Eur"},"pieces_json":{"type":"string","title":"Pieces Json","default":""},"delta_t_pac_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta T Pac C"},"production_ecs":{"type":"string","title":"Production Ecs","default":""},"local_cet":{"type":"string","title":"Local Cet","default":""},"pac_t_depart_max_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pac T Depart Max C"},"pac_puissance_t_base_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pac Puissance T Base Kw"},"repartition_json":{"type":"string","title":"Repartition Json","default":""},"piece_thermostat":{"type":"string","title":"Piece Thermostat","default":""},"pac_modele":{"type":"string","title":"Pac Modele","default":""}},"type":"object","required":["nom","email","consigne_actuelle_c","puissance_souscrite_kva","type_chauffage_actuel"],"title":"Body_admin_modifier_dossier_post_admin_dossiers__submission_id__modifier_post"},"Body_admin_nouveau_dossier_post_admin_nouveau_dossier_post":{"properties":{"nom":{"type":"string","title":"Nom"},"email":{"type":"string","title":"Email"},"telephone":{"type":"string","title":"Telephone","default":""},"adresse":{"type":"string","title":"Adresse","default":""},"departement":{"type":"string","title":"Departement","default":""},"surface_m2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Surface M2"},"annee_construction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Annee Construction"},"altitude_m":{"type":"number","title":"Altitude M","default":0.0},"nb_niveaux":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Niveaux"},"consigne_actuelle_c":{"type":"number","title":"Consigne Actuelle C"},"chauffe_plus_ou_moins":{"type":"string","title":"Chauffe Plus Ou Moins","default":"pareil"},"consigne_cible_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consigne Cible C"},"puissance_souscrite_kva":{"type":"number","title":"Puissance Souscrite Kva"},"type_chauffage_actuel":{"type":"string","title":"Type Chauffage Actuel"},"type_emetteurs":{"type":"string","title":"Type Emetteurs","default":"radiateurs_recents"},"age_chaudiere":{"type":"string","title":"Age Chaudiere","default":"inconnu"},"usages_gaz":{"type":"string","title":"Usages Gaz","default":""},"ecs_surconsommation_confirmee":{"type":"string","title":"Ecs Surconsommation Confirmee","default":""},"design_outdoor_temp_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Design Outdoor Temp C"},"volume_reseau_l":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume Reseau L"},"travaux_isolation":{"type":"string","title":"Travaux Isolation","default":"non"},"date_travaux_isolation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Travaux Isolation"},"notes_contexte":{"type":"string","title":"Notes Contexte","default":""},"nb_occupants":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Occupants"},"emplacement_chauffe_eau":{"type":"string","title":"Emplacement Chauffe Eau","default":""},"volume_local_chauffe_eau_m3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume Local Chauffe Eau M3"},"periodes_absence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodes Absence"},"livraisons_fioul":{"type":"string","title":"Livraisons Fioul","default":""},"type_chauffage_electrique":{"type":"string","title":"Type Chauffage Electrique","default":""},"fichier_dpe":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Fichier Dpe"},"dpe_conso_kwh_m2_an_declaree":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dpe Conso Kwh M2 An Declaree"},"revenu_fiscal_reference":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenu Fiscal Reference"},"budget_travaux_estime_eur":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Travaux Estime Eur"},"pieces_json":{"type":"string","title":"Pieces Json","default":""},"delta_t_pac_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta T Pac C"},"production_ecs":{"type":"string","title":"Production Ecs","default":""},"local_cet":{"type":"string","title":"Local Cet","default":""},"pac_t_depart_max_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pac T Depart Max C"},"pac_puissance_t_base_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pac Puissance T Base Kw"},"repartition_json":{"type":"string","title":"Repartition Json","default":""},"piece_thermostat":{"type":"string","title":"Piece Thermostat","default":""},"pac_modele":{"type":"string","title":"Pac Modele","default":""}},"type":"object","required":["nom","email","consigne_actuelle_c","puissance_souscrite_kva","type_chauffage_actuel"],"title":"Body_admin_nouveau_dossier_post_admin_nouveau_dossier_post"},"Body_admin_update_note_admin_dossiers__submission_id__note_post":{"properties":{"note_installateur":{"type":"string","title":"Note Installateur","default":""}},"type":"object","title":"Body_admin_update_note_admin_dossiers__submission_id__note_post"},"Body_admin_update_note_interne_admin_dossiers__submission_id__note_interne_post":{"properties":{"note_interne":{"type":"string","title":"Note Interne","default":""}},"type":"object","title":"Body_admin_update_note_interne_admin_dossiers__submission_id__note_interne_post"},"Body_admin_update_statut_admin_dossiers__submission_id__statut_post":{"properties":{"statut_commercial":{"type":"string","title":"Statut Commercial"},"date_installation":{"type":"string","title":"Date Installation","default":""},"modele_pac_installe":{"type":"string","title":"Modele Pac Installe","default":""}},"type":"object","required":["statut_commercial"],"title":"Body_admin_update_statut_admin_dossiers__submission_id__statut_post"},"Body_admin_visite_admin_visite_post":{"properties":{"etape":{"type":"string","title":"Etape","default":""}},"type":"object","title":"Body_admin_visite_admin_visite_post"},"Body_estimer_radiateur_admin_estimer_radiateur_post":{"properties":{"type":{"type":"string","title":"Type"},"hauteur_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hauteur Mm"},"longueur_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longueur Mm"},"nb_elements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Elements"}},"type":"object","required":["type"],"title":"Body_estimer_radiateur_admin_estimer_radiateur_post"},"Body_extraire_chaudiere_admin_extraire_chaudiere_post":{"properties":{"fichier":{"type":"string","contentMediaType":"application/octet-stream","title":"Fichier"}},"type":"object","required":["fichier"],"title":"Body_extraire_chaudiere_admin_extraire_chaudiere_post"},"Body_extraire_chaudiere_texte_admin_extraire_chaudiere_texte_post":{"properties":{"description":{"type":"string","title":"Description"}},"type":"object","required":["description"],"title":"Body_extraire_chaudiere_texte_admin_extraire_chaudiere_texte_post"},"Body_extraire_dpe_admin_extraire_dpe_post":{"properties":{"fichier":{"type":"string","contentMediaType":"application/octet-stream","title":"Fichier"}},"type":"object","required":["fichier"],"title":"Body_extraire_dpe_admin_extraire_dpe_post"},"Body_extraire_radiateur_admin_extraire_radiateur_post":{"properties":{"fichier":{"type":"string","contentMediaType":"application/octet-stream","title":"Fichier"}},"type":"object","required":["fichier"],"title":"Body_extraire_radiateur_admin_extraire_radiateur_post"},"Body_login_post_login_post":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"Body_login_post_login_post"},"Body_mot_de_passe_oublie_post_mot_de_passe_oublie_post":{"properties":{"identifiant":{"type":"string","title":"Identifiant"}},"type":"object","required":["identifiant"],"title":"Body_mot_de_passe_oublie_post_mot_de_passe_oublie_post"},"Body_plateforme_marques_pac_plateforme_comptes__installer_id__marques_post":{"properties":{"marques":{"items":{"type":"string"},"type":"array","title":"Marques","default":[]}},"type":"object","title":"Body_plateforme_marques_pac_plateforme_comptes__installer_id__marques_post"},"Body_reinitialiser_mot_de_passe_post_reinitialiser_mot_de_passe__token__post":{"properties":{"nouveau_mot_de_passe":{"type":"string","title":"Nouveau Mot De Passe"},"confirmation_mot_de_passe":{"type":"string","title":"Confirmation Mot De Passe"}},"type":"object","required":["nouveau_mot_de_passe","confirmation_mot_de_passe"],"title":"Body_reinitialiser_mot_de_passe_post_reinitialiser_mot_de_passe__token__post"},"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"}}}}