Endpoint dell'API Analisi del Sangue
Riferimento completo di tutti gli endpoint dell'API Kantesti con esempi di codice in diversi linguaggi di programmazione.
Siamo orgogliosi di annunciare tre moduli DNA per l'API Kantesti. L'Interpretazione del Test DNA trasforma dati DNA grezzi o un referto genetico in un referto completo sulla salute genetica, il Referto Salute DNA + Sangue lo combina con un esame del sangue e il Consulente Integratori redige un piano di integrazione personalizzato con i prodotti della tua clinica. Consulta il riferimento dell'API DNA Health.
https://app.aibloodtestinterpret.com
Changelog
Tieni traccia delle versioni API, aggiornamenti e informazioni sulla migrazione. Usa gli endpoint consigliati per le nuove integrazioni.
Tutti e tre gli aggiornamenti del 2026 sono stati applicati a ogni versione dell'API elencata di seguito. I numeri di versione e i percorsi degli endpoint non sono cambiati, quindi non è richiesta alcuna migrazione.
- 8 settembre 2026 Aggiornamento del modello IA e miglioramenti a livello di piattaforma
- 21 luglio 2026 Miglioramenti completi e correzioni di bug
- 8 maggio 2026 Miglioramenti completi e correzioni di bug
Endpoint Stabili Attuali
Questi endpoint sono consigliati per l'uso in produzione e le nuove integrazioni.
| API | Endpoint | Stato |
|---|---|---|
| Analisi del Sangue v12 | /api/v12/18-09-2026/analyze |
Consigliato Nuovo 18.09.2026 |
| Analisi del Sangue (Punteggio Salute) v12 | /api/v12/health-score/analyze |
Consigliato Nuovo 18.09.2026 |
| Mappa Corporea v1 | /api/v1/body-map/analyze |
Rilasciato 18.09.2026 Nuovo |
| Età Biologica del Sangue v1 | /api/v1/blood-age/analyze |
Rilasciato 18.09.2026 Nuovo |
| Interpretazione del Test DNA v1 | /api/v1/dna-interpretation/analyze |
Rilasciato 23.09.2026 Nuovo |
| Referto Salute DNA + Sangue v1 | /api/v1/dna-blood-report/analyze |
Rilasciato 23.09.2026 Nuovo |
| Consulente Integratori DNA v1 | /api/v1/dna-supplements/analyze |
Rilasciato 23.09.2026 Nuovo |
| Analisi del Sangue v11 | /api/v11/01-06-2025/analyze |
Stabile Aggiornato 08.09.2026 |
| Analisi del Sangue (Punteggio Salute) v11 | /api/v11/health-score/analyze |
Stabile Aggiornato 08.09.2026 |
| IA Nutrizione v1 | /api/v1/nutrition/diet-plan/analyze |
Stabile Aggiornato 08.09.2026 |
| Confronto IA Esami del Sangue v1 | /api/v1/bloodtest/comparison/analyze |
Stabile Aggiornato 08.09.2026 |
| Valutazione dei Rischi di Salute Familiare v1 | /api/v1/family-health/analyze |
Rilasciato 23.03.2026 Aggiornato 08.09.2026 |
| ICR - Riconoscimento Intelligente dei Caratteri v1 | /api/icr/v1/extract |
Rilasciato 14.02.2026 Aggiornato 08.09.2026 |
| ICR Kan - Estrazione Analisi del Sangue v1 | /api/icr/v1/kan |
Rilasciato 14.02.2026 Aggiornato 08.09.2026 |
| Analisi Tendenze v1 | /api/v1/analytics/trends/analyze |
Stabile Aggiornato 08.09.2026 |
Cronologia Versioni
| Data | Versione | Modifiche |
|---|---|---|
| 23 settembre 2026 | Interpretazione del Test DNA v1, Referto Salute DNA + Sangue v1, Consulente Integratori DNA v1 | API DNA Health rilasciata — interpretazione del test del DNA a partire da dati DNA grezzi (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) o da file di referti genetici su 334 marcatori selezionati, un referto di salute combinato DNA + sangue e un consulente integratori con il catalogo prodotti della clinica; modalità asincrona e sandbox |
| Settembre 2026 | Analisi del Sangue v12 | Analisi del Sangue v12 rilasciata — caricamento multi-file, refertazione in 100 lingue, punteggio di salute e analisi dei rischi di malattia opzionali, modalità sandbox |
| Settembre 2026 | Mappa Corporea v1, Età Biologica del Sangue v1 | API Mappa Corporea e API Età Biologica del Sangue rilasciate — mappatura a livello di organo dei risultati fuori range su 13 regioni anatomiche ed età biologica PhenoAge con fino a 18 indici clinici derivati; entrambe offrono una modalità deterministica e una sandbox |
| Settembre 2026 | Tutte le versioni | Aggiornamento del modello IA, fissato all'ultima versione del modello; miglioramenti completi e correzioni di bug in tutte le versioni dell'API; numeri di versione invariati; precisione del 98,89% negli esami delle facoltà di medicina (ultimo benchmark open source) |
| Luglio 2026 | Tutte le versioni | Miglioramenti completi e correzioni di bug applicati a tutte le versioni dell'API; numeri di versione invariati |
| Maggio 2026 | Tutte le versioni | Miglioramenti completi e correzioni di bug applicati a tutte le versioni dell'API; numeri di versione invariati |
| Marzo 2026 | Family Health v1 | API di Valutazione dei Rischi di Salute Familiare rilasciata — Analisi dei rischi ereditari con IA, supporto di 100+ lingue, analisi dell'albero genealogico, cronoprogramma di cure preventive, raccomandazioni di screening genetico, modalità sandbox |
| Febbraio 2026 | ICR v1 | API ICR (Riconoscimento Intelligente dei Caratteri) rilasciata — 79% più veloce dell'OCR, output JSON strutturato, rilevamento tipo documento, estrazione tabelle, integrazione Kan analisi del sangue |
| Dicembre 2025 | Ultima | Gestione errori migliorata, precisione 98,7%, supporto 100 lingue |
| Giugno 2025 | v11 | Analisi del sangue v11, endpoint punteggio salute, supporto multi-file |
| Aprile 2025 | v9 | Modello api_parameters_v9, estrazione parametri migliorata |
| Marzo 2025 | v8 | Supporto upload multi-file, elaborazione batch |
Endpoint Legacy
Questi endpoint sono mantenuti per retrocompatibilità ma non sono consigliati per le nuove integrazioni.
| Versione | Endpoint | Stato |
|---|---|---|
| v10 | /api/v10/health-score/analyze |
Legacy |
| v9 | /api/v9/14-04-2025/analyze |
Legacy |
| v8 | /api/v8/31-03-2025/analyze |
Legacy |
| v6 | /api/v6-1/21-11-2024/analyze |
Legacy |
| v3 | /api/v3/10-10-2024/analyze |
Legacy |
Gli endpoint legacy sono mantenuti per retrocompatibilità ma non sono consigliati per le nuove integrazioni. Si prega di migrare agli endpoint stabili attuali per migliori prestazioni e supporto.
Riferimento Lingue Supportate
L'API Kantesti supporta 100 lingue per la localizzazione delle risposte. Utilizza il parametro language con uno dei codici ISO 639-1 elencati di seguito. Se non specificato, le risposte sono in inglese (en) per impostazione predefinita.
Se non viene fornito alcun parametro language, l'API restituisce le risposte in inglese (en).
Lingue mondiali principali
| Codice | Lingua | Nome nativo |
|---|---|---|
en | Inglese | English |
zh | Cinese | 中文 |
es | Spagnolo | Español |
ar | Arabo | العربية |
hi | Hindi | हिन्दी |
pt | Portoghese | Português |
ru | Russo | Русский |
ja | Giapponese | 日本語 |
fr | Francese | Français |
de | Tedesco | Deutsch |
ko | Coreano | 한국어 |
tr | Turco | Türkçe |
Lingue europee
| Codice | Lingua | Nome nativo |
|---|---|---|
it | Italiano | Italiano |
nl | Olandese | Nederlands |
pl | Polacco | Polski |
el | Greco | Ελληνικά |
sv | Svedese | Svenska |
no | Norvegese | Norsk |
da | Danese | Dansk |
fi | Finlandese | Suomi |
cs | Ceco | Čeština |
uk | Ucraino | Українська |
ro | Romeno | Română |
hu | Ungherese | Magyar |
bg | Bulgaro | Български |
hr | Croato | Hrvatski |
sk | Slovacco | Slovenčina |
sl | Sloveno | Slovenščina |
sr | Serbo | Српски |
lt | Lituano | Lietuvių |
lv | Lettone | Latviešu |
et | Estone | Eesti |
ca | Catalano | Català |
eu | Basco | Euskara |
gl | Galiziano | Galego |
cy | Gallese | Cymraeg |
ga | Irlandese | Gaeilge |
is | Islandese | Íslenska |
mt | Maltese | Malti |
sq | Albanese | Shqip |
mk | Macedone | Македонски |
bs | Bosniaco | Bosanski |
lb | Lussemburghese | Lëtzebuergesch |
be | Bielorusso | Беларуская |
Lingue mediorientali e dell'Asia centrale
| Codice | Lingua | Nome nativo |
|---|---|---|
he | Ebraico | עברית |
fa | Persiano | فارسی |
az | Azerbaigiano | Azərbaycan |
ka | Georgiano | ქართული |
hy | Armeno | Հայdelays |
kk | Kazako | Қазақша |
uz | Uzbeco | Oʻzbek |
tg | Tagico | Тоҷикӣ |
ky | Kirghiso | Кыргызча |
tk | Turkmeno | Türkmen |
mn | Mongolo | Монгол |
ps | Pashto | پښتو |
ku | Curdo | Kurdî |
Lingue dell'Asia meridionale
| Codice | Lingua | Nome nativo |
|---|---|---|
bn | Bengalese | বাংলা |
ta | Tamil | தமிழ் |
te | Telugu | తెలుగు |
mr | Marathi | मराठी |
gu | Gujarati | ગુજરાતી |
kn | Kannada | ಕನ್ನಡ |
ml | Malayalam | മലയാളം |
pa | Punjabi | ਪੰਜਾਬੀ |
ur | Urdu | اردو |
ne | Nepalese | नेपाली |
si | Singalese | සිංහල |
sd | Sindhi | سنڌي |
as | Assamese | অসমীয়া |
or | Odia | ଓଡ଼ିଆ |
Lingue del sud-est asiatico
| Codice | Lingua | Nome nativo |
|---|---|---|
id | Indonesiano | Bahasa Indonesia |
th | Tailandese | ไทย |
vi | Vietnamita | Tiếng Việt |
ms | Malese | Bahasa Melayu |
my | Birmano | မြန်မာ |
km | Khmer | ភាសាខ្មែរ |
lo | Laotiano | ລາວ |
fil | Filippino | Filipino |
tl | Tagalog | Tagalog |
jv | Giavanese | Basa Jawa |
su | Sundanese | Basa Sunda |
Lingue africane
| Codice | Lingua | Nome nativo |
|---|---|---|
af | Afrikaans | Afrikaans |
sw | Swahili | Kiswahili |
am | Amarico | አማርኛ |
ha | Hausa | Hausa |
yo | Yoruba | Yorùbá |
ig | Igbo | Igbo |
zu | Zulu | isiZulu |
xh | Xhosa | isiXhosa |
so | Somalo | Soomaali |
mg | Malgascio | Malagasy |
Altre lingue
| Codice | Lingua | Nome nativo |
|---|---|---|
la | Latino | Latina |
eo | Esperanto | Esperanto |
yi | Yiddish | ייִדיש |
ht | Creolo haitiano | Kreyòl Ayisyen |
mi | Maori | Te Reo Māori |
sm | Samoano | Gagana Samoa |
to | Tongano | Lea Faka-Tonga |
haw | Hawaiano | ʻŌlelo Hawaiʻi |
API Analisi del Sangue
Analizza immagini o PDF di esami del sangue utilizzando l'IA per estrarre parametri e generare interpretazioni mediche complete.
Endpoint di produzione per l'analisi del sangue. Carica una o più immagini di esami del sangue oppure un PDF e ricevi parametri strutturati, metadati del paziente e del laboratorio e un'interpretazione clinica completa in una qualsiasi delle 100 lingue supportate. Consuma 1 credito per richiesta.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
file | file | Sì | Immagine dell'esame del sangue (PNG, JPG, WEBP) o PDF. Max 20MB. Ripeti il campo per inviare più immagini. |
language | string | No | Codice lingua della risposta (predefinito: en). Vedi le lingue supportate. |
pdf_password | string | No | Password per i PDF cifrati |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
-F "username=TUO_NOME_UTENTE" \
-F "password=TUA_PASSWORD" \
-F "language=it" \
-F "file=@esame_del_sangue.pdf"
Esempio Python
import requests
def analyze_blood_test(file_paths, username, password, language="it"):
"""
Analizza un esame del sangue con Kantesti Analisi del Sangue v12.
Args:
file_paths: Uno o più percorsi di immagini di esami del sangue, oppure un singolo PDF
username: Nome utente API
password: Password API
language: Codice lingua del referto (predefinito: it)
Returns:
dict: Parametri strutturati, metadati e interpretazione clinica
"""
url = "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze"
handles = [open(path, "rb") for path in file_paths]
try:
files = [("file", (path, handle)) for path, handle in zip(file_paths, handles)]
data = {"username": username, "password": password, "language": language}
response = requests.post(url, files=files, data=data, timeout=300)
response.raise_for_status()
return response.json()
finally:
for handle in handles:
handle.close()
# Esempio di utilizzo
if __name__ == "__main__":
result = analyze_blood_test(
file_paths=["esame_del_sangue.pdf"],
username="nome_utente",
password="password",
language="it"
)
print(f"Stato: {result['status']}")
for param in result["data"]["parameters"]:
print(f" {param['short_name']}: {param['result']} {param['unit']} ({param['evaluation']})")
Esempio di risposta
{
"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"
}
Endpoint di produzione con calcolo completo del punteggio di salute e analisi dei rischi di malattia. Accetta la stessa richiesta di /api/v12/18-09-2026/analyze e aggiunge alla risposta i campi seguenti. Consuma 1 credito per richiesta.
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
-F "username=TUO_NOME_UTENTE" \
-F "password=TUA_PASSWORD" \
-F "language=it" \
-F "file=@esame_del_sangue.pdf"
Campi di risposta aggiuntivi
{
"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"}
]
}
Il campo score_interpretation utilizza valori standardizzati. Vedi valori del punteggio di salute.
Endpoint di produzione per l'analisi del sangue. Consuma 1 credito per richiesta.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
file | file | Sì | Immagine dell'esame del sangue (PNG, JPG, WEBP) o PDF. Max 20MB. |
language | string | No | Codice lingua risposta (default: en). Supporta oltre 100 lingue. |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
-F "username=TUO_NOME_UTENTE" \
-F "password=TUA_PASSWORD" \
-F "language=it" \
-F "file=@esame_sangue.pdf"
Esempio Python
import requests
def analizza_esame_sangue(percorso_file: str, nome_utente: str, password: str, lingua: str = "it"):
"""
Analizza un file di esame del sangue con l'API Kantesti.
Args:
percorso_file: Percorso al PDF o immagine dell'esame del sangue
nome_utente: Nome utente API
password: Password API
lingua: Codice lingua risposta (default: it)
Returns:
dict: Risposta API con i risultati dell'analisi
"""
url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"
with open(percorso_file, "rb") as f:
files = {"file": (percorso_file, f, "application/pdf")}
dati = {
"username": nome_utente,
"password": password,
"language": lingua
}
risposta = requests.post(url, files=files, data=dati, timeout=120)
risposta.raise_for_status()
return risposta.json()
# Esempio di utilizzo
if __name__ == "__main__":
risultato = analizza_esame_sangue(
percorso_file="esame_sangue.pdf",
nome_utente="tuo_nome_utente",
password="tua_password",
lingua="it"
)
print(f"Stato: {risultato['status']}")
print(f"Parametri trovati: {len(risultato['data']['parameters'])}")
Riferimento campi di risposta
Livello radice
| Campo | Tipo | Descrizione |
|---|---|---|
status | string | "success" o "error" |
data | object | Contiene tutti i risultati dell'analisi |
timestamp | string | Timestamp ISO 8601 della risposta |
api_version | string | Versione API utilizzata |
Oggetto data.metadata
| Campo | Tipo | Descrizione |
|---|---|---|
lab_date | string | Data del prelievo (AAAA-MM-GG) |
results_date | string | Data di emissione dei risultati (AAAA-MM-GG) |
lab_name | string | Nome del laboratorio |
lab_city | string | Città del laboratorio |
lab_country | string | Paese del laboratorio |
patient_name | string | Nome completo del paziente (solo metadati, non inviato all'interpretazione) |
patient_age | string | Età del paziente |
patient_sex | string | "male", "female" o "other" |
Elemento array data.parameters
| Campo | Tipo | Descrizione |
|---|---|---|
category | string | Categoria del parametro (es: "Emocromo", "Profilo lipidico") |
long_name | string | Nome completo del parametro |
short_name | string | Nome abbreviato del parametro |
result | string | Valore misurato |
unit | string | Unità di misura |
range_min | string | Intervallo di riferimento minimo |
range_max | string | Intervallo di riferimento massimo |
evaluation | string | Stato del risultato. Vedi valori di valutazione |
Elemento array data.interpretation
| Campo | Tipo | Descrizione |
|---|---|---|
title | string | Titolo della sezione (es: "Valutazione generale della salute") |
content | string | Interpretazione medica generata dall'IA |
Esempio di risposta completa
{
"status": "success",
"data": {
"metadata": {
"patient_name": "Anna Müller",
"lab_name": "MedLab Diagnostics International",
"lab_city": "Roma",
"lab_country": "Italia",
"lab_date": "2025-12-15",
"results_date": "2025-12-16",
"patient_age": "38",
"patient_sex": "female"
},
"parameters": [
{
"short_name": "WBC",
"long_name": "Conta dei globuli bianchi",
"category": "Emocromo completo",
"result": "6.8",
"unit": "10^9/L",
"evaluation": "normal",
"range_min": "4.0",
"range_max": "11.0",
"short_description": "Misura il numero totale di globuli bianchi.",
"long_description": "I globuli bianchi (leucociti) sono componenti essenziali del sistema immunitario..."
},
{
"short_name": "RBC",
"long_name": "Conta dei globuli rossi",
"category": "Emocromo completo",
"result": "4.52",
"unit": "10^12/L",
"evaluation": "normal",
"range_min": "3.8",
"range_max": "5.8",
"short_description": "Misura il numero totale di globuli rossi.",
"long_description": "I globuli rossi (eritrociti) trasportano l'ossigeno dai polmoni ai tessuti corporei..."
},
{
"short_name": "HGB",
"long_name": "Emoglobina",
"category": "Emocromo completo",
"result": "13.2",
"unit": "g/dL",
"evaluation": "normal",
"range_min": "11.5",
"range_max": "16.0",
"short_description": "Proteina nei globuli rossi che trasporta l'ossigeno.",
"long_description": "L'emoglobina è la proteina contenente ferro nei globuli rossi responsabile del trasporto dell'ossigeno..."
},
{
"short_name": "GLU",
"long_name": "Glicemia a digiuno",
"category": "Pannello metabolico",
"result": "102",
"unit": "mg/dL",
"evaluation": "borderline_high",
"range_min": "70",
"range_max": "140",
"short_description": "Misura il livello di zucchero nel sangue a digiuno.",
"long_description": "La glicemia a digiuno è un indicatore chiave di come il corpo metabolizza lo zucchero..."
},
{
"short_name": "TC",
"long_name": "Colesterolo totale",
"category": "Profilo lipidico",
"result": "218",
"unit": "mg/dL",
"evaluation": "borderline_high",
"range_min": "0",
"range_max": "300",
"short_description": "Misura il colesterolo totale nel sangue.",
"long_description": "Il colesterolo totale è la somma del colesterolo HDL, LDL e VLDL..."
},
{
"short_name": "LDL",
"long_name": "Colesterolo LDL",
"category": "Profilo lipidico",
"result": "142",
"unit": "mg/dL",
"evaluation": "high",
"range_min": "0",
"range_max": "200",
"short_description": "Misura il livello di colesterolo 'cattivo'.",
"long_description": "Il colesterolo LDL può accumularsi nelle pareti delle arterie..."
}
],
"interpretation": [
{
"title": "Valutazione generale della salute",
"shortcode": "overall_health_assessment",
"subsections": [
{
"subtitle": "Panoramica completa",
"items": [
{"item": "La paziente presenta parametri ematologici generalmente sani con tutti i valori dell'emocromo nella norma."},
{"item": "Il profilo lipidico mostra aree che richiedono attenzione, in particolare i livelli di colesterolo LDL."}
]
}
]
},
{
"title": "Raccomandazioni",
"shortcode": "recommendations",
"subsections": [
{
"subtitle": "Modifiche dello stile di vita",
"items": [
{"item": "Aumentare l'attività fisica aerobica ad almeno 150 minuti a settimana."},
{"item": "Adottare una dieta di tipo mediterraneo ricca di verdure, frutta e grassi sani."}
]
}
]
}
]
},
"api_version": "v11",
"timestamp": "2025-12-16T14:32:18Z"
}
Il campo evaluation utilizza valori standardizzati. Vedi valori di valutazione.
Endpoint Sandbox
- Nessun consumo di quota
- Restituisce dati di test realistici
- Stesso formato di richiesta della produzione
| API | Endpoint Sandbox |
|---|---|
| Esame sangue v12 | /api/v12/18-09-2026/sandbox |
| Esame sangue v12-health | /api/v12/health-score/sandbox |
| Mappa corporea | /api/v1/body-map/sandbox |
| Età biologica del sangue | /api/v1/blood-age/sandbox |
| Interpretazione del test DNA | /api/v1/dna-interpretation/sandbox |
| Referto salute DNA + sangue | /api/v1/dna-blood-report/sandbox |
| Consulente integratori DNA | /api/v1/dna-supplements/sandbox |
| Esame sangue v11 | /api/v11/01-06-2025/sandbox |
| IA Nutrizione | /api/v1/nutrition/diet-plan/sandbox |
| Confronto esami | /api/v1/bloodtest/comparison/sandbox |
| Analisi tendenze | /api/v1/analytics/trends/sandbox |
| ICR | /api/icr/v1/sandbox |
| ICR Kan (Analisi sangue) | /api/icr/v1/kan/sandbox |
Scegli l'API giusta per il tuo caso d'uso:
| Funzionalità | Confronto IA Esami del Sangue | Analisi delle Tendenze |
|---|---|---|
| Focus Principale | Confronto narrativo IA | Analisi statistica delle tendenze |
| Elaborazione IA | Narrativa IA completa | IA potenziata + statistiche |
| Tipo di Output | Riepiloghi narrativi | Grafici, statistiche, pattern |
| Ideale Per | Cosa è cambiato tra i test | Monitoraggio parametri a lungo termine |
| Min Test | 2 | 2 |
| Max Test | 20 | 50 |
API Analisi delle Tendenze
Analizza le tendenze dei parametri di salute nel tempo utilizzando il riconoscimento di pattern basato su IA.
Analizza le tendenze dei parametri degli esami del sangue su più date di test per identificare pattern e fornire informazioni sulla salute.
Parametri di richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
language | string | No | Lingua della risposta (predefinito: en). Vedi lingue supportate. |
blood_tests | array | Sì | Array di oggetti esami del sangue (min: 2, max: 50) |
analysis_type | string | No | Tipo di analisi. Vedi valori. |
analysis_options | object | No | Opzioni di configurazione analisi |
Oggetto analysis_options
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
include_predictions | boolean | true | Includere previsioni di tendenza IA |
include_statistics | boolean | true | Includere analisi statistica |
include_charts | boolean | true | Includere dati configurazione grafici |
- Minimo: 2 esami del sangue richiesti
- Massimo: 50 esami per richiesta
- Ogni test deve avere
lab_dateOresults_date - Usare nomi di parametri coerenti per il monitoraggio preciso
Struttura Array blood_tests
| Campo | Tipo | Richiesto | Descrizione |
|---|---|---|---|
lab_date | string | Sì* | Data del test in formato YYYY-MM-DD |
results_date | string | Sì* | Alternativa a lab_date (YYYY-MM-DD) |
parameters | array | Sì | Array di parametri dell'esame del sangue |
metadata | object | No | Metadati aggiuntivi (lab_name, note, ecc.) |
*È richiesto lab_date o results_date per ogni esame del sangue.
Struttura blood_tests[].parameters
| Campo | Tipo | Richiesto | Descrizione |
|---|---|---|---|
short_name | string | Sì | Nome abbreviato del parametro (es: "HGB", "GLU", "CHOL") |
long_name | string | No | Nome completo del parametro (es: "Emoglobina", "Glucosio") |
result | number | Sì | Valore del risultato del test |
unit | string | Sì | Unità di misura (es: "g/dL", "mg/dL", "mmol/L") |
reference_range | string | No | Intervallo di riferimento (es: "12-16 g/dL") |
status | string | No | Stato: "normal", "low", "high", "critical" |
Esempio cURL
curl -X POST https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze \
-H "Content-Type: application/json" \
-d '{
"username": "il_tuo_username",
"password": "la_tua_password",
"language": "it",
"analysis_type": "comprehensive",
"analysis_options": {
"include_predictions": true,
"include_statistics": true,
"include_charts": true
},
"blood_tests": [
{
"lab_date": "2024-01-15",
"parameters": [
{"short_name": "GLU", "long_name": "Glucosio", "result": 105, "unit": "mg/dL"},
{"short_name": "HbA1c", "long_name": "Emoglobina Glicata", "result": 6.2, "unit": "%"},
{"short_name": "CHOL", "long_name": "Colesterolo Totale", "result": 220, "unit": "mg/dL"},
{"short_name": "LDL", "long_name": "Colesterolo LDL", "result": 145, "unit": "mg/dL"},
{"short_name": "HDL", "long_name": "Colesterolo HDL", "result": 48, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-10",
"parameters": [
{"short_name": "GLU", "long_name": "Glucosio", "result": 98, "unit": "mg/dL"},
{"short_name": "HbA1c", "long_name": "Emoglobina Glicata", "result": 5.9, "unit": "%"},
{"short_name": "CHOL", "long_name": "Colesterolo Totale", "result": 205, "unit": "mg/dL"},
{"short_name": "LDL", "long_name": "Colesterolo LDL", "result": 130, "unit": "mg/dL"},
{"short_name": "HDL", "long_name": "Colesterolo HDL", "result": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-08-22",
"parameters": [
{"short_name": "GLU", "long_name": "Glucosio", "result": 92, "unit": "mg/dL"},
{"short_name": "HbA1c", "long_name": "Emoglobina Glicata", "result": 5.6, "unit": "%"},
{"short_name": "CHOL", "long_name": "Colesterolo Totale", "result": 195, "unit": "mg/dL"},
{"short_name": "LDL", "long_name": "Colesterolo LDL", "result": 118, "unit": "mg/dL"},
{"short_name": "HDL", "long_name": "Colesterolo HDL", "result": 55, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"short_name": "GLU", "long_name": "Glucosio", "result": 88, "unit": "mg/dL"},
{"short_name": "HbA1c", "long_name": "Emoglobina Glicata", "result": 5.4, "unit": "%"},
{"short_name": "CHOL", "long_name": "Colesterolo Totale", "result": 185, "unit": "mg/dL"},
{"short_name": "LDL", "long_name": "Colesterolo LDL", "result": 105, "unit": "mg/dL"},
{"short_name": "HDL", "long_name": "Colesterolo HDL", "result": 58, "unit": "mg/dL"}
]
}
]
}'
Esempio Python
import requests
from typing import List, Dict
def analizza_tendenze(nome_utente: str, password: str, esami_sangue: List[Dict], lingua: str = "it") -> Dict:
"""Analizza le tendenze degli esami del sangue nel tempo."""
url = "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze"
payload = {
"username": nome_utente,
"password": password,
"language": lingua,
"analysis_type": "comprehensive",
"blood_tests": esami_sangue
}
risposta = requests.post(url, json=payload, timeout=120)
risposta.raise_for_status()
return risposta.json()
# Esempio
esami = [
{"lab_date": "2025-01-15", "parameters": [{"short_name": "HGB", "result": 12.5, "unit": "g/dL"}]},
{"lab_date": "2025-06-15", "parameters": [{"short_name": "HGB", "result": 13.2, "unit": "g/dL"}]},
{"lab_date": "2025-12-01", "parameters": [{"short_name": "HGB", "result": 14.1, "unit": "g/dL"}]}
]
risultato = analizza_tendenze("utente", "password", esami)
Riferimento campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
analysis_id | string | Identificatore univoco per questa analisi (formato: TRD-XXXXXXXX) |
analysis_period | object | Dettagli intervallo temporale: start_date, end_date, span_months, total_tests |
categories | array | Elenco delle categorie di parametri trovate (es: "Lipid Panel", "Complete Blood Count") |
chart_config | object | Dati pronti per grafici: dates, raw_dates, simple_dates per visualizzazione |
overall_health_trend | object | Riepilogo, array health_risks e raccomandazioni |
parameter_trends | array | Analisi dettagliata per parametro con statistiche |
risk_factors | array | Fattori di rischio per la salute identificati |
Struttura oggetto parameter_trends
| Campo | Tipo | Descrizione |
|---|---|---|
parameter | string | Nome parametro standardizzato |
short_name | string | Nome parametro abbreviato |
category | string | Categoria parametro (es: "Lipid Panel") |
unit | string | Unità di misura |
trend_data | array | Array di oggetti {date, value} per grafici |
statistical_analysis | object | average, min, max, standard_deviation, trend_direction, trend_strength |
analysis | object | Interpretazione IA: description, significant_variations, trend |
interpretation | string | Descrizione parametro leggibile |
Esempio di risposta
{
"status": "success",
"data": {
"overall_trend": "in miglioramento",
"parameter_trends": [
{
"parameter": "HGB",
"long_name": "Emoglobina",
"direction": "in aumento",
"change_percent": 12.8,
"interpretation": "I livelli di emoglobina mostrano un miglioramento costante."
}
]
}
}
IA Nutrizione con Integratori
Genera piani nutrizionali personalizzati e suggerimenti di integratori basati sull'analisi degli esami del sangue.
Esempio Python
import requests
from typing import Dict, List, Optional
def ottieni_piano_nutrizione(
nome_utente: str,
password: str,
paziente: Dict,
esame_sangue: Dict,
lingua: str = "it"
) -> Dict:
"""Ottiene raccomandazioni personalizzate di nutrizione e integratori."""
url = "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze"
payload = {
"username": nome_utente,
"password": password,
"language": lingua,
"patient": paziente,
"blood_test": esame_sangue
}
risposta = requests.post(url, json=payload, timeout=120)
risposta.raise_for_status()
return risposta.json()
# Esempio
paziente = {"age": 45, "gender": "male", "weight": 82, "height": 178}
esame = {"lab_date": "2025-12-01", "parameters": [{"short_name": "VITD", "result": 18, "unit": "ng/mL"}]}
risultato = ottieni_piano_nutrizione("utente", "password", paziente, esame)
Schema dell'Oggetto Paziente
Descrizione dettagliata di tutti i campi disponibili per l'oggetto paziente:
| Campo | Tipo | Richiesto | Predefinito | Descrizione |
|---|---|---|---|---|
age |
integer | Sì | - | Età del paziente in anni (18-120) |
gender |
string | Sì | - | Sesso del paziente. Vedi valori |
weight |
number | No | null | Peso in kg (per calcoli calorici) |
height |
number | No | null | Altezza in cm (per calcoli BMI) |
conditions |
array | No | [] | Condizioni mediche. Vedi valori |
allergies |
array | No | [] | Allergie alimentari. Vedi valori |
dietary_preferences |
array | No | [] | Preferenze alimentari. Vedi valori |
activity_level |
string | No | "moderate" | Livello di attività fisica. Vedi valori |
dietary_restrictions |
array | No | [] | Restrizioni alimentari (es: senza glutine, senza lattosio) |
liked_foods |
array | No | [] | Alimenti preferiti per personalizzazione del piano |
disliked_foods |
array | No | [] | Alimenti da evitare nelle raccomandazioni |
meal_frequency |
integer | No | 3 | Numero di pasti al giorno (1-6) |
budget |
string | No | "moderate" | Livello di budget: "low", "moderate", "high" |
medications |
array | No | [] | Farmaci attuali (per interazioni) |
Esempio di risposta
{
"status": "success",
"data": {
"supplements": [
{
"name": "Vitamina D3",
"dosage": "2000 UI al giorno",
"reason": "Livelli ematici a 18 ng/mL indicano carenza (ottimale: 30-50 ng/mL)",
"priority": "alta"
}
],
"dietary_recommendations": [
{"category": "aumentare", "foods": ["pesce grasso", "verdure a foglia verde"]}
]
}
}
Riferimento campi di risposta
Oggetto nutrition_plan.educational_insights
| Campo | Tipo | Descrizione |
|---|---|---|
blood_marker_education |
array | Contenuto educativo sui marcatori del sangue analizzati |
nutrition_principles |
array | Principi nutrizionali generali applicabili al paziente |
Elemento array blood_marker_education
| Campo | Tipo | Descrizione |
|---|---|---|
marker |
string | Nome del marcatore del sangue (es: "Vitamina D", "Colesterolo") |
explanation |
string | Spiegazione educativa sull'importanza del marcatore |
normal_range |
string | Intervallo di valori normali per il marcatore |
Elemento array food_recommendations.power_foods
| Campo | Tipo | Descrizione |
|---|---|---|
food |
string | Nome dell'alimento raccomandato |
nutrients |
array | Lista dei nutrienti chiave forniti da questo alimento |
serving |
string | Dimensione della porzione raccomandata |
why |
string | Spiegazione del perché questo alimento è benefico |
Elemento array supplement_recommendations
| Campo | Tipo | Descrizione |
|---|---|---|
supplement |
string | Nome dell'integratore |
dosage |
string | Dosaggio giornaliero raccomandato |
timing |
string | Momento migliore per l'assunzione (es: "Con la colazione") |
duration |
string | Durata raccomandata dell'integrazione |
reason |
string | Motivazione basata sui risultati degli esami del sangue |
Esempio cURL completo
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "tuo_nome_utente",
"password": "tua_password",
"language": "it",
"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"]
}'
Risposta completa
{
"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": "Vitamina D",
"explanation": "La vitamina D è essenziale per la salute delle ossa, la funzione immunitaria e la regolazione dell'umore. Il tuo livello di 18 ng/mL indica una carenza che può influenzare l'assorbimento del calcio e la salute generale.",
"normal_range": "30-50 ng/mL"
},
{
"marker": "Colesterolo LDL",
"explanation": "Il colesterolo LDL, spesso chiamato 'colesterolo cattivo', può accumularsi nelle pareti arteriose. Il tuo livello di 140 mg/dL è elevato e può aumentare il rischio cardiovascolare.",
"normal_range": "< 100 mg/dL"
}
],
"nutrition_principles": [
"Dai priorità agli acidi grassi omega-3 per la salute del cuore",
"Aumenta le fibre solubili per ridurre il colesterolo LDL",
"Includi alimenti ricchi di vitamina D e fonti di sole"
]
}
},
"food_recommendations": {
"power_foods": [
{
"food": "Salmone selvaggio",
"nutrients": ["Omega-3", "Vitamina D", "Proteine"],
"serving": "150g, 3 volte a settimana",
"why": "Fonte eccellente di omega-3 e vitamina D naturale per la salute cardiaca e ossea"
},
{
"food": "Avena integrale",
"nutrients": ["Beta-glucano", "Fibre", "Magnesio"],
"serving": "50g al giorno a colazione",
"why": "Le fibre solubili dell'avena aiutano a ridurre l'assorbimento del colesterolo LDL"
},
{
"food": "Olio extra vergine di oliva",
"nutrients": ["Grassi monoinsaturi", "Polifenoli", "Vitamina E"],
"serving": "2-3 cucchiai al giorno",
"why": "I grassi sani mediterranei migliorano il profilo lipidico e proteggono il cuore"
},
{
"food": "Spinaci",
"nutrients": ["Ferro", "Folato", "Vitamina K"],
"serving": "100g al giorno, crudi o cotti",
"why": "Ricchi di ferro e antiossidanti per l'energia e la salute cardiovascolare"
}
]
},
"supplement_recommendations": [
{
"supplement": "Vitamina D3",
"dosage": "2000-4000 UI al giorno",
"timing": "Con la colazione (pasto contenente grassi)",
"duration": "3-6 mesi, poi ritestare i livelli ematici",
"reason": "Il tuo livello di 18 ng/mL è sotto l'ottimale di 30-50 ng/mL"
},
{
"supplement": "Omega-3 (EPA/DHA)",
"dosage": "1000-2000mg EPA+DHA al giorno",
"timing": "Con i pasti principali",
"duration": "Continuativo per la salute cardiaca",
"reason": "Aiuta a ridurre i trigliceridi e migliora il rapporto HDL/LDL"
},
{
"supplement": "Coenzima Q10",
"dosage": "100mg al giorno",
"timing": "Con il pasto del mattino",
"duration": "Minimo 3 mesi",
"reason": "Supporta la salute cardiaca, particolarmente importante con l'ipertensione"
}
]
},
"api_version": "v1",
"timestamp": "2025-12-22T10:30:00Z"
}
Per un elenco completo di tutti i possibili valori di risposta, consulta la sezione Parole chiave di output.
API Confronto Esami del Sangue
Confronta più esami del sangue per identificare cambiamenti e miglioramenti con analisi basata su IA. Ottieni riepiloghi narrativi IA completi che spiegano cosa è cambiato tra i test.
Analizza 2-20 esami del sangue e fornisce un confronto dettagliato con approfondimenti narrativi generati dall'IA.
- Minimo 2 esami del sangue richiesti
- Massimo 20 esami del sangue per richiesta
- Ogni test deve includere
lab_dateoresults_date - Almeno un parametro comune tra i test
Parametri di richiesta
| Parametro | Tipo | Richiesto | Predefinito | Descrizione |
|---|---|---|---|---|
username | string | Sì | - | Il tuo nome utente API |
password | string | Sì | - | La tua password API |
language | string | No | en | Lingua della risposta. Vedi lingue supportate |
blood_tests | array | Sì | - | Array di oggetti esami del sangue (2-20 test) |
Struttura Array blood_tests
| Campo | Tipo | Richiesto | Descrizione |
|---|---|---|---|
lab_date | string | Sì* | Data del test in formato YYYY-MM-DD |
results_date | string | Sì* | Alternativa a lab_date (YYYY-MM-DD) |
parameters | array | Sì | Array di parametri dell'esame del sangue |
metadata | object | No | Metadati aggiuntivi (lab_name, note, ecc.) |
*È richiesto lab_date o results_date per ogni esame del sangue.
Esempio Python
import requests
from typing import Dict, List
def confronta_esami_sangue(
nome_utente: str,
password: str,
esami: List[Dict],
lingua: str = "it"
) -> Dict:
"""
Confronta più esami del sangue con analisi narrativa basata sull'IA.
Args:
nome_utente: Nome utente API
password: Password API
esami: Lista di oggetti esami del sangue (2-20 test)
lingua: Lingua della risposta
Returns:
dict: Risultati del confronto con approfondimenti narrativi IA
"""
url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"
if len(esami) < 2:
raise ValueError("Minimo 2 esami del sangue richiesti")
if len(esami) > 20:
raise ValueError("Massimo 20 esami del sangue consentiti")
payload = {
"username": nome_utente,
"password": password,
"language": lingua,
"blood_tests": esami
}
risposta = requests.post(url, json=payload, timeout=120)
risposta.raise_for_status()
return risposta.json()
# Esempio di utilizzo
if __name__ == "__main__":
test = [
{
"lab_date": "2024-06-15",
"parameters": [
{"short_name": "HGB", "result": 12.2, "unit": "g/dL"},
{"short_name": "CHOL", "result": 235, "unit": "mg/dL"},
{"short_name": "LDL", "result": 155, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-15",
"parameters": [
{"short_name": "HGB", "result": 14.5, "unit": "g/dL"},
{"short_name": "CHOL", "result": 185, "unit": "mg/dL"},
{"short_name": "LDL", "result": 98, "unit": "mg/dL"}
]
}
]
risultato = confronta_esami_sangue("tuo_nome_utente", "tua_password", test)
print(f"Tendenza generale: {risultato['data']['comparison_summary']['overall_trend']}")
for param in risultato['data']['parameter_analysis']:
print(f"{param['parameter_name']}: {param['trend_assessment']}")
Riferimento campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
comparison_id | string | Identificatore univoco per questo confronto (formato: CMP-XXXXXXXX) |
comparison_summary | object | Riepilogo generale: key_findings, overall_trend, date report, time_interval |
parameter_analysis | array | Analisi dettagliata per parametro con tipo di cambiamento e significato clinico |
health_assessment | object | Aree di preoccupazione, miglioramento, sviluppi positivi, fattori di rischio |
recommendations | object | Test di follow-up, azioni immediate, modifiche dello stile di vita, referral specialistici |
detailed_interpretation | object | Sezioni narrative IA con riepilogo esecutivo e raccomandazioni cliniche |
Struttura oggetto parameter_analysis
| Campo | Tipo | Descrizione |
|---|---|---|
parameter_name | string | Nome parametro |
report1_value | string | Valore dal primo report con unità |
report2_value | string | Valore dal secondo report con unità |
change_type | string | increased, decreased o stable |
change_magnitude | string | significant, moderate o minor |
clinical_significance | string | Spiegazione IA di cosa significa il cambiamento |
trend_assessment | string | positive, negative o neutral |
Esempio di risposta
{
"api_version": "1.0.0",
"status": "success",
"message": "Confronto esami del sangue completato con successo",
"timestamp": "2025-12-22T01:12:43.057537Z",
"data": {
"comparison_id": "CMP-F4ACEE52",
"tests_compared": 2,
"date_range": {
"earliest": "2024-06-15",
"latest": "2024-12-15",
"span_days": 183
},
"comparison_summary": {
"overall_trend": "migliorato",
"report1_date": "2024-06-15",
"report2_date": "2024-12-15",
"time_interval": "183 giorni tra i report",
"key_findings": [
"Livelli di emoglobina ed RBC normalizzati indicano risoluzione dell'anemia",
"Glucosio e HbA1c migliorati nell'intervallo normale suggerendo miglior controllo glicemico",
"Profilo lipidico migliorato con colesterolo totale, LDL, HDL e trigliceridi normalizzati"
]
},
"parameter_analysis": [
{
"parameter_name": "Emoglobina",
"report1_value": "12.2 g/dL",
"report2_value": "14.5 g/dL",
"change_type": "increased",
"change_magnitude": "significant",
"clinical_significance": "Miglioramento da anemia a livelli normali di emoglobina",
"trend_assessment": "positive"
},
{
"parameter_name": "Colesterolo LDL",
"report1_value": "155 mg/dL",
"report2_value": "98 mg/dL",
"change_type": "decreased",
"change_magnitude": "significant",
"clinical_significance": "LDL vicino all'intervallo ottimale, riduce il rischio di aterosclerosi",
"trend_assessment": "positive"
}
],
"health_assessment": {
"overall_health_trend": "migliorato",
"areas_of_improvement": [
"Correzione dell'anemia",
"Controllo glicemico",
"Normalizzazione del profilo lipidico"
],
"areas_of_concern": [],
"positive_developments": [
"Risoluzione dell'anemia",
"Glucosio e HbA1c normali",
"Miglioramento del profilo di rischio cardiovascolare"
]
},
"recommendations": {
"immediate_actions": [
"Continuare l'integrazione attuale per ferro e vitamina D",
"Mantenere il controllo glicemico e lipidico con dieta ed esercizio"
],
"follow_up_tests": [
"Ripetere CBC e studi sul ferro in 3 mesi",
"Monitorare glucosio a digiuno e HbA1c trimestralmente"
],
"lifestyle_modifications": [
"Adottare una dieta sana per il cuore a basso contenuto di grassi saturi",
"Aumentare l'attività fisica per mantenere la salute metabolica"
]
}
}
}
I campi di risposta utilizzano valori standardizzati: overall_trend e trend_assessment (vedi valutazione tendenza), change_type (increased, decreased, stable).
Riferimento Parole Chiave
Riferimento completo per tutti i valori delle parole chiave di input utilizzate negli endpoint dell'API Kantesti. Usa questi valori esatti nelle richieste API.
analysis_type API Analisi Tendenze
Specifica il tipo di analisi delle tendenze da eseguire.
| Valore | Predefinito | Descrizione |
|---|---|---|
comprehensive | ✓ | Analisi completa con statistiche, grafici e interpretazione IA |
statistical | Solo analisi statistica | |
summary | Solo riepilogo di alto livello |
health_goals API Nutrizione
Obiettivi di salute per raccomandazioni nutrizionali personalizzate. Più valori possono essere forniti come array.
| Valore | Descrizione |
|---|---|
maintain | Mantenere la salute attuale (predefinito) |
improve_energy | Focus sui livelli di energia |
weight_management | Gestione sana del peso |
heart_health | Salute cardiovascolare |
immune_support | Supporto al sistema immunitario |
digestive_health | Benessere digestivo |
bone_health | Salute delle ossa |
mental_clarity | Funzione cognitiva |
dietary_restrictions API Nutrizione
Restrizioni alimentari e allergie. Più valori possono essere forniti come array. È accettato anche testo libero per restrizioni personalizzate.
| Valore | Descrizione |
|---|---|
low_sodium | Apporto ridotto di sodio |
low_sugar | Apporto ridotto di zucchero |
low_fat | Apporto ridotto di grassi |
gluten_free | Senza glutine |
dairy_free | Senza latticini |
nut_free | Senza frutta a guscio |
soy_free | Senza soia |
egg_free | Senza uova |
halal | Conforme halal |
kosher | Conforme kosher |
È accettato anche testo libero per restrizioni alimentari personalizzate non elencate sopra.
dietary_preferences API Nutrizione
Preferenze di stile di vita alimentare per la pianificazione dei pasti.
| Valore | Descrizione |
|---|---|
omnivore | Nessuna restrizione (predefinito) |
vegetarian | Niente carne |
vegan | Nessun prodotto animale |
pescatarian | Vegetariano + pesce |
keto | Dieta chetogenica |
paleo | Dieta paleolitica |
mediterranean | Dieta mediterranea |
activity_level API Nutrizione
Livello di attività fisica per calcoli calorici e nutrizionali.
| Valore | Descrizione |
|---|---|
sedentary | Poco o nessun esercizio |
light | Esercizio leggero 1-3 giorni/settimana |
moderate | Esercizio moderato 3-5 giorni/settimana (predefinito) |
active | Esercizio intenso 6-7 giorni/settimana |
very_active | Esercizio molto intenso o lavoro fisico |
budget API Nutrizione
Livello di budget per raccomandazioni alimentari e di integratori.
| Valore | Descrizione |
|---|---|
low | Opzioni economiche |
moderate | Opzioni bilanciate (predefinito) |
high | Opzioni premium |
gender Tutte le API
Sesso del paziente per intervalli di riferimento e raccomandazioni personalizzate.
| Valore | Descrizione |
|---|---|
male | Paziente maschio |
female | Paziente femmina |
other | Altro o non specificato |
Parole chiave di output
Le seguenti parole chiave appaiono nelle risposte API. Comprendere questi valori aiuta a interpretare e visualizzare correttamente i risultati.
evaluation API Analisi sangue & Confronto
Stato di valutazione del parametro che indica come il risultato si confronta con gli intervalli di riferimento.
| Valore | Descrizione |
|---|---|
normal | Nell'intervallo di riferimento normale |
low | Sotto l'intervallo normale |
high | Sopra l'intervallo normale |
critical_low | Criticamente basso (attenzione immediata richiesta) |
critical_high | Criticamente alto (attenzione immediata richiesta) |
borderline_low | Leggermente sotto l'intervallo normale |
borderline_high | Leggermente sopra l'intervallo normale |
trend_assessment API Confronto & Tendenze
Valutazione complessiva delle tendenze dei parametri tra i test.
| Valore | Descrizione |
|---|---|
positive | Migliorato (verso l'intervallo normale) |
negative | Peggiorato (lontano dall'intervallo normale) |
stable | Relativamente invariato tra i test |
improving | Tendenza generale al miglioramento |
worsening | Tendenza generale al peggioramento |
trend_direction API Analisi tendenze
Direzione dei cambiamenti di valore dei parametri nel tempo.
| Valore | Descrizione |
|---|---|
upward | Valori in aumento nel tempo |
downward | Valori in diminuzione nel tempo |
stable | Cambiamento minimo nel tempo |
trend_strength API Analisi tendenze
Entità della tendenza osservata.
| Valore | Descrizione |
|---|---|
strong | >15% di cambiamento tra i periodi |
moderate | 5-15% di cambiamento tra i periodi |
mild | <5% di cambiamento tra i periodi |
health_score / score_interpretation API Punteggio salute
Interpretazione complessiva del punteggio di salute basata sui parametri analizzati.
| Valore | Descrizione |
|---|---|
excellent | Tutti i marker nell'intervallo ottimale |
good | La maggior parte dei marker nell'intervallo normale |
fair | Alcuni marker richiedono attenzione |
poor | Più marker richiedono attenzione |
Endpoint di utilità
Restituisce le informazioni della piattaforma API. Nessuna autenticazione richiesta.
Endpoint di verifica dello stato per il monitoraggio. Nessuna autenticazione richiesta.
Verifica la tua quota API rimanente. Autenticazione richiesta.
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/quota/check" \
-H "Content-Type: application/json" \
-d '{"username": "TUO_NOME_UTENTE", "password": "TUA_PASSWORD"}'
API Valutazione dei Rischi di Salute Familiare
L'API Kantesti di Valutazione dei Rischi di Salute Familiare è una piattaforma di analisi dei rischi di salute ereditari alimentata dall'IA. Genera rapporti completi di salute familiare analizzando la storia medica familiare, i profili di salute dei pazienti e i dati degli esami del sangue per identificare i fattori di rischio ereditari e fornire raccomandazioni personalizzate di cure preventive.
Analisi dei rischi ereditari con IA
L'API Family Health utilizza modelli avanzati di IA per incrociare la storia medica familiare con i dati degli esami del sangue del paziente, identificando pattern di rischio ereditario nelle categorie cardiovascolare, metabolica, oncologica, neurologica, respiratoria, autoimmune, genetica, salute mentale e rene/fegato. I rapporti includono punteggio di rischio, cronoprogramma di cure preventive, raccomandazioni di screening genetico e consigli sullo stile di vita — tutto localizzato in oltre 100 lingue.
- Analisi dei rischi ereditari — Classificazione in rischio alto, moderato e basso
- Analisi dell'albero genealogico — Mappatura dei rischi delle linee paterna e materna
- Correlazione esami del sangue — Incrocio della storia familiare con i parametri ematici
- Raccomandazioni screening genetico — Suggerimenti personalizzati per test genetici
- Cronoprogramma cure preventive — Programmi di screening appropriati all'età
- Analisi farmaci — Valutazione delle interazioni e sensibilità ereditarie
- 100+ lingue supportate — Localizzazione completa dei rapporti
- Modalità Sandbox — Testa l'integrazione senza consumare crediti
Riepilogo endpoint
| Endpoint | Metodo | Descrizione | Auth |
|---|---|---|---|
/api/v1/family-health/analyze | POST | Genera rapporto completo di valutazione dei rischi | Richiesto (1 credito) |
/api/v1/family-health/validate | POST | Valida i dati della richiesta (nessun consumo quota) | Richiesto (Gratuito) |
/api/v1/family-health/supported-languages | GET | Elenca 100+ lingue supportate | Non richiesto |
/api/v1/family-health/condition-categories | GET | Elenca categorie di patologie | Non richiesto |
/api/v1/family-health/family-relations | GET | Elenca tipi di relazioni familiari | Non richiesto |
/api/v1/family-health/sandbox/analyze | POST | Test sandbox con dati di esempio | Richiesto (Gratuito) |
Genera un rapporto completo di valutazione dei rischi di salute familiare alimentato dall'IA.
Parametri richiesta (JSON Body)
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Nome utente API |
password | string | Sì | Password API |
patient_data | object | Sì | Informazioni paziente |
family_members | array | Sì* | Membri della famiglia (max 100) |
health_profile | object | Sì* | Profilo di salute |
blood_test_data | array | No | Dati esami del sangue |
language | string | No | Codice lingua (default: en) |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
-H "Content-Type: application/json" \
-d '{"username":"UTENTE","password":"PASSWORD","patient_data":{"name":"Giulia Rossi","age":42,"gender":"female"},"family_members":[{"relation":"father","age":70,"conditions":["hypertension"]}],"language":"it"}'
Esempio Python
import requests
url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"
payload = {"username":"UTENTE","password":"PASSWORD","patient_data":{"name":"Giulia Rossi","age":42,"gender":"female"},"family_members":[{"relation":"father","age":70,"conditions":["hypertension"]}],"language":"it"}
response = requests.post(url, json=payload, timeout=120)
print(response.json())
Esempio di risposta
{"status":"success","data":{"report_data":{"report_title":"Rapporto di Valutazione dei Rischi di Salute Familiare","hereditary_risk_analysis":{"high_risk":[{"condition":"Malattia cardiovascolare","risk_score":75}]},"genetic_screening_recommendations":["Test genetico BRCA1/BRCA2"]}},"timestamp":"2026-03-23T10:30:00Z","api_version":"1.0.0"}
Codici errore Family Health API
| Codice | HTTP | Descrizione |
|---|---|---|
AUTH_1001 | 401 | Credenziali mancanti |
AUTH_1002 | 401 | Credenziali non valide |
QUOTA_1101 | 403 | Quota API insufficiente |
VAL_2001 | 400 | Campo obbligatorio mancante |
VAL_2003 | 400 | Codice lingua non supportato |
PROC_3001 | 500 | Generazione rapporto fallita |
SRV_5001 | 500 | Errore interno del server |
Endpoint Sandbox Family Health
Testa la tua integrazione senza consumare crediti.
| API | Sandbox | Descrizione |
|---|---|---|
| Family Health | /api/v1/family-health/sandbox/analyze | Dati di rapporto di esempio |
Endpoint di riferimento (Nessuna auth)
| Endpoint | Metodo | Descrizione |
|---|---|---|
/api/v1/family-health/supported-languages | GET | 100+ lingue supportate |
/api/v1/family-health/condition-categories | GET | 9 categorie di patologie |
/api/v1/family-health/family-relations | GET | 14 relazioni familiari |
API Mappa Corporea
L'API Kantesti Mappa Corporea trasforma un pannello di laboratorio in anatomia. Ogni risultato fuori range o borderline viene collocato su una delle 13 regioni corporee e l'API restituisce sia la legenda — quale regione, quale gravità, quali marcatori l'hanno determinata — sia l'URL di un'illustrazione corrispondente del corpo.
Deterministica per impostazione predefinita
I nomi dei marcatori vengono confrontati con tabelle di alias multilingue che coprono 39 lingue di referto, inclusi gli alfabeti non latini — invii i nomi degli analiti esattamente come li ha stampati il tuo laboratorio, nella lingua in cui li ha stampati. Nessun modello viene chiamato e nessuna illustrazione viene generata se non lo richiedi, quindi la richiesta predefinita è priva di costi di IA e restituisce sempre la stessa risposta per lo stesso pannello.
- 13 regioni anatomiche — Cervello e nervi, tiroide, cuore e vasi, fegato, pancreas, surreni, reni, intestino, apparato riproduttivo, sangue, sistema immunitario, ossa, muscoli
- Livelli di gravità — Livello 2 per i risultati fuori range, livello 1 per quelli borderline, così la legenda può essere colorata senza ulteriore logica
- Attribuzione dei marcatori — Ogni regione elenca i marcatori che l'hanno determinata, dal peggiore in poi
- Output indipendente dalla lingua — Chiavi di regione e i tuoi stessi nomi dei marcatori; l'illustrazione non contiene testo, quindi una sola immagine serve per tutte le lingue
- URL firmati delle illustrazioni — Ogni URL di illustrazione contiene una firma HMAC, quindi nessuno può enumerarli o falsificarli
- Stati vuoti onesti — Un pannello privo di anomalie restituisce il corpo condiviso "tutto a posto"; un pannello i cui marcatori segnalati non sono collocabili restituisce un errore invece di un corpo verde fuorviante
- Modalità deterministica — Predefinita. Nessuna chiamata al modello, nessun credito immagine, output riproducibile
- Modalità Sandbox — Testa l'integrazione senza consumare crediti
Riepilogo endpoint
| Endpoint | Metodo | Descrizione | Auth |
|---|---|---|---|
/api/v1/body-map/analyze |
POST | Costruisce una mappa corporea a partire da un pannello di laboratorio | Richiesto (1 credito) |
/api/v1/body-map/validate |
POST | Valida un payload e mostra quali marcatori vengono riconosciuti (nessun consumo di quota) | Richiesto (Gratuito) |
/api/v1/body-map/sandbox |
POST | Test sandbox con dati di esempio (nessun consumo di quota) | Richiesto (Gratuito) |
/api/v1/body-map/regions |
GET | Elenca tutte le 13 regioni corporee e i livelli di gravità | Non richiesto |
/api/v1/body-map/info |
GET | Metadati sulle funzionalità, limiti e dettagli di autenticazione | Non richiesto |
Colloca sul corpo ogni risultato segnalato di un pannello di laboratorio. Consuma 1 credito per ogni richiesta andata a buon fine. Una richiesta che non supera la validazione, o i cui marcatori segnalati non sono collocabili, non viene addebitata.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
parameters | array | Sì | Oggetti con i risultati di laboratorio. Max 500. Ognuno richiede il nome dell'analita e una evaluation. |
interpretation | array | No | Interpretazione clinica, usata come contesto solo quando ai_assist è attivo |
ai_assist | boolean | No | Consente al modello di collocare i marcatori che le tabelle di alias non riconoscono (predefinito: false) |
include_image | boolean | No | Richiede l'illustrazione renderizzata (predefinito: false) |
image_wait | integer | No | Secondi di attesa per un'illustrazione appena generata, 0-30 (predefinito: 0) |
Campi dell'oggetto parametro
| Campo | Tipo | Richiesto | Descrizione |
|---|---|---|---|
short_name | string | Sì* | Nome dell'analita come stampato dal laboratorio. *È richiesto almeno uno tra short_name, long_name, name, parameter_name o parameter. |
long_name | string | No | Nome completo dell'analita; migliora il riconoscimento delle abbreviazioni |
evaluation | string | No | Uno tra high, low, bad, slightly_high, slightly_low, normal. Solo i valori segnalati compaiono sulla mappa. |
result | string|number | No | Il valore misurato; usato per stabilire quali regioni disegnare |
unit | string | No | Unità del risultato, con qualsiasi grafia |
range_normal_min | number | No | Limite inferiore dell'intervallo di riferimento |
range_normal_max | number | No | Limite superiore dell'intervallo di riferimento |
category | string | No | Categoria di laboratorio; usata come ripiego quando il nome dell'analita è sconosciuto |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "TUO_NOME_UTENTE",
"password": "TUA_PASSWORD",
"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"}
]
}'
Esempio Python
import requests
def build_body_map(parameters, username, password, include_image=False):
"""
Colloca sul corpo i risultati delle analisi del sangue fuori range.
Args:
parameters: Elenco di oggetti con i risultati di laboratorio
username: Nome utente API
password: Password API
include_image: Richiede l'illustrazione renderizzata (consuma un credito immagine)
Returns:
dict: Blocco mappa corporea con regioni, legenda e URL delle illustrazioni
"""
url = "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze"
response = requests.post(url, json={
"username": username,
"password": password,
"parameters": parameters,
"include_image": include_image,
}, timeout=60)
response.raise_for_status()
return response.json()
# Esempio di utilizzo
if __name__ == "__main__":
result = build_body_map(
parameters=[
{"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"},
],
username="nome_utente",
password="password",
)
body_map = result["data"]["body_map"]
if result["data"]["all_clear"]:
print("Tutto a posto — nessuna anomalia segnalata.")
for region in body_map["regions"]:
severity = "fuori range" if region["level"] == 2 else "borderline"
print(f" {region['key']}: {severity} ({', '.join(region['markers'])})")
print(f"Illustrazione: {body_map['image_url'] or body_map['fallback_url']}")
Esempio di risposta
{
"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"
}
Riferimento dei campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
body_map.spec | string | Identificatore canonico di questa combinazione di regioni e gravità. Pannelli identici condividono la stessa spec e quindi la stessa illustrazione in cache. |
body_map.regions[].key | string | Una delle 13 chiavi di regione |
body_map.regions[].level | integer | 2 = fuori range, 1 = borderline |
body_map.regions[].drawn | boolean | Indica se questa regione è dipinta sull'illustrazione. La legenda elenca sempre tutte le regioni; al massimo sei vengono disegnate. |
body_map.regions[].markers | array | Nomi dei marcatori che hanno portato questa regione sulla mappa, dal peggiore in poi |
body_map.unmapped | integer | Marcatori segnalati che non è stato possibile collocare in alcuna regione |
body_map.image_url | string|null | Illustrazione in cache. null finché il file non esiste — usa fallback_url come ripiego. |
body_map.fallback_url | string | URL firmato di generazione. Sempre presente. Risponde 503 con Retry-After mentre l'illustrazione è ancora in produzione. |
all_clear | boolean | true quando non è stata segnalata alcuna anomalia; vale il corpo condiviso "tutto a posto" |
mode | string | deterministic o ai_assisted |
La risposta è indipendente dalla lingua per scelta progettuale: contiene le chiavi di regione e i nomi dei marcatori del tuo laboratorio. Traduci le 13 chiavi di regione nel tuo client e privilegia la legenda rispetto all'illustrazione — se il modello di immagini dovesse dipingere l'organo sbagliato, la legenda accanto resta comunque corretta.
Verifica un payload senza eseguire l'analisi e segnala quali dei tuoi nomi di analita vengono riconosciuti dal motore. L'autenticazione è richiesta; non viene consumata alcuna quota e l'endpoint continua a funzionare anche su un account senza crediti residui.
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/validate" \
-H "Content-Type: application/json" \
-d '{
"username": "TUO_NOME_UTENTE",
"password": "TUA_PASSWORD",
"parameters": [
{"short_name": "ALT", "result": "65", "evaluation": "high"},
{"short_name": "Unobtainium", "result": "9", "evaluation": "high"}
]
}'
Esempio di risposta
{
"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"
}
Endpoint di riferimento
Entrambi gli endpoint di riferimento sono gratuiti e non richiedono autenticazione.
Elenca le 13 regioni corporee in ordine canonico, insieme ai livelli di gravità. Usalo per costruire le tue traduzioni della legenda.
Esempio cURL
curl "https://app.aibloodtestinterpret.com/api/v1/body-map/regions"
Esempio di risposta
{
"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
}
}
Metadati sulle funzionalità: se il motore è abilitato su questo deployment, i limiti delle richieste, lo schema di autenticazione e l'elenco completo degli endpoint.
Esempio cURL
curl "https://app.aibloodtestinterpret.com/api/v1/body-map/info"
Sandbox
POST /api/v1/body-map/sandbox restituisce una risposta di esempio esattamente nella forma prodotta da /analyze, così un client scritto per la sandbox funziona senza modifiche in produzione. L'autenticazione è richiesta, così la chiamata verifica anche le tue credenziali, ma non viene consumata alcuna quota e non viene eseguita alcuna analisi.
| Codice errore | HTTP | Significato |
|---|---|---|
AUTH_1001 | 401 | Credenziali di autenticazione mancanti |
AUTH_1002 | 401 | Nome utente o password non validi |
AUTH_1004 | 400 | Credenziali malformate (tipo errato o troppo lunghe) |
QUOTA_1101 | 403 | Quota API insufficiente |
VAL_2001 | 400 | parameters è mancante |
VAL_2002 | 400 | Formato dei dati non valido |
VAL_2005 | 400 | parameters è vuoto |
VAL_2006 | 400 | Più di 500 parametri |
VAL_2008 | 400 | Una riga di parametro è malformata o priva di nome |
RES_4004 | 422 | Esistono risultati segnalati ma nessuno è associabile a una regione corporea |
RES_4005 | 503 | Il motore della mappa corporea è disabilitato su questo deployment |
API Età Biologica del Sangue
L'API Kantesti Età Biologica del Sangue risponde a una domanda a cui un intervallo di riferimento non può rispondere: quanti anni dimostra questo sangue? Calcola l'età biologica a partire da un pannello di routine usando il modello Levine PhenoAge pubblicato e, accanto a essa, ricava fino a 18 indici clinici — FIB-4, HOMA-IR, TyG, eGFR, AIP, NLR, gap anionico e altri — che un referto di laboratorio raramente stampa.
Un risultato anche da un pannello parziale
PhenoAge richiede nove marcatori e la maggior parte dei pannelli ne contiene meno. Quando tutti e nove sono presenti l'API restituisce la formula pubblicata senza modifiche. Quando non lo sono, i dati mancanti vengono colmati con le mediane di popolazione e la risposta viene restituita come source: "partial", così sai sempre quale delle due hai ricevuto. Entrambi i percorsi sono deterministici: nessuna chiamata al modello, nessun costo aggiuntivo, sempre la stessa risposta per lo stesso pannello.
- Levine PhenoAge — Il modello pubblicato, calcolato senza modifiche quando tutti e nove i marcatori sono presenti
- Degradazione graduale — Un pannello parziale produce comunque un risultato, chiaramente etichettato come tale, con l'elenco dei marcatori mancanti
- 18 indici clinici — FIB-4, De Ritis, rapporto A/G, HOMA-IR, TyG, eAG, eGFR, gap anionico, BUN/creatinina, non-HDL, TG/HDL, AIP, CT/HDL, colesterolo residuo, NLR, Mentzer, saturazione della transferrina, calcio corretto
- Conversione automatica delle unità — Unità SI e convenzionali, con qualsiasi grafia, e controlli di plausibilità fisiologica che scartano i valori impossibili
- Riconoscimento multilingue dei marcatori — Nomi di analita in 39 lingue di referto, inclusi gli alfabeti non latini; non invii mai chiavi interne
- Modalità deterministica — Predefinita. Nessuna chiamata di rete, nessun costo di IA, output riproducibile
- Livelli opzionali basati su modello — Identificazione delle righe, una stima migliorata e una nota personale, ognuno dietro il proprio flag. Un PhenoAge completo a nove marcatori non viene mai sovrascritto dal modello.
- 100 lingue — Per la nota personale opzionale
- Modalità Sandbox — Testa l'integrazione senza consumare crediti
Riepilogo endpoint
| Endpoint | Metodo | Descrizione | Auth |
|---|---|---|---|
/api/v1/blood-age/analyze |
POST | Calcola l'età biologica del sangue e gli indici clinici derivati | Richiesto (1 credito) |
/api/v1/blood-age/validate |
POST | Valida un payload e mostra quali marcatori sono presenti nel pannello (nessun consumo di quota) | Richiesto (Gratuito) |
/api/v1/blood-age/sandbox |
POST | Test sandbox con dati di esempio (nessun consumo di quota) | Richiesto (Gratuito) |
/api/v1/blood-age/biomarkers |
GET | Elenca i marcatori letti dal motore e le relative unità di destinazione | Non richiesto |
/api/v1/blood-age/info |
GET | Metadati sulle funzionalità, limiti e dettagli di autenticazione | Non richiesto |
Calcola l'età biologica del sangue e gli indici derivati a partire da un pannello di laboratorio. Consuma 1 credito per ogni richiesta andata a buon fine. Una richiesta che non supera la validazione, o il cui pannello non produce nulla di calcolabile, non viene addebitata.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
parameters | array | Sì | Oggetti con i risultati di laboratorio. Max 500. Ognuno richiede il nome dell'analita e un risultato. |
metadata | object | No | Intestazione del referto. Fortemente consigliata: PhenoAge contiene un termine di età cronologica. Legge patient_age, patient_sex, dob, lab_date. |
patient | object | No | {"age": 42, "gender": "female"} — usato quando i metadati non li contengono |
interpretation | array | No | Interpretazione clinica, usata solo come contesto per il modello |
language | string | No | Lingua della nota personale opzionale (predefinito: en). Vedi le lingue supportate. |
ai_assist | boolean | No | Consente al modello di identificare nomi di analita insoliti (predefinito: false) |
ai_estimate | boolean | No | Consente al modello di migliorare un'età parziale (predefinito: false) |
ai_note | boolean | No | Richiede una nota personale in language (predefinito: false) |
I nove marcatori PhenoAge
Inviali con i nomi che il tuo laboratorio ha stampato — il riconoscimento avviene per nome, in una qualsiasi delle 39 lingue di referto supportate, e le unità vengono convertite automaticamente.
| Marcatore | Nome tipico | Unità di destinazione |
|---|---|---|
albumin | Albumina | g/L |
creatinine | Creatinina | µmol/L |
glucose | Glucosio / Glicemia a digiuno | mmol/L |
crp | Proteina C-reattiva | mg/L |
lymph | Linfociti | % |
mcv | Volume corpuscolare medio | fL |
rdw | Ampiezza di distribuzione eritrocitaria | % |
alp | Fosfatasi alcalina | U/L |
wbc | Conta dei globuli bianchi | 10⁹/L |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "TUO_NOME_UTENTE",
"password": "TUA_PASSWORD",
"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}
]
}'
Esempio Python
import requests
def biological_blood_age(parameters, metadata, username, password):
"""
Calcola l'età biologica del sangue da un pannello ematico di routine.
Args:
parameters: Elenco di oggetti con i risultati di laboratorio
metadata: Intestazione del referto con patient_age e patient_sex
username: Nome utente API
password: Password API
Returns:
dict: Blocco età del sangue, indici derivati e un riepilogo sintetico
"""
url = "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze"
response = requests.post(url, json={
"username": username,
"password": password,
"parameters": parameters,
"metadata": metadata,
}, timeout=60)
response.raise_for_status()
return response.json()
# Esempio di utilizzo
if __name__ == "__main__":
result = biological_blood_age(
parameters=[
{"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"},
],
metadata={"patient_age": "40", "patient_sex": "Male"},
username="nome_utente",
password="password",
)
summary = result["data"]["summary"]
if summary["status"] != "ok":
print(f"Nessuna età calcolata: {summary['status']}")
else:
print(f"Cronologica: {summary['chronological_age']}")
print(f"Biologica: {summary['biological_age']} ({summary['source']})")
print(f"Differenza: {summary['delta_years']:+} anni")
for index in result["data"]["blood_age"]["indices"]:
print(f" {index['key']}: {index['value']} {index['unit']} [{index['band']}]")
Esempio di risposta
{
"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"
}
Riferimento dei campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
summary.status | string | ok, missing_age, missing_markers, needs_markers o unavailable |
summary.source | string | formula (tutti e nove i marcatori), partial (mediane imputate) o ai (stima del modello, solo con ai_estimate) |
summary.chronological_age | integer|null | Età letta dai metadati o dall'oggetto paziente |
summary.biological_age | number|null | L'età del sangue calcolata, in anni |
summary.delta_years | number|null | Biologica meno cronologica. Un valore negativo significa più giovane del calendario. |
summary.markers_missing | array | Quali dei nove marcatori PhenoAge non sono stati forniti dal pannello |
blood_age.age.inputs | object | I valori convertiti effettivamente usati, nelle unità di destinazione |
blood_age.age.labels | object | Il nome del tuo laboratorio per ogni marcatore riconosciuto dal motore |
blood_age.indices[].band | string | ok, borderline, high, low o info |
blood_age.indices[].from | array | Le righe di laboratorio da cui è stato ricavato questo indice |
mode | string | deterministic o ai_assisted |
PhenoAge contiene un termine di età, quindi senza un'età cronologica la risposta torna con status: "missing_age" e nessun valore. Inviala in metadata.patient_age, oppure in patient.age, oppure come data di nascita in patient.dob. La formula si applica tra i 18 e i 100 anni.
Verifica un payload senza eseguire l'analisi e segnala quali dei nove marcatori PhenoAge sono presenti nel tuo pannello e se è stato possibile leggere un'età cronologica — i due elementi che determinano se otterrai la formula completa o la stima parziale. L'autenticazione è richiesta; non viene consumata alcuna quota e l'endpoint continua a funzionare anche su un account senza crediti residui.
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
-H "Content-Type: application/json" \
-d '{
"username": "TUO_NOME_UTENTE",
"password": "TUA_PASSWORD",
"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": "%"}
]
}'
Esempio di risposta
{
"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"
}
Endpoint di riferimento
Entrambi gli endpoint di riferimento sono gratuiti e non richiedono autenticazione.
Elenca i nove input di PhenoAge, tutti i marcatori che il motore è in grado di leggere con la relativa unità di destinazione e l'intervallo di età a cui si applica la formula.
Esempio cURL
curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/biomarkers"
Esempio di risposta
{
"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."
}
}
Metadati sulle funzionalità: se il motore è abilitato su questo deployment, le due modalità e il costo di ciascuna, i limiti delle richieste, lo schema di autenticazione e le lingue supportate.
Esempio cURL
curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/info"
Sandbox
POST /api/v1/blood-age/sandbox restituisce una risposta di esempio esattamente nella forma prodotta da /analyze, così un client scritto per la sandbox funziona senza modifiche in produzione. L'autenticazione è richiesta, così la chiamata verifica anche le tue credenziali, ma non viene consumata alcuna quota e non viene eseguita alcuna analisi.
| Codice errore | HTTP | Significato |
|---|---|---|
AUTH_1001 | 401 | Credenziali di autenticazione mancanti |
AUTH_1002 | 401 | Nome utente o password non validi |
AUTH_1004 | 400 | Credenziali malformate (tipo errato o troppo lunghe) |
QUOTA_1101 | 403 | Quota API insufficiente |
VAL_2001 | 400 | parameters è mancante |
VAL_2002 | 400 | Formato dei dati non valido |
VAL_2003 | 400 | Codice lingua non supportato |
VAL_2005 | 400 | parameters è vuoto |
VAL_2006 | 400 | Più di 500 parametri |
VAL_2007 | 400 | Oggetto patient non valido |
VAL_2008 | 400 | Una riga di parametro è malformata o priva di nome |
VAL_2009 | 400 | Valore di patient.gender non supportato |
RES_4004 | 422 | Nulla di calcolabile a partire da questi parametri |
RES_4005 | 503 | Il motore dell'età del sangue è disabilitato su questo deployment |
API DNA Health: Interpretazione del Test DNA, Referto DNA + Sangue e Consulente Integratori
Siamo orgogliosi di presentare l'API Kantesti DNA Health: tre nuovi moduli di IA che trasformano il test del DNA di un paziente in referti clinici. L'Interpretazione del Test DNA legge un file di genotipo grezzo o un referto genetico e redige un referto completo sulla salute genetica. Il Referto Salute DNA + Sangue combina questo referto con un esame del sangue interpretato e mostra dove geni e valori di laboratorio si confermano o si contraddicono. Il Consulente Integratori trasforma DNA, esame del sangue e un breve questionario in un piano di integrazione personalizzato, costruito sui prodotti della tua clinica.
Verificato sul tuo file
Un file di genotipo grezzo viene analizzato sul server e confrontato con un pannello selezionato di 334 marcatori in 20 categorie: dai geni della metilazione, cardiovascolari e del metabolismo lipidico fino a farmacogenomica, metabolismo dei nutrienti, stato di portatore e longevità. Ogni risultato scritto dall'IA viene verificato sul file caricato: un rsID che il file non contiene viene scartato e ogni genotipo viene vincolato alla chiamata riportata nel file, così il referto non può inventare un risultato.
- Tutte le principali fonti di DNA — File grezzi di 23andMe, AncestryDNA, MyHeritage, FTDNA e LivingDNA e file VCF, anche all'interno di archivi
.zipo.gz; righe rsID incollate; oppure un referto genetico composto da un massimo di 6 file PDF, JPG o PNG - Referto genetico completo — Risultati per area di salute, rischi di malattia, stato di portatore, farmacogenomica (fenotipi metabolizzatori previsti e classi di farmaci interessate), nutrigenomica, tratti, esami di approfondimento consigliati e segnali d'allarme
- Geni e valori di laboratorio a confronto — Il referto DNA + Sangue classifica ogni collegamento tra un risultato genetico e un valore di laboratorio come
confirms,contradicts,neutralowatch, con matrice dei rischi, azioni prioritarie e piano di monitoraggio - Piani di integrazione con regole di sicurezza — Dose, forma, momento di assunzione, durata, interazioni e date di ricontrollo; le dosi restano entro i livelli massimi di assunzione tollerabili, si applicano i limiti di sicurezza per la gravidanza e tutto ciò che richiede un medico prescrittore confluisce in
clinician_review_required - Il catalogo prodotti della tua clinica — Il consulente raccomanda i prodotti disponibili nella tua clinica, li contrassegna come
clinic_librarye, in modalità "solo prodotti della clinica", elenca i fabbisogni che il tuo catalogo non copre - Concatenabili e senza stato — Invia il referto del modulo 1 direttamente ai moduli 2 e 3. Nulla viene memorizzato in associazione a un paziente e i file di genotipo grezzi vengono eliminati dopo l'analisi
- 100+ lingue di referto — Il referto viene redatto nella lingua che richiedi
- Modalità asincrona — Aggiungi
?async=1e interroga/api/jobs/<job_id>, così un'analisi lunga non incorre mai in un timeout del gateway - Modalità Sandbox — Testa l'integrazione senza consumare crediti
1. POST /api/v1/dna-interpretation/analyze con il file DNA restituisce data.report. 2. Invia quel referto, insieme a un esame del sangue interpretato, a /api/v1/dna-blood-report/analyze. 3. Invia lo stesso referto, le risposte al questionario e, facoltativamente, l'esame del sangue a /api/v1/dna-supplements/analyze. I moduli 2 e 3 accettano il referto DNA così come è stato restituito: l'oggetto report, l'intero oggetto data o la risposta completa.
Riepilogo endpoint
| Endpoint | Metodo | Descrizione | Auth |
|---|---|---|---|
/api/v1/dna-interpretation/analyze | POST | File DNA, righe rsID incollate o pagine di referto → referto completo sulla salute genetica | Richiesto (1 credito) |
/api/v1/dna-interpretation/validate | POST | Analizza il file caricato e mostra cosa è stato trovato, senza chiamata all'IA | Richiesto (Gratuito) |
/api/v1/dna-interpretation/sandbox | POST | Referto genetico di esempio | Richiesto (Gratuito) |
/api/v1/dna-interpretation/info | GET | Input accettati, limiti e lingue di referto | Non richiesto |
/api/v1/dna-blood-report/analyze | POST | Referto DNA + esame del sangue interpretato → referto di salute combinato | Richiesto (1 credito) |
/api/v1/dna-blood-report/validate | POST | Verifica il payload senza chiamata all'IA | Richiesto (Gratuito) |
/api/v1/dna-blood-report/sandbox | POST | Referto combinato di esempio | Richiesto (Gratuito) |
/api/v1/dna-blood-report/info | GET | Campi della richiesta e limiti | Non richiesto |
/api/v1/dna-supplements/analyze | POST | Referto DNA + esame del sangue (facoltativo) + questionario → piano di integrazione | Richiesto (1 credito) |
/api/v1/dna-supplements/validate | POST | Verifica il payload e le risposte senza chiamata all'IA | Richiesto (Gratuito) |
/api/v1/dna-supplements/sandbox | POST | Piano di integrazione di esempio | Richiesto (Gratuito) |
/api/v1/dna-supplements/questionnaire | GET | Le 25 domande e le risposte ammesse | Non richiesto |
/api/v1/dna-supplements/settings | GET PUT | Legge o aggiorna il catalogo prodotti e le impostazioni del consulente della tua clinica | Richiesto (Gratuito) |
/api/v1/dna-supplements/info | GET | Campi della richiesta e limiti | Non richiesto |
Interpreta un test del DNA e restituisce un referto completo sulla salute genetica. Invia un file come multipart/form-data oppure righe di genotipo incollate come JSON. Il file caricato viene analizzato mentre attendi, quindi un file illeggibile riceve subito una risposta 400 e non costa nulla. Un credito viene addebitato solo dopo che il referto è stato prodotto.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API (oppure usa l'autenticazione HTTP Basic) |
password | string | Sì | La tua password API |
file | file | Sì* | Un file di genotipo grezzo (.txt, .csv, .tsv, .vcf, .zip, .gz, fino a 80 MB) oppure fino a 6 file di referto (PDF fino a 20 MB, JPG/PNG fino a 10 MB ciascuno). *Invia file oppure genotype_text. |
genotype_text | string | Sì* | Righe di genotipo incollate (rsID, cromosoma, posizione, genotipo), fino a 2.000.000 caratteri |
language | string | No | Codice della lingua del referto, ad es. en, de, ar (predefinito: en). Vedi le lingue supportate. |
patient | object | No | age, sex, diagnoses, comorbidities, medications, treatments, notes. In una richiesta multipart, invialo come stringa JSON. |
source_label | string | No | Un nome a tua scelta per la fonte, fino a 120 caratteri |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-interpretation/analyze?async=1" \
-u "TUO_NOME_UTENTE:TUA_PASSWORD" \
-F "file=@genome_raw_data.txt" \
-F "language=en" \
-F 'patient={"age": 41, "sex": "female", "medications": "clopidogrel"}'
# Risposta 202 Accepted: {"status": "pending", "job_id": "...", "poll_url": "/api/jobs/...", ...}
curl -u "TUO_NOME_UTENTE:TUA_PASSWORD" "https://app.aibloodtestinterpret.com/api/jobs/JOB_ID"
Esempio Python
import time
import requests
BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("TUO_NOME_UTENTE", "TUA_PASSWORD")
def run(path, poll=True, **kwargs):
"""POST in modalità asincrona, poi interroga /api/jobs/<id> finché il referto non è pronto."""
resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
body = resp.json()
if resp.status_code != 202:
return body # un errore o una risposta sincrona
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) Interpretazione del test DNA
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"])
Esempio di risposta
{
"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"
}
Riferimento dei campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
source | object | Cosa è stato letto: kind (raw, text o document), formato e build del genoma rilevati, numero di record e di chiamate, quanti dei 334 marcatori del pannello sono stati trovati e avvisi del parser |
report.overall_assessment.level | string | typical, slightly_elevated, elevated o high |
report.sections[] | array | Una voce per area di salute, con un risk_level e i relativi 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 | Fenotipo metabolizzatore previsto per ciascun gene e classi di farmaci che può influenzare. Il referto non indica mai dosaggi di prescrizione. |
report.carrier_status[] | array | carrier, not_detected, affected_pattern o inconclusive, sempre da confermare con un test genetico clinico |
report.disease_risks[], nutrigenomics[], traits[] | array | Rischi di patologie, risultati relativi ai nutrienti e tratti, con i geni che li determinano |
report.recommended_tests[], red_flags[] | array | Esami di approfondimento con relativa motivazione e risultati che richiedono un'attenzione tempestiva |
Analizza il file caricato esattamente come /analyze e riporta cosa è stato trovato, senza chiamata all'IA. L'autenticazione è richiesta; non viene consumato alcun credito. Usalo per verificare un file prima di spendere un credito.
Esempio di risposta
{
"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": []}
}
}
Combina un referto DNA con un esame del sangue interpretato in un unico referto di salute. Ogni collegamento tra un risultato genetico e un valore di laboratorio viene classificato; seguono una matrice dei rischi, le azioni prioritarie e un piano di monitoraggio. Un credito per ogni richiesta andata a buon fine.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
dna_report | object | Sì | Il referto di /api/v1/dna-interpretation/analyze: data.report, l'intero data o la risposta completa |
blood_test | object|array | Sì | Un esame del sangue interpretato così come lo restituisce l'API Analisi del Sangue (metadata, parameters, interpretation), oppure semplicemente un elenco di massimo 500 parametri con un nome e un result |
language | string | No | Codice della lingua del referto (predefinito: en) |
patient | object | No | Stessi campi dell'Interpretazione del Test DNA |
Esempio Python
# 2) Referto salute DNA + sangue (usa run() e dna dell'esempio precedente)
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"])
Esempio di risposta
{
"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."
}
}
}
Riferimento dei campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
report.overall_status.level | string | good, watch, attention o urgent |
report.correlations[].concordance | string | confirms, contradicts, neutral o watch |
report.risk_matrix[] | array | Per ciascuna area: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) e una valutazione combinata |
report.priority_actions[] | array | priority (high, medium, low), l'azione e la relativa motivazione |
report.monitoring_plan[] | array | Quale marcatore ricontrollare, quando e perché |
Costruisce un piano di integrazione personalizzato a partire dal referto DNA, dalle risposte al questionario e, facoltativamente, da un esame del sangue interpretato. Il catalogo prodotti e le impostazioni del consulente della tua clinica vengono applicati automaticamente. Un credito per ogni richiesta andata a buon fine.
Parametri della richiesta
| Parametro | Tipo | Richiesto | Descrizione |
|---|---|---|---|
dna_report | object | Sì | Il referto di /api/v1/dna-interpretation/analyze |
answers | object | Sì | Risposte al questionario. diet_type e pregnancy sono obbligatori; vedi GET /api/v1/dna-supplements/questionnaire per tutte le 25 domande. Chiavi e valori sconosciuti vengono scartati. |
blood_test | object|array | No | Stesso formato del Referto DNA + Sangue |
use_clinic_catalogue | boolean | No | Applica il catalogo prodotti e le impostazioni della tua clinica (predefinito: true) |
language | string | No | Codice della lingua del referto (predefinito: en) |
patient | object | No | Stessi campi dell'Interpretazione del Test DNA. I farmaci qui elencati vengono controllati per le interazioni. |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/analyze?async=1" \
-u "TUO_NOME_UTENTE:TUA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"dna_report": { ...data.report del modulo di interpretazione DNA... },
"answers": {"diet_type": "vegetarian", "pregnancy": "no", "sun_exposure": "low", "goals": ["energy", "immunity"]},
"language": "en"
}'
Esempio Python
# 3) Piano di integrazione (usa run(), dna e blood_test degli esempi precedenti)
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"])
Esempio di risposta
{
"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."
}
}
}
Riferimento dei campi di risposta
| Campo | Tipo | Descrizione |
|---|---|---|
catalogue | object | La modalità di catalogo applicata (prefer, only, off) e quanti prodotti della clinica erano disponibili |
report.recommendations[] | array | name, form, dose, timing, duration, priority, la rationale genetica / di laboratorio / da questionario, evidence, cautions, interactions e retest |
report.recommendations[].source | string | clinic_library per un prodotto del tuo catalogo (indicato in product), altrimenti evidence_based |
report.uncovered_needs[] | array | In modalità "solo prodotti della clinica": i fabbisogni che il tuo catalogo non copre |
report.clinician_review_required[] | array | Tutto ciò che richiede la decisione di un medico prescrittore: interazioni, gravidanza, malattie renali o epatiche, anticoagulanti, dosi vicine al livello massimo di assunzione |
report.avoid_or_caution[], dietary_sources[], retest_plan[] | array | Cosa evitare, fonti alimentari per ciascun nutriente e quando ricontrollare |
Legge o aggiorna il catalogo prodotti della tua clinica e le impostazioni del consulente. È lo stesso catalogo del pannello della clinica e di IA Nutrizione, quindi un prodotto aggiunto in un punto è disponibile ovunque. L'autenticazione è richiesta; non viene consumato alcun credito. Invia catalogue, settings o entrambi; il catalogo sostituisce l'intero elenco.
| Campo | Tipo | Descrizione |
|---|---|---|
catalogue[] | array | Fino a 200 prodotti: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description |
settings.mode | string | prefer (prodotti della clinica quando sono adatti, altrimenti suggerimenti basati sulle evidenze), only (solo prodotti della clinica) o off (il catalogo viene ignorato) |
settings.instructions | string | Le tue istruzioni per l'IA, fino a 1.500 caratteri. Le regole di sicurezza hanno sempre la priorità. |
settings.max_items | integer | Numero massimo di raccomandazioni per piano, da 3 a 12 |
Esempio cURL
curl -X PUT "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/settings" \
-u "TUO_NOME_UTENTE:TUA_PASSWORD" \
-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": "Privilegia il nostro marchio.", "max_items": 8}
}'
Endpoint di riferimento
GET /api/v1/dna-supplements/questionnaire elenca le 25 domande (dieta, pasti, frutta e verdura, pesce, carne rossa, latticini, alcol, fumo, caffeina, esposizione al sole, attività fisica, sonno, stress, digestione, energia, integratori attuali, farmaci, allergie, patologie, gravidanza, obiettivi, budget, forma preferita e note) con i relativi tipi e valori ammessi. I tre endpoint /info restituiscono gli input accettati, i limiti, il costo in crediti e l'elenco completo delle lingue di referto. Nessuno di essi richiede autenticazione.
Sandbox e modalità asincrona
POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox e /api/v1/dna-supplements/sandbox restituiscono un referto di esempio esattamente nella forma prodotta da /analyze. L'autenticazione è richiesta; non viene consumato alcun credito.
Un referto IA richiede di solito da uno a tre minuti. Aggiungi ?async=1 (oppure l'header X-Async: 1) e la richiesta risponde subito 202 con un job_id. Interroga GET /api/jobs/<job_id> con le stesse credenziali finché status non diventa completed o failed. La risposta finale si trova in result.response ed è identica a quella sincrona.
| Codice errore | HTTP | Significato |
|---|---|---|
AUTH_1001 | 401 | Credenziali di autenticazione mancanti |
AUTH_1002 | 401 | Nome utente o password non validi |
QUOTA_1101 | 403 | Quota API insufficiente |
VAL_2001 | 400 | Manca un campo obbligatorio: file o genotype_text, dna_report, blood_test oppure una risposta obbligatoria |
VAL_2002 | 400 | Dati di genotipo illeggibili, tipo di file non supportato, JSON non valido o dna_report non valido |
VAL_2003 | 400 | Lingua del referto non supportata |
VAL_2006 | 400 | Dimensioni eccessive: testo incollato, parametri del sangue (500) o catalogo (200 prodotti) |
VAL_2007 | 400 | Oggetto patient non valido |
VAL_2008 | 400 | Nessun parametro dell'esame del sangue utilizzabile (nome e risultato) |
PROC_3003 | 500 | Non è stato possibile produrre o validare la risposta dell'IA; riprova. Non viene addebitato alcun credito. |
RES_4005 | 503 | I moduli DNA sono disabilitati su questo deployment |
L'API DNA Health produce informazioni generate dall'IA destinate al medico curante. Non costituisce una diagnosi né una prescrizione. Gli array di genotipizzazione di consumo non equivalgono al sequenziamento clinico: prima di intervenire, conferma i risultati clinicamente rilevanti e lo stato di portatore con test genetici clinici validati.
ICR - Riconoscimento Intelligente dei Caratteri API
L'API Kantesti ICR (Riconoscimento Intelligente dei Caratteri) è una tecnologia avanzata di estrazione testo da documenti che va ben oltre l'OCR tradizionale. Alimentata dal motore AI proprietario di Kantesti, ICR fornisce output JSON strutturato da qualsiasi tipo di documento, inclusi referti medici, fatture, moduli e altro.
Kantesti ICR vs OCR Tradizionale
Nei test di benchmark, Kantesti ICR ha dimostrato prestazioni superiori del 79% rispetto alle soluzioni OCR tradizionali. ICR comprende la struttura del documento, preserva i layout delle tabelle, estrae i metadati e restituisce JSON strutturato pulito.
- Output JSON Strutturato — Tabelle, sezioni, metadati e testo grezzo in formato JSON pulito
- Rilevamento Tipo Documento — Identifica automaticamente referti medici, fatture, moduli, lettere, ecc.
- Estrazione Tabelle — Preserva intestazioni e dati delle righe con struttura completa
- Supporto Multi-formato — Elaborazione documenti PDF, JPG, JPEG, PNG
- Integrazione Analisi Sangue (Kan) — Endpoint specializzato per l'estrazione di documenti di analisi del sangue
- Modalità Sandbox — Testa l'integrazione senza consumare crediti
- Sistema Crediti — 0,5 crediti per chiamata API
Riepilogo Endpoint ICR
| Endpoint | Metodo | Descrizione | Costo |
|---|---|---|---|
/api/icr/v1/extract | POST | Estrazione testo ICR | 0,5 crediti |
/api/icr/v1/sandbox | POST | Test sandbox ICR | Gratuito |
/api/icr/v1/kan | POST | Analisi documenti analisi del sangue | 0,5 crediti |
/api/icr/v1/kan/sandbox | POST | Test sandbox analisi del sangue | Gratuito |
/api/icr/info | GET | Documentazione e funzionalità API | Gratuito |
/api/icr/health | GET | Endpoint controllo salute | Gratuito |
/api/icr/v1/quota | POST | Controlla crediti ICR rimanenti | Gratuito |
Estrae tutto il contenuto testuale dai documenti caricati utilizzando la tecnologia ICR di Kantesti.
Parametri Richiesta
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
username | string | Sì | Il tuo nome utente API |
password | string | Sì | La tua password API |
file | file | Sì | File documento (PDF, JPG, JPEG, PNG) |
language | string | No | Lingua di output (predefinito: en) |
Esempio cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/extract" \
-F "username=TUO_NOME_UTENTE" \
-F "password=TUA_PASSWORD" \
-F "language=it" \
-F "[email protected]"
Esempio Python
import requests
def icr_extract(file_path: str, username: str, password: str, language: str = "it"):
"""
Estrai testo da un documento con l'API ICR Kantesti.
79% più veloce e preciso dell'OCR tradizionale.
"""
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()
# Esempio di utilizzo
result = icr_extract("referto_medico.pdf", "nome_utente", "password", "it")
print(f"Tipo documento: {result['data']['document_type']}")
print(f"Pagine: {result['data']['page_count']}")
Esempio di Risposta
{
"status": "success",
"data": {
"document_type": "blood_test_report",
"page_count": 1,
"pages": [{"page_number": 1, "content": {"raw_text": "Ospedale Universitario di Colonia - Esame del Sangue...", "sections": [{"type": "header", "content": "Esame del Sangue"}], "tables": [{"headers": ["Test", "Risultato", "Unità", "Range di Riferimento"], "rows": [["Glucosio", "92", "mg/dL", "74 - 100"], ["ALT", "22", "U/L", "< 35"]]}]}}],
"metadata": {"detected_language": "it", "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"
}
Endpoint Sandbox ICR
Testa la tua integrazione ICR senza consumare crediti. Gli endpoint Sandbox restituiscono dati di esempio realistici.
| API | Endpoint Sandbox | Descrizione |
|---|---|---|
| Estrazione ICR | /api/icr/v1/sandbox | Restituisce dati di esempio dell'estrazione ICR |
| ICR Kan | /api/icr/v1/kan/sandbox | Restituisce dati di esempio dei parametri dell'analisi del sangue |
Prestazioni ICR vs OCR
| Metrica | Kantesti ICR | OCR Tradizionale | Miglioramento |
|---|---|---|---|
| Velocità di Elaborazione | 1,2s media | 5,7s media | 79% più veloce |
| Precisione Testo | 99,7% | 92,1% | +7,6% |
| Rilevamento Tabelle | 98,9% | 71,2% | +27,7% |
| Output Strutturato | JSON con sezioni, tabelle, metadati | Testo grezzo non strutturato | Struttura completa |
| Supporto Multilingue | 100+ lingue | 30-50 lingue | 2x+ copertura |