API IsoFind

IsoFind expose une API REST locale servie par FastAPI sur http://127.0.0.1:8001. Elle est utilisée par l'interface frontend Tauri et peut être interrogée directement par des scripts ou des outils tiers pour automatiser des opérations sur les données analytiques. Cette page recense les 489 routes exposées par le backend.

Informations générales

Toutes les routes retournent du JSON sauf indication contraire (exports CSV, images PNG, fichiers PDF). Les réponses d'erreur suivent le format FastAPI standard : {"detail": "message d'erreur"} avec le code HTTP correspondant. En mode multi-utilisateurs, les routes qui modifient des données requièrent un cookie de session valide.

La documentation interactive Swagger est accessible à http://127.0.0.1:8001/docs pendant qu'IsoFind est ouvert. Elle liste toutes les routes avec leurs schémas de données complets et permet de les tester directement.

Compartimentage des données

Depuis la version 1.1, la plupart des routes appliquent un filtre de visibilité. Un utilisateur non administrateur ne voit que les échantillons dont il est propriétaire, ceux qui lui ont été partagés et ceux marqués publics. Les tables enfants (géochimie, molécules, physico-chimie, isotopes) héritent implicitement de ce filtre par la liste d'identifiants déjà restreinte. Les identifiants non visibles fournis par un client sont silencieusement retirés plutôt que de provoquer une erreur, afin de ne rien révéler de leur existence.

Les opérations destructives en masse et les opérations de maintenance globale (normalisations globales, purge des données d'entraînement, réinitialisation des normalisations) sont réservées aux administrateurs.

L'API écoute uniquement sur 127.0.0.1 (localhost). Elle n'est pas accessible depuis le réseau local sauf configuration explicite. Pour un usage intranet multi-postes, consulter la documentation de déploiement réseau.
Certaines routes de préfixe /api/licence disposent d'un alias anglophone en /api/license. Les deux formes sont strictement équivalentes.

Sommaire

Système, sécurité et démarrage

GET /api/ready Indique si le chargement complet du backend est terminé. Le frontend affiche un loader tant que ready=false.
GET /health Vérification de santé du backend.
GET /api/version/info Version, mode d'installation, date de build et fonctionnalités activées.
GET /api/system/mode Mode de fonctionnement du système (single_user ou multi_user).
GET /api/system/config Configuration système. Réservé aux administrateurs.
GET /api/system/stats Statistiques système : utilisateurs actifs, sessions, état de la base. Réservé aux administrateurs.
GET /api/system/protection Statut de protection des assets frontend (templates et scripts chiffrés).
GET /api/installation/mode Mode d'installation détecté au démarrage.
GET /api/network-mode Mode réseau courant : standard ou airgap. Le frontend s'en sert pour désactiver les fonctionnalités qui dépendent du réseau.
GET /api/trial-status Endpoint de compatibilité avec l'ancien système d'essai. IsoFind n'a plus de période d'essai.
GET /api/debug/modules Diagnostic de l'état de chargement des modules critiques.
POST /api/shutdown Arrête proprement le serveur FastAPI. Appelé par Tauri à la fermeture de l'application.
GET /api/updates/check Vérifie la disponibilité d'une mise à jour. Requiert un accès réseau (bloqué en mode air-gap).
GET /api/updates/current Retourne la version actuellement installée.
GET /api/config/language Langue d'interface configurée dans config.json.
POST /api/config/language Change la langue d'interface.

Corps : {"language": "fr"|"en"}

POST /api/sync Synchronisation des données entre les sources configurées.

Jeton local et accès API tiers

GET /api/local/token Point d'entrée des clients Python locaux. Le flux dépend du mode api_access configuré (ouvert, confirmation manuelle, refus).
GET /api/local/pending-authorizations Liste les demandes d'autorisation en attente. Alimente la fenêtre de confirmation Tauri.
POST /api/local/authorize-client Valide ou refuse une demande d'autorisation en attente.
GET /api/local/api-access-config Configuration actuelle du contrôle d'accès API.
POST /api/local/api-access-config Change le mode api_access. Appelé depuis les préférences IsoFind.
DELETE /api/local/authorized-client/{client_id} Révoque l'autorisation d'un client enregistré.
GET /api/security/token Indique si un jeton de sécurité est requis, sans jamais en révéler la valeur.
POST /api/security/bind-session-cookie Pose le cookie isofind_token, miroir du jeton de sécurité. Nécessaire aux navigations déclenchées par une balise <a href>.

Authentification et sessions

Les routes de récupération sont volontairement publiques. Le code de récupération est l'unique facteur d'authentification : il doit être conservé hors ligne, au même titre qu'une clé de chiffrement.
POST /api/auth/login Authentification utilisateur (mode multi-utilisateurs).

Corps : {"username": str, "password": str}

Retour : {"success": bool, "user": {...}} et cookie de session. En mode mono-utilisateur, toujours accepté.

POST /api/auth/logout Déconnexion et invalidation de la session.
GET /api/auth/check Version canonique de la vérification de session : lit l'utilisateur posé par le middleware d'authentification.
POST /api/auth/lock Verrouille la session courante et invalide le cookie côté serveur.
GET /api/auth/sessions Liste les sessions actives de l'utilisateur courant (multi-utilisateurs uniquement).
DELETE /api/auth/sessions/{session_id} Termine une session spécifique.
POST /api/auth/change-password Change le mot de passe de l'utilisateur connecté.

Corps : {"old_password": str, "new_password": str, "confirm_password": str}

GET /api/auth/first-launch Retourne le mot de passe admin temporaire si le compte vient d'être créé. Appel unique : la valeur est effacée de la mémoire ensuite.
GET /api/auth/recovery-code-status Indique si un code de récupération actif est configuré. Route publique, ne révèle rien de sensible.
POST /api/auth/recovery/generate-initial Génère le code de récupération initial au premier démarrage. Route publique, protégée par le mot de passe admin temporaire.
POST /api/auth/recovery/generate Génère un nouveau code de récupération (admin authentifié). Le code en clair n'est retourné qu'une seule fois.
POST /api/auth/generate-recovery-code Variante appelée depuis les préférences. Seul le hash PBKDF2 du code est persisté.
POST /api/auth/recovery Réinitialise le mot de passe admin via le code de récupération. Route publique : le code tient lieu d'authentification.

Corps : {"recovery_code": str, "new_password": str}. Usage unique.

Gestion des utilisateurs

GET /api/users/list Liste tous les comptes utilisateurs. Réservé aux administrateurs.
POST /api/users/create Crée un compte utilisateur. Réservé aux administrateurs.

Corps : username, email, password, role (user, analyst, manager, admin), display_name.

POST /api/users/{user_id}/toggle Active ou désactive un compte utilisateur.
POST /api/users/{user_id}/unlock Déverrouille un compte bloqué après trop de tentatives échouées. Réinitialise failed_attempts et locked_until.
DELETE /api/users/{user_id} Supprime un compte utilisateur. Un administrateur ne peut pas supprimer son propre compte.
PUT /api/user/profile Met à jour le profil de l'utilisateur connecté (nom d'affichage, email).
GET /api/logs/activity Journal d'activité : connexions, actions, exports. Réservé aux administrateurs.
GET /api/logs/export Exporte le journal d'activité en CSV. Réservé aux administrateurs.

Protection et chiffrement de la base

GET /api/database-protection/status État de protection de la base. Réponse plate consommée par le frontend pour l'affichage du cadenas.
GET /api/database-protection/lock-status Endpoint léger pour le splash de déverrouillage : quatre champs suffisent à décider d'afficher ou non la modale.
GET /api/database-protection/icon État condensé pour les widgets de barre d'état : cadenas vert (protégée) ou gris.
POST /api/database-protection/enable Active la protection au niveau demandé. Pour le niveau encrypted : création du keystore avec MEK aléatoire et génération d'une clé de récupération BIP39.
POST /api/database-protection/unlock Déverrouille la session : vérification du mot de passe, dérivation de la clé, rejeu du vérificateur d'intégrité ISOF.
POST /api/database-protection/lock Verrouille la session courante. Idempotent.
POST /api/database-protection/verify Vérifie un mot de passe de protection sans changer l'état de verrouillage.
POST /api/database-protection/unlock-with-recovery Déverrouille via la clé de récupération BIP39 en cas d'oubli. Force la définition d'un nouveau mot de passe maître.
POST /api/database-protection/regenerate-recovery Régénère une clé de récupération BIP39. L'ancienne est invalidée. Le mot de passe maître est requis.
POST /api/database-protection/change-master-password Change le mot de passe maître de la base chiffrée. Distinct de /api/auth/change-password, qui concerne le mot de passe utilisateur.
GET /api/integrity-seal/status Statut du sceau d'intégrité des colonnes de provenance ISOF. Valide signifie qu'aucune modification extérieure n'a été détectée depuis le dernier import.
POST /api/integrity-seal/reseal Rescelle l'empreinte des colonnes de provenance ISOF. Appelé automatiquement après un import réussi.
GET /api/refs/integrity-status État d'intégrité des bases de référence : fractionation_database, isotopes_reference, molecules_reference.
POST /api/refs/import Reçoit un fichier .db de référence, vérifie sa signature ECDSA de l'autorité intermédiaire IsoFind puis l'installe.

Sauvegarde et restauration

GET /api/database/backup Télécharge une copie binaire de la base active. Pour une base SQLCipher, le fichier reste chiffré.
GET /api/database/backup/info Métadonnées des sauvegardes disponibles et état de protection.
POST /api/database/restore Restaure une base sauvegardée. Écriture binaire directe pour une base en clair.
POST /api/database/backup/encrypted Crée une sauvegarde chiffrée AES-256-GCM dans backups/.

Corps : {"password": "mot_de_passe_maitre"}

POST /api/database/restore/encrypted Restaure une sauvegarde .protected.bak. Le déchiffrement a lieu en mémoire côté serveur : le clair ne transite jamais.

Échantillons

Toutes les routes de lecture sur les échantillons appliquent le compartimentage : un utilisateur non administrateur ne voit que ses propres échantillons, ceux qui lui sont partagés et ceux marqués publics.
GET /api/samples Liste complète des échantillons avec leurs données isotopiques.

Params : limit (int), sort (asc ou desc, tri par date de création). Par défaut, tri par identifiant décroissant.

GET /api/samples/{sample_id} Récupère un échantillon précis avec ses données isotopiques. Retourne 404 si l'identifiant n'existe pas.
POST /api/samples Crée un nouvel échantillon avec ses données isotopiques.

Corps : name (requis), material_type, sector, collection_date, collection_location, description, classification (source ou fille), latitude, longitude, project.

Le type de matériau et la classification sont normalisés automatiquement. En mode multi-utilisateurs, owner_id vaut l'utilisateur courant et la visibilité est private.

PUT /api/samples/{sample_id} Remplace complètement un échantillon. Réservé au propriétaire ou à un administrateur.
PATCH /api/samples/{sample_id} Mise à jour partielle : seuls les champs fournis sont modifiés.
DELETE /api/samples/{sample_id} Supprime un échantillon et toutes ses données isotopiques associées.
DELETE /api/samples/{sample_id}/isotope/{isotope_id} Supprime une donnée isotopique individuelle.
GET /api/samples/{sample_id}/isotopes Données isotopiques d'un échantillon.
GET /api/samples/{sample_id}/isotope-values Valeurs isotopiques d'un échantillon, format destiné aux modules de calcul.
GET /api/samples/{sample_id}/isotope-debug Lignes brutes de isotope_data avec le détail ratio_value face à normalized_value. Usage diagnostic.
GET /api/samples/{sample_id}/depth-profile Points de profondeur associés à un échantillon (profil vertical).
GET /api/samples/{sample_id}/audit Historique de traçabilité d'un échantillon.

Params : limit (int).

POST /api/samples/{sample_id}/audit Enregistre une entrée d'audit sur un échantillon.
GET /api/samples/isotopic-data Toutes les données isotopiques de la base, avec indicateur de normalisation.
GET /api/samples/metadata Métadonnées des échantillons indexées par sample_id, fusionnables côté client.
GET /api/samples/stats Statistiques du tableau de bord scientifique : total, échantillons géoréférencés, éléments uniques, répartition par matériau.
GET /api/samples/family-distribution Distribution agrégée des mesures par famille de données.
GET /api/samples/integrity Informations de provenance et d'intégrité ISOF par échantillon.
POST /api/samples/check-existing Pré-vérification d'unicité des noms d'échantillons, avant l'envoi d'un import.
POST /api/samples/count Comptage des échantillons avant chargement, pour dimensionner la pagination côté frontend.
GET /api/spreadsheet/samples Endpoint dédié au tableur : retourne tous les champs des données isotopiques, dont collection_date, sample_type et standard_used.

Rendements de purification

GET /api/samples/{sample_id}/purification-yields Rendements de purification enregistrés pour un échantillon.
POST /api/samples/{sample_id}/purification-yields Enregistre ou remplace le rendement d'un élément pour un échantillon.

Corps : {"element": str, "yield_percent": float, "operator": str|null, "method_key": str|null}

Fonctionne par INSERT OR REPLACE : un seul rendement par couple (sample_id, element).

DELETE /api/samples/{sample_id}/purification-yields/{element} Supprime le rendement d'un élément pour un échantillon.
GET /api/v2/methods/yield-ranges Plages de rendement attendu pour un élément, lues dans le protocol_json des méthodes de type purification ou séparation.

Params : element (str).

Import et export d'échantillons

POST /api/import-csv Import CSV avec résolution sémantique des colonnes.

Corps : multipart/form-data : file, archive_mode (bool), standard_aliases, skip_existing.

Accepte les en-têtes en français ou en anglais, avec ou sans accents, en majuscules ou minuscules. La résolution est d'abord exacte puis approximative (distance d'édition maximum 2). L'encodage est détecté automatiquement (UTF-8, UTF-8 BOM, Latin-1).

POST /api/csv/preview-excel Pré-parsing d'un fichier Excel côté serveur, pour les modules frontend qui n'embarquent pas SheetJS.
GET /api/samples/export Exporte les échantillons visibles en CSV.
GET /api/v2/samples/{sample_id}/full Échantillon complet : isotopes, méthodes, publications, pipeline.
POST /api/v2/samples/export-batch Exporte plusieurs échantillons avec toutes leurs données associées.

Corps : [sample_id, ...]

Recherche de correspondances

POST /analyze Lance la recherche de correspondance géographique pour un échantillon de la base.

Corps :

ChampTypeDéfautDescription
sample_idintrequisIdentifiant de l'échantillon dans la base.
isotope_datalist[]Données isotopiques à utiliser. Si vide, celles de la base sont reprises.
thresholdfloat0.85Seuil de score de correspondance, entre 0 et 1. Distance de Mahalanobis.
algorithmstrhybridhybrid, mahalanobis ou bayesian.
classification_filterstrsourcessources, filles ou all.
database_sourceslist["local"]local, archive, community.
same_materialbooltrueRestreindre aux mêmes types de matériaux.
POST /analyze/manual Analyse à partir de données isotopiques saisies directement, sans échantillon en base. Crée un échantillon temporaire non persisté.

Corps : sample_name, material_type, isotope_data (requis), threshold (défaut 0.75), algorithm.

POST /analyze/map Analyse et génération de la carte des correspondances en une seule requête.
POST /analyze/archives Variante de /analyze qui ne cherche que dans les archives. Mêmes paramètres.
POST /analyze/manual/archives Variante de /analyze/manual restreinte aux archives visibles.
POST /api/matching/find/{sample_id} Recherche de correspondances pour un échantillon, version simplifiée.

Params : threshold (float).

POST /api/matching/batch Analyse plusieurs échantillons en une requête. Retourne un dictionnaire sample_id vers résultat, les erreurs étant isolées par échantillon.
POST /api/matching/manual Analyse manuelle depuis l'interface de correspondance, avec sélection d'éléments et de ratios.
POST /api/matching/advanced/{sample_id} Analyse avancée avec choix explicite d'algorithme.

Params : algorithm, threshold, sigma_multiplier.

GET /api/matching/compare/{sample_id} Compare les résultats de tous les algorithmes pour un même échantillon.
GET /api/matching/config Configuration actuelle du moteur de correspondance : seuils, algorithme par défaut.

Méthodes, pipelines et publications (v2)

GET /api/v2/methods Liste les méthodes de la bibliothèque.

Params : type, element.

GET /api/v2/methods/{method_id} Récupère une méthode par son identifiant.
POST /api/v2/methods Crée une méthode.
PUT /api/v2/methods/{method_id} Met à jour une méthode.
DELETE /api/v2/methods/{method_id} Supprime une méthode.
GET /api/v2/methods/{method_id}/samples Identifiants des échantillons auxquels cette méthode est assignée.
GET /api/v2/samples/{sample_id}/methods Méthodes appliquées à un échantillon.
POST /api/v2/samples/{sample_id}/methods Associe une méthode à un échantillon.
POST /api/v2/samples/methods-batch Méthodes assignées pour une liste d'échantillons.

Corps : {"sample_ids": [...]}

POST /api/v2/samples/assign-method-batch Assigne une méthode à plusieurs échantillons.

Corps : sample_ids, method_id, method_type, method_name, element, parameters_json.

DELETE /api/v2/sample-methods/{sm_id} Dissocie une méthode d'un échantillon.
GET /api/v2/publications Liste les publications.

Params : year, category.

GET /api/v2/publications/{pub_id} Récupère une publication par son identifiant.
GET /api/v2/publications/doi/{doi} Récupère une publication par son DOI. Le DOI est accepté tel quel, barres obliques comprises.
POST /api/v2/publications Crée une référence bibliographique.
PUT /api/v2/publications/{pub_id} Met à jour une publication.
DELETE /api/v2/publications/{pub_id} Supprime une publication.
GET /api/v2/samples/{sample_id}/publications Publications liées à un échantillon.
POST /api/v2/samples/{sample_id}/publications Lie une publication à un échantillon.
DELETE /api/v2/sample-publications/{sp_id} Supprime un lien échantillon vers publication.
GET /api/v2/pipelines Liste les pipelines d'analyse.

Params : element.

GET /api/v2/pipelines/{pipeline_id} Pipeline détaillé avec ses méthodes.
POST /api/v2/pipelines Crée un pipeline.
DELETE /api/v2/pipelines/{pipeline_id} Supprime un pipeline.
GET /api/v2/samples/{sample_id}/pipeline Pipeline actif d'un échantillon et sa progression.
POST /api/v2/samples/{sample_id}/pipeline Assigne un pipeline à un échantillon.
PUT /api/v2/sample-pipelines/{sp_id}/progress Met à jour la progression d'une étape de pipeline.

Params : current_stage, status.

Standards et normalisation isotopique

GET /api/standards Liste les standards isotopiques.

Params : element.

POST /api/standards/custom Crée un standard personnalisé.
PUT /api/standards/{standard_id} Met à jour un standard.
DELETE /api/standards/{standard_id} Supprime un standard.
POST /api/samples/{sample_id}/normalize Persiste les valeurs normalisées d'un échantillon dans la base.
POST /api/samples/{sample_id}/reset-normalization Annule la normalisation d'un échantillon.
POST /api/samples/auto-normalize Normalise automatiquement tous les échantillons pour lesquels un shift inter-standard est disponible. Opération globale, réservée aux administrateurs.
POST /api/samples/check-normalization Détermine quels échantillons peuvent être normalisés, sans rien appliquer.
POST /api/samples/reset-all-normalizations Réinitialise toutes les normalisations. Réservé aux administrateurs.
POST /api/samples/normalize-materials Normalise les types de matériaux existants. Opération de maintenance, réservée aux administrateurs.
POST /api/samples/normalize-classifications Normalise les classifications existantes. Réservé aux administrateurs.
POST /api/samples/normalize-all-data Normalise en une passe matériaux, classifications, ratios isotopiques et symboles d'éléments. Réservé aux administrateurs.

Éléments

GET /api/elements Liste tous les éléments isotopiques, prédéfinis et personnalisés.
GET /api/elements/custom Liste les éléments personnalisés uniquement.
POST /api/elements/custom Crée un élément isotopique personnalisé.
PUT /api/elements/custom/{element_id} Modifie un élément personnalisé.
DELETE /api/elements/custom/{element_id} Supprime un élément personnalisé.
GET /api/zones Zones géographiques de référence utilisées par la recherche de correspondances.
GET /api/stats Statistiques globales du tableau de bord : échantillons, éléments, zones, correspondances calculées.

CRM certifiés

GET /api/crm/list Liste tous les matériaux de référence certifiés.
GET /api/crm/{crm_id} Récupère un CRM avec ses concentrations et données isotopiques.
GET /api/crm/statistics Statistiques globales de la base CRM.
POST /api/crm/add Ajoute un CRM.
PUT /api/crm/{crm_id}/update Met à jour un CRM.
PUT /api/crm/{crm_id}/edit Édite un CRM : ajout ou modification de concentrations et d'isotopes en une requête.
DELETE /api/crm/{crm_id}/delete Supprime un CRM.
DELETE /api/crm/{crm_id} Supprime un CRM. Variante d'URL courte, comportement identique.
POST /api/crm/{crm_id}/concentration Ajoute ou met à jour la concentration d'un élément dans un CRM.
POST /api/crm/{crm_id}/isotope Ajoute ou met à jour un ratio isotopique dans un CRM.
DELETE /api/crm/{crm_id}/concentration/{element} Supprime la concentration d'un élément.
DELETE /api/crm/{crm_id}/isotope/{ratio} Supprime un ratio isotopique.
GET /api/crm/export/database Télécharge la base CRM complète.
GET /api/crm/export/json Exporte les CRM en JSON.
POST /api/crm/import/database Importe une base CRM avec fusion.

Params : strategy : stratégie de fusion en cas de doublon.

POST /api/crm/import/preview Prévisualise le contenu d'un import CRM sans l'appliquer.

CRM analysés et shifts inter-standards

GET /api/crm-analyzed/list Liste les CRM analysés avec leurs statistiques.
GET /api/crm-analyzed/{crm_analysis_id} Récupère un CRM analysé avec toutes ses valeurs mesurées.
POST /api/crm-analyzed/create Crée un CRM analysé avec ses valeurs.
PUT /api/crm-analyzed/{crm_analysis_id} Met à jour les informations d'un CRM analysé.
DELETE /api/crm-analyzed/{crm_analysis_id} Supprime un CRM analysé. Cascade sur les valeurs, associations et shifts.
POST /api/crm-analyzed/{crm_analysis_id}/add-value Ajoute une valeur mesurée à un CRM analysé.
DELETE /api/crm-analyzed/value/{value_id} Supprime une valeur mesurée.
GET /api/crm-analyzed/robustness-score Score de robustesse global de la campagne d'étalonnage.
GET /api/crm-analyzed/robustness-by-element Score de robustesse détaillé par élément.
POST /api/crm-analyzed/recalculate-scores Recalcule les scores de tous les CRM analysés existants.
POST /api/crm-analyzed/associate-samples Associe des échantillons à un CRM analysé.
POST /api/crm-analyzed/auto-associate Associe automatiquement les échantillons par plage de dates d'analyse.
DELETE /api/crm-analyzed/disassociate/{sample_id}/{crm_id} Supprime une association échantillon vers CRM.
GET /api/crm-analyzed/sample/{sample_id}/crms CRM associés à un échantillon.
POST /api/crm-analyzed/{crm_analysis_id}/calculate-shifts Calcule les shifts isotopiques entre standards pour un même CRM, en comparant les analyses réalisées avec des standards différents.
POST /api/crm-analyzed/calculate-all-shifts Calcule tous les shifts inter-standards, en regroupant par nom de CRM et en traitant chaque paire de standards.
GET /api/crm-analyzed/shifts/active Liste les shifts actifs dérivés des CRM analysés.
POST /api/crm-analyzed/shift/{shift_id}/toggle-active Active ou désactive un shift.
POST /api/crm-analyzed/import-csv Importe des CRM analysés depuis un CSV.

Format : crm_id, crm_name, session_name, analysis_date, instrument, standard_used, element, isotope_ratio, measured_value, uncertainty

GET /api/crm-analyzed/export-csv Exporte tous les CRM analysés en CSV.
POST /api/shifts/calculate/{crm_id} Calcule les shifts inter-standards en analysant toutes les mesures d'un CRM.

Params : element (requis), isotope_ratio (requis).

POST /api/shifts/calculate-all Calcule les shifts pour tous les CRM mesurés contre plusieurs standards.
GET /api/shifts/get Récupère un shift entre deux standards.

Params : element, isotope_ratio, standard_from, standard_to.

GET /api/shifts/list Liste tous les shifts calculés, avec filtres optionnels.
POST /api/shifts/convert Convertit une valeur isotopique d'un standard à un autre en appliquant le shift approprié.

Params : value, element, isotope_ratio, standard_from, standard_to.

GET /api/shifts/statistics Statistiques sur les shifts calculés.
GET /api/shifts/history Historique des calculs de shifts.

Params : limit (int).

Intégration GeoReM

Les routes GeoReM effectuent des requêtes sortantes vers un service en ligne. Elles sont indisponibles en mode air-gap.
GET /api/crm/georem/search Recherche un matériau de référence dans GeoReM.

Params : q : nom du matériau.

GET /api/crm/georem/preview/{georem_id} Prévisualise les données qui seront importées depuis GeoReM.
POST /api/crm/georem/import/{georem_id} Importe un CRM depuis GeoReM.
POST /api/crm/georem/import/{georem_id}/full Importe un CRM depuis GeoReM avec l'ensemble des données extraites.

Params : user_notes.

GET /api/georem/search Recherche GeoReM, variante d'URL courte.
GET /api/georem/preview Prévisualise les données GeoReM disponibles pour un matériau, sans import.

Params : material_name.

GET /api/georem/search-isotopes Recherche les données isotopiques d'un matériau sur GeoReM.

Exemple : /api/georem/search-isotopes?material_name=GXR-4

POST /api/georem/import-complete Import complet depuis GeoReM : concentrations et isotopes.
POST /api/georem/import/{sample_name} Import complet par nom de matériau. Convertit automatiquement epsilon en delta et identifie les ratios isotopiques.
GET /api/georem/test/{sample_name} Route de diagnostic : retourne le HTML brut renvoyé par GeoReM.

Géochimie inorganique

GET /api/samples/{sample_id}/geochem Toutes les concentrations d'un échantillon, triées par élément.
GET /api/samples/{sample_id}/geochem/{geochem_id} Une entrée géochimique précise.
POST /api/samples/{sample_id}/geochem Ajoute une concentration.
POST /api/samples/{sample_id}/geochem/batch Insère un lot de concentrations en une transaction.

remplacer=true supprime d'abord les éléments concernés, ce qui permet de rejouer proprement un import CSV.

PATCH /api/samples/{sample_id}/geochem/{geochem_id} Mise à jour partielle d'une entrée.
DELETE /api/samples/{sample_id}/geochem/{geochem_id} Supprime une entrée géochimique. Réservé au propriétaire ou à un administrateur.
DELETE /api/samples/{sample_id}/geochem Supprime toutes les concentrations d'un échantillon. Action destructive en masse, tracée en audit.

Physico-chimie

GET /api/samples/{sample_id}/physicochemistry Toutes les mesures physico-chimiques d'un échantillon.
GET /api/samples/{sample_id}/physicochemistry/nexus-conditions Conditions physico-chimiques formatées pour la carte Conditions du Nexus (objet GeochemicalConditions).
POST /api/samples/{sample_id}/physicochemistry Ajoute ou remplace une mesure. La contrainte UNIQUE(sample_id, parameter) garantit une valeur unique par paramètre.
POST /api/samples/{sample_id}/physicochemistry/batch Upsert d'un lot de mesures en une transaction.
PATCH /api/samples/{sample_id}/physicochemistry/{parameter} Mise à jour partielle par nom de paramètre.
DELETE /api/samples/{sample_id}/physicochemistry/{parameter} Supprime un paramètre physico-chimique.
DELETE /api/samples/{sample_id}/physicochemistry Supprime toutes les mesures physico-chimiques d'un échantillon.

Molécules : catalogue utilisateur

GET /api/molecules/catalogue Liste paginée des molécules du catalogue utilisateur.

Params : famille (filtre exact, par exemple PFAS), actif, page, page_size, include_geochemical, q (recherche libre).

GET /api/molecules/catalogue/familles Familles présentes dans le catalogue utilisateur.
GET /api/molecules/catalogue/{molecule_id} Détail d'une molécule du catalogue.
POST /api/molecules/catalogue Crée une molécule dans le catalogue utilisateur.
PATCH /api/molecules/catalogue/{molecule_id} Mise à jour partielle d'une molécule.
DELETE /api/molecules/catalogue/{molecule_id} Supprime une molécule.

Params : archiver (bool) : archive au lieu de supprimer.

POST /api/molecules/catalogue/seed/{famille} Insère les molécules prédéfinies d'une famille. Les doublons CAS sont ignorés.
GET /api/molecules/catalogue/seed/familles Familles disponibles dans le seed, avec le niveau de licence requis.

Molécules : mesures et conformité

GET /api/molecules/mesures-all Toutes les mesures de tous les échantillons en une requête.

Params : page, page_size, include_geochemical, famille, sample_ids.

GET /api/molecules/{sample_id}/mesures Mesures moléculaires d'un échantillon.
GET /api/molecules/{sample_id}/mesures/{mesure_id} Une mesure précise.
POST /api/molecules/{sample_id}/mesures Ajoute une mesure.
POST /api/molecules/{sample_id}/mesures/batch Ajoute un lot de mesures en une transaction.
PATCH /api/molecules/{sample_id}/mesures/{mesure_id} Mise à jour partielle d'une mesure.
DELETE /api/molecules/{sample_id}/mesures/{mesure_id} Supprime une mesure.
DELETE /api/molecules/{sample_id}/mesures Supprime toutes les mesures d'un échantillon.
POST /api/molecules/recalculer-conformite Recalcule conforme, seuil_ref et seuil_ref_unit pour toutes les mesures dont la molécule cataloguée a vu son seuil modifié.
POST /api/molecules/recalculer-conformite/{molecule_id} Recalcule la conformité pour une seule molécule. À appeler après un PATCH sur le catalogue.
GET /api/molecules/{sample_id}/conformite Résumé de conformité d'un échantillon, par famille et par molécule : dépassements, conformes, non testés.
GET /api/molecules/stats/global Statistiques moléculaires globales.
GET /api/molecules/stats/par-sample/{sample_id} Statistiques moléculaires d'un échantillon.

Molécules : base de référence

GET /api/molecules/reference/catalogue Molécules de la base de référence.

Params : famille (PFAS, Pesticides, HAP...), niveau_acces (gratuit, pro, defense), q, limit.

GET /api/molecules/reference/familles Familles de la base de référence, avec comptage et niveaux d'accès.
GET /api/molecules/reference/{ref_id} Une molécule de la base de référence.
GET /api/molecules/reference/{ref_id}/isotopes Liens isotopiques d'une molécule de référence.
POST /api/molecules/reference/{ref_id}/importer Copie une molécule de référence vers le catalogue utilisateur. Le doublon CAS est ignoré.
POST /api/molecules/reference/importer-batch Importe plusieurs molécules de référence. Retourne le détail de chaque import : nouveau, déjà existant, ou erreur.

Liens isotopie et polluants

GET /api/molecules/{sample_id}/isotopic-links Croise les familles de molécules détectées avec les éléments isotopiques pertinents pour l'attribution d'origine. Nécessite des données dans isotope_data.
GET /api/molecules/ref-isotopes Liens molécule vers isotope de la table de référence.

Params : famille, element.

POST /api/molecules/ref-isotopes/seed Insère les liens molécule vers isotope de référence. Les doublons CAS plus ratio sont ignorés.
GET /api/molecules/ref-isotopes/v2 Liens isotopiques enrichis : gammes de valeurs, score de discrimination, faisabilité.

Params : famille, element, faisabilite, min_discrimination. Repli sur les données statiques si la table est vide.

POST /api/molecules/ref-isotopes/seed-v2 Insère les entrées enrichies de ref_molecules_isotopes_v2.
GET /api/molecules/ref-isotopes/sample/{sample_id} Croise les familles détectées dans un échantillon avec la table de référence pour identifier les liens exploitables.
GET /api/molecules/ref-isotopes/suggest/{sample_id} Recommandations d'analyses complémentaires priorisées, déduites des molécules et signatures isotopiques présentes.

CSIA : isotopie spécifique aux composés

GET /api/molecules/csia/list Molécules disposant de données CSIA exploitables par le Nexus.
GET /api/molecules/csia/{molecule_name}/pathways Voies de dégradation documentées pour une molécule.
POST /api/molecules/csia/resolve Résolution complète molécule et voie : epsilon, mode, métabolites, références, et tous les fractionnements multi-éléments de la même voie.
POST /api/molecules/csia/dual Résolution dual-isotope pour une paire d'éléments (C/Cl, C/N...). Retourne les deux epsilons et la pente Lambda, diagnostique du mécanisme.

Fractionnements isotopiques

GET /api/fractionation/summary Résumé agrégé par type de processus. Utilisé par la Process Library.
GET /api/fractionation/list Liste paginée avec filtres.

Params : page, per_page, element, process_type, material, search, sort_by, sort_order.

GET /api/fractionation/elements Éléments disponibles dans la base de fractionnements.
GET /api/fractionation/process-types Types de processus disponibles.
GET /api/fractionation/materials Matériaux disponibles, optionnellement filtrés par type de processus.
GET /api/fractionation/stats/overview Statistiques générales de la base de fractionnements.
GET /api/fractionation/{entry_id} Une entrée de fractionnement.
POST /api/fractionation/ Crée une entrée de fractionnement.
POST /api/fractionation/experimental Crée des entrées à partir de données expérimentales : plusieurs points de mesure, les valeurs de fractionnement étant calculées automatiquement.
PUT /api/fractionation/{entry_id} Met à jour une entrée.
DELETE /api/fractionation/{entry_id} Supprime une entrée.
GET /api/fractionation/export/json Exporte les données en JSON.

Params : element, process_type.

GET /api/fractionation/export/csv Exporte les données en CSV.
POST /api/fractionation/import/json Importe des données depuis un fichier JSON.

Fractionnement cinétique

GET /api/kinetic-fractionation/health Vérification de santé du module.
POST /api/kinetic-fractionation/compute Calcule le fractionnement cinétique. Les données cinétiques (equilibrium_reached = 0) sont recherchées en priorité, avec repli sur les données non spécifiées.
GET /api/kinetic-fractionation/search Recherche un epsilon cinétique dans la base.

Params : element, process_type, mineral.

GET /api/kinetic-fractionation/database/kinetic Liste toutes les entrées cinétiques.
GET /api/kinetic-fractionation/database/all Liste toutes les entrées avec leur type : équilibre, cinétique ou non spécifié.

Nexus : santé, sessions et workflows

GET /api/nexus/health État du moteur Nexus.
GET /api/nexus/statistics Statistiques de la base de données Nexus.
POST /api/nexus/sessions/save Sauvegarde une session Nexus complète : workflow, résultats de calcul et correspondances, en vue d'un rapport.
GET /api/nexus/sessions/list Liste les cinquante sessions les plus récentes, enrichies de la molécule et du delta total.
GET /api/nexus/sessions/{session_id} Charge une session Nexus complète.
DELETE /api/nexus/sessions/{session_id} Supprime une session Nexus.
GET /api/nexus/workflows/list Liste les workflows sauvegardés.
GET /api/nexus/workflows/{workflow_id} Charge un workflow.
POST /api/nexus/workflows/save Sauvegarde un workflow.
DELETE /api/nexus/workflows/{workflow_id} Supprime un workflow.
GET /api/nexus/workflows/autosave Récupère le dernier autosave, stocké dans le slot réservé __autosave__.
POST /api/nexus/workflows/autosave Upsert du slot autosave.
POST /api/nexus/execute Route principale du frontend : transforme la représentation nœuds et connexions en analyse de workflow.
POST /api/nexus/validate Valide un workflow avant exécution.
POST /api/nexus/analyze_workflow Analyse complète d'un workflow : ML couches 1 et 2, base de données, scoring composite.
GET /api/nexus/templates/list Templates de workflow prédéfinis.
GET /api/nexus/templates/{template_id} Charge un template prédéfini.

Nexus : calcul isotopique et pipeline hybride

POST /api/nexus/calculate_isotopic_chain Calcul isotopique complet avec contextualisation. Modes forward et inverse.
POST /api/fourier/calculate Calcul des fractionnements via ML et transformée de Fourier. Endpoint historique, conservé pour compatibilité.
POST /api/ml/analyze Analyse chimique par ML. Endpoint historique : préférer /api/nexus/predict_speciation.
GET /api/nexus/hybrid/status Disponibilité du pipeline hybride.
POST /api/nexus/hybrid/forward Pipeline forward hybride, en séparation d'opérateurs : signature source, composante linéaire FFT, puis Rayleigh.
POST /api/nexus/hybrid/inverse Pipeline inverse hybride. Nécessite delta_source pour l'estimation de la fraction résiduelle.
POST /api/nexus/hybrid/analyze Analyse hybride complète : les processus et paramètres sont extraits automatiquement du workflow.
GET /api/nexus/process-diagnostics/{workflow_id} Diagnostics détaillés des processus d'un workflow, notamment pour chaque étape Rayleigh.
POST /api/nexus/identify-processes Identifie les processus géochimiques entre deux signatures connectées.
POST /api/nexus/identify-processes-multi Identification multi-processus par chaîne itérative, via la contextualisation automatique.
POST /api/nexus/auto-contextualise Contextualisation automatique itérative depuis une signature initiale et un contexte géochimique.

Nexus : spéciation et apprentissage

GET /api/nexus/ml_status État des modèles ML embarqués.
POST /api/nexus/predict_speciation Prédit la spéciation (ML couche 1). Tous les éléments supportés.
POST /api/nexus/predict_adsorption Prédit la favorabilité d'adsorption (ML couche 2).
POST /api/nexus/predict_workflow Prédiction ML appliquée à un workflow complet.
POST /api/nexus/analyze-speciation Spéciation détaillée d'un échantillon : espèces, concentrations et pourcentages.
POST /api/nexus/compare-speciation Compare la spéciation source et la spéciation produit : changements d'états d'oxydation, concentrations, espèces.
POST /api/nexus/analyze-csv-speciation Analyse la spéciation depuis un CSV téléversé.

Params : file, element.

POST /api/nexus/query_database Interroge la base de fractionnements.

Nexus : détection rapide et provenance

GET /api/nexus/samples/search Recherche d'échantillons pour la carte Échantillon BDD.

Params : q, element, material_type, limit.

POST /api/nexus/db-match Correspondances dans la base pour la carte Correspondance BDD.
POST /api/nexus/scoring-composite Scoring composite : correspondance de la signature avec la base et détection de mélange.
POST /api/nexus/search-origin Recherche l'origine géographique d'un échantillon à partir de sa signature isotopique.
GET /api/nexus/quick-match/templates Templates de transformation disponibles. Filtrés selon le niveau de licence.
GET /api/nexus/quick-match/csia-templates/{molecule_name} Voies CSIA d'une molécule exposées comme templates Quick Match, chaque voie générant une étape pré-remplie.

Params : element.

POST /api/nexus/quick-match Correspondance rapide avec application de fractionnements, en deux étapes.
POST /api/nexus/quick-match-archives Même chose, mais dans les tables d'archives.
POST /api/nexus/traceability Recherche de provenance par inversion du procédé industriel, via la base de fractionnements.
POST /api/nexus/traceability-archives Même logique d'inversion, appliquée aux archives.
POST /api/nexus/unmix Démixage isotopique multi-sources, par résolution d'un problème contraint.
POST /api/nexus/authenticity-check Score d'authenticité composite, entre 0 et 1, par comparaison à la bibliothèque de référence.
POST /api/nexus/authenticity-check-archives Variante interrogeant archive_samples et archive_isotope_data.
GET /api/nexus/sample-series Mesures isotopiques datées d'un échantillon, pour le suivi temporel.

Params : sample_id, element, isotope_ratio.

POST /api/nexus/monitor-series Analyse d'une série temporelle isotopique : tendance, ruptures, dérive.

Nexus moléculaire

POST /api/nexus/molecular/degradation-chain Propage une signature isotopique le long d'une chaîne de dégradation multi-étapes (Rayleigh cinétique CSIA). Chaque étape porte son isotope, son epsilon et sa fraction résiduelle.
POST /api/nexus/molecular/molecular-traceability Reconstruction inverse de la signature source d'un contaminant organique, par Rayleigh inverse : delta_0 = delta_residu - epsilon * ln(f). L'incertitude est propagée à chaque remontée.
POST /api/nexus/molecular/degradation-extent Estime le degré de dégradation par inversion CSIA : f = exp((delta_ech - delta_source) / epsilon), la dégradation valant (1 - f) * 100.
GET /api/nexus/molecular/epsilon-database Epsilons CSIA disponibles. Sans paramètre, toute la base.

Params : process_type.

GET /api/nexus/molecular/sample-geochem/{sample_id} Concentrations de sample_geochem pour un échantillon.

Prédiction et simulation

POST /api/predict/prior Prior géochimique couplé : mélange de deux pôles, distillation de Rayleigh avec epsilon issu de la base de fractionnements ou de la littérature.
POST /api/predict/train Entraîne le perceptron multicouche résiduel (résidu = observé - prior) pour un élément.
POST /api/predict/infer Prior corrigé par le modèle résiduel.
GET /api/predict/model-status État des modèles résiduels entraînés.
POST /api/predict/temporal Extrapolation temporelle isotopique.
POST /api/predict/temporal/train-lstm Entraîne le LSTM temporel sur les campagnes disponibles.
GET /api/predict/lithology-templates Catalogue des templates lithologiques, chacun fournissant les plages [min, max, typique] des paramètres hydrogéochimiques et les références bibliographiques.
GET /api/predict/nexus-processes Processus Nexus disponibles pour un élément, avec le nombre d'entrées en base.

Params : element.

POST /api/predict/simulate Simule l'évolution d'un panache géochimique depuis un point source.
GET /api/predict/simulate/molecules Molécules disposant de propriétés de transport.
GET /api/predict/csia/molecules Molécules disposant de données CSIA exploitables pour la simulation isotopique.
GET /api/predict/csia/pathways Voies de dégradation documentées pour une molécule.

Params : molecule.

GET /api/predict/csia/dual Résolution dual CSIA : couple d'isotopes (C/Cl, C/N, C/H) et pente Lambda diagnostique du mécanisme.

Params : molecule, pathway, primary, secondary.

GET /api/predict/info Modèles disponibles et leurs paramètres.

Reconstruction de signature (IsoSupply)

POST /api/reconstruction/forward Propage une signature initiale à travers la chaîne industrielle. Mode simulation : si l'on part de X, le métal sortant vaut Y.
POST /api/reconstruction/inverse Reconstruit la signature d'origine depuis la signature finale.

Params : method : analytical (défaut, instantané et défendable scientifiquement) ou méthodes stochastiques.

POST /api/reconstruction/match Compare une signature observée aux gisements de la base. Comportement adaptatif selon la compatibilité à 95 % d'intervalle de confiance.
POST /api/reconstruction/full Pipeline complet, inversion puis matching. Endpoint principal d'IsoSupply.
GET /api/reconstruction/methods Méthodes d'inversion supportées.
GET /api/reconstruction/catalog/{element} Procédés industriels documentés pour un élément.
GET /api/reconstruction/deposits/search Recherche de gisements par nom partiel.

Params : element (requis), q (fragment de nom, insensible à la casse).

GET /api/reconstruction/deposit/{deposit_id} Détail complet d'un gisement : métadonnées, publications, nombre d'échantillons.
GET /api/reconstruction/deposit/{deposit_id}/measurements Mesures individuelles d'un gisement pour un élément, afin de superposer les points historiques aux ellipses de confiance.
GET /api/reconstruction/samples Échantillons d'isofind.db disposant de mesures pour l'élément demandé.

Params : element, limit.

GET /api/reconstruction/sample/{sample_id} Détail d'un échantillon avec ses ratios mesurés : notation, valeur, incertitude, standard, profondeur.
POST /api/reconstruction/samples/aggregate Agrège plusieurs échantillons en une signature moyenne pondérée par les inverses de variances.
POST /api/reconstruction/check-chain-consistency Vérifie la cohérence entre une matrice mesurée et une chaîne déclarée. Les avertissements sont informatifs, le calcul reste autorisé.
GET /api/reconstruction/nexus-chains Chaînes Nexus sauvegardées pour un élément.

Params : element, limit.

GET /api/reconstruction/nexus-chain/{chain_id}/preview Détail d'une chaîne Nexus avec résolution des process_id du catalogue.
POST /api/reconstruction/dag/preview Validation légère du graphe sans inversion : cycles, nœuds isolés, ancrage des cibles, reconstructibilité de chaque maillon inconnu.
POST /api/reconstruction/dag Reconstruction complète d'un graphe d'approvisionnement. Les nœuds de convergence sont traités selon l'état du maillon aval.
POST /api/reconstruction/audit-score Score d'auditabilité de la reconstruction.
POST /api/reconstruction/session/save Sauvegarde une session de reconstruction dans workflows.db.
POST /api/reconstruction/session/{session_id}/rename Renomme une session et met à jour updated_at.
GET /api/reconstruction/sessions Sessions sauvegardées, triées par date décroissante.

Params : element, limit.

GET /api/reconstruction/session/{session_id} Recharge une session complète : entrée, résultat, audit.
DELETE /api/reconstruction/session/{session_id} Supprime une session. Idempotent, sans corbeille.

Rapports

GET /api/reports/templates Liste les templates de rapport.
POST /api/reports/templates Crée un template.
GET /api/reports/templates/{template_id} Récupère un template.
PUT /api/reports/templates/{template_id} Met à jour un template.
DELETE /api/reports/templates/{template_id} Supprime un template.
POST /api/reports/generate Génère un rapport PDF et le persiste. La liste sample_ids est filtrée sur les échantillons visibles.
POST /api/reports/preview Génère un PDF d'aperçu, sans persistance.
GET /api/reports/licence-status État d'autorisation par tag de licence pour chaque bloc de rapport. Le frontend grise les blocs non autorisés.
GET /api/reports/list Liste les rapports générés.

Params : label_id, project.

GET /api/reports/{report_id} Métadonnées d'un rapport.
DELETE /api/reports/{report_id} Supprime un rapport et son fichier PDF.
GET /api/reports/download/{report_id} Sert le PDF généré en téléchargement direct.
POST /api/reports/bulk-delete Suppression groupée de rapports.
POST /api/reports/export-zip Crée et renvoie une archive ZIP des rapports sélectionnés.
GET /api/reports/nexus-sessions Sessions Nexus disponibles pour le formulaire de rapport.
GET /api/reports/signature-reconstruction-sessions Sessions de reconstruction de signature disponibles pour le formulaire de rapport.
GET /api/reports/labels Liste les étiquettes.
POST /api/reports/labels Crée une étiquette.
PATCH /api/reports/labels/{label_id} Met à jour une étiquette.
DELETE /api/reports/labels/{label_id} Supprime une étiquette.
POST /api/reports/labels/assign Assigne des étiquettes à des rapports.
POST /api/reports/labels/unassign Retire des étiquettes.
GET /api/reports/branding Branding configuré.
PUT /api/reports/branding Met à jour le branding : nom et chemin du logo. Licence Pro requise.
DELETE /api/reports/branding Supprime le branding personnalisé et rétablit l'identité IsoFind.
GET /api/reports/custom-blocks Liste les blocs personnalisés actifs.
GET /api/reports/custom-blocks/{block_id} Détail d'un bloc personnalisé.
POST /api/reports/custom-blocks Crée un bloc personnalisé.
PUT /api/reports/custom-blocks/{block_id} Met à jour un bloc personnalisé.
DELETE /api/reports/custom-blocks/{block_id} Supprime un bloc personnalisé.
GET /api/reports/matrix-groups Groupes de matrices comparables.
PUT /api/reports/matrix-groups Enregistre les groupes de matrices.
GET /api/reports/matrix-groups/check Vérifie la pertinence d'une comparaison entre deux matrices.

Params : matrix_a, matrix_b.

Format ISOF

POST /api/isof/export-payload Construit le document ISOF et le retourne en JSON brut, sans déclencher de téléchargement.
POST /api/isof/export Génère et renvoie un fichier .isof. Seuls les échantillons visibles sont exportés.
POST /api/isof/import Importe méthodes, pipelines, rendements et assignations depuis un .isof. Les échantillons du fichier sont traités en lecture seule : aucune insertion dans samples.
POST /api/isof/verify Vérifie la signature d'un fichier ISOF sans l'importer.
POST /api/isof/sign Signe un fichier .isof au niveau 2 (ECDSA et PKI IsoFind).

Corps : multipart : file, lab_key_pem, lab_cert_pem, use_stored_cert, scope, signed_by.

POST /api/isof/inspect-cert Lit un certificat PEM ou DER et retourne ses attributs X.509, ainsi que sa position dans la chaîne PKI IsoFind.
GET /api/isof/load-cert Indique si un certificat laboratoire est mémorisé localement et retourne ses attributs. Retourne found=false sans erreur si aucun certificat n'est stocké.
POST /api/isof/store-cert Chiffre et stocke localement la clé privée et le certificat laboratoire.

Si use_stored_key=true, la clé est lue depuis le magasin existant : cas du retour de CSR, où la clé a déjà été générée.

POST /api/isof/generate-csr Génère une paire ECDSA P-256 localement, construit un CSR signé, sauvegarde la clé privée dans le magasin chiffré Fernet, et retourne le CSR en PEM.
DELETE /api/isof/store-cert Supprime la clé, le certificat et la clé Fernet du magasin local.

Base communautaire

GET /api/community/search Recherche dans la base communautaire en ligne.

Params : query, location. Requiert un accès réseau, bloqué en mode air-gap.

POST /api/community/contribute Contribue un échantillon à la base communautaire. Disponible dès le plan Research.
GET /api/community/stats Statistiques de la base communautaire.
POST /api/community/submit Reçoit un ISOF signé, le contrôle, puis le place en file de modération.
GET /api/community/imports Liste les packs communautaires importés.
POST /api/community/imports/{prov_id}/{action} Archive, désarchive ou supprime un pack importé.

Chemin : action vaut archive, unarchive ou delete.

Archives

GET /api/archives/samples Liste paginée des échantillons archivés.

Params : page (défaut 1), page_size (défaut 50), search, element, classification, sector, project.

GET /api/archives/samples/{sample_id} Détails complets d'un échantillon archivé.
GET /api/archives/filters Valeurs uniques disponibles pour les filtres de la liste d'archives.
GET /api/archives/stats Statistiques des archives visibles.
GET /api/archive/stats Statistiques d'archives destinées au tableau de bord. Alias historique.
POST /api/archives/restore/{sample_id} Restaure un échantillon archivé dans la base active.
DELETE /api/archives/delete/{sample_id} Supprime définitivement un échantillon archivé.
GET /api/archives/export Exporte les archives visibles en CSV.
POST /api/samples/{sample_id}/archive Archive un échantillon.
POST /api/projects/{project_name}/archive Archive tous les échantillons d'un projet en une opération.

Projets

POST /api/project/new Crée un projet.
GET /api/project/current Retourne le projet actif.
PUT /api/project/update Met à jour le projet actif.
DELETE /api/project/close Ferme le projet actif.
GET /api/project/list Liste tous les projets du registre, triés par date de modification décroissante.
POST /api/project/activate/{id_projet} Bascule vers un projet du registre. Le projet est reconstruit depuis les métadonnées, sans exiger de fichier .isf.
DELETE /api/project/registry/{id_projet} Supprime un projet du registre.

Params : supprimer_donnees (bool) : supprime également les échantillons associés. Irréversible.

GET /api/project/samples Identifiants et métadonnées légères des échantillons associés au projet actif.
POST /api/project/samples/add Associe manuellement des échantillons au projet par leurs identifiants.
POST /api/project/samples/sync Synchronise les échantillons du projet par correspondance de nom.
DELETE /api/project/samples/{sample_id} Retire un échantillon du projet, sans le supprimer de la base.
POST /api/project/samples/clear Réinitialise la liste des échantillons associés.
GET /api/project/score Score du projet actif.

Params : project_only (bool) : restreint le calcul aux échantillons associés au projet.

GET /api/project/score/snapshot Crée un instantané du score pour l'historique.
GET /api/project/score/history Historique des scores.
GET /api/project/intention Détecte l'objectif implicite du projet à partir de l'usage observé.
GET /api/project/objectives Objectifs disponibles avec leurs descriptions.
GET /api/project/constraints Contraintes disponibles.
POST /api/project/export Exporte le projet actif au format .isf.
GET /api/project/export/download/{filename} Télécharge un fichier .isf exporté.
POST /api/project/import Importe un projet depuis un fichier .isf.
GET /api/project/training-data/check Détecte la présence de données d'entraînement dans la base. Réservé aux administrateurs.
DELETE /api/project/training-data/purge Supprime tous les échantillons et analyses portant le marqueur d'entraînement. Action destructive globale, réservée aux administrateurs.

Cartographie

GET /api/tiles/{z}/{x}/{y}.png Sert une tuile PNG depuis le MBTiles local. Schéma TMS : y_tms = (2^z - 1) - y_xyz.
GET /api/tiles/metadata Métadonnées du MBTiles actif. Permet au frontend d'ajuster dynamiquement le maxZoom Leaflet au pack installé.
GET /api/map/samples-extended Données géochimiques, moléculaires et physico-chimiques de tous les échantillons géoréférencés. Sans pagination : conçu pour un unique appel au chargement de la page cartographie.
GET /api/map/section-data Mesures avec profondeur, pour la coupe verticale.

Params : sample_ids (liste séparée par des virgules), mode (isotope, geochem, physico, molecule), element, ratio, parameter (défaut pH).

GET /api/mapping/view/{sample_id} Génère et affiche une carte interactive des correspondances.
GET /api/mapping/export/{sample_id} Exporte la carte des correspondances en HTML autonome.

Params : threshold, filename.

GET /api/mapping/batch-export Génère les cartes de plusieurs échantillons.

Workflows génériques

POST /api/workflows/save Sauvegarde un workflow générique.
GET /api/workflows/list Liste les workflows génériques.

Licence

GET /api/licence/status État de la licence courante. Une variante /api/license/status existe pour les clients anglophones.
GET /api/licence/features Fonctionnalités autorisées par la licence.
GET /api/licence/scopes Périmètres d'usage autorisés.
GET /api/licence/dev-mode/status Indique si le mode développement est actif.

Pages de l'interface

GET / Tableau de bord.
GET /echantillons Gestion des échantillons.
GET /analyse Recherche de correspondances.
GET /database Gestion de la base de données.
GET /standardization Standardisation et normalisation.
GET /visualisation Cartographie et visualisation 2D.
GET /visualisation_3d Visualisation 3D et simulation.
GET /tableur Tableur intégré.
GET /advanced Fonctionnalités avancées.
GET /advanced_analysis Interface avancée d'analyse isotopique avec Fourier. Servie chiffrée en mémoire via ProtectedTemplates.
GET /algocalculs Algorithmes et calculs.
GET /correspondances_nexus Correspondances Nexus.
GET /process_library Bibliothèque de processus.
GET /process_database Base de données de processus.
GET /lab_data_advanced Données de laboratoire avancées.
GET /rapports Module de rapports.
GET /signature_reconstruction Reconstruction de signature.
GET /chain_map Graphe de chaîne d'approvisionnement.
GET /supplier_audit Audit fournisseur.
GET /prospection Module Prospection Energy and Mining. Licence Pro requise.
GET /prospection_site Site de prospection.
GET /forages Gestion des forages.
GET /credits-isof Crédits et mentions ISOF.
GET /login Page de connexion.
GET /lock Page de session verrouillée, affichée après un verrouillage manuel.