Points de terminaison de l'API analyse de sang

Dernière mise à jour:

Référence complète de tous les points de terminaison de l'API Kantesti avec des exemples de code dans plusieurs langages de programmation.

Nouveau le 23 septembre 2026 : l'API Santé ADN

Nous sommes fiers d'annoncer trois modules ADN pour l'API Kantesti. L'Interprétation de Test ADN transforme des données ADN brutes ou un rapport génétique en un rapport de santé génétique complet, le Rapport de Santé ADN + Sang le combine avec une analyse de sang, et le Conseiller en Compléments rédige un plan de compléments alimentaires personnalisé avec les propres produits de votre clinique. Consulter la référence de l'API Santé ADN.

URL de base
https://app.aibloodtestinterpret.com

Changelog

Suivez les versions de l'API, les mises à jour et les informations de migration. Utilisez les points de terminaison recommandés pour les nouvelles intégrations.

Dernières mises à jour (2026)

Les trois mises à jour de 2026 ont été appliquées à chacune des versions de l'API listées ci-dessous. Les numéros de version et les chemins des points de terminaison n'ont pas changé, aucune migration n'est donc nécessaire.

  • 8 septembre 2026 Mise à jour du modèle d'IA et améliorations sur l'ensemble de la plateforme
  • 21 juillet 2026 Améliorations complètes et corrections de bugs
  • 8 mai 2026 Améliorations complètes et corrections de bugs

Points de terminaison stables actuels

Ces points de terminaison sont recommandés pour la production et les nouvelles intégrations.

APIPoint de terminaisonStatut
Analyse sanguine v12 /api/v12/18-09-2026/analyze Recommandé Nouveau 18.09.2026
Analyse sanguine (Score de santé) v12 /api/v12/health-score/analyze Recommandé Nouveau 18.09.2026
Body Map v1 /api/v1/body-map/analyze Publié 18.09.2026 Nouveau
Âge Biologique du Sang v1 /api/v1/blood-age/analyze Publié 18.09.2026 Nouveau
Interprétation de Test ADN v1 /api/v1/dna-interpretation/analyze Publié 23.09.2026 Nouveau
Rapport de Santé ADN + Sang v1 /api/v1/dna-blood-report/analyze Publié 23.09.2026 Nouveau
Conseiller en Compléments ADN v1 /api/v1/dna-supplements/analyze Publié 23.09.2026 Nouveau
Analyse sanguine v11 /api/v11/01-06-2025/analyze Stable Mis à jour le 08.09.2026
Analyse sanguine (Score de santé) v11 /api/v11/health-score/analyze Stable Mis à jour le 08.09.2026
IA Nutrition v1 /api/v1/nutrition/diet-plan/analyze Stable Mis à jour le 08.09.2026
Comparaison IA de tests sanguins v1 /api/v1/bloodtest/comparison/analyze Stable Mis à jour le 08.09.2026
Évaluation des Risques de Santé Familiale v1 /api/v1/family-health/analyze Publié 23.03.2026 Mis à jour le 08.09.2026
ICR - Reconnaissance Intelligente de Caractères v1 /api/icr/v1/extract Publié 14.02.2026 Mis à jour le 08.09.2026
ICR Kan - Extraction de Tests Sanguins v1 /api/icr/v1/kan Publié 14.02.2026 Mis à jour le 08.09.2026
Analyse des tendances v1 /api/v1/analytics/trends/analyze Stable Mis à jour le 08.09.2026

Historique des versions

DateVersionModifications
23 septembre 2026 Interprétation de Test ADN v1, Rapport de Santé ADN + Sang v1, Conseiller en Compléments ADN v1 API Santé ADN publiée — interprétation de test ADN à partir de données ADN brutes (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) ou de fichiers de rapport génétique à l'aide de 334 marqueurs sélectionnés, rapport de santé combiné ADN + sang, et conseiller en compléments alimentaires s'appuyant sur le catalogue de produits de la clinique ; mode asynchrone et sandbox
Septembre 2026 Analyse sanguine v12 Analyse sanguine v12 publiée — envoi de plusieurs fichiers, rapports dans 100 langues, score de santé et analyse des risques de maladie en option, mode sandbox
Septembre 2026 Body Map v1, Âge Biologique du Sang v1 API Body Map et API Âge Biologique du Sang publiées — cartographie par organe des résultats hors plage sur 13 régions anatomiques, et âge biologique PhenoAge avec jusqu'à 18 indices cliniques dérivés ; les deux proposent un mode déterministe et un sandbox
Septembre 2026 Toutes les versions Modèle d'IA mis à jour et figé sur la dernière version du modèle ; améliorations complètes et corrections de bugs sur toutes les versions de l'API ; numéros de version inchangés ; précision de 98,89% aux examens des facultés de médecine (dernier benchmark open source)
Juillet 2026 Toutes les versions Améliorations complètes et corrections de bugs appliquées à toutes les versions de l'API ; numéros de version inchangés
Mai 2026 Toutes les versions Améliorations complètes et corrections de bugs appliquées à toutes les versions de l'API ; numéros de version inchangés
Mars 2026 Family Health v1 API d'Évaluation des Risques de Santé Familiale publiée — Analyse de risques héréditaires par IA, support de 100+ langues, analyse de l'arbre généalogique, calendrier de soins préventifs, recommandations de dépistage génétique, mode sandbox
Février 2026 ICR v1 API ICR (Reconnaissance Intelligente de Caractères) publiée — 79% plus rapide que l'OCR, sortie JSON structurée, détection du type de document, extraction de tableaux, intégration Kan pour tests sanguins
Décembre 2025 Dernière Gestion améliorée des erreurs, précision de 98,7%, support de 100 langues
Juin 2025 v11 Analyse sanguine v11, point de terminaison score de santé, support multi-fichiers
Avril 2025 v9 Modèle api_parameters_v9, extraction de paramètres améliorée
Mars 2025 v8 Support de téléchargement multi-fichiers, traitement par lots

Points de terminaison hérités

Ces points de terminaison sont maintenus pour la compatibilité descendante mais ne sont pas recommandés pour les nouvelles intégrations.

VersionPoint de terminaisonStatut
v10 /api/v10/health-score/analyze Hérité
v9 /api/v9/14-04-2025/analyze Hérité
v8 /api/v8/31-03-2025/analyze Hérité
v6 /api/v6-1/21-11-2024/analyze Hérité
v3 /api/v3/10-10-2024/analyze Hérité
Remarque

Les points de terminaison hérités sont maintenus pour la compatibilité descendante mais ne sont pas recommandés pour les nouvelles intégrations. Veuillez migrer vers les points de terminaison stables actuels pour de meilleures performances et un meilleur support.

Référence des langues prises en charge

L'API Kantesti prend en charge 100 langues pour la localisation des réponses. Utilisez le paramètre language avec l'un des codes ISO 639-1 répertoriés ci-dessous. Si non spécifié, les réponses sont par défaut en anglais (en).

Langue par défaut

Si aucun paramètre language n'est fourni, l'API renvoie les réponses en anglais (en).

Langues mondiales majeures

CodeLangueNom natif
enAnglaisEnglish
zhChinois中文
esEspagnolEspañol
arArabeالعربية
hiHindiहिन्दी
ptPortugaisPortuguês
ruRusseРусский
jaJaponais日本語
frFrançaisFrançais
deAllemandDeutsch
koCoréen한국어
trTurcTürkçe

Langues européennes

CodeLangueNom natif
itItalienItaliano
nlNéerlandaisNederlands
plPolonaisPolski
elGrecΕλληνικά
svSuédoisSvenska
noNorvégienNorsk
daDanoisDansk
fiFinnoisSuomi
csTchèqueČeština
ukUkrainienУкраїнська
roRoumainRomână
huHongroisMagyar
bgBulgareБългарски
hrCroateHrvatski
skSlovaqueSlovenčina
slSlovèneSlovenščina
srSerbeСрпски
ltLituanienLietuvių
lvLettonLatviešu
etEstonienEesti
caCatalanCatalà
euBasqueEuskara
glGalicienGalego
cyGalloisCymraeg
gaIrlandaisGaeilge
isIslandaisÍslenska
mtMaltaisMalti
sqAlbanaisShqip
mkMacédonienМакедонски
bsBosniaqueBosanski
lbLuxembourgeoisLëtzebuergesch
beBiélorusseБеларуская

Langues du Moyen-Orient & d'Asie centrale

CodeLangueNom natif
heHébreuעברית
faPersanفارسی
azAzerbaïdjanaisAzərbaycan
kaGéorgienქართული
hyArménienՀայերdelays
kkKazakhҚазақша
uzOuzbèkeOʻzbek
tgTadjikТоҷикӣ
kyKirghizeКыргызча
tkTurkmèneTürkmen
mnMongolМонгол
psPachtoپښتو
kuKurdeKurdî

Langues d'Asie du Sud

CodeLangueNom natif
bnBengaliবাংলা
taTamoulதமிழ்
teTélougouతెలుగు
mrMarathiमराठी
guGujaratiગુજરાતી
knKannadaಕನ್ನಡ
mlMalayalamമലയാളം
paPendjabiਪੰਜਾਬੀ
urOurdouاردو
neNépalaisनेपाली
siCinghalaisසිංහල
sdSindhiسنڌي
asAssamaisঅসমীয়া
orOdiaଓଡ଼ିଆ

Langues d'Asie du Sud-Est

CodeLangueNom natif
idIndonésienBahasa Indonesia
thThaïไทย
viVietnamienTiếng Việt
msMalaisBahasa Melayu
myBirmanမြန်မာ
kmKhmerភាសាខ្មែរ
loLaotienລາວ
filFilipinoFilipino
tlTagalogTagalog
jvJavanaisBasa Jawa
suSoundanaisBasa Sunda

Langues africaines

CodeLangueNom natif
afAfrikaansAfrikaans
swSwahiliKiswahili
amAmhariqueአማርኛ
haHaoussaHausa
yoYorubaYorùbá
igIgboIgbo
zuZoulouisiZulu
xhXhosaisiXhosa
soSomaliSoomaali
mgMalgacheMalagasy

Autres langues

CodeLangueNom natif
laLatinLatina
eoEspérantoEsperanto
yiYiddishייִדיש
htCréole haïtienKreyòl Ayisyen
miMaoriTe Reo Māori
smSamoanGagana Samoa
toTonguienLea Faka-Tonga
hawHawaïenʻŌlelo Hawaiʻi

API d'analyse sanguine

Analysez des images ou des PDF de tests sanguins à l'aide de l'IA pour extraire les paramètres et générer des interprétations médicales complètes.

POST /api/v12/18-09-2026/analyze Dernière

Point de terminaison de production pour l'analyse sanguine. Envoyez une ou plusieurs images de test sanguin ou un PDF et recevez des paramètres structurés, les métadonnées du patient et du laboratoire, ainsi qu'une interprétation clinique complète dans l'une des 100 langues supportées. Consomme 1 crédit par requête.

Paramètres de requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
filefileOuiImage de test sanguin (PNG, JPG, WEBP) ou PDF. Max. 20 Mo. Répétez le champ pour envoyer plusieurs images.
languagestringNonCode de langue de la réponse (par défaut : en). Voir les langues supportées.
pdf_passwordstringNonMot de passe pour les PDF chiffrés

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
  -F "username=VOTRE_NOM_UTILISATEUR" \
  -F "password=VOTRE_MOT_DE_PASSE" \
  -F "language=fr" \
  -F "file=@analyse_sang.pdf"

Exemple Python

import requests

def analyser_test_sanguin(chemins_fichiers, nom_utilisateur, mot_de_passe, langue="fr"):
    """
    Analyser un test sanguin avec Kantesti Analyse sanguine v12.

    Args:
        chemins_fichiers: Un ou plusieurs chemins vers des images de test sanguin, ou un seul PDF
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API
        langue: Code de langue du rapport (par défaut : fr)

    Returns:
        dict: Paramètres structurés, métadonnées et interprétation clinique
    """
    url = "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze"

    handles = [open(chemin, "rb") for chemin in chemins_fichiers]
    try:
        fichiers = [("file", (chemin, handle)) for chemin, handle in zip(chemins_fichiers, handles)]
        donnees = {"username": nom_utilisateur, "password": mot_de_passe, "language": langue}
        reponse = requests.post(url, files=fichiers, data=donnees, timeout=300)
        reponse.raise_for_status()
        return reponse.json()
    finally:
        for handle in handles:
            handle.close()

# Exemple d'utilisation
if __name__ == "__main__":
    resultat = analyser_test_sanguin(
        chemins_fichiers=["analyse_sang.pdf"],
        nom_utilisateur="votre_nom_utilisateur",
        mot_de_passe="votre_mot_de_passe",
        langue="fr"
    )
    print(f"Statut: {resultat['status']}")
    for parametre in resultat["data"]["parameters"]:
        print(f"  {parametre['short_name']}: {parametre['result']} {parametre['unit']} ({parametre['evaluation']})")

Exemple de réponse

{
  "status": "success",
  "api_version": "v12",
  "data": {
    "metadata": {
      "patient_name": "Jan Novak",
      "patient_age": "45",
      "patient_sex": "Male",
      "lab_name": "BioLAB Medical Center",
      "lab_city": "Prague",
      "lab_country": "Czech Republic",
      "lab_date": "2026-09-11",
      "results_date": "2026-09-12"
    },
    "parameters": [
      {"short_name": "Glucose", "long_name": "Fasting Blood Glucose", "result": "92", "unit": "mg/dL", "reference_range": "74 - 100", "range_normal_min": 74, "range_normal_max": 100, "type": "range", "evaluation": "normal"},
      {"short_name": "ALT", "long_name": "Alanine aminotransferase", "result": "65", "unit": "U/L", "reference_range": "< 45", "range_normal_min": 7, "range_normal_max": 45, "type": "range", "evaluation": "high"},
      {"short_name": "Creatinine", "long_name": "Creatinine", "result": "0.9", "unit": "mg/dL", "reference_range": "0.7 - 1.2", "range_normal_min": 0.7, "range_normal_max": 1.2, "type": "range", "evaluation": "normal"}
    ],
    "interpretation": [
      {"shortcode": "overview", "item": "Most parameters are within their reference ranges."},
      {"shortcode": "key_findings", "item": "Alanine aminotransferase is above the reference range, which warrants a follow-up liver panel."}
    ]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}
POST /api/v11/01-06-2025/analyze Stable

Point de terminaison de production pour l'analyse sanguine. Consomme 1 crédit par requête.

Paramètres de requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
filefileOuiImage de test sanguin (PNG, JPG, WEBP) ou PDF. Max 20Mo.
languagestringNonCode de langue de réponse (par défaut: en). Voir les langues prises en charge.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
  -F "username=VOTRE_NOM_UTILISATEUR" \
  -F "password=VOTRE_MOT_DE_PASSE" \
  -F "language=fr" \
  -F "file=@analyse_sang.pdf"

Exemple Python

import requests

def analyser_test_sanguin(chemin_fichier: str, nom_utilisateur: str, mot_de_passe: str, langue: str = "fr"):
    """
    Analyse un fichier de test sanguin avec l'API Kantesti.

    Args:
        chemin_fichier: Chemin vers le PDF ou l'image du test sanguin
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API
        langue: Code de langue de réponse (par défaut: fr)

    Returns:
        dict: Réponse API avec les résultats d'analyse
    """
    url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"

    with open(chemin_fichier, "rb") as f:
        fichiers = {"file": (chemin_fichier, f, "application/pdf")}
        donnees = {
            "username": nom_utilisateur,
            "password": mot_de_passe,
            "language": langue
        }

        reponse = requests.post(url, files=fichiers, data=donnees, timeout=120)
        reponse.raise_for_status()
        return reponse.json()

# Exemple d'utilisation
if __name__ == "__main__":
    resultat = analyser_test_sanguin(
        chemin_fichier="analyse_sang.pdf",
        nom_utilisateur="votre_nom_utilisateur",
        mot_de_passe="votre_mot_de_passe",
        langue="fr"
    )
    print(f"Statut: {resultat['status']}")
    print(f"Paramètres trouvés: {len(resultat['data']['parameters'])}")

Exemple C++ (libcurl)

#include <iostream>
#include <string>
#include <curl/curl.h>

// Fonction de rappel pour le traitement de la réponse
size_t CallbackEcriture(void* contenu, size_t taille, size_t nmemb, std::string* sortie) {
    sortie->append((char*)contenu, taille * nmemb);
    return taille * nmemb;
}

std::string analyserTestSanguin(const std::string& cheminFichier,
                                 const std::string& nomUtilisateur,
                                 const std::string& motDePasse,
                                 const std::string& langue = "fr") {
    CURL* curl = curl_easy_init();
    std::string reponse;

    if (curl) {
        curl_mime* formulaire = curl_mime_init(curl);
        curl_mimepart* champ;

        // Ajouter le nom d'utilisateur
        champ = curl_mime_addpart(formulaire);
        curl_mime_name(champ, "username");
        curl_mime_data(champ, nomUtilisateur.c_str(), CURL_ZERO_TERMINATED);

        // Ajouter le mot de passe
        champ = curl_mime_addpart(formulaire);
        curl_mime_name(champ, "password");
        curl_mime_data(champ, motDePasse.c_str(), CURL_ZERO_TERMINATED);

        // Ajouter la langue
        champ = curl_mime_addpart(formulaire);
        curl_mime_name(champ, "language");
        curl_mime_data(champ, langue.c_str(), CURL_ZERO_TERMINATED);

        // Ajouter le fichier
        champ = curl_mime_addpart(formulaire);
        curl_mime_name(champ, "file");
        curl_mime_filedata(champ, cheminFichier.c_str());

        curl_easy_setopt(curl, CURLOPT_URL,
            "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze");
        curl_easy_setopt(curl, CURLOPT_MIMEPOST, formulaire);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CallbackEcriture);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &reponse);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120L);

        CURLcode res = curl_easy_perform(curl);

        curl_mime_free(formulaire);
        curl_easy_cleanup(curl);
    }
    return reponse;
}

int main() {
    std::string resultat = analyserTestSanguin("analyse_sang.pdf", "utilisateur", "motdepasse");
    std::cout << resultat << std::endl;
    return 0;
}

Configuration Postman

{
  "info": {
    "name": "API Kantesti Analyse de Sang",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Analyser test sanguin",
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {"key": "username", "value": "{{api_nom_utilisateur}}", "type": "text"},
            {"key": "password", "value": "{{api_mot_de_passe}}", "type": "text"},
            {"key": "language", "value": "fr", "type": "text"},
            {"key": "file", "type": "file", "src": "/chemin/vers/analyse_sang.pdf"}
          ]
        },
        "url": {
          "raw": "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze",
          "protocol": "https",
          "host": ["app", "aibloodtestinterpret", "com"],
          "path": ["api", "v11", "01-06-2025", "analyze"]
        }
      }
    }
  ]
}

Exemple de réponse

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Jan Novák",
      "lab_name": "Centre Médical BioLAB",
      "lab_city": "Paris",
      "lab_country": "France",
      "lab_date": "2025-05-11",
      "patient_age": "45",
      "patient_sex": "Masculin"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "Globules blancs",
        "category": "Hémogramme complet",
        "result": 7.2,
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": 2.0,
        "range_max": 12.0,
        "range_normal_min": 4.0,
        "range_normal_max": 10.0,
        "short_description": "Mesure le nombre total de globules blancs dans le sang.",
        "long_description": "Les globules blancs (leucocytes) sont essentiels pour la fonction immunitaire..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hémoglobine",
        "category": "Hémogramme complet",
        "result": 14.5,
        "unit": "g/dL",
        "evaluation": "normal",
        "range_min": 10.0,
        "range_max": 18.0,
        "range_normal_min": 13.5,
        "range_normal_max": 17.5,
        "short_description": "Protéine des globules rouges qui transporte l'oxygène.",
        "long_description": "L'hémoglobine est la protéine contenant du fer responsable du transport de l'oxygène..."
      }
    ],
    "interpretation": [
      {
        "title": "Évaluation globale de la santé",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Aperçu complet",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "Le patient présente une fonction organique préservée avec des paramètres hématologiques normaux."},
              {"item": "Aucune anomalie significative détectée dans l'hémogramme complet."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-22T10:30:00Z"
}

Référence des champs de réponse

Niveau racine
ChampTypeDescription
statusstring"success" ou "error"
dataobjectContient tous les résultats d'analyse
timestampstringHorodatage ISO 8601 de la réponse
api_versionstringVersion de l'API utilisée
Objet data.metadata
ChampTypeDescription
lab_datestringDate de prélèvement sanguin (AAAA-MM-JJ)
results_datestringDate d'émission des résultats (AAAA-MM-JJ)
lab_namestringNom du laboratoire
lab_citystringVille du laboratoire
lab_countrystringPays du laboratoire
patient_namestringNom complet du patient (métadonnées uniquement, non envoyé à l'interprétation)
patient_agestringÂge du patient
patient_sexstring"male", "female" ou "other"
Élément du tableau data.parameters
ChampTypeDescription
categorystringCatégorie du paramètre (ex: "Hémogramme", "Bilan lipidique")
long_namestringNom complet du paramètre
short_namestringNom abrégé du paramètre
resultstringValeur mesurée
unitstringUnité de mesure
range_minstringPlage de référence minimale
range_maxstringPlage de référence maximale
evaluationstringStatut du résultat. Voir les valeurs d'évaluation
Élément du tableau data.interpretation
ChampTypeDescription
titlestringTitre de la section (ex: "Évaluation globale de la santé")
contentstringInterprétation médicale générée par l'IA

Exemple de réponse complète

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Anna Müller",
      "lab_name": "MedLab Diagnostics International",
      "lab_city": "Paris",
      "lab_country": "France",
      "lab_date": "2025-12-15",
      "results_date": "2025-12-16",
      "patient_age": "38",
      "patient_sex": "female"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "Numération des globules blancs",
        "category": "Hémogramme",
        "result": "6.8",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "4.0",
        "range_max": "11.0",
        "range_normal_min": "4.5",
        "range_normal_max": "10.0",
        "short_description": "Mesure le nombre total de globules blancs.",
        "long_description": "Les globules blancs (leucocytes) sont des composants essentiels du système immunitaire..."
      },
      {
        "short_name": "RBC",
        "long_name": "Numération des globules rouges",
        "category": "Hémogramme",
        "result": "4.52",
        "unit": "10^12/L",
        "evaluation": "normal",
        "range_min": "3.8",
        "range_max": "5.8",
        "range_normal_min": "4.0",
        "range_normal_max": "5.5",
        "short_description": "Mesure le nombre total de globules rouges.",
        "long_description": "Les globules rouges (érythrocytes) transportent l'oxygène des poumons vers les tissus..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hémoglobine",
        "category": "Hémogramme",
        "result": "13.2",
        "unit": "g/dL",
        "evaluation": "normal",
        "range_min": "11.5",
        "range_max": "16.0",
        "range_normal_min": "12.0",
        "range_normal_max": "15.5",
        "short_description": "Protéine des globules rouges qui transporte l'oxygène.",
        "long_description": "L'hémoglobine est la protéine contenant du fer dans les globules rouges responsable du transport de l'oxygène..."
      },
      {
        "short_name": "HCT",
        "long_name": "Hématocrite",
        "category": "Hémogramme",
        "result": "39.8",
        "unit": "%",
        "evaluation": "normal",
        "range_min": "35.0",
        "range_max": "47.0",
        "range_normal_min": "36.0",
        "range_normal_max": "44.0",
        "short_description": "Pourcentage du volume sanguin occupé par les globules rouges.",
        "long_description": "L'hématocrite mesure la proportion de sang constituée de globules rouges..."
      },
      {
        "short_name": "PLT",
        "long_name": "Numération plaquettaire",
        "category": "Hémogramme",
        "result": "245",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "150",
        "range_max": "400",
        "range_normal_min": "150",
        "range_normal_max": "350",
        "short_description": "Mesure le nombre de plaquettes dans le sang.",
        "long_description": "Les plaquettes (thrombocytes) sont essentielles pour la coagulation sanguine et la cicatrisation..."
      },
      {
        "short_name": "GLU",
        "long_name": "Glycémie à jeun",
        "category": "Bilan métabolique",
        "result": "102",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "70",
        "range_max": "140",
        "range_normal_min": "70",
        "range_normal_max": "99",
        "short_description": "Mesure le taux de sucre dans le sang à jeun.",
        "long_description": "La glycémie à jeun est un indicateur clé de la façon dont le corps métabolise le sucre..."
      },
      {
        "short_name": "TC",
        "long_name": "Cholestérol total",
        "category": "Bilan lipidique",
        "result": "218",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "300",
        "range_normal_min": "0",
        "range_normal_max": "200",
        "short_description": "Mesure le cholestérol total dans le sang.",
        "long_description": "Le cholestérol total est la somme des cholestérols HDL, LDL et VLDL..."
      },
      {
        "short_name": "HDL",
        "long_name": "Cholestérol HDL",
        "category": "Bilan lipidique",
        "result": "58",
        "unit": "mg/dL",
        "evaluation": "normal",
        "range_min": "35",
        "range_max": "100",
        "range_normal_min": "50",
        "range_normal_max": "90",
        "short_description": "Mesure le niveau de 'bon' cholestérol.",
        "long_description": "Le cholestérol HDL (lipoprotéine de haute densité) aide à éliminer les autres formes de cholestérol..."
      },
      {
        "short_name": "LDL",
        "long_name": "Cholestérol LDL",
        "category": "Bilan lipidique",
        "result": "142",
        "unit": "mg/dL",
        "evaluation": "high",
        "range_min": "0",
        "range_max": "200",
        "range_normal_min": "0",
        "range_normal_max": "100",
        "short_description": "Mesure le niveau de 'mauvais' cholestérol.",
        "long_description": "Le cholestérol LDL (lipoprotéine de basse densité) peut s'accumuler dans les parois artérielles..."
      },
      {
        "short_name": "TRIG",
        "long_name": "Triglycérides",
        "category": "Bilan lipidique",
        "result": "156",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "500",
        "range_normal_min": "0",
        "range_normal_max": "150",
        "short_description": "Mesure les graisses dans le sang.",
        "long_description": "Les triglycérides sont un type de graisse dans le sang qui stocke l'excès d'énergie..."
      }
    ],
    "interpretation": [
      {
        "title": "Évaluation globale de la santé",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Aperçu complet",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "La patiente présente des paramètres hématologiques généralement sains avec toutes les valeurs de l'hémogramme dans les normes."},
              {"item": "Les résultats de l'hémogramme complet indiquent une capacité adéquate de transport d'oxygène et une fonction immunitaire normale."},
              {"item": "Le bilan lipidique montre des domaines nécessitant une attention, notamment les niveaux de cholestérol LDL."}
            ]
          }
        ]
      },
      {
        "title": "Analyse métabolique",
        "shortcode": "metabolic_analysis",
        "subsections": [
          {
            "subtitle": "Évaluation de la glycémie",
            "shortcode": "metabolic_analysis_glucose",
            "items": [
              {"item": "La glycémie à jeun à 102 mg/dL est légèrement élevée, indiquant une zone pré-diabétique."},
              {"item": "Des modifications du mode de vie sont recommandées, notamment l'exercice régulier et la réduction de l'apport en glucides simples."},
              {"item": "Un test HbA1c de suivi est recommandé dans 3 mois pour évaluer le contrôle glycémique à long terme."}
            ]
          }
        ]
      },
      {
        "title": "Évaluation du risque cardiovasculaire",
        "shortcode": "cardiovascular_risk",
        "subsections": [
          {
            "subtitle": "Analyse du profil lipidique",
            "shortcode": "cardiovascular_risk_lipids",
            "items": [
              {"item": "Le cholestérol LDL à 142 mg/dL dépasse les niveaux optimaux et justifie une intervention."},
              {"item": "Le cholestérol HDL à 58 mg/dL offre une protection cardiovasculaire modérée."},
              {"item": "Les triglycérides légèrement élevés; envisager des modifications alimentaires pour réduire l'apport en graisses saturées."},
              {"item": "Le rapport cholestérol total/HDL de 3,76 indique un risque cardiovasculaire modéré."}
            ]
          }
        ]
      },
      {
        "title": "Recommandations",
        "shortcode": "recommendations",
        "subsections": [
          {
            "subtitle": "Modifications du mode de vie",
            "shortcode": "recommendations_lifestyle",
            "items": [
              {"item": "Augmenter l'activité physique aérobique à au moins 150 minutes par semaine."},
              {"item": "Adopter un régime de type méditerranéen riche en légumes, fruits et graisses saines."},
              {"item": "Limiter les aliments transformés, les graisses saturées et les sucres ajoutés."},
              {"item": "Envisager une consultation avec un nutritionniste pour des conseils diététiques personnalisés."}
            ]
          },
          {
            "subtitle": "Tests de suivi",
            "shortcode": "recommendations_followup",
            "items": [
              {"item": "Répéter le bilan lipidique dans 3 mois après la mise en œuvre des changements de mode de vie."},
              {"item": "Test HbA1c recommandé pour évaluer les niveaux moyens de glucose sanguin."},
              {"item": "Bilan métabolique complet annuel pour un suivi continu."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-16T14:32:18Z"
}
Mots-clés de réponse

Le champ evaluation utilise des valeurs standardisées. Voir les valeurs d'évaluation.

POST /api/v12/health-score/analyze Dernière

Point de terminaison de production avec calcul complet du score de santé et analyse des risques de maladie. Accepte la même requête que /api/v12/18-09-2026/analyze et ajoute à la réponse les champs ci-dessous. Consomme 1 crédit par requête.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
  -F "username=VOTRE_NOM_UTILISATEUR" \
  -F "password=VOTRE_MOT_DE_PASSE" \
  -F "language=fr" \
  -F "file=@analyse_sang.pdf"

Champs de réponse supplémentaires

{
  "health_score": {
    "overall": 78,
    "optimal": 4,
    "normal": 12,
    "warning": 3,
    "critical": 1,
    "total_parameters": 20,
    "score_interpretation": "good",
    "recommendations": [
      "Consider increasing vitamin D intake",
      "Schedule follow-up for cholesterol levels"
    ]
  },
  "disease_risks": [
    {"name": "Cardiovascular Disease", "percentage": "18%", "severity": "low"},
    {"name": "Type 2 Diabetes", "percentage": "12%", "severity": "low"},
    {"name": "Metabolic Syndrome", "percentage": "25%", "severity": "moderate"}
  ]
}
Mots-clés de réponse

Le champ score_interpretation utilise des valeurs standardisées. Voir les valeurs du score de santé.

Points de terminaison Sandbox

Les points de terminaison Sandbox renvoient des données de test réalistes sans consommer de quota API. Utilisez-les pour le développement et les tests d'intégration.

Avantages du Sandbox
  • Aucune consommation de quota
  • Renvoie des données de test réalistes
  • Même format de requête que la production
  • Testez votre intégration avant la mise en production
  • Disponible pour toutes les versions de l'API
APIPoint de terminaison Sandbox
Test sanguin v12/api/v12/18-09-2026/sandbox
Test sanguin v12-health/api/v12/health-score/sandbox
Body Map/api/v1/body-map/sandbox
Âge Biologique du Sang/api/v1/blood-age/sandbox
Interprétation de Test ADN/api/v1/dna-interpretation/sandbox
Rapport de Santé ADN + Sang/api/v1/dna-blood-report/sandbox
Conseiller en Compléments ADN/api/v1/dna-supplements/sandbox
Test sanguin v11/api/v11/01-06-2025/sandbox
Test sanguin v11-health/api/v11/health-score/sandbox
IA Nutrition/api/v1/nutrition/diet-plan/sandbox
Comparaison de tests/api/v1/bloodtest/comparison/sandbox
Analyse des tendances/api/v1/analytics/trends/sandbox
ICR Extract/api/icr/v1/sandbox
ICR Kan (Test sanguin)/api/icr/v1/kan/sandbox
API de Comparaison vs API d'Analyse des Tendances

Choisissez la bonne API pour votre cas d'utilisation :

FonctionnalitéComparaison IA des Tests SanguinsAnalyse des Tendances
Focus PrincipalComparaison narrative IAAnalyse statistique des tendances
Traitement IANarrative IA complèteIA améliorée + statistiques
Type de SortieRésumés narratifsGraphiques, statistiques, modèles
Idéal PourCe qui a changé entre les testsSuivi des paramètres à long terme
Min Tests22
Max Tests2050

API d'analyse des tendances

Analysez les tendances des paramètres de santé au fil du temps à l'aide de la reconnaissance de motifs par IA. Identifiez les améliorations, les détériorations et les informations exploitables à partir des données historiques des tests sanguins.

IA Nutrition avec Suppléments

Générez des plans nutritionnels personnalisés, des recommandations diététiques et des suggestions de suppléments basés sur l'analyse des tests sanguins à l'aide d'algorithmes d'IA avancés.

POST /api/v1/nutrition/diet-plan/analyze Nouveau

Génère des recommandations complètes de nutrition et de suppléments basées sur les paramètres de tests sanguins et le profil du patient.

Exemple Python

import requests
from typing import Dict, List, Optional

def obtenir_plan_nutrition(
    nom_utilisateur: str,
    mot_de_passe: str,
    patient: Dict,
    test_sanguin: Dict,
    objectifs_sante: Optional[List[str]] = None,
    restrictions_alimentaires: Optional[List[str]] = None,
    langue: str = "fr"
) -> Dict:
    """
    Obtient des recommandations personnalisées de nutrition et suppléments.

    Args:
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API
        patient: Démographie et informations de santé du patient
        test_sanguin: Paramètres du test sanguin
        objectifs_sante: Objectifs de santé optionnels
        restrictions_alimentaires: Restrictions alimentaires optionnelles
        langue: Langue de réponse

    Returns:
        dict: Plan nutritionnel avec suppléments
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze"

    payload = {
        "username": nom_utilisateur,
        "password": mot_de_passe,
        "language": langue,
        "patient": patient,
        "blood_test": test_sanguin
    }

    if objectifs_sante:
        payload["health_goals"] = objectifs_sante
    if restrictions_alimentaires:
        payload["dietary_restrictions"] = restrictions_alimentaires

    reponse = requests.post(url, json=payload, timeout=120)
    reponse.raise_for_status()
    return reponse.json()

# Exemple d'utilisation
if __name__ == "__main__":
    patient = {
        "age": 45,
        "gender": "male",
        "weight": 82,
        "height": 178,
        "activity_level": "moderate",
        "medical_conditions": ["hypertension"],
        "allergies": ["shellfish"]
    }

    test_sanguin = {
        "lab_date": "2025-12-01",
        "parameters": [
            {"short_name": "VITD", "result": 18, "unit": "ng/mL"},
            {"short_name": "CHOL", "result": 210, "unit": "mg/dL"}
        ]
    }

    resultat = obtenir_plan_nutrition(
        nom_utilisateur="votre_nom_utilisateur",
        mot_de_passe="votre_mot_de_passe",
        patient=patient,
        test_sanguin=test_sanguin,
        objectifs_sante=["lower_cholesterol", "increase_energy"]
    )

    # Afficher les recommandations de suppléments
    for supp in resultat['data']['supplements']:
        print(f"{supp['name']}: {supp['dosage']} - {supp['reason']}")

Schéma de l'Objet Patient

Description détaillée de tous les champs disponibles pour l'objet patient :

Champ Type Requis Défaut Description
age integer Oui - Âge du patient en années (18-120)
gender string Oui - Genre du patient. Voir les valeurs
weight number Non null Poids en kg (pour les calculs caloriques)
height number Non null Taille en cm (pour les calculs d'IMC)
conditions array Non [] Conditions médicales. Voir les valeurs
allergies array Non [] Allergies alimentaires. Voir les valeurs
dietary_preferences array Non [] Préférences alimentaires. Voir les valeurs
activity_level string Non "moderate" Niveau d'activité physique. Voir les valeurs
dietary_restrictions array Non [] Restrictions alimentaires (ex: sans gluten, sans lactose)
liked_foods array Non [] Aliments préférés pour la personnalisation du plan
disliked_foods array Non [] Aliments à éviter dans les recommandations
meal_frequency integer Non 3 Nombre de repas par jour (1-6)
budget string Non "moderate" Niveau de budget : "low", "moderate", "high"
medications array Non [] Médicaments actuels (pour les interactions)

Exemple de réponse

{
  "status": "success",
  "data": {
    "nutrition_plan": {
      "daily_calories": 2100,
      "macros": {
        "protein": {"grams": 105, "percentage": 20},
        "carbohydrates": {"grams": 236, "percentage": 45},
        "fats": {"grams": 82, "percentage": 35}
      },
      "meal_plan": {
        "breakfast": {
          "description": "Flocons d'avoine avec baies et noix",
          "calories": 420,
          "nutrients": ["fibres", "oméga-3", "antioxydants"]
        },
        "lunch": {
          "description": "Salade de saumon grillé avec vinaigrette à l'huile d'olive",
          "calories": 550,
          "nutrients": ["oméga-3", "protéines", "vitamine D"]
        },
        "dinner": {
          "description": "Poulet maigre avec quinoa et légumes vapeur",
          "calories": 580,
          "nutrients": ["protéines", "fer", "fibres"]
        }
      }
    },
    "supplements": [
      {
        "name": "Vitamine D3",
        "dosage": "2000 UI par jour",
        "reason": "Niveaux sanguins à 18 ng/mL indiquent une carence (optimal: 30-50 ng/mL)",
        "priority": "élevée",
        "timing": "Avec le petit-déjeuner (repas contenant des graisses)",
        "duration": "3-6 mois, puis retester"
      },
      {
        "name": "Huile de poisson Oméga-3",
        "dosage": "1000mg EPA+DHA par jour",
        "reason": "Soutient l'optimisation du cholestérol et la santé cardiovasculaire",
        "priority": "moyenne",
        "timing": "Avec les repas"
      }
    ],
    "dietary_recommendations": [
      {
        "category": "augmenter",
        "foods": ["poisson gras", "légumes verts", "noix", "huile d'olive"],
        "reason": "Soutient les niveaux de vitamine D et la santé cardiovasculaire"
      },
      {
        "category": "réduire",
        "foods": ["aliments transformés", "viande rouge", "graisses saturées"],
        "reason": "Aide à réduire le cholestérol LDL"
      }
    ]
  },
  "api_version": "v1",
  "timestamp": "2025-12-22T10:30:00Z"
}

Référence des champs de réponse

Objet nutrition_plan.educational_insights
Champ Type Description
blood_marker_education array Contenu éducatif sur les marqueurs sanguins analysés
nutrition_principles array Principes généraux de nutrition applicables au patient
Élément du tableau blood_marker_education
Champ Type Description
marker string Nom du marqueur sanguin (ex: "Vitamine D", "Cholestérol")
explanation string Explication éducative sur l'importance du marqueur
normal_range string Plage de valeurs normales pour le marqueur
Élément du tableau food_recommendations.power_foods
Champ Type Description
food string Nom de l'aliment recommandé
nutrients array Liste des nutriments clés fournis par cet aliment
serving string Taille de portion recommandée
why string Explication de pourquoi cet aliment est bénéfique
Élément du tableau supplement_recommendations
Champ Type Description
supplement string Nom du supplément
dosage string Dosage quotidien recommandé
timing string Meilleur moment pour la prise (ex: "Avec le petit-déjeuner")
duration string Durée recommandée de la supplémentation
reason string Justification basée sur les résultats sanguins

Exemple cURL complet

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "votre_nom_utilisateur",
    "password": "votre_mot_de_passe",
    "language": "fr",
    "patient": {
      "age": 45,
      "gender": "male",
      "weight": 82,
      "height": 178,
      "conditions": ["hypertension"],
      "allergies": ["shellfish"],
      "dietary_preferences": ["mediterranean"],
      "activity_level": "moderate",
      "liked_foods": ["fish", "vegetables", "olive oil"],
      "disliked_foods": ["liver"],
      "meal_frequency": 3,
      "budget": "moderate"
    },
    "blood_test": {
      "lab_date": "2025-12-01",
      "parameters": [
        {"short_name": "VITD", "result": 18, "unit": "ng/mL"},
        {"short_name": "CHOL", "result": 210, "unit": "mg/dL"},
        {"short_name": "LDL", "result": 140, "unit": "mg/dL"},
        {"short_name": "HDL", "result": 45, "unit": "mg/dL"},
        {"short_name": "FE", "result": 65, "unit": "µg/dL"}
      ]
    },
    "health_goals": ["lower_cholesterol", "increase_energy", "heart_health"]
  }'

Réponse complète

{
  "status": "success",
  "data": {
    "nutrition_plan": {
      "daily_calories": 2100,
      "macros": {
        "protein": {"grams": 105, "percentage": 20},
        "carbohydrates": {"grams": 236, "percentage": 45},
        "fats": {"grams": 82, "percentage": 35}
      },
      "educational_insights": {
        "blood_marker_education": [
          {
            "marker": "Vitamine D",
            "explanation": "La vitamine D est essentielle pour la santé osseuse, la fonction immunitaire et la régulation de l'humeur. Votre niveau de 18 ng/mL indique une carence qui peut affecter l'absorption du calcium et la santé générale.",
            "normal_range": "30-50 ng/mL"
          },
          {
            "marker": "Cholestérol LDL",
            "explanation": "Le cholestérol LDL, souvent appelé 'mauvais cholestérol', peut s'accumuler dans les parois artérielles. Votre niveau de 140 mg/dL est élevé et peut augmenter le risque cardiovasculaire.",
            "normal_range": "< 100 mg/dL"
          }
        ],
        "nutrition_principles": [
          "Priorisez les acides gras oméga-3 pour la santé cardiaque",
          "Augmentez les fibres solubles pour réduire le cholestérol LDL",
          "Incluez des aliments riches en vitamine D et des sources de soleil"
        ]
      }
    },
    "food_recommendations": {
      "power_foods": [
        {
          "food": "Saumon sauvage",
          "nutrients": ["Oméga-3", "Vitamine D", "Protéines"],
          "serving": "150g, 3 fois par semaine",
          "why": "Source excellente d'oméga-3 et de vitamine D naturelle pour la santé cardiaque et osseuse"
        },
        {
          "food": "Avoine complète",
          "nutrients": ["Bêta-glucane", "Fibres", "Magnésium"],
          "serving": "50g par jour au petit-déjeuner",
          "why": "Les fibres solubles de l'avoine aident à réduire l'absorption du cholestérol LDL"
        },
        {
          "food": "Huile d'olive extra vierge",
          "nutrients": ["Graisses monoinsaturées", "Polyphénols", "Vitamine E"],
          "serving": "2-3 cuillères à soupe par jour",
          "why": "Les graisses saines méditerranéennes améliorent le profil lipidique et protègent le cœur"
        },
        {
          "food": "Épinards",
          "nutrients": ["Fer", "Folate", "Vitamine K"],
          "serving": "100g par jour, crus ou cuits",
          "why": "Riche en fer et antioxydants pour l'énergie et la santé cardiovasculaire"
        }
      ]
    },
    "supplement_recommendations": [
      {
        "supplement": "Vitamine D3",
        "dosage": "2000-4000 UI par jour",
        "timing": "Avec le petit-déjeuner (repas contenant des graisses)",
        "duration": "3-6 mois, puis retester les niveaux sanguins",
        "reason": "Votre niveau de 18 ng/mL est en dessous de l'optimal de 30-50 ng/mL"
      },
      {
        "supplement": "Oméga-3 (EPA/DHA)",
        "dosage": "1000-2000mg EPA+DHA par jour",
        "timing": "Avec les repas principaux",
        "duration": "En continu pour la santé cardiaque",
        "reason": "Aide à réduire les triglycérides et améliore le ratio HDL/LDL"
      },
      {
        "supplement": "Coenzyme Q10",
        "dosage": "100mg par jour",
        "timing": "Avec le repas du matin",
        "duration": "3 mois minimum",
        "reason": "Soutient la santé cardiaque, particulièrement important avec l'hypertension"
      }
    ]
  },
  "api_version": "v1",
  "timestamp": "2025-12-22T10:30:00Z"
}
Mots-clés de réponse

Pour une liste complète de toutes les valeurs de réponse possibles, consultez la section Mots-clés de sortie.

API de comparaison de tests sanguins

Comparez plusieurs tests sanguins pour identifier les changements, les améliorations et les domaines nécessitant une attention avec une analyse propulsée par l'IA.

POST /api/v1/bloodtest/comparison/analyze

Analyse 2 à 20 tests sanguins et fournit une comparaison détaillée avec des informations générées par l'IA.

Exigences
  • Minimum 2 tests sanguins requis
  • Maximum 20 tests sanguins par requête
  • Chaque test doit inclure lab_date
  • Au moins un paramètre commun entre les tests

Paramètres de requête

ParamètreTypeRequisDéfautDescription
usernamestringOui-Votre nom d'utilisateur API
passwordstringOui-Votre mot de passe API
languagestringNonenLangue de réponse. Voir les langues prises en charge
blood_testsarrayOui-Tableau d'objets de tests sanguins (2-20 tests)

Structure du tableau blood_tests

ChampTypeRequisDescription
lab_datestringOui*Date du test au format AAAA-MM-JJ
results_datestringOui*Alternative à lab_date (AAAA-MM-JJ)
parametersarrayOuiTableau des paramètres de test sanguin
metadataobjectNonMétadonnées supplémentaires (lab_name, notes, etc.)

*Soit lab_date soit results_date est requis pour chaque test sanguin.

Exemple Python

import requests
from typing import Dict, List

def comparer_tests_sanguins(
    nom_utilisateur: str,
    mot_de_passe: str,
    tests_sanguins: List[Dict],
    langue: str = "fr"
) -> Dict:
    """
    Compare plusieurs tests sanguins pour l'analyse des tendances.

    Args:
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API
        tests_sanguins: Liste d'objets de tests (2-20 tests)
        langue: Langue de réponse

    Returns:
        dict: Résultats de comparaison avec insights
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"

    if len(tests_sanguins) < 2:
        raise ValueError("Minimum 2 tests sanguins requis")
    if len(tests_sanguins) > 20:
        raise ValueError("Maximum 20 tests sanguins autorisés")

    payload = {
        "username": nom_utilisateur,
        "password": mot_de_passe,
        "language": langue,
        "blood_tests": tests_sanguins
    }

    reponse = requests.post(url, json=payload, timeout=120)
    reponse.raise_for_status()
    return reponse.json()

# Exemple d'utilisation
if __name__ == "__main__":
    tests = [
        {
            "lab_date": "2025-06-15",
            "parameters": [
                {"short_name": "HGB", "result": 12.8, "unit": "g/dL"},
                {"short_name": "CHOL", "result": 220, "unit": "mg/dL"}
            ]
        },
        {
            "lab_date": "2025-12-15",
            "parameters": [
                {"short_name": "HGB", "result": 14.2, "unit": "g/dL"},
                {"short_name": "CHOL", "result": 185, "unit": "mg/dL"}
            ]
        }
    ]

    resultat = comparer_tests_sanguins("votre_nom_utilisateur", "votre_mot_de_passe", tests)

    for changement in resultat['data']['significant_changes']:
        print(f"{changement['parameter']}: {changement['direction']} de {changement['change_percent']}%")

Référence des champs de réponse

ChampTypeDescription
comparison_idstringIdentifiant unique pour cette comparaison (format: CMP-XXXXXXXX)
comparison_summaryobjectRésumé global: key_findings, overall_trend, dates du rapport, time_interval
parameter_analysisarrayAnalyse détaillée par paramètre avec type de changement et signification clinique
health_assessmentobjectZones de préoccupation, améliorations, développements positifs, facteurs de risque
recommendationsobjectTests de suivi, actions immédiates, modifications du mode de vie, références aux spécialistes
detailed_interpretationobjectSections narratives IA avec résumé exécutif et recommandations cliniques

Structure de l'objet parameter_analysis

ChampTypeDescription
parameter_namestringNom du paramètre
report1_valuestringValeur du premier rapport avec unité
report2_valuestringValeur du second rapport avec unité
change_typestringincreased, decreased ou stable
change_magnitudestringsignificant, moderate ou minor
clinical_significancestringExplication IA de la signification du changement
trend_assessmentstringpositive, negative ou neutral

Exemple de réponse

{
  "status": "success",
  "data": {
    "comparison_summary": {
      "tests_compared": 2,
      "date_range": {
        "earliest": "2025-06-15",
        "latest": "2025-12-15",
        "span_days": 183
      },
      "parameters_compared": 2,
      "overall_assessment": "en amélioration"
    },
    "parameter_comparisons": [
      {
        "parameter": "HGB",
        "long_name": "Hémoglobine",
        "values": [
          {"date": "2025-06-15", "value": 12.8, "evaluation": "bas"},
          {"date": "2025-12-15", "value": 14.2, "evaluation": "normal"}
        ],
        "change": {
          "absolute": 1.4,
          "percent": 10.94,
          "direction": "augmenté"
        },
        "interpretation": "L'hémoglobine s'est améliorée de bas à normal"
      }
    ],
    "ai_insights": [
      {
        "type": "improvement",
        "title": "Anémie résolue",
        "description": "Les niveaux d'hémoglobine se sont normalisés, suggérant un traitement réussi de l'anémie précédente.",
        "confidence": 0.94
      }
    ],
    "recommendations": [
      "Continuer la supplémentation actuelle en fer/vitamines",
      "Planifier un test sanguin de suivi dans 6 mois"
    ]
  },
  "api_version": "v1",
  "timestamp": "2025-12-22T10:30:00Z"
}

Référence des mots-clés

Référence complète de toutes les valeurs de mots-clés d'entrée utilisées dans les endpoints de l'API Kantesti. Utilisez ces valeurs exactes lors des requêtes API.

analysis_type API Analyse des tendances

Spécifie le type d'analyse de tendance à effectuer.

ValeurDéfautDescription
comprehensive✓Analyse complète avec statistiques, graphiques et interprétation IA
statisticalAnalyse statistique uniquement
summaryRésumé de haut niveau uniquement

health_goals API Nutrition

Objectifs de santé pour des recommandations nutritionnelles personnalisées. Plusieurs valeurs peuvent être fournies sous forme de tableau.

ValeurDescription
maintainMaintenir la santé actuelle (défaut)
improve_energyFocus sur les niveaux d'énergie
weight_managementGestion saine du poids
heart_healthSanté cardiovasculaire
immune_supportSoutien du système immunitaire
digestive_healthBien-être digestif
bone_healthSanté osseuse
mental_clarityFonction cognitive

dietary_restrictions API Nutrition

Restrictions alimentaires et allergies. Plusieurs valeurs peuvent être fournies sous forme de tableau. Le texte libre est également accepté pour les restrictions personnalisées.

ValeurDescription
low_sodiumApport réduit en sodium
low_sugarApport réduit en sucre
low_fatApport réduit en graisses
gluten_freeSans gluten
dairy_freeSans produits laitiers
nut_freeSans noix
soy_freeSans soja
egg_freeSans œufs
halalConforme halal
kosherConforme casher
Note

Le texte libre est également accepté pour les restrictions alimentaires personnalisées non répertoriées ci-dessus.

dietary_preferences API Nutrition

Préférences de style de vie alimentaire pour la planification des repas.

ValeurDescription
omnivoreAucune restriction (défaut)
vegetarianPas de viande
veganPas de produits animaux
pescatarianVégétarien + poisson
ketoRégime cétogène
paleoRégime paléolithique
mediterraneanRégime méditerranéen

activity_level API Nutrition

Niveau d'activité physique pour les calculs caloriques et nutritionnels.

ValeurDescription
sedentaryPeu ou pas d'exercice
lightExercice léger 1-3 jours/semaine
moderateExercice modéré 3-5 jours/semaine (défaut)
activeExercice intense 6-7 jours/semaine
very_activeExercice très intense ou travail physique

budget API Nutrition

Niveau de budget pour les recommandations alimentaires et de suppléments.

ValeurDescription
lowOptions économiques
moderateOptions équilibrées (défaut)
highOptions premium

gender Toutes les APIs

Sexe du patient pour des plages de référence et recommandations personnalisées.

ValeurDescription
malePatient masculin
femalePatient féminin
otherAutre ou non spécifié

Mots-clés de sortie

Les mots-clés suivants apparaissent dans les réponses API. Comprendre ces valeurs vous aide à interpréter et afficher correctement les résultats.

evaluation APIs Analyse sanguine & Comparaison

Statut d'évaluation du paramètre indiquant comment le résultat se compare aux plages de référence.

ValeurDescription
normalDans la plage de référence normale
lowEn dessous de la plage normale
highAu-dessus de la plage normale
critical_lowCritiquement bas (attention immédiate requise)
critical_highCritiquement élevé (attention immédiate requise)
borderline_lowLégèrement en dessous de la plage normale
borderline_highLégèrement au-dessus de la plage normale

trend_assessment APIs Comparaison & Tendances

Évaluation globale des tendances des paramètres entre les tests.

ValeurDescription
positiveAmélioré (vers la plage normale)
negativeDétérioré (s'éloigne de la plage normale)
stableRelativement inchangé entre les tests
improvingTendance globale à l'amélioration
worseningTendance globale à la détérioration

trend_direction API Analyse des tendances

Direction des changements de valeur des paramètres dans le temps.

ValeurDescription
upwardValeurs en augmentation dans le temps
downwardValeurs en diminution dans le temps
stableChangement minimal dans le temps

trend_strength API Analyse des tendances

Magnitude de la tendance observée.

ValeurDescription
strong>15% de changement entre les périodes
moderate5-15% de changement entre les périodes
mild<5% de changement entre les périodes

health_score / score_interpretation API Score de santé

Interprétation globale du score de santé basée sur les paramètres analysés.

ValeurDescription
excellentTous les marqueurs dans la plage optimale
goodLa plupart des marqueurs dans la plage normale
fairCertains marqueurs nécessitent attention
poorPlusieurs marqueurs nécessitent attention

Points de terminaison utilitaires

GET /api/info

Renvoie les informations de la plateforme API, les versions disponibles et les fonctionnalités supportées. Aucune authentification requise.

Exemple de réponse

{
  "platform": "API Kantesti Analyse de Sang",
  "versions": ["v6", "v8", "v9", "v10", "v11"],
  "latest_version": "v11",
  "supported_languages": 100,
  "documentation": "https://www.kantesti.net/docs/",
  "status": "operational"
}
GET /api/health

Point de terminaison de vérification de santé pour la surveillance. Renvoie le statut du service. Aucune authentification requise.

Exemple de réponse

{
  "status": "healthy",
  "timestamp": "2025-12-22T10:30:00Z",
  "uptime": "99.99%"
}
POST /api/quota/check

Vérifiez votre quota API restant. Authentification requise.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/quota/check" \
  -H "Content-Type: application/json" \
  -d '{"username": "VOTRE_NOM_UTILISATEUR", "password": "VOTRE_MOT_DE_PASSE"}'

Exemple de réponse

{
  "status": "success",
  "quota": {
    "remaining": 847,
    "total": 1000,
    "reset_date": "2026-01-01",
    "plan": "professional"
  }
}

API Évaluation des Risques de Santé Familiale

Publié : 23 mars 2026

L'API Kantesti d'Évaluation des Risques de Santé Familiale est une plateforme d'analyse des risques de santé héréditaires alimentée par l'IA. Elle génère des rapports complets de santé familiale en analysant les antécédents médicaux familiaux, les profils de santé des patients et les données de tests sanguins pour identifier les facteurs de risque héréditaires et fournir des recommandations de soins préventifs personnalisées.

100+
Langues
9
Catégories de maladies
14
Relations familiales

Analyse de risques héréditaires par IA

L'API Family Health utilise des modèles d'IA avancés pour croiser les antécédents médicaux familiaux avec les données de tests sanguins du patient, identifiant les schémas de risques héréditaires dans les domaines cardiovasculaire, métabolique, cancer, neurologique, respiratoire, auto-immun, génétique, santé mentale et rein/foie. Les rapports incluent l'évaluation des risques, les calendriers de soins préventifs, les recommandations de dépistage génétique et les conseils de mode de vie — le tout localisé dans plus de 100 langues.

Fonctionnalités clés
  • Analyse des risques héréditaires — Classification en risque élevé, modéré et faible avec scoring détaillé
  • Analyse de l'arbre généalogique — Cartographie des risques des lignées paternelle et maternelle
  • Corrélation des tests sanguins — Croisement des antécédents familiaux avec les paramètres sanguins
  • Recommandations de dépistage génétique — Suggestions personnalisées de tests génétiques
  • Calendrier de soins préventifs — Programmes de dépistage adaptés à l'âge
  • Analyse des médicaments — Évaluation des interactions et des sensibilités héréditaires
  • 100+ langues supportées — Localisation complète des rapports dans plus de 100 langues
  • Mode Sandbox — Testez l'intégration sans consommer de crédits
  • 9 catégories de maladies — Cardiovasculaire, Métabolique, Cancer, Neurologique, Respiratoire, Auto-immun, Génétique, Santé mentale, Rein/Foie
  • 14 relations familiales — Père, mère, frères et sœurs, grands-parents, oncles, tantes, enfants

Résumé des endpoints

EndpointMéthodeDescriptionAuth
/api/v1/family-health/analyze POST Générer un rapport complet d'évaluation des risques de santé familiale Requis (1 crédit)
/api/v1/family-health/validate POST Valider les données de la requête avant l'analyse (aucun quota consommé) Requis (Gratuit)
/api/v1/family-health/supported-languages GET Lister les 100+ langues supportées Non requis
/api/v1/family-health/condition-categories GET Lister toutes les catégories de maladies médicales Non requis
/api/v1/family-health/family-relations GET Lister tous les types de relations familiales Non requis
/api/v1/family-health/sandbox/analyze POST Test sandbox avec données fictives (aucun quota consommé) Requis (Gratuit)
POST /api/v1/family-health/analyze Publié 23.03.2026

Générez un rapport complet d'évaluation des risques de santé familiale alimenté par l'IA. Analyse les antécédents médicaux familiaux, les profils de santé et les données de tests sanguins.

Paramètres de requête (JSON Body)

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
patient_dataobjectOuiInformations du patient (voir ci-dessous)
family_membersarrayOui*Tableau d'objets membres de la famille (max 100). *Requis si health_profile est absent
health_profileobjectOui*Profil de santé du patient. *Requis si family_members est absent
blood_test_dataarrayNonDonnées de tests sanguins pour l'analyse de corrélation
languagestringNonCode langue de réponse (défaut : en). 100+ langues

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "VOTRE_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "patient_data": {"name": "Marie Dupont", "age": 42, "gender": "female"},
    "family_members": [
      {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
      {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "fr"
  }'

Exemple Python

import requests

url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"
payload = {
    "username": "VOTRE_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "patient_data": {"name": "Marie Dupont", "age": 42, "gender": "female"},
    "family_members": [
        {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
        {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "fr"
}
response = requests.post(url, json=payload, timeout=120)
print(response.json())

Exemple de réponse

{
  "status": "success",
  "data": {
    "report_data": {
      "report_title": "Rapport d'Évaluation des Risques de Santé Familiale",
      "executive_summary": "Basé sur l'analyse des antécédents médicaux familiaux...",
      "hereditary_risk_analysis": {
        "high_risk": [{"condition": "Maladie cardiovasculaire", "risk_score": 75}],
        "moderate_risk": [{"condition": "Diabète de type 2", "risk_score": 60}],
        "low_risk": []
      },
      "genetic_screening_recommendations": ["Test génétique BRCA1/BRCA2", "Panel génétique cardiovasculaire"],
      "preventive_care_timeline": [
        {"age_range": "40-45", "screenings": ["Mammographie annuelle", "Test d'effort cardiaque"]}
      ]
    }
  },
  "message": "Évaluation des risques de santé familiale complétée avec succès",
  "timestamp": "2026-03-23T10:30:00Z",
  "api_version": "1.0.0"
}

Codes d'erreur Family Health API

Code d'erreurStatus HTTPDescription
AUTH_1001401Identifiants d'authentification manquants
AUTH_1002401Nom d'utilisateur ou mot de passe invalide
QUOTA_1101403Quota API insuffisant
VAL_2001400Champ obligatoire manquant
VAL_2003400Code langue non supporté
VAL_2006400Le tableau dépasse la taille maximale (max 100 membres)
VAL_2007400Structure de données patient invalide
PROC_3001500Échec de la génération du rapport
PROC_3003500Erreur de traitement IA
SRV_5001500Erreur interne du serveur

Endpoint Sandbox Family Health

Testez votre intégration Family Health API sans consommer de crédits.

APIEndpoint SandboxDescription
Family Health Analyze/api/v1/family-health/sandbox/analyzeRenvoie des données de rapport d'exemple

Endpoints de référence (Aucune auth requise)

Ces endpoints fournissent des données de référence. Aucune authentification requise.

EndpointMéthodeDescription
/api/v1/family-health/supported-languagesGETRenvoie les 100+ langues supportées
/api/v1/family-health/condition-categoriesGETRenvoie les 9 catégories de maladies
/api/v1/family-health/family-relationsGETRenvoie les 14 types de relations familiales

API Body Map

Publié : 18 septembre 2026

L'API Kantesti Body Map transforme un bilan de laboratoire en anatomie. Chaque résultat hors plage ou limite est placé sur l'une des 13 régions du corps, et l'API renvoie à la fois la légende — quelle région, quelle sévérité, quels marqueurs l'ont déclenchée — et l'URL d'une illustration du corps correspondante.

13
Régions du corps
39
Langues d'entrée
0
Appels de modèle par défaut

Déterministe par défaut

Les noms de marqueurs sont comparés à des tables d'alias multilingues couvrant 39 langues de rapport, y compris les écritures non latines — vous envoyez les noms d'analytes exactement tels que votre laboratoire les a imprimés, dans la langue dans laquelle il les a imprimés. Aucun modèle n'est appelé et aucune illustration n'est générée tant que vous ne le demandez pas : la requête par défaut n'entraîne donc aucun coût d'IA et renvoie la même réponse à chaque fois pour un même bilan.

Fonctionnalités Clés
  • 13 régions anatomiques — Cerveau & nerfs, thyroïde, cœur & vaisseaux, foie, pancréas, surrénales, reins, intestin, reproduction, sang, immunité, os, muscles
  • Niveaux de sévérité — Niveau 2 pour les résultats hors plage, niveau 1 pour les résultats limites, afin de colorer une légende sans logique supplémentaire
  • Attribution des marqueurs — Chaque région liste les marqueurs qui l'ont déclenchée, les plus anormaux en premier
  • Sortie sans langue — Des clés de région et vos propres noms de marqueurs ; l'illustration ne contient aucun texte, une seule image sert donc toutes les langues
  • URL d'illustration signées — Chaque URL d'illustration porte une signature HMAC : impossible de les énumérer ou de les falsifier
  • États vides honnêtes — Un bilan normal renvoie le corps "tout va bien" commun ; un bilan dont les marqueurs signalés ne peuvent pas être placés renvoie une erreur plutôt qu'un corps vert trompeur
  • Mode déterministe — Par défaut. Aucun appel de modèle, aucun crédit d'image, sortie reproductible
  • Mode Sandbox — Testez l'intégration sans consommer de crédits

Résumé des endpoints

EndpointMéthodeDescriptionAuth
/api/v1/body-map/analyze POST Construire une carte corporelle à partir d'un bilan de laboratoire Requis (1 crédit)
/api/v1/body-map/validate POST Valider les données et voir quels marqueurs sont reconnus (aucun quota consommé) Requis (Gratuit)
/api/v1/body-map/sandbox POST Test sandbox avec données fictives (aucun quota consommé) Requis (Gratuit)
/api/v1/body-map/regions GET Lister les 13 régions du corps et les niveaux de sévérité Non requis
/api/v1/body-map/info GET Métadonnées de capacités, limites et détails d'authentification Non requis
POST /api/v1/body-map/analyze Publié 18.09.2026

Place chaque résultat signalé d'un bilan de laboratoire sur le corps. Consomme 1 crédit par requête réussie. Une requête qui échoue à la validation, ou dont les marqueurs signalés ne peuvent pas être placés, n'est pas facturée.

Paramètres de requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
parametersarrayOuiObjets de résultats de laboratoire. Max. 500. Chacun nécessite un nom d'analyte et une evaluation.
interpretationarrayNonInterprétation clinique, utilisée comme contexte uniquement lorsque ai_assist est activé
ai_assistbooleanNonLaisser le modèle placer les marqueurs que les tables d'alias ne reconnaissent pas (par défaut : false)
include_imagebooleanNonDemander l'illustration générée (par défaut : false)
image_waitintegerNonSecondes d'attente pour une illustration fraîchement générée, 0-30 (par défaut : 0)

Champs de l'objet paramètre

ChampTypeRequisDescription
short_namestringOui*Nom de l'analyte tel qu'imprimé par le laboratoire. *Au moins un parmi short_name, long_name, name, parameter_name ou parameter est requis.
long_namestringNonNom complet de l'analyte ; améliore la correspondance des abréviations
evaluationstringNonUne valeur parmi high, low, bad, slightly_high, slightly_low, normal. Seules les valeurs signalées apparaissent sur la carte.
resultstring|numberNonLa valeur mesurée ; sert à classer les régions dessinées
unitstringNonUnité du résultat, quelle que soit l'orthographe
range_normal_minnumberNonBorne inférieure de la plage de référence
range_normal_maxnumberNonBorne supérieure de la plage de référence
categorystringNonCatégorie de laboratoire ; utilisée en repli lorsque le nom de l'analyte est inconnu

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "VOTRE_NOM_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "parameters": [
      {"short_name": "ALT", "long_name": "Alanine aminotransferase", "result": "65", "unit": "U/L", "range_normal_min": 7, "range_normal_max": 45, "evaluation": "high"},
      {"short_name": "AST", "long_name": "Aspartate aminotransferase", "result": "48", "unit": "U/L", "range_normal_min": 8, "range_normal_max": 40, "evaluation": "slightly_high"},
      {"short_name": "TSH", "long_name": "Thyrotropin", "result": "6.2", "unit": "mIU/L", "range_normal_min": 0.4, "range_normal_max": 4.0, "evaluation": "high"}
    ]
  }'

Exemple Python

import requests

def construire_carte_corporelle(parametres, nom_utilisateur, mot_de_passe, inclure_image=False):
    """
    Placer les résultats d'analyses sanguines hors plage sur le corps.

    Args:
        parametres: Liste d'objets de résultats de laboratoire
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API
        inclure_image: Demander l'illustration générée (consomme un crédit image)

    Returns:
        dict: Bloc body map avec régions, légende et URL d'illustration
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze"

    reponse = requests.post(url, json={
        "username": nom_utilisateur,
        "password": mot_de_passe,
        "parameters": parametres,
        "include_image": inclure_image,
    }, timeout=60)
    reponse.raise_for_status()
    return reponse.json()

# Exemple d'utilisation
if __name__ == "__main__":
    resultat = construire_carte_corporelle(
        parametres=[
            {"short_name": "ALT", "result": "65", "unit": "U/L",
             "range_normal_min": 7, "range_normal_max": 45, "evaluation": "high"},
            {"short_name": "TSH", "result": "6.2", "unit": "mIU/L",
             "range_normal_min": 0.4, "range_normal_max": 4.0, "evaluation": "high"},
        ],
        nom_utilisateur="votre_nom_utilisateur",
        mot_de_passe="votre_mot_de_passe",
    )

    body_map = resultat["data"]["body_map"]
    if resultat["data"]["all_clear"]:
        print("Tout va bien — rien de signalé.")
    for region in body_map["regions"]:
        severite = "hors plage" if region["level"] == 2 else "limite"
        print(f"  {region['key']}: {severite} ({', '.join(region['markers'])})")
    print(f"Illustration: {body_map['image_url'] or body_map['fallback_url']}")

Exemple de réponse

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Body map generated successfully",
  "data": {
    "body_map": {
      "v": 4,
      "spec": "v4-thy2-liv2",
      "unmapped": 0,
      "image_url": "/static/body_maps/v4-thy2-liv2.webp",
      "fallback_url": "/body-map/v4-thy2-liv2.0123456789abcdef.webp",
      "regions": [
        {"key": "thyroid", "level": 2, "drawn": true, "markers": ["TSH"]},
        {"key": "liver", "level": 2, "drawn": true, "markers": ["ALT", "AST"]}
      ]
    },
    "engine_version": 4,
    "region_keys": ["brain_nerves", "thyroid", "heart_vessels", "liver", "pancreas", "adrenals", "kidneys", "gut", "reproductive", "blood", "immune", "bones", "muscles"],
    "mode": "deterministic",
    "all_clear": false
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Référence des champs de réponse

ChampTypeDescription
body_map.specstringIdentifiant canonique de cette combinaison de régions et de sévérités. Des bilans identiques partagent une spec, et donc une illustration mise en cache.
body_map.regions[].keystringL'une des 13 clés de région
body_map.regions[].levelinteger2 = hors plage, 1 = limite
body_map.regions[].drawnbooleanIndique si cette région est dessinée sur l'illustration. La légende liste toujours toutes les régions ; six au maximum sont dessinées.
body_map.regions[].markersarrayNoms des marqueurs qui ont placé cette région sur la carte, les plus anormaux en premier
body_map.unmappedintegerMarqueurs signalés qui n'ont pu être placés sur aucune région
body_map.image_urlstring|nullIllustration mise en cache. null tant que le fichier n'existe pas — repliez-vous sur fallback_url.
body_map.fallback_urlstringURL de génération signée. Toujours présente. Répond 503 avec Retry-After tant que l'illustration est en cours de production.
all_clearbooleantrue lorsque rien n'a été signalé ; le corps "tout va bien" commun s'applique
modestringdeterministic ou ai_assisted
Afficher la légende

La réponse est volontairement sans langue : elle porte des clés de région et les noms de marqueurs de votre laboratoire. Traduisez les 13 clés de région dans votre propre client et privilégiez la légende sur l'illustration — si le modèle d'image colore un jour le mauvais organe, la légende à côté reste juste.

POST /api/v1/body-map/validate Publié 18.09.2026

Vérifie les données sans lancer l'analyse et indique lesquels de vos noms d'analytes le moteur reconnaît. L'authentification est requise ; aucun quota n'est consommé, et le point de terminaison continue de fonctionner sur un compte sans crédit restant.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "VOTRE_NOM_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "parameters": [
      {"short_name": "ALT", "result": "65", "evaluation": "high"},
      {"short_name": "Unobtainium", "result": "9", "evaluation": "high"}
    ]
  }'

Exemple de réponse

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "errors": [],
    "parameter_count": 2,
    "flagged_count": 2,
    "recognised": [
      {"name": "ALT", "region": "liver", "level": 2}
    ],
    "unrecognised": [
      {"name": "Unobtainium", "region": null, "level": 2}
    ]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Endpoints de référence

Les deux endpoints de référence sont gratuits et ne nécessitent pas d'authentification.

GET /api/v1/body-map/regions

Liste les 13 régions du corps dans l'ordre canonique, accompagnées des niveaux de sévérité. Utilisez-le pour construire vos propres traductions de légende.

Exemple cURL

curl "https://app.aibloodtestinterpret.com/api/v1/body-map/regions"

Exemple de réponse

{
  "status": "success",
  "data": {
    "regions": [
      {"key": "brain_nerves", "code": "brn", "order": 0},
      {"key": "thyroid", "code": "thy", "order": 1},
      {"key": "heart_vessels", "code": "hrt", "order": 2},
      {"key": "liver", "code": "liv", "order": 3}
    ],
    "region_keys": ["brain_nerves", "thyroid", "heart_vessels", "liver", "pancreas", "adrenals", "kidneys", "gut", "reproductive", "blood", "immune", "bones", "muscles"],
    "levels": {
      "0": "within range — not shown",
      "1": "borderline (slightly high / slightly low)",
      "2": "out of range (high / low / abnormal)"
    },
    "count": 13
  }
}
GET /api/v1/body-map/info

Métadonnées de capacités : si le moteur est activé sur ce déploiement, les limites de requête, le schéma d'authentification et la liste complète des endpoints.

Exemple cURL

curl "https://app.aibloodtestinterpret.com/api/v1/body-map/info"

Sandbox

POST /api/v1/body-map/sandbox renvoie une réponse d'exemple exactement dans la forme produite par /analyze : un client écrit contre le sandbox fonctionne donc sans modification en production. L'authentification est requise, l'appel valide donc aussi vos identifiants, mais aucun quota n'est consommé et aucune analyse n'est effectuée.

Code d'erreurHTTPSignification
AUTH_1001401Identifiants d'authentification manquants
AUTH_1002401Nom d'utilisateur ou mot de passe invalide
AUTH_1004400Identifiants malformés (type incorrect ou trop longs)
QUOTA_1101403Quota API insuffisant
VAL_2001400parameters est absent
VAL_2002400Format de données invalide
VAL_2005400parameters est vide
VAL_2006400Plus de 500 paramètres
VAL_2008400Une ligne de paramètre est malformée ou sans nom
RES_4004422Des résultats sont signalés mais aucun ne correspond à une région du corps
RES_4005503Le moteur body map est désactivé sur ce déploiement

API Âge Biologique du Sang

Publié : 18 septembre 2026

L'API Kantesti Âge Biologique du Sang répond à une question qu'une plage de référence ne peut pas traiter : quel âge a ce sang ? Elle calcule l'âge biologique à partir d'un bilan de routine avec le modèle PhenoAge de Levine publié, et en dérive jusqu'à 18 indices cliniques — FIB-4, HOMA-IR, TyG, eGFR, AIP, NLR, trou anionique et d'autres — qu'un compte rendu de laboratoire imprime rarement.

9
Marqueurs PhenoAge
18
Indices dérivés
39
Langues d'entrée

Un chiffre même à partir d'un bilan partiel

PhenoAge a besoin de neuf marqueurs et la plupart des bilans en contiennent moins. Lorsque les neuf sont présents, l'API renvoie la formule publiée sans modification. Sinon, les entrées manquantes sont complétées à partir de médianes de population et la réponse est renvoyée avec source: "partial", afin que vous sachiez toujours ce que vous avez reçu. Les deux voies sont déterministes : aucun appel de modèle, aucun coût supplémentaire, la même réponse à chaque fois pour un même bilan.

Fonctionnalités Clés
  • PhenoAge de Levine — Le modèle publié, calculé sans modification lorsque les neuf marqueurs sont présents
  • Dégradation progressive — Un bilan partiel donne quand même un chiffre, clairement identifié comme tel, avec la liste des marqueurs manquants
  • 18 indices cliniques — FIB-4, rapport De Ritis, rapport A/G, HOMA-IR, TyG, eAG, eGFR, trou anionique, urée/créatinine, non-HDL, TG/HDL, AIP, CT/HDL, cholestérol résiduel, NLR, indice de Mentzer, saturation de la transferrine, calcium corrigé
  • Conversion automatique des unités — Unités SI et conventionnelles, quelle que soit l'orthographe, avec contrôles de plausibilité physiologique qui rejettent les valeurs impossibles
  • Correspondance multilingue des marqueurs — Noms d'analytes dans 39 langues de rapport, y compris les écritures non latines ; vous n'envoyez jamais de clés internes
  • Mode déterministe — Par défaut. Aucun appel réseau, aucun coût d'IA, sortie reproductible
  • Couches de modèle optionnelles — Identification des lignes, estimation améliorée et note personnelle, chacune derrière son propre indicateur. Un PhenoAge complet à neuf marqueurs n'est jamais remplacé par le modèle.
  • 100 langues — Pour la note personnelle optionnelle
  • Mode Sandbox — Testez l'intégration sans consommer de crédits

Résumé des endpoints

EndpointMéthodeDescriptionAuth
/api/v1/blood-age/analyze POST Calculer l'âge biologique du sang et les indices cliniques dérivés Requis (1 crédit)
/api/v1/blood-age/validate POST Valider les données et voir quels marqueurs le bilan fournit (aucun quota consommé) Requis (Gratuit)
/api/v1/blood-age/sandbox POST Test sandbox avec données fictives (aucun quota consommé) Requis (Gratuit)
/api/v1/blood-age/biomarkers GET Lister les marqueurs lus par le moteur et leurs unités cibles Non requis
/api/v1/blood-age/info GET Métadonnées de capacités, limites et détails d'authentification Non requis
POST /api/v1/blood-age/analyze Publié 18.09.2026

Calcule l'âge biologique du sang et les indices dérivés à partir d'un bilan de laboratoire. Consomme 1 crédit par requête réussie. Une requête qui échoue à la validation, ou dont le bilan ne permet aucun calcul, n'est pas facturée.

Paramètres de requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
parametersarrayOuiObjets de résultats de laboratoire. Max. 500. Chacun nécessite un nom d'analyte et un résultat.
metadataobjectNonEn-tête du compte rendu. Fortement recommandé : PhenoAge comporte un terme d'âge chronologique. Lit patient_age, patient_sex, dob, lab_date.
patientobjectNon{"age": 42, "gender": "female"} — utilisé lorsque les métadonnées ne les contiennent pas
interpretationarrayNonInterprétation clinique, utilisée uniquement comme contexte pour le modèle
languagestringNonLangue de la note personnelle optionnelle (par défaut : en). Voir les langues supportées.
ai_assistbooleanNonLaisser le modèle identifier les noms d'analytes inhabituels (par défaut : false)
ai_estimatebooleanNonLaisser le modèle améliorer un âge partiel (par défaut : false)
ai_notebooleanNonDemander une note personnelle dans language (par défaut : false)

Les neuf marqueurs PhenoAge

Envoyez-les sous les noms imprimés par votre laboratoire — la correspondance se fait par le nom, dans l'une des 39 langues de rapport supportées, et les unités sont converties automatiquement.

MarqueurNom courantUnité cible
albuminAlbumineg/L
creatinineCréatinineµmol/L
glucoseGlucose / Glycémie à jeunmmol/L
crpProtéine C-réactivemg/L
lymphLymphocytes%
mcvVolume globulaire moyenfL
rdwIndice de distribution des globules rouges%
alpPhosphatase alcalineU/L
wbcNumération leucocytaire10⁹/L

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "VOTRE_NOM_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "metadata": {"patient_age": "40", "patient_sex": "Male", "lab_date": "2026-09-11"},
    "parameters": [
      {"short_name": "Albumin", "result": 4.4, "unit": "g/dL", "range_normal_min": 3.5, "range_normal_max": 5.0},
      {"short_name": "Creatinine", "result": 0.9, "unit": "mg/dL", "range_normal_min": 0.6, "range_normal_max": 1.2},
      {"short_name": "Glucose", "result": 90, "unit": "mg/dL", "range_normal_min": 70, "range_normal_max": 99},
      {"short_name": "CRP", "result": 1.0, "unit": "mg/L", "range_normal_min": 0, "range_normal_max": 5},
      {"short_name": "Lymphocytes", "result": 30, "unit": "%", "range_normal_min": 20, "range_normal_max": 40},
      {"short_name": "MCV", "result": 90, "unit": "fL", "range_normal_min": 80, "range_normal_max": 100},
      {"short_name": "RDW", "result": 13, "unit": "%", "range_normal_min": 11.5, "range_normal_max": 14.5},
      {"short_name": "ALP", "result": 70, "unit": "U/L", "range_normal_min": 40, "range_normal_max": 130},
      {"short_name": "WBC", "result": 6.0, "unit": "10^9/L", "range_normal_min": 4, "range_normal_max": 11}
    ]
  }'

Exemple Python

import requests

def age_sanguin_biologique(parametres, metadonnees, nom_utilisateur, mot_de_passe):
    """
    Calculer l'âge biologique du sang à partir d'un bilan sanguin de routine.

    Args:
        parametres: Liste d'objets de résultats de laboratoire
        metadonnees: En-tête du compte rendu portant patient_age et patient_sex
        nom_utilisateur: Nom d'utilisateur API
        mot_de_passe: Mot de passe API

    Returns:
        dict: Bloc âge du sang, indices dérivés et résumé à plat
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze"

    reponse = requests.post(url, json={
        "username": nom_utilisateur,
        "password": mot_de_passe,
        "parameters": parametres,
        "metadata": metadonnees,
    }, timeout=60)
    reponse.raise_for_status()
    return reponse.json()

# Exemple d'utilisation
if __name__ == "__main__":
    resultat = age_sanguin_biologique(
        parametres=[
            {"short_name": "Albumin", "result": 4.4, "unit": "g/dL"},
            {"short_name": "Creatinine", "result": 0.9, "unit": "mg/dL"},
            {"short_name": "Glucose", "result": 90, "unit": "mg/dL"},
            {"short_name": "CRP", "result": 1.0, "unit": "mg/L"},
            {"short_name": "Lymphocytes", "result": 30, "unit": "%"},
            {"short_name": "MCV", "result": 90, "unit": "fL"},
            {"short_name": "RDW", "result": 13, "unit": "%"},
            {"short_name": "ALP", "result": 70, "unit": "U/L"},
            {"short_name": "WBC", "result": 6.0, "unit": "10^9/L"},
        ],
        metadonnees={"patient_age": "40", "patient_sex": "Male"},
        nom_utilisateur="votre_nom_utilisateur",
        mot_de_passe="votre_mot_de_passe",
    )

    resume = resultat["data"]["summary"]
    if resume["status"] != "ok":
        print(f"Aucun âge calculé : {resume['status']}")
    else:
        print(f"Chronologique : {resume['chronological_age']}")
        print(f"Biologique :    {resume['biological_age']} ({resume['source']})")
        print(f"Écart :         {resume['delta_years']:+} ans")

    for index in resultat["data"]["blood_age"]["indices"]:
        print(f"  {index['key']}: {index['value']} {index['unit']} [{index['band']}]")

Exemple de réponse

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Biological blood age computed successfully",
  "data": {
    "blood_age": {
      "version": 1,
      "age": {
        "status": "ok",
        "source": "formula",
        "chrono": 40,
        "pheno": 35.1,
        "delta": -4.9,
        "sex": "m",
        "found": ["albumin", "creatinine", "glucose", "crp", "lymph", "mcv", "rdw", "alp", "wbc"],
        "missing": [],
        "labels": {"albumin": "Albumin", "creatinine": "Creatinine", "glucose": "Glucose"},
        "inputs": {"albumin": 44.0, "creatinine": 79.56, "glucose": 5.0}
      },
      "indices": [
        {"key": "fib4", "group": "liver", "value": 1.12, "unit": "", "band": "ok", "from": ["AST", "ALT", "PLT"]},
        {"key": "egfr", "group": "kidneys", "value": 98.0, "unit": "mL/min/1.73m2", "band": "ok", "from": ["Creatinine"]},
        {"key": "nlr", "group": "immune", "value": 1.8, "unit": "", "band": "ok", "from": ["Neutrophils", "Lymphocytes"]}
      ]
    },
    "engine_version": 1,
    "mode": "deterministic",
    "summary": {
      "status": "ok",
      "source": "formula",
      "chronological_age": 40,
      "biological_age": 35.1,
      "delta_years": -4.9,
      "sex": "m",
      "markers_found": 9,
      "markers_missing": [],
      "indices_count": 3
    }
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Référence des champs de réponse

ChampTypeDescription
summary.statusstringok, missing_age, missing_markers, needs_markers ou unavailable
summary.sourcestringformula (les neuf marqueurs), partial (médianes imputées) ou ai (estimation du modèle, uniquement avec ai_estimate)
summary.chronological_ageinteger|nullÂge lu dans les métadonnées ou dans l'objet patient
summary.biological_agenumber|nullL'âge du sang calculé, en années
summary.delta_yearsnumber|nullBiologique moins chronologique. Une valeur négative signifie plus jeune que le calendrier.
summary.markers_missingarrayLesquels des neuf marqueurs PhenoAge le bilan n'a pas fournis
blood_age.age.inputsobjectLes valeurs converties réellement utilisées, dans les unités cibles
blood_age.age.labelsobjectLe nom propre à votre laboratoire pour chaque marqueur reconnu par le moteur
blood_age.indices[].bandstringok, borderline, high, low ou info
blood_age.indices[].fromarrayLes lignes de laboratoire dont cet indice a été dérivé
modestringdeterministic ou ai_assisted
Fournir un âge chronologique

PhenoAge comporte un terme d'âge : sans âge chronologique, la réponse revient avec status: "missing_age" et sans chiffre. Envoyez-le dans metadata.patient_age, dans patient.age, ou sous forme de date de naissance dans patient.dob. La formule s'applique entre 18 et 100 ans.

POST /api/v1/blood-age/validate Publié 18.09.2026

Vérifie les données sans lancer l'analyse et indique lesquels des neuf marqueurs PhenoAge votre bilan fournit et si un âge chronologique a pu être lu — les deux éléments qui décident si vous obtiendrez la formule complète ou l'estimation partielle. L'authentification est requise ; aucun quota n'est consommé, et le point de terminaison continue de fonctionner sur un compte sans crédit restant.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "VOTRE_NOM_UTILISATEUR",
    "password": "VOTRE_MOT_DE_PASSE",
    "metadata": {"patient_age": "40", "patient_sex": "Male"},
    "parameters": [
      {"short_name": "MCV", "result": 90, "unit": "fL"},
      {"short_name": "WBC", "result": 6.0, "unit": "10^9/L"},
      {"short_name": "Lymphocytes", "result": 30, "unit": "%"}
    ]
  }'

Exemple de réponse

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "errors": [],
    "parameter_count": 3,
    "looks_like_blood_panel": true,
    "chronological_age": 40,
    "sex": "m",
    "phenoage_markers_found": ["lymph", "mcv", "wbc"],
    "phenoage_markers_missing": ["albumin", "creatinine", "glucose", "crp", "rdw", "alp"],
    "expected_source": "partial",
    "recognised_markers": ["lymph_pct", "mcv", "wbc"]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Endpoints de référence

Les deux endpoints de référence sont gratuits et ne nécessitent pas d'authentification.

GET /api/v1/blood-age/biomarkers

Liste les neuf entrées PhenoAge, chaque marqueur que le moteur sait lire avec son unité cible, et la tranche d'âge à laquelle la formule s'applique.

Exemple cURL

curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/biomarkers"

Exemple de réponse

{
  "status": "success",
  "data": {
    "phenoage_inputs": ["albumin", "creatinine", "glucose", "crp", "lymph", "mcv", "rdw", "alp", "wbc"],
    "phenoage_age_range": {"min": 18, "max": 100},
    "markers": [
      {"key": "albumin", "target_unit": "g/l"},
      {"key": "alp", "target_unit": "u/l"},
      {"key": "alt", "target_unit": "u/l"}
    ],
    "marker_count": 33,
    "name_matching": "Markers are matched by the analyte name your laboratory printed, in any of the supported report languages. You never send these keys."
  }
}
GET /api/v1/blood-age/info

Métadonnées de capacités : si le moteur est activé sur ce déploiement, les deux modes et ce que chacun coûte, les limites de requête, le schéma d'authentification et les langues supportées.

Exemple cURL

curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/info"

Sandbox

POST /api/v1/blood-age/sandbox renvoie une réponse d'exemple exactement dans la forme produite par /analyze : un client écrit contre le sandbox fonctionne donc sans modification en production. L'authentification est requise, l'appel valide donc aussi vos identifiants, mais aucun quota n'est consommé et aucune analyse n'est effectuée.

Code d'erreurHTTPSignification
AUTH_1001401Identifiants d'authentification manquants
AUTH_1002401Nom d'utilisateur ou mot de passe invalide
AUTH_1004400Identifiants malformés (type incorrect ou trop longs)
QUOTA_1101403Quota API insuffisant
VAL_2001400parameters est absent
VAL_2002400Format de données invalide
VAL_2003400Code de langue non supporté
VAL_2005400parameters est vide
VAL_2006400Plus de 500 paramètres
VAL_2007400Objet patient invalide
VAL_2008400Une ligne de paramètre est malformée ou sans nom
VAL_2009400Valeur de patient.gender non supportée
RES_4004422Rien de calculable à partir de ces paramètres
RES_4005503Le moteur âge du sang est désactivé sur ce déploiement

API Santé ADN : interprétation de test ADN, rapport ADN + sang et conseiller en compléments alimentaires

Publié : 23 septembre 2026

Nous sommes fiers de présenter l'API Santé ADN Kantesti : trois nouveaux modules d'IA qui transforment le test ADN d'un patient en rapports cliniques. L'Interprétation de Test ADN lit un fichier de génotypage brut ou un rapport génétique et rédige un rapport de santé génétique complet. Le Rapport de Santé ADN + Sang associe ce rapport à une analyse de sang interprétée et montre où les gènes et les valeurs de laboratoire se confirment ou se contredisent. Le Conseiller en Compléments transforme l'ADN, l'analyse de sang et un court questionnaire en un plan de compléments alimentaires personnalisé, construit sur les propres produits de votre clinique.

334
Marqueurs ADN sélectionnés
20
Catégories de santé
100+
Langues de rapport

Vérifié sur votre propre fichier

Un fichier de génotypage brut est lu sur le serveur et comparé à un panel sélectionné de 334 marqueurs répartis en 20 catégories, des gènes de la méthylation, cardiovasculaires et lipidiques jusqu'à la pharmacogénomique, au métabolisme des nutriments, au statut de porteur et à la longévité. Chaque résultat rédigé par l'IA est vérifié par rapport au fichier envoyé : un rsID que le fichier ne contient pas est écarté, et chaque génotype est aligné sur la valeur inscrite dans le fichier. Le rapport ne peut donc pas inventer de résultat.

Fonctionnalités Clés
  • Toutes les sources ADN courantes — Fichiers bruts de 23andMe, AncestryDNA, MyHeritage, FTDNA et LivingDNA, fichiers VCF, y compris dans une archive .zip ou .gz ; lignes rsID collées ; ou un rapport génétique sous forme de 6 fichiers PDF, JPG ou PNG au maximum
  • Rapport génétique complet — Résultats par domaine de santé, risques de maladies, statut de porteur, pharmacogénomique (phénotypes de métaboliseur prédits et classes de médicaments concernées), nutrigénomique, traits, examens de suivi recommandés et signaux d'alerte
  • Les gènes face aux valeurs de laboratoire — Le rapport ADN + sang qualifie chaque lien entre un résultat génétique et une valeur de laboratoire de confirms, contradicts, neutral ou watch, avec une matrice des risques, des actions prioritaires et un plan de suivi
  • Des plans de compléments encadrés par des règles de sécurité — Dose, forme, moment de prise, durée, interactions et dates de contrôle ; les doses restent dans les limites supérieures de sécurité, des seuils adaptés à la grossesse s'appliquent, et tout ce qui relève d'un prescripteur est placé dans clinician_review_required
  • Votre propre catalogue de produits — Le conseiller recommande les produits que votre clinique propose, les marque comme clinic_library et, en mode « uniquement les produits de la clinique », liste les besoins que votre catalogue ne couvre pas
  • Chaînable et sans état — Envoyez le rapport du module 1 directement aux modules 2 et 3. Rien n'est conservé au nom d'un patient, et les fichiers de génotypage bruts sont supprimés dès leur lecture terminée
  • 100+ langues de rapport — Le rapport est rédigé dans la langue que vous demandez
  • Mode asynchrone — Ajoutez ?async=1 et interrogez /api/jobs/<job_id> : une analyse longue ne se heurte ainsi jamais au délai d'expiration de la passerelle
  • Mode Sandbox — Testez l'intégration sans consommer de crédits
Comment les trois modules s'enchaînent

1. POST /api/v1/dna-interpretation/analyze avec le fichier ADN renvoie data.report. 2. Envoyez ce rapport avec une analyse de sang interprétée à /api/v1/dna-blood-report/analyze. 3. Envoyez le même rapport, les réponses au questionnaire et, en option, l'analyse de sang à /api/v1/dna-supplements/analyze. Les modules 2 et 3 acceptent le rapport ADN tel qu'il a été renvoyé : l'objet report, l'objet data complet ou la réponse entière.

Résumé des endpoints

EndpointMéthodeDescriptionAuth
/api/v1/dna-interpretation/analyzePOSTFichier ADN, lignes rsID collées ou pages de rapport → rapport de santé génétique completRequis (1 crédit)
/api/v1/dna-interpretation/validatePOSTLire le fichier envoyé et afficher ce qui a été trouvé, sans appel à l'IARequis (Gratuit)
/api/v1/dna-interpretation/sandboxPOSTExemple de rapport génétiqueRequis (Gratuit)
/api/v1/dna-interpretation/infoGETEntrées acceptées, limites et langues de rapportNon requis
/api/v1/dna-blood-report/analyzePOSTRapport ADN + analyse de sang interprétée → rapport de santé combinéRequis (1 crédit)
/api/v1/dna-blood-report/validatePOSTVérifier les données envoyées sans appel à l'IARequis (Gratuit)
/api/v1/dna-blood-report/sandboxPOSTExemple de rapport combinéRequis (Gratuit)
/api/v1/dna-blood-report/infoGETChamps de requête et limitesNon requis
/api/v1/dna-supplements/analyzePOSTRapport ADN + analyse de sang (optionnelle) + questionnaire → plan de compléments alimentairesRequis (1 crédit)
/api/v1/dna-supplements/validatePOSTVérifier les données et les réponses sans appel à l'IARequis (Gratuit)
/api/v1/dna-supplements/sandboxPOSTExemple de plan de compléments alimentairesRequis (Gratuit)
/api/v1/dna-supplements/questionnaireGETLes 25 questions et leurs réponses autoriséesNon requis
/api/v1/dna-supplements/settingsGET PUTLire ou mettre à jour le catalogue de produits de votre clinique et les réglages du conseillerRequis (Gratuit)
/api/v1/dna-supplements/infoGETChamps de requête et limitesNon requis
POST /api/v1/dna-interpretation/analyze Publié 23.09.2026

Interprète un test ADN et renvoie un rapport de santé génétique complet. Envoyez un fichier en multipart/form-data, ou des lignes de génotype collées en JSON. Le fichier est lu pendant que vous attendez : un fichier illisible reçoit donc immédiatement une réponse 400 et ne coûte rien. Un crédit n'est débité qu'une fois le rapport produit.

Paramètres de requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API (ou utilisez l'authentification HTTP Basic)
passwordstringOuiVotre mot de passe API
filefileOui*Un fichier de génotypage brut (.txt, .csv, .tsv, .vcf, .zip, .gz, jusqu'à 80 Mo) ou jusqu'à 6 fichiers de rapport (PDF jusqu'à 20 Mo, JPG/PNG jusqu'à 10 Mo chacun). *Envoyez soit file, soit genotype_text.
genotype_textstringOui*Lignes de génotype collées (rsID, chromosome, position, génotype), jusqu'à 2 000 000 caractères
languagestringNonCode de la langue du rapport, par ex. en, de, ar (par défaut : en). Voir les langues prises en charge.
patientobjectNonage, sex, diagnoses, comorbidities, medications, treatments, notes. Dans une requête multipart, envoyez-le sous forme de chaîne JSON.
source_labelstringNonLe nom que vous donnez à la source, jusqu'à 120 caractères

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-interpretation/analyze?async=1" \
  -u "VOTRE_NOM_UTILISATEUR:VOTRE_MOT_DE_PASSE" \
  -F "file=@genome_raw_data.txt" \
  -F "language=en" \
  -F 'patient={"age": 41, "sex": "female", "medications": "clopidogrel"}'

# Réponse 202 Accepted : {"status": "pending", "job_id": "...", "poll_url": "/api/jobs/...", ...}
curl -u "VOTRE_NOM_UTILISATEUR:VOTRE_MOT_DE_PASSE" "https://app.aibloodtestinterpret.com/api/jobs/JOB_ID"

Exemple Python

import time
import requests

BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("VOTRE_NOM_UTILISATEUR", "VOTRE_MOT_DE_PASSE")


def run(path, poll=True, **kwargs):
    """POST en mode asynchrone, puis interroger /api/jobs/<id> jusqu'à ce que le rapport soit prêt."""
    resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
    body = resp.json()
    if resp.status_code != 202:
        return body                      # une erreur, ou une réponse synchrone
    while True:
        time.sleep(body.get("poll_interval_ms", 3000) / 1000)
        job = requests.get(f"{BASE}{body['poll_url']}", auth=AUTH, timeout=30).json()
        if job["status"] in ("completed", "failed"):
            return job["result"]["response"]


# 1) Interprétation de test ADN
with open("genome_raw_data.txt", "rb") as fh:
    dna = run("/api/v1/dna-interpretation/analyze",
              files={"file": fh},
              data={"language": "en", "patient": '{"age": 41, "sex": "female"}'})
report = dna["data"]["report"]
print(report["executive_summary"])
for section in report["sections"]:
    print(section["title"], "-", section["risk_level"])

Exemple de réponse

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "DNA test interpretation completed successfully",
  "data": {
    "analysis_id": "DNA-3F9A1C07B2",
    "module": "dna_interpretation",
    "generated_at": "2026-09-23T10:30:00Z",
    "language": "en",
    "source": {
      "kind": "raw", "format": "23andme", "build": "GRCh37",
      "total_records": 638463, "called": 631022, "no_call_rate": 0.0117,
      "inferred_sex": "female", "panel_total": 334, "panel_found": 291,
      "filename": "genome_raw_data.txt", "warnings": []
    },
    "report": {
      "report_type": "dna",
      "title": "Genetic health report",
      "executive_summary": "Array genotyping with good coverage of the clinical panel...",
      "overall_assessment": {"level": "slightly_elevated", "summary": "Mostly typical findings with a few actionable ones."},
      "data_quality": {"source": "23andMe v5 raw file", "markers_analyzed": 291, "coverage_note": "...", "limitations": "..."},
      "sections": [
        {
          "key": "nutrigenomics", "title": "Nutrient metabolism", "risk_level": "slightly_elevated",
          "summary": "Reduced folate cycle activity...",
          "findings": [
            {"gene": "MTHFR", "rsid": "rs1801133", "genotype": "AG", "phenotype": "C677T heterozygous",
             "risk_level": "slightly_elevated", "evidence": "established",
             "explanation": "About 65% of typical enzyme activity.", "recommendation": "Check homocysteine."}
          ]
        }
      ],
      "pharmacogenomics": [
        {"gene": "CYP2C19", "rsids": ["rs4244285"], "predicted_phenotype": "Intermediate metabolizer",
         "affected_drugs": ["clopidogrel", "omeprazole"], "recommendation": "Review before prescribing clopidogrel."}
      ],
      "disease_risks": [], "carrier_status": [], "nutrigenomics": [], "traits": [],
      "lifestyle_recommendations": ["..."], "recommended_tests": [{"test": "Homocysteine", "reason": "MTHFR C677T"}],
      "red_flags": [], "limitations": "Consumer arrays miss rare variants.",
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  },
  "timestamp": "2026-09-23T10:30:00Z"
}

Référence des champs de réponse

ChampTypeDescription
sourceobjectCe qui a été lu : kind (raw, text ou document), format et assemblage du génome détectés, nombre d'enregistrements et de génotypes déterminés, nombre de marqueurs du panel de 334 retrouvés, et avertissements de la lecture
report.overall_assessment.levelstringtypical, slightly_elevated, elevated ou high
report.sections[]arrayUne entrée par domaine de santé, avec un risk_level et ses findings
report.sections[].findings[]arraygene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation
report.pharmacogenomics[]arrayPhénotype de métaboliseur prédit pour chaque gène et classes de médicaments potentiellement concernées. Le rapport ne donne jamais de posologie de prescription.
report.carrier_status[]arraycarrier, not_detected, affected_pattern ou inconclusive, toujours à confirmer par un test génétique clinique
report.disease_risks[], nutrigenomics[], traits[]arrayRisques de maladies, résultats nutrigénomiques et traits, avec les gènes en cause
report.recommended_tests[], red_flags[]arrayExamens de suivi avec leur justification, et résultats nécessitant une attention rapide
POST /api/v1/dna-interpretation/validate Publié 23.09.2026

Lit le fichier envoyé exactement comme /analyze et indique ce qui a été trouvé, sans appel à l'IA. L'authentification est requise ; aucun crédit n'est consommé. Utilisez-le pour vérifier un fichier avant de dépenser un crédit.

Exemple de réponse

{
  "status": "success",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "language": "en",
    "source": {"kind": "raw", "format": "ancestrydna", "build": "GRCh37", "panel_total": 334, "panel_found": 287, "warnings": []}
  }
}
POST /api/v1/dna-blood-report/analyze Publié 23.09.2026

Réunit un rapport ADN et une analyse de sang interprétée en un seul rapport de santé. Chaque lien entre un résultat génétique et une valeur de laboratoire est classé, puis viennent une matrice des risques, des actions prioritaires et un plan de suivi. Un crédit par requête réussie.

Paramètres de requête

ParamètreTypeRequisDescription
dna_reportobjectOuiLe rapport renvoyé par /api/v1/dna-interpretation/analyze : data.report, l'objet data complet ou la réponse entière
blood_testobject|arrayOuiUne analyse de sang interprétée telle que la renvoie l'API analyse de sang (metadata, parameters, interpretation), ou simplement une liste de 500 paramètres au maximum, chacun avec un nom et un result
languagestringNonCode de la langue du rapport (par défaut : en)
patientobjectNonMêmes champs que pour l'Interprétation de Test ADN

Exemple Python

# 2) Rapport de santé ADN + sang (utilise run() et dna de l'exemple ci-dessus)
blood_test = {
    "parameters": [
        {"short_name": "25-OH D", "result": 18, "unit": "ng/mL", "range_normal_min": 30, "range_normal_max": 100, "evaluation": "low"},
        {"short_name": "Homocysteine", "result": 13.2, "unit": "µmol/L", "evaluation": "high"}
    ]
}
combined = run("/api/v1/dna-blood-report/analyze",
               json={"dna_report": dna, "blood_test": blood_test, "language": "en"})
for link in combined["data"]["report"]["correlations"]:
    print(link["topic"], link["concordance"], link["action"])

Exemple de réponse

{
  "status": "success",
  "message": "DNA + blood health report completed successfully",
  "data": {
    "analysis_id": "DNB-8C21E40A9D",
    "module": "dna_blood_report",
    "language": "en",
    "report": {
      "report_type": "dna_blood",
      "executive_summary": "The low vitamin D level matches the GC genotype; homocysteine is borderline, in line with MTHFR C677T.",
      "overall_status": {"level": "watch", "summary": "Two gene-lab matches to act on."},
      "correlations": [
        {"topic": "Vitamin D", "genetic_finding": "GC rs2282679 GT", "lab_finding": "25-OH D 18 ng/mL",
         "concordance": "confirms", "interpretation": "Genetic tendency and lab value agree.", "action": "Supplement and recheck in 12 weeks."}
      ],
      "risk_matrix": [{"area": "Folate cycle", "genetic_risk": "slightly_elevated", "lab_status": "borderline", "combined_assessment": "Watch homocysteine."}],
      "priority_actions": [{"priority": "high", "action": "Start vitamin D3", "why": "Deficient level and GC genotype"}],
      "monitoring_plan": [{"marker": "25-OH vitamin D", "interval": "12 weeks", "reason": "Dose check"}],
      "lifestyle_plan": [], "questions_for_clinician": [], "red_flags": [],
      "limitations": "One blood test; values vary.",
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  }
}

Référence des champs de réponse

ChampTypeDescription
report.overall_status.levelstringgood, watch, attention ou urgent
report.correlations[].concordancestringconfirms, contradicts, neutral ou watch
report.risk_matrix[]arrayPar domaine : genetic_risk, lab_status (normal, borderline, abnormal, not_measured) et une évaluation combinée
report.priority_actions[]arraypriority (high, medium, low), l'action et sa justification
report.monitoring_plan[]arrayQuel marqueur recontrôler, quand et pourquoi
POST /api/v1/dna-supplements/analyze Publié 23.09.2026

Élabore un plan de compléments alimentaires personnalisé à partir du rapport ADN, des réponses au questionnaire et, en option, d'une analyse de sang interprétée. Le catalogue de produits et les réglages du conseiller de votre clinique sont appliqués automatiquement. Un crédit par requête réussie.

Paramètres de requête

ParamètreTypeRequisDescription
dna_reportobjectOuiLe rapport renvoyé par /api/v1/dna-interpretation/analyze
answersobjectOuiRéponses au questionnaire. diet_type et pregnancy sont obligatoires ; consultez GET /api/v1/dna-supplements/questionnaire pour les 25 questions. Les clés et valeurs inconnues sont ignorées.
blood_testobject|arrayNonMême format que pour le Rapport de Santé ADN + Sang
use_clinic_cataloguebooleanNonAppliquer le catalogue de produits et les réglages de votre clinique (par défaut : true)
languagestringNonCode de la langue du rapport (par défaut : en)
patientobjectNonMêmes champs que pour l'Interprétation de Test ADN. Les médicaments indiqués ici sont vérifiés pour les interactions.

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/analyze?async=1" \
  -u "VOTRE_NOM_UTILISATEUR:VOTRE_MOT_DE_PASSE" \
  -H "Content-Type: application/json" \
  -d '{
    "dna_report": { ...data.report issu de votre interprétation ADN... },
    "answers": {"diet_type": "vegetarian", "pregnancy": "no", "sun_exposure": "low", "goals": ["energy", "immunity"]},
    "language": "en"
  }'

Exemple Python

# 3) Plan de compléments alimentaires (utilise run(), dna et blood_test des exemples ci-dessus)
plan = run("/api/v1/dna-supplements/analyze",
           json={"dna_report": dna, "blood_test": blood_test,
                 "answers": {"diet_type": "vegetarian", "pregnancy": "no"},
                 "language": "en"})
for item in plan["data"]["report"]["recommendations"]:
    print(item["name"], item["dose"], item["timing"], "-", item["source"])

Exemple de réponse

{
  "status": "success",
  "message": "Supplement plan completed successfully",
  "data": {
    "analysis_id": "SUP-51B7D2E6F0",
    "module": "dna_supplements",
    "language": "en",
    "catalogue": {"mode": "prefer", "products": 24},
    "report": {
      "report_type": "supplement",
      "summary": "Plan built from GC and MTHFR findings, a low vitamin D level and a vegetarian diet.",
      "recommendations": [
        {"name": "Vitamin D3 + K2", "source": "clinic_library", "product": "Vitamin D3 + K2 (Clinic Brand)",
         "form": "softgel", "dose": "2000 IU", "timing": "with lunch", "duration": "12 weeks", "priority": "high",
         "rationale": {"genetic": "GC rs2282679 GT", "lab": "25-OH D 18 ng/mL", "questionnaire": "little sun"},
         "evidence": "established", "cautions": ["Recheck calcium"], "interactions": ["Thiazide diuretics"],
         "retest": "25-OH D in 12 weeks"}
      ],
      "avoid_or_caution": [{"name": "High-dose vitamin A", "reason": "Pregnancy planning"}],
      "uncovered_needs": [],
      "dietary_sources": [{"nutrient": "Folate", "foods": ["lentils", "spinach"]}],
      "retest_plan": [{"marker": "25-OH vitamin D", "when": "12 weeks", "why": "Dose check"}],
      "clinician_review_required": ["Thiazide co-medication"],
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  }
}

Référence des champs de réponse

ChampTypeDescription
catalogueobjectLe mode de catalogue appliqué (prefer, only, off) et le nombre de produits de la clinique disponibles
report.recommendations[]arrayname, form, dose, timing, duration, priority, la justification rationale (génétique / biologique / questionnaire), evidence, cautions, interactions et retest
report.recommendations[].sourcestringclinic_library pour un produit de votre catalogue (nommé dans product), sinon evidence_based
report.uncovered_needs[]arrayEn mode « uniquement les produits de la clinique » : les besoins que votre catalogue ne couvre pas
report.clinician_review_required[]arrayTout ce qui nécessite la décision d'un prescripteur : interactions, grossesse, maladie rénale ou hépatique, anticoagulants, doses proches de la limite supérieure de sécurité
report.avoid_or_caution[], dietary_sources[], retest_plan[]arrayCe qu'il faut éviter, les sources alimentaires de chaque nutriment, et quand refaire un contrôle
GET PUT /api/v1/dna-supplements/settings Publié 23.09.2026

Lit ou met à jour le catalogue de produits de votre clinique et les réglages du conseiller. Il s'agit du même catalogue que dans le panneau de la clinique et dans IA Nutrition : un produit ajouté à un endroit est disponible partout. L'authentification est requise ; aucun crédit n'est consommé. Envoyez catalogue, settings ou les deux ; le catalogue remplace la liste entière.

ChampTypeDescription
catalogue[]arrayJusqu'à 200 produits : name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (produits de la clinique lorsqu'ils conviennent, suggestions fondées sur les preuves dans les autres cas), only (uniquement les produits de la clinique) ou off (ignorer le catalogue)
settings.instructionsstringVos propres instructions pour l'IA, jusqu'à 1 500 caractères. Les règles de sécurité restent toujours prioritaires.
settings.max_itemsintegerNombre maximal de recommandations par plan, de 3 à 12

Exemple cURL

curl -X PUT "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/settings" \
  -u "VOTRE_NOM_UTILISATEUR:VOTRE_MOT_DE_PASSE" \
  -H "Content-Type: application/json" \
  -d '{
    "catalogue": [
      {"name": "Vitamin D3 + K2", "brand": "Clinic Brand", "form": "softgel", "dosage": "2000 IU / 75 µg", "category": "vitamin"},
      {"name": "Omega-3 EPA/DHA", "brand": "Clinic Brand", "form": "softgel", "dosage": "1000 mg", "category": "omega"}
    ],
    "settings": {"mode": "prefer", "instructions": "Prefer our own brand.", "max_items": 8}
  }'

Endpoints de référence

GET /api/v1/dna-supplements/questionnaire liste les 25 questions (régime alimentaire, repas, fruits et légumes, poisson, viande rouge, produits laitiers, alcool, tabac, caféine, exposition au soleil, activité physique, sommeil, stress, digestion, énergie, compléments actuels, médicaments, allergies, pathologies, grossesse, objectifs, budget, forme préférée et remarques) avec leurs types et leurs valeurs autorisées. Les trois endpoints /info renvoient les entrées acceptées, les limites, le coût en crédits et la liste complète des langues de rapport. Aucun d'eux ne nécessite d'authentification.

Sandbox et mode asynchrone

POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox et /api/v1/dna-supplements/sandbox renvoient un rapport d'exemple exactement dans la forme produite par /analyze. L'authentification est requise ; aucun crédit n'est consommé.

Un rapport d'IA prend généralement une à trois minutes. Ajoutez ?async=1 (ou l'en-tête X-Async: 1) et la requête répond immédiatement 202 avec un job_id. Interrogez GET /api/jobs/<job_id> avec les mêmes identifiants jusqu'à ce que status vaille completed ou failed. La réponse finale se trouve dans result.response, identique à la réponse synchrone.

Code d'erreurHTTPSignification
AUTH_1001401Identifiants d'authentification manquants
AUTH_1002401Nom d'utilisateur ou mot de passe invalide
QUOTA_1101403Quota API insuffisant
VAL_2001400Un champ obligatoire est absent : file ou genotype_text, dna_report, blood_test, ou une réponse obligatoire
VAL_2002400Données de génotype illisibles, type de fichier non pris en charge, JSON invalide ou dna_report invalide
VAL_2003400Langue de rapport non prise en charge
VAL_2006400Taille maximale dépassée : texte collé, paramètres sanguins (500) ou catalogue (200 produits)
VAL_2007400Objet patient invalide
VAL_2008400Aucun paramètre d'analyse de sang exploitable (nom et résultat)
PROC_3003500La réponse de l'IA n'a pas pu être produite ou validée ; réessayez. Aucun crédit n'est débité.
RES_4005503Les modules ADN sont désactivés sur ce déploiement
Aide à la décision clinique

L'API Santé ADN produit des informations générées par l'IA à l'intention du clinicien en charge du patient. Il ne s'agit ni d'un diagnostic ni d'une prescription. Les puces de génotypage grand public ne constituent pas un séquençage clinique : confirmez les résultats exploitables et le statut de porteur par un test génétique clinique validé avant d'agir.

ICR - Reconnaissance Intelligente de Caractères API

Publié : 14 février 2026

L'API Kantesti ICR (Reconnaissance Intelligente de Caractères) est une technologie avancée d'extraction de texte de documents qui va bien au-delà de l'OCR traditionnel. Alimentée par le moteur IA propriétaire de Kantesti, l'ICR fournit une sortie JSON structurée à partir de tout type de document, y compris les rapports médicaux, les factures, les formulaires et plus encore.

79%
Plus rapide que l'OCR
99,7%
Taux de précision
100+
Langues

Kantesti ICR vs OCR Traditionnel

Dans les tests de benchmark, Kantesti ICR a démontré une performance 79% supérieure par rapport aux solutions OCR traditionnelles. L'ICR comprend la structure du document, préserve les mises en page des tableaux, extrait les métadonnées et renvoie du JSON structuré propre.

Fonctionnalités Clés ICR
  • Sortie JSON Structurée — Tableaux, sections, métadonnées et texte brut en format JSON propre
  • Détection du Type de Document — Identifie automatiquement les rapports médicaux, factures, formulaires, lettres, etc.
  • Extraction de Tableaux — Préserve les en-têtes et les données des lignes avec la structure complète
  • Support Multi-format — Traitement de documents PDF, JPG, JPEG, PNG
  • Intégration Tests Sanguins (Kan) — Point d'accès spécialisé pour l'extraction de documents de tests sanguins
  • Mode Sandbox — Testez l'intégration sans consommer de crédits
  • Système de Crédits — 0,5 crédit par appel API

Résumé des Points d'Accès ICR

Point d'accèsMéthodeDescriptionCoût
/api/icr/v1/extractPOSTExtraction de texte ICR0,5 crédit
/api/icr/v1/sandboxPOSTTest sandbox ICRGratuit
/api/icr/v1/kanPOSTAnalyse de documents de tests sanguins0,5 crédit
/api/icr/v1/kan/sandboxPOSTTest sandbox tests sanguinsGratuit
/api/icr/infoGETDocumentation et fonctionnalités APIGratuit
/api/icr/healthGETPoint de contrôle santéGratuit
/api/icr/v1/quotaPOSTVérifier les crédits ICR restantsGratuit
POST /api/icr/v1/extract Publié 14.02.2026

Extrait tout le contenu textuel des documents téléchargés en utilisant la technologie ICR de Kantesti.

Paramètres de Requête

ParamètreTypeRequisDescription
usernamestringOuiVotre nom d'utilisateur API
passwordstringOuiVotre mot de passe API
filefileOuiFichier document (PDF, JPG, JPEG, PNG)
languagestringNonLangue de sortie (défaut : en)

Exemple cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/extract" \
  -F "username=VOTRE_NOM_UTILISATEUR" \
  -F "password=VOTRE_MOT_DE_PASSE" \
  -F "language=fr" \
  -F "[email protected]"

Exemple Python

import requests

def icr_extract(file_path: str, username: str, password: str, language: str = "fr"):
    """
    Extraire le texte d'un document avec l'API ICR Kantesti.
    79% plus rapide et plus précis que l'OCR traditionnel.
    """
    url = "https://app.aibloodtestinterpret.com/api/icr/v1/extract"

    with open(file_path, "rb") as f:
        files = {"file": (file_path, f)}
        data = {"username": username, "password": password, "language": language}
        response = requests.post(url, files=files, data=data, timeout=120)
        response.raise_for_status()
        return response.json()

# Exemple d'utilisation
result = icr_extract("rapport_medical.pdf", "utilisateur", "mot_de_passe", "fr")
print(f"Type de document : {result['data']['document_type']}")
print(f"Pages : {result['data']['page_count']}")

Exemple de Réponse

{
  "status": "success",
  "data": {
    "document_type": "blood_test_report",
    "page_count": 1,
    "pages": [{"page_number": 1, "content": {"raw_text": "Hôpital Universitaire de Cologne - Analyse Sanguine...", "sections": [{"type": "header", "content": "Analyse Sanguine"}], "tables": [{"headers": ["Test", "Résultat", "Unité", "Plage de Référence"], "rows": [["Glucose", "92", "mg/dL", "74 - 100"], ["ALT", "22", "U/L", "< 35"]]}]}}],
    "metadata": {"detected_language": "fr", "confidence": "high"},
    "icr_metadata": {"engine": "kantesti-icr", "version": "1.0.0", "images_processed": 1, "timestamp": "2026-02-14T10:30:00Z"}
  },
  "credit_cost": 0.5,
  "api_version": "icr-v1",
  "timestamp": "2026-02-14T10:30:00Z"
}

Points de terminaison Sandbox ICR

Testez votre intégration ICR sans consommer de crédits. Les points de terminaison Sandbox renvoient des données d'exemple réalistes.

APIPoint de terminaison SandboxDescription
ICR Extract/api/icr/v1/sandboxRenvoie des données d'exemple d'extraction ICR
ICR Kan/api/icr/v1/kan/sandboxRenvoie des données d'exemple de paramètres de test sanguin

Performance ICR vs OCR

Résultats de Benchmark — Kantesti ICR vs OCR Traditionnel
MétriqueKantesti ICROCR TraditionnelAmélioration
Vitesse de Traitement1,2s moyenne5,7s moyenne79% plus rapide
Précision du Texte99,7%92,1%+7,6%
Détection de Tableaux98,9%71,2%+27,7%
Sortie StructuréeJSON avec sections, tableaux, métadonnéesTexte brut non structuréStructure complète
Support Multilingue100+ langues30-50 langues2x+ couverture