Points de terminaison de l'API analyse de sang
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.
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.
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.
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.
| API | Point de terminaison | Statut |
|---|---|---|
| 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
| Date | Version | Modifications |
|---|---|---|
| 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.
| Version | Point de terminaison | Statut |
|---|---|---|
| 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é |
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).
Si aucun paramètre language n'est fourni, l'API renvoie les réponses en anglais (en).
Langues mondiales majeures
| Code | Langue | Nom natif |
|---|---|---|
en | Anglais | English |
zh | Chinois | 中文 |
es | Espagnol | Español |
ar | Arabe | العربية |
hi | Hindi | हिन्दी |
pt | Portugais | Português |
ru | Russe | Русский |
ja | Japonais | 日本語 |
fr | Français | Français |
de | Allemand | Deutsch |
ko | Coréen | 한국어 |
tr | Turc | Türkçe |
Langues européennes
| Code | Langue | Nom natif |
|---|---|---|
it | Italien | Italiano |
nl | Néerlandais | Nederlands |
pl | Polonais | Polski |
el | Grec | Ελληνικά |
sv | Suédois | Svenska |
no | Norvégien | Norsk |
da | Danois | Dansk |
fi | Finnois | Suomi |
cs | Tchèque | Čeština |
uk | Ukrainien | Українська |
ro | Roumain | Română |
hu | Hongrois | Magyar |
bg | Bulgare | Български |
hr | Croate | Hrvatski |
sk | Slovaque | Slovenčina |
sl | Slovène | Slovenščina |
sr | Serbe | Српски |
lt | Lituanien | Lietuvių |
lv | Letton | Latviešu |
et | Estonien | Eesti |
ca | Catalan | Català |
eu | Basque | Euskara |
gl | Galicien | Galego |
cy | Gallois | Cymraeg |
ga | Irlandais | Gaeilge |
is | Islandais | Íslenska |
mt | Maltais | Malti |
sq | Albanais | Shqip |
mk | Macédonien | Македонски |
bs | Bosniaque | Bosanski |
lb | Luxembourgeois | Lëtzebuergesch |
be | Biélorusse | Беларуская |
Langues du Moyen-Orient & d'Asie centrale
| Code | Langue | Nom natif |
|---|---|---|
he | Hébreu | עברית |
fa | Persan | فارسی |
az | Azerbaïdjanais | Azərbaycan |
ka | Géorgien | ქართული |
hy | Arménien | Հայերdelays |
kk | Kazakh | Қазақша |
uz | Ouzbèke | Oʻzbek |
tg | Tadjik | Тоҷикӣ |
ky | Kirghize | Кыргызча |
tk | Turkmène | Türkmen |
mn | Mongol | Монгол |
ps | Pachto | پښتو |
ku | Kurde | Kurdî |
Langues d'Asie du Sud
| Code | Langue | Nom natif |
|---|---|---|
bn | Bengali | বাংলা |
ta | Tamoul | தமிழ் |
te | Télougou | తెలుగు |
mr | Marathi | मराठी |
gu | Gujarati | ગુજરાતી |
kn | Kannada | ಕನ್ನಡ |
ml | Malayalam | മലയാളം |
pa | Pendjabi | ਪੰਜਾਬੀ |
ur | Ourdou | اردو |
ne | Népalais | नेपाली |
si | Cinghalais | සිංහල |
sd | Sindhi | سنڌي |
as | Assamais | অসমীয়া |
or | Odia | ଓଡ଼ିଆ |
Langues d'Asie du Sud-Est
| Code | Langue | Nom natif |
|---|---|---|
id | Indonésien | Bahasa Indonesia |
th | Thaï | ไทย |
vi | Vietnamien | Tiếng Việt |
ms | Malais | Bahasa Melayu |
my | Birman | မြန်မာ |
km | Khmer | ភាសាខ្មែរ |
lo | Laotien | ລາວ |
fil | Filipino | Filipino |
tl | Tagalog | Tagalog |
jv | Javanais | Basa Jawa |
su | Soundanais | Basa Sunda |
Langues africaines
| Code | Langue | Nom natif |
|---|---|---|
af | Afrikaans | Afrikaans |
sw | Swahili | Kiswahili |
am | Amharique | አማርኛ |
ha | Haoussa | Hausa |
yo | Yoruba | Yorùbá |
ig | Igbo | Igbo |
zu | Zoulou | isiZulu |
xh | Xhosa | isiXhosa |
so | Somali | Soomaali |
mg | Malgache | Malagasy |
Autres langues
| Code | Langue | Nom natif |
|---|---|---|
la | Latin | Latina |
eo | Espéranto | Esperanto |
yi | Yiddish | ייִדיש |
ht | Créole haïtien | Kreyòl Ayisyen |
mi | Maori | Te Reo Māori |
sm | Samoan | Gagana Samoa |
to | Tonguien | Lea Faka-Tonga |
haw | Hawaï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.
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ètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
file | file | Oui | Image de test sanguin (PNG, JPG, WEBP) ou PDF. Max. 20 Mo. Répétez le champ pour envoyer plusieurs images. |
language | string | Non | Code de langue de la réponse (par défaut : en). Voir les langues supportées. |
pdf_password | string | Non | Mot 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"
}
Point de terminaison de production pour l'analyse sanguine. Consomme 1 crédit par requête.
Paramètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
file | file | Oui | Image de test sanguin (PNG, JPG, WEBP) ou PDF. Max 20Mo. |
language | string | Non | Code 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
| Champ | Type | Description |
|---|---|---|
status | string | "success" ou "error" |
data | object | Contient tous les résultats d'analyse |
timestamp | string | Horodatage ISO 8601 de la réponse |
api_version | string | Version de l'API utilisée |
Objet data.metadata
| Champ | Type | Description |
|---|---|---|
lab_date | string | Date de prélèvement sanguin (AAAA-MM-JJ) |
results_date | string | Date d'émission des résultats (AAAA-MM-JJ) |
lab_name | string | Nom du laboratoire |
lab_city | string | Ville du laboratoire |
lab_country | string | Pays du laboratoire |
patient_name | string | Nom complet du patient (métadonnées uniquement, non envoyé à l'interprétation) |
patient_age | string | Âge du patient |
patient_sex | string | "male", "female" ou "other" |
Élément du tableau data.parameters
| Champ | Type | Description |
|---|---|---|
category | string | Catégorie du paramètre (ex: "Hémogramme", "Bilan lipidique") |
long_name | string | Nom complet du paramètre |
short_name | string | Nom abrégé du paramètre |
result | string | Valeur mesurée |
unit | string | Unité de mesure |
range_min | string | Plage de référence minimale |
range_max | string | Plage de référence maximale |
evaluation | string | Statut du résultat. Voir les valeurs d'évaluation |
Élément du tableau data.interpretation
| Champ | Type | Description |
|---|---|---|
title | string | Titre de la section (ex: "Évaluation globale de la santé") |
content | string | Interpré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"
}
Le champ evaluation utilise des valeurs standardisées. Voir les valeurs d'évaluation.
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"}
]
}
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.
- 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
| API | Point 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 |
Choisissez la bonne API pour votre cas d'utilisation :
| Fonctionnalité | Comparaison IA des Tests Sanguins | Analyse des Tendances |
|---|---|---|
| Focus Principal | Comparaison narrative IA | Analyse statistique des tendances |
| Traitement IA | Narrative IA complète | IA améliorée + statistiques |
| Type de Sortie | Résumés narratifs | Graphiques, statistiques, modèles |
| Idéal Pour | Ce qui a changé entre les tests | Suivi des paramètres à long terme |
| Min Tests | 2 | 2 |
| Max Tests | 20 | 50 |
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.
Analyse les tendances des paramètres de tests sanguins sur plusieurs dates pour identifier des motifs et fournir des informations de santé.
Paramètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
language | string | Non | Langue de réponse (par défaut: en). Voir les langues prises en charge. |
blood_tests | array | Oui | Tableau d'objets de tests sanguins (min: 2, max: 50) |
analysis_type | string | Non | Type: comprehensive, quick ou focused |
analysis_options | object | Non | Options de configuration d'analyse |
Objet analysis_options
| Champ | Type | Défaut | Description |
|---|---|---|---|
include_predictions | boolean | true | Inclure les prédictions de tendances IA |
include_statistics | boolean | true | Inclure l'analyse statistique (moyenne, min, max, écart-type) |
include_charts | boolean | true | Inclure les données de configuration des graphiques pour la visualisation |
Structure du tableau blood_tests
- Minimum : 2 tests sanguins requis
- Maximum : 50 tests sanguins par requête
- Chaque test doit avoir
lab_dateOUresults_date - Utilisez des noms de paramètres cohérents pour un suivi précis des tendances
| Champ | Type | Requis | Description |
|---|---|---|---|
lab_date | string | Oui* | Date du test au format AAAA-MM-JJ |
results_date | string | Oui* | Alternative à lab_date (AAAA-MM-JJ) |
parameters | array | Oui | Tableau des paramètres de test sanguin |
metadata | object | Non | Métadonnées supplémentaires (lab_name, notes, etc.) |
*Soit lab_date soit results_date est requis pour chaque test sanguin.
Structure du tableau blood_tests[].parameters
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom du paramètre (utilisez des noms cohérents entre les tests !) |
short_name | string | Non | Code court du paramètre (ex: HGB, GLU, CHOL) |
value | number | Oui | Valeur mesurée (peut aussi utiliser result) |
unit | string | Oui | Unité de mesure (ex: g/dL, mg/dL, %) |
range_min | number | Non | Valeur minimale de la plage de référence |
range_max | number | Non | Valeur maximale de la plage de référence |
category | string | Non | Catégorie du paramètre (ex: "Bilan lipidique", "Hémogramme complet") |
evaluation | string | Non | Statut pré-évalué. Voir les valeurs d'évaluation |
Exemple cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "VOTRE_NOM_UTILISATEUR",
"password": "VOTRE_MOT_DE_PASSE",
"language": "fr",
"analysis_type": "comprehensive",
"analysis_options": {
"include_predictions": true,
"include_statistics": true,
"include_charts": true
},
"blood_tests": [
{
"lab_date": "2024-01-15",
"parameters": [
{"name": "Glucose à jeun", "short_name": "GLU", "value": 98, "unit": "mg/dL"},
{"name": "Hémoglobine A1c", "short_name": "HBA1C", "value": 5.6, "unit": "%"},
{"name": "Cholestérol total", "short_name": "CHOL", "value": 185, "unit": "mg/dL"},
{"name": "Cholestérol LDL", "short_name": "LDL", "value": 110, "unit": "mg/dL"},
{"name": "Cholestérol HDL", "short_name": "HDL", "value": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-20",
"parameters": [
{"name": "Glucose à jeun", "short_name": "GLU", "value": 92, "unit": "mg/dL"},
{"name": "Hémoglobine A1c", "short_name": "HBA1C", "value": 5.4, "unit": "%"},
{"name": "Cholestérol total", "short_name": "CHOL", "value": 178, "unit": "mg/dL"},
{"name": "Cholestérol LDL", "short_name": "LDL", "value": 102, "unit": "mg/dL"},
{"name": "Cholestérol HDL", "short_name": "HDL", "value": 55, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-09-10",
"parameters": [
{"name": "Glucose à jeun", "short_name": "GLU", "value": 88, "unit": "mg/dL"},
{"name": "Hémoglobine A1c", "short_name": "HBA1C", "value": 5.3, "unit": "%"},
{"name": "Cholestérol total", "short_name": "CHOL", "value": 168, "unit": "mg/dL"},
{"name": "Cholestérol LDL", "short_name": "LDL", "value": 92, "unit": "mg/dL"},
{"name": "Cholestérol HDL", "short_name": "HDL", "value": 58, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"name": "Glucose à jeun", "short_name": "GLU", "value": 85, "unit": "mg/dL"},
{"name": "Hémoglobine A1c", "short_name": "HBA1C", "value": 5.2, "unit": "%"},
{"name": "Cholestérol total", "short_name": "CHOL", "value": 162, "unit": "mg/dL"},
{"name": "Cholestérol LDL", "short_name": "LDL", "value": 85, "unit": "mg/dL"},
{"name": "Cholestérol HDL", "short_name": "HDL", "value": 62, "unit": "mg/dL"}
]
}
]
}'
Exemple Python
import requests
from typing import List, Dict, Optional
def analyser_tendances(
nom_utilisateur: str,
mot_de_passe: str,
tests_sanguins: List[Dict],
langue: str = "fr",
type_analyse: str = "comprehensive"
) -> Dict:
"""
Analyse les tendances des tests sanguins au fil du temps.
Args:
nom_utilisateur: Nom d'utilisateur API
mot_de_passe: Mot de passe API
tests_sanguins: Liste d'objets de tests avec lab_date et parameters
langue: Code de langue de réponse
type_analyse: comprehensive, quick ou focused
Returns:
dict: Résultats de l'analyse des tendances
"""
url = "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze"
payload = {
"username": nom_utilisateur,
"password": mot_de_passe,
"language": langue,
"analysis_type": type_analyse,
"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_sanguins = [
{
"lab_date": "2025-01-15",
"parameters": [
{"short_name": "HGB", "result": 12.5, "unit": "g/dL"},
{"short_name": "CHOL", "result": 220, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-06-15",
"parameters": [
{"short_name": "HGB", "result": 13.2, "unit": "g/dL"},
{"short_name": "CHOL", "result": 195, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-12-01",
"parameters": [
{"short_name": "HGB", "result": 14.1, "unit": "g/dL"},
{"short_name": "CHOL", "result": 180, "unit": "mg/dL"}
]
}
]
resultat = analyser_tendances(
nom_utilisateur="votre_nom_utilisateur",
mot_de_passe="votre_mot_de_passe",
tests_sanguins=tests_sanguins
)
print(f"Tendance globale: {resultat['data']['overall_trend']}")
for tendance in resultat['data']['parameter_trends']:
print(f"{tendance['parameter']}: {tendance['direction']} ({tendance['change_percent']}%)")
Référence des champs de réponse
| Champ | Type | Description |
|---|---|---|
analysis_id | string | Identifiant unique pour cette analyse (format: TRD-XXXXXXXX) |
analysis_period | object | Détails de la période: start_date, end_date, span_months, total_tests |
categories | array | Liste des catégories de paramètres trouvées (ex: "Bilan lipidique", "Hémogramme") |
chart_config | object | Données prêtes pour graphiques: dates, raw_dates, simple_dates pour visualisation |
overall_health_trend | object | Résumé, tableau health_risks et recommandations |
parameter_trends | array | Analyse détaillée par paramètre avec statistiques |
risk_factors | array | Facteurs de risque de santé identifiés |
Structure de l'objet parameter_trends
| Champ | Type | Description |
|---|---|---|
parameter | string | Nom standardisé du paramètre |
short_name | string | Nom abrégé du paramètre |
category | string | Catégorie du paramètre (ex: "Bilan lipidique") |
unit | string | Unité de mesure |
trend_data | array | Tableau d'objets {date, value} pour les graphiques |
statistical_analysis | object | average, min, max, standard_deviation, trend_direction, trend_strength |
analysis | object | Interprétation IA: description, significant_variations, trend |
interpretation | string | Description lisible du paramètre |
Exemple de réponse
{
"status": "success",
"data": {
"overall_trend": "en amélioration",
"analysis_period": {
"start_date": "2025-01-15",
"end_date": "2025-12-01",
"duration_days": 320,
"total_tests": 3
},
"parameter_trends": [
{
"parameter": "HGB",
"long_name": "Hémoglobine",
"direction": "en hausse",
"change_percent": 12.8,
"start_value": 12.5,
"end_value": 14.1,
"trend_quality": "positif",
"interpretation": "Les niveaux d'hémoglobine montrent une amélioration constante sur la période d'analyse."
},
{
"parameter": "CHOL",
"long_name": "Cholestérol total",
"direction": "en baisse",
"change_percent": -18.2,
"start_value": 220,
"end_value": 180,
"trend_quality": "positif",
"interpretation": "Les niveaux de cholestérol ont diminué de manière significative, indiquant une amélioration de la santé cardiovasculaire."
}
],
"insights": [
{
"type": "improvement",
"title": "Amélioration de la santé cardiovasculaire",
"description": "Vos tendances de cholestérol et de glucose indiquent des améliorations significatives de la santé cardiovasculaire.",
"confidence": 0.92
}
]
},
"api_version": "v1",
"timestamp": "2025-12-22T10:30:00Z"
}
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.
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"
}
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.
Analyse 2 à 20 tests sanguins et fournit une comparaison détaillée avec des informations générées par l'IA.
- 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ètre | Type | Requis | Défaut | Description |
|---|---|---|---|---|
username | string | Oui | - | Votre nom d'utilisateur API |
password | string | Oui | - | Votre mot de passe API |
language | string | Non | en | Langue de réponse. Voir les langues prises en charge |
blood_tests | array | Oui | - | Tableau d'objets de tests sanguins (2-20 tests) |
Structure du tableau blood_tests
| Champ | Type | Requis | Description |
|---|---|---|---|
lab_date | string | Oui* | Date du test au format AAAA-MM-JJ |
results_date | string | Oui* | Alternative à lab_date (AAAA-MM-JJ) |
parameters | array | Oui | Tableau des paramètres de test sanguin |
metadata | object | Non | Mé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
| Champ | Type | Description |
|---|---|---|
comparison_id | string | Identifiant unique pour cette comparaison (format: CMP-XXXXXXXX) |
comparison_summary | object | Résumé global: key_findings, overall_trend, dates du rapport, time_interval |
parameter_analysis | array | Analyse détaillée par paramètre avec type de changement et signification clinique |
health_assessment | object | Zones de préoccupation, améliorations, développements positifs, facteurs de risque |
recommendations | object | Tests de suivi, actions immédiates, modifications du mode de vie, références aux spécialistes |
detailed_interpretation | object | Sections narratives IA avec résumé exécutif et recommandations cliniques |
Structure de l'objet parameter_analysis
| Champ | Type | Description |
|---|---|---|
parameter_name | string | Nom du paramètre |
report1_value | string | Valeur du premier rapport avec unité |
report2_value | string | Valeur du second rapport avec unité |
change_type | string | increased, decreased ou stable |
change_magnitude | string | significant, moderate ou minor |
clinical_significance | string | Explication IA de la signification du changement |
trend_assessment | string | positive, 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.
| Valeur | Défaut | Description |
|---|---|---|
comprehensive | ✓ | Analyse complète avec statistiques, graphiques et interprétation IA |
statistical | Analyse statistique uniquement | |
summary | Ré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.
| Valeur | Description |
|---|---|
maintain | Maintenir la santé actuelle (défaut) |
improve_energy | Focus sur les niveaux d'énergie |
weight_management | Gestion saine du poids |
heart_health | Santé cardiovasculaire |
immune_support | Soutien du système immunitaire |
digestive_health | Bien-être digestif |
bone_health | Santé osseuse |
mental_clarity | Fonction 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.
| Valeur | Description |
|---|---|
low_sodium | Apport réduit en sodium |
low_sugar | Apport réduit en sucre |
low_fat | Apport réduit en graisses |
gluten_free | Sans gluten |
dairy_free | Sans produits laitiers |
nut_free | Sans noix |
soy_free | Sans soja |
egg_free | Sans œufs |
halal | Conforme halal |
kosher | Conforme casher |
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.
| Valeur | Description |
|---|---|
omnivore | Aucune restriction (défaut) |
vegetarian | Pas de viande |
vegan | Pas de produits animaux |
pescatarian | Végétarien + poisson |
keto | Régime cétogène |
paleo | Régime paléolithique |
mediterranean | Régime méditerranéen |
activity_level API Nutrition
Niveau d'activité physique pour les calculs caloriques et nutritionnels.
| Valeur | Description |
|---|---|
sedentary | Peu ou pas d'exercice |
light | Exercice léger 1-3 jours/semaine |
moderate | Exercice modéré 3-5 jours/semaine (défaut) |
active | Exercice intense 6-7 jours/semaine |
very_active | Exercice très intense ou travail physique |
budget API Nutrition
Niveau de budget pour les recommandations alimentaires et de suppléments.
| Valeur | Description |
|---|---|
low | Options économiques |
moderate | Options équilibrées (défaut) |
high | Options premium |
gender Toutes les APIs
Sexe du patient pour des plages de référence et recommandations personnalisées.
| Valeur | Description |
|---|---|
male | Patient masculin |
female | Patient féminin |
other | Autre 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.
| Valeur | Description |
|---|---|
normal | Dans la plage de référence normale |
low | En dessous de la plage normale |
high | Au-dessus de la plage normale |
critical_low | Critiquement bas (attention immédiate requise) |
critical_high | Critiquement élevé (attention immédiate requise) |
borderline_low | Légèrement en dessous de la plage normale |
borderline_high | Légèrement au-dessus de la plage normale |
trend_assessment APIs Comparaison & Tendances
Évaluation globale des tendances des paramètres entre les tests.
| Valeur | Description |
|---|---|
positive | Amélioré (vers la plage normale) |
negative | Détérioré (s'éloigne de la plage normale) |
stable | Relativement inchangé entre les tests |
improving | Tendance globale à l'amélioration |
worsening | Tendance globale à la détérioration |
trend_direction API Analyse des tendances
Direction des changements de valeur des paramètres dans le temps.
| Valeur | Description |
|---|---|
upward | Valeurs en augmentation dans le temps |
downward | Valeurs en diminution dans le temps |
stable | Changement minimal dans le temps |
trend_strength API Analyse des tendances
Magnitude de la tendance observée.
| Valeur | Description |
|---|---|
strong | >15% de changement entre les périodes |
moderate | 5-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.
| Valeur | Description |
|---|---|
excellent | Tous les marqueurs dans la plage optimale |
good | La plupart des marqueurs dans la plage normale |
fair | Certains marqueurs nécessitent attention |
poor | Plusieurs marqueurs nécessitent attention |
Points de terminaison utilitaires
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"
}
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%"
}
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
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.
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.
- 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
| Endpoint | Méthode | Description | Auth |
|---|---|---|---|
/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) |
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ètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
patient_data | object | Oui | Informations du patient (voir ci-dessous) |
family_members | array | Oui* | Tableau d'objets membres de la famille (max 100). *Requis si health_profile est absent |
health_profile | object | Oui* | Profil de santé du patient. *Requis si family_members est absent |
blood_test_data | array | Non | Données de tests sanguins pour l'analyse de corrélation |
language | string | Non | Code 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'erreur | Status HTTP | Description |
|---|---|---|
AUTH_1001 | 401 | Identifiants d'authentification manquants |
AUTH_1002 | 401 | Nom d'utilisateur ou mot de passe invalide |
QUOTA_1101 | 403 | Quota API insuffisant |
VAL_2001 | 400 | Champ obligatoire manquant |
VAL_2003 | 400 | Code langue non supporté |
VAL_2006 | 400 | Le tableau dépasse la taille maximale (max 100 membres) |
VAL_2007 | 400 | Structure de données patient invalide |
PROC_3001 | 500 | Échec de la génération du rapport |
PROC_3003 | 500 | Erreur de traitement IA |
SRV_5001 | 500 | Erreur interne du serveur |
Endpoint Sandbox Family Health
Testez votre intégration Family Health API sans consommer de crédits.
| API | Endpoint Sandbox | Description |
|---|---|---|
| Family Health Analyze | /api/v1/family-health/sandbox/analyze | Renvoie 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.
| Endpoint | Méthode | Description |
|---|---|---|
/api/v1/family-health/supported-languages | GET | Renvoie les 100+ langues supportées |
/api/v1/family-health/condition-categories | GET | Renvoie les 9 catégories de maladies |
/api/v1/family-health/family-relations | GET | Renvoie les 14 types de relations familiales |
API Body Map
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.
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.
- 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
| Endpoint | Méthode | Description | Auth |
|---|---|---|---|
/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 |
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ètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
parameters | array | Oui | Objets de résultats de laboratoire. Max. 500. Chacun nécessite un nom d'analyte et une evaluation. |
interpretation | array | Non | Interprétation clinique, utilisée comme contexte uniquement lorsque ai_assist est activé |
ai_assist | boolean | Non | Laisser le modèle placer les marqueurs que les tables d'alias ne reconnaissent pas (par défaut : false) |
include_image | boolean | Non | Demander l'illustration générée (par défaut : false) |
image_wait | integer | Non | Secondes d'attente pour une illustration fraîchement générée, 0-30 (par défaut : 0) |
Champs de l'objet paramètre
| Champ | Type | Requis | Description |
|---|---|---|---|
short_name | string | Oui* | 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_name | string | Non | Nom complet de l'analyte ; améliore la correspondance des abréviations |
evaluation | string | Non | Une valeur parmi high, low, bad, slightly_high, slightly_low, normal. Seules les valeurs signalées apparaissent sur la carte. |
result | string|number | Non | La valeur mesurée ; sert à classer les régions dessinées |
unit | string | Non | Unité du résultat, quelle que soit l'orthographe |
range_normal_min | number | Non | Borne inférieure de la plage de référence |
range_normal_max | number | Non | Borne supérieure de la plage de référence |
category | string | Non | Caté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
| Champ | Type | Description |
|---|---|---|
body_map.spec | string | Identifiant 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[].key | string | L'une des 13 clés de région |
body_map.regions[].level | integer | 2 = hors plage, 1 = limite |
body_map.regions[].drawn | boolean | Indique 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[].markers | array | Noms des marqueurs qui ont placé cette région sur la carte, les plus anormaux en premier |
body_map.unmapped | integer | Marqueurs signalés qui n'ont pu être placés sur aucune région |
body_map.image_url | string|null | Illustration mise en cache. null tant que le fichier n'existe pas — repliez-vous sur fallback_url. |
body_map.fallback_url | string | URL 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_clear | boolean | true lorsque rien n'a été signalé ; le corps "tout va bien" commun s'applique |
mode | string | deterministic ou ai_assisted |
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.
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.
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
}
}
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'erreur | HTTP | Signification |
|---|---|---|
AUTH_1001 | 401 | Identifiants d'authentification manquants |
AUTH_1002 | 401 | Nom d'utilisateur ou mot de passe invalide |
AUTH_1004 | 400 | Identifiants malformés (type incorrect ou trop longs) |
QUOTA_1101 | 403 | Quota API insuffisant |
VAL_2001 | 400 | parameters est absent |
VAL_2002 | 400 | Format de données invalide |
VAL_2005 | 400 | parameters est vide |
VAL_2006 | 400 | Plus de 500 paramètres |
VAL_2008 | 400 | Une ligne de paramètre est malformée ou sans nom |
RES_4004 | 422 | Des résultats sont signalés mais aucun ne correspond à une région du corps |
RES_4005 | 503 | Le moteur body map est désactivé sur ce déploiement |
API Âge Biologique du Sang
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.
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.
- 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
| Endpoint | Méthode | Description | Auth |
|---|---|---|---|
/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 |
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ètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
parameters | array | Oui | Objets de résultats de laboratoire. Max. 500. Chacun nécessite un nom d'analyte et un résultat. |
metadata | object | Non | En-tête du compte rendu. Fortement recommandé : PhenoAge comporte un terme d'âge chronologique. Lit patient_age, patient_sex, dob, lab_date. |
patient | object | Non | {"age": 42, "gender": "female"} — utilisé lorsque les métadonnées ne les contiennent pas |
interpretation | array | Non | Interprétation clinique, utilisée uniquement comme contexte pour le modèle |
language | string | Non | Langue de la note personnelle optionnelle (par défaut : en). Voir les langues supportées. |
ai_assist | boolean | Non | Laisser le modèle identifier les noms d'analytes inhabituels (par défaut : false) |
ai_estimate | boolean | Non | Laisser le modèle améliorer un âge partiel (par défaut : false) |
ai_note | boolean | Non | Demander 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.
| Marqueur | Nom courant | Unité cible |
|---|---|---|
albumin | Albumine | g/L |
creatinine | Créatinine | µmol/L |
glucose | Glucose / Glycémie à jeun | mmol/L |
crp | Protéine C-réactive | mg/L |
lymph | Lymphocytes | % |
mcv | Volume globulaire moyen | fL |
rdw | Indice de distribution des globules rouges | % |
alp | Phosphatase alcaline | U/L |
wbc | Numération leucocytaire | 10⁹/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
| Champ | Type | Description |
|---|---|---|
summary.status | string | ok, missing_age, missing_markers, needs_markers ou unavailable |
summary.source | string | formula (les neuf marqueurs), partial (médianes imputées) ou ai (estimation du modèle, uniquement avec ai_estimate) |
summary.chronological_age | integer|null | Âge lu dans les métadonnées ou dans l'objet patient |
summary.biological_age | number|null | L'âge du sang calculé, en années |
summary.delta_years | number|null | Biologique moins chronologique. Une valeur négative signifie plus jeune que le calendrier. |
summary.markers_missing | array | Lesquels des neuf marqueurs PhenoAge le bilan n'a pas fournis |
blood_age.age.inputs | object | Les valeurs converties réellement utilisées, dans les unités cibles |
blood_age.age.labels | object | Le nom propre à votre laboratoire pour chaque marqueur reconnu par le moteur |
blood_age.indices[].band | string | ok, borderline, high, low ou info |
blood_age.indices[].from | array | Les lignes de laboratoire dont cet indice a été dérivé |
mode | string | deterministic ou ai_assisted |
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.
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.
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."
}
}
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'erreur | HTTP | Signification |
|---|---|---|
AUTH_1001 | 401 | Identifiants d'authentification manquants |
AUTH_1002 | 401 | Nom d'utilisateur ou mot de passe invalide |
AUTH_1004 | 400 | Identifiants malformés (type incorrect ou trop longs) |
QUOTA_1101 | 403 | Quota API insuffisant |
VAL_2001 | 400 | parameters est absent |
VAL_2002 | 400 | Format de données invalide |
VAL_2003 | 400 | Code de langue non supporté |
VAL_2005 | 400 | parameters est vide |
VAL_2006 | 400 | Plus de 500 paramètres |
VAL_2007 | 400 | Objet patient invalide |
VAL_2008 | 400 | Une ligne de paramètre est malformée ou sans nom |
VAL_2009 | 400 | Valeur de patient.gender non supportée |
RES_4004 | 422 | Rien de calculable à partir de ces paramètres |
RES_4005 | 503 | Le 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
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.
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.
- Toutes les sources ADN courantes — Fichiers bruts de 23andMe, AncestryDNA, MyHeritage, FTDNA et LivingDNA, fichiers VCF, y compris dans une archive
.zipou.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,neutralouwatch, 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_libraryet, 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=1et 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
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
| Endpoint | Méthode | Description | Auth |
|---|---|---|---|
/api/v1/dna-interpretation/analyze | POST | Fichier ADN, lignes rsID collées ou pages de rapport → rapport de santé génétique complet | Requis (1 crédit) |
/api/v1/dna-interpretation/validate | POST | Lire le fichier envoyé et afficher ce qui a été trouvé, sans appel à l'IA | Requis (Gratuit) |
/api/v1/dna-interpretation/sandbox | POST | Exemple de rapport génétique | Requis (Gratuit) |
/api/v1/dna-interpretation/info | GET | Entrées acceptées, limites et langues de rapport | Non requis |
/api/v1/dna-blood-report/analyze | POST | Rapport ADN + analyse de sang interprétée → rapport de santé combiné | Requis (1 crédit) |
/api/v1/dna-blood-report/validate | POST | Vérifier les données envoyées sans appel à l'IA | Requis (Gratuit) |
/api/v1/dna-blood-report/sandbox | POST | Exemple de rapport combiné | Requis (Gratuit) |
/api/v1/dna-blood-report/info | GET | Champs de requête et limites | Non requis |
/api/v1/dna-supplements/analyze | POST | Rapport ADN + analyse de sang (optionnelle) + questionnaire → plan de compléments alimentaires | Requis (1 crédit) |
/api/v1/dna-supplements/validate | POST | Vérifier les données et les réponses sans appel à l'IA | Requis (Gratuit) |
/api/v1/dna-supplements/sandbox | POST | Exemple de plan de compléments alimentaires | Requis (Gratuit) |
/api/v1/dna-supplements/questionnaire | GET | Les 25 questions et leurs réponses autorisées | Non requis |
/api/v1/dna-supplements/settings | GET PUT | Lire ou mettre à jour le catalogue de produits de votre clinique et les réglages du conseiller | Requis (Gratuit) |
/api/v1/dna-supplements/info | GET | Champs de requête et limites | Non requis |
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ètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API (ou utilisez l'authentification HTTP Basic) |
password | string | Oui | Votre mot de passe API |
file | file | Oui* | 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_text | string | Oui* | Lignes de génotype collées (rsID, chromosome, position, génotype), jusqu'à 2 000 000 caractères |
language | string | Non | Code de la langue du rapport, par ex. en, de, ar (par défaut : en). Voir les langues prises en charge. |
patient | object | Non | age, sex, diagnoses, comorbidities, medications, treatments, notes. Dans une requête multipart, envoyez-le sous forme de chaîne JSON. |
source_label | string | Non | Le 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
| Champ | Type | Description |
|---|---|---|
source | object | Ce 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.level | string | typical, slightly_elevated, elevated ou high |
report.sections[] | array | Une entrée par domaine de santé, avec un risk_level et ses findings |
report.sections[].findings[] | array | gene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation |
report.pharmacogenomics[] | array | Phé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[] | array | carrier, not_detected, affected_pattern ou inconclusive, toujours à confirmer par un test génétique clinique |
report.disease_risks[], nutrigenomics[], traits[] | array | Risques de maladies, résultats nutrigénomiques et traits, avec les gènes en cause |
report.recommended_tests[], red_flags[] | array | Examens de suivi avec leur justification, et résultats nécessitant une attention rapide |
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": []}
}
}
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ètre | Type | Requis | Description |
|---|---|---|---|
dna_report | object | Oui | Le rapport renvoyé par /api/v1/dna-interpretation/analyze : data.report, l'objet data complet ou la réponse entière |
blood_test | object|array | Oui | Une 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 |
language | string | Non | Code de la langue du rapport (par défaut : en) |
patient | object | Non | Mê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
| Champ | Type | Description |
|---|---|---|
report.overall_status.level | string | good, watch, attention ou urgent |
report.correlations[].concordance | string | confirms, contradicts, neutral ou watch |
report.risk_matrix[] | array | Par domaine : genetic_risk, lab_status (normal, borderline, abnormal, not_measured) et une évaluation combinée |
report.priority_actions[] | array | priority (high, medium, low), l'action et sa justification |
report.monitoring_plan[] | array | Quel marqueur recontrôler, quand et pourquoi |
É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ètre | Type | Requis | Description |
|---|---|---|---|
dna_report | object | Oui | Le rapport renvoyé par /api/v1/dna-interpretation/analyze |
answers | object | Oui | Ré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_test | object|array | Non | Même format que pour le Rapport de Santé ADN + Sang |
use_clinic_catalogue | boolean | Non | Appliquer le catalogue de produits et les réglages de votre clinique (par défaut : true) |
language | string | Non | Code de la langue du rapport (par défaut : en) |
patient | object | Non | Mê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
| Champ | Type | Description |
|---|---|---|
catalogue | object | Le mode de catalogue appliqué (prefer, only, off) et le nombre de produits de la clinique disponibles |
report.recommendations[] | array | name, form, dose, timing, duration, priority, la justification rationale (génétique / biologique / questionnaire), evidence, cautions, interactions et retest |
report.recommendations[].source | string | clinic_library pour un produit de votre catalogue (nommé dans product), sinon evidence_based |
report.uncovered_needs[] | array | En mode « uniquement les produits de la clinique » : les besoins que votre catalogue ne couvre pas |
report.clinician_review_required[] | array | Tout 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[] | array | Ce qu'il faut éviter, les sources alimentaires de chaque nutriment, et quand refaire un contrôle |
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.
| Champ | Type | Description |
|---|---|---|
catalogue[] | array | Jusqu'à 200 produits : name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description |
settings.mode | string | prefer (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.instructions | string | Vos propres instructions pour l'IA, jusqu'à 1 500 caractères. Les règles de sécurité restent toujours prioritaires. |
settings.max_items | integer | Nombre 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'erreur | HTTP | Signification |
|---|---|---|
AUTH_1001 | 401 | Identifiants d'authentification manquants |
AUTH_1002 | 401 | Nom d'utilisateur ou mot de passe invalide |
QUOTA_1101 | 403 | Quota API insuffisant |
VAL_2001 | 400 | Un champ obligatoire est absent : file ou genotype_text, dna_report, blood_test, ou une réponse obligatoire |
VAL_2002 | 400 | Données de génotype illisibles, type de fichier non pris en charge, JSON invalide ou dna_report invalide |
VAL_2003 | 400 | Langue de rapport non prise en charge |
VAL_2006 | 400 | Taille maximale dépassée : texte collé, paramètres sanguins (500) ou catalogue (200 produits) |
VAL_2007 | 400 | Objet patient invalide |
VAL_2008 | 400 | Aucun paramètre d'analyse de sang exploitable (nom et résultat) |
PROC_3003 | 500 | La réponse de l'IA n'a pas pu être produite ou validée ; réessayez. Aucun crédit n'est débité. |
RES_4005 | 503 | Les modules ADN sont désactivés sur ce déploiement |
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
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.
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.
- 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ès | Méthode | Description | Coût |
|---|---|---|---|
/api/icr/v1/extract | POST | Extraction de texte ICR | 0,5 crédit |
/api/icr/v1/sandbox | POST | Test sandbox ICR | Gratuit |
/api/icr/v1/kan | POST | Analyse de documents de tests sanguins | 0,5 crédit |
/api/icr/v1/kan/sandbox | POST | Test sandbox tests sanguins | Gratuit |
/api/icr/info | GET | Documentation et fonctionnalités API | Gratuit |
/api/icr/health | GET | Point de contrôle santé | Gratuit |
/api/icr/v1/quota | POST | Vérifier les crédits ICR restants | Gratuit |
Extrait tout le contenu textuel des documents téléchargés en utilisant la technologie ICR de Kantesti.
Paramètres de Requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Votre nom d'utilisateur API |
password | string | Oui | Votre mot de passe API |
file | file | Oui | Fichier document (PDF, JPG, JPEG, PNG) |
language | string | Non | Langue 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.
| API | Point de terminaison Sandbox | Description |
|---|---|---|
| ICR Extract | /api/icr/v1/sandbox | Renvoie des données d'exemple d'extraction ICR |
| ICR Kan | /api/icr/v1/kan/sandbox | Renvoie des données d'exemple de paramètres de test sanguin |
Performance ICR vs OCR
| Métrique | Kantesti ICR | OCR Traditionnel | Amélioration |
|---|---|---|---|
| Vitesse de Traitement | 1,2s moyenne | 5,7s moyenne | 79% plus rapide |
| Précision du Texte | 99,7% | 92,1% | +7,6% |
| Détection de Tableaux | 98,9% | 71,2% | +27,7% |
| Sortie Structurée | JSON avec sections, tableaux, métadonnées | Texte brut non structuré | Structure complète |
| Support Multilingue | 100+ langues | 30-50 langues | 2x+ couverture |