Endpoint dell'API Analisi del Sangue

Ultimo aggiornamento:

Riferimento completo di tutti gli endpoint dell'API Kantesti con esempi di codice in diversi linguaggi di programmazione.

Novità del 23 settembre 2026: l'API DNA Health

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.

URL Base
https://app.aibloodtestinterpret.com

Changelog

Tieni traccia delle versioni API, aggiornamenti e informazioni sulla migrazione. Usa gli endpoint consigliati per le nuove integrazioni.

Ultimi Aggiornamenti (2026)

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.

APIEndpointStato
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

DataVersioneModifiche
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.

VersioneEndpointStato
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
Nota

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.

Lingua predefinita

Se non viene fornito alcun parametro language, l'API restituisce le risposte in inglese (en).

Lingue mondiali principali

CodiceLinguaNome nativo
enIngleseEnglish
zhCinese中文
esSpagnoloEspañol
arAraboالعربية
hiHindiहिन्दी
ptPortoghesePortuguês
ruRussoРусский
jaGiapponese日本語
frFranceseFrançais
deTedescoDeutsch
koCoreano한국어
trTurcoTürkçe

Lingue europee

CodiceLinguaNome nativo
itItalianoItaliano
nlOlandeseNederlands
plPolaccoPolski
elGrecoΕλληνικά
svSvedeseSvenska
noNorvegeseNorsk
daDaneseDansk
fiFinlandeseSuomi
csCecoČeština
ukUcrainoУкраїнська
roRomenoRomână
huUnghereseMagyar
bgBulgaroБългарски
hrCroatoHrvatski
skSlovaccoSlovenčina
slSlovenoSlovenščina
srSerboСрпски
ltLituanoLietuvių
lvLettoneLatviešu
etEstoneEesti
caCatalanoCatalà
euBascoEuskara
glGalizianoGalego
cyGalleseCymraeg
gaIrlandeseGaeilge
isIslandeseÍslenska
mtMalteseMalti
sqAlbaneseShqip
mkMacedoneМакедонски
bsBosniacoBosanski
lbLussemburgheseLëtzebuergesch
beBielorussoБеларуская

Lingue mediorientali e dell'Asia centrale

CodiceLinguaNome nativo
heEbraicoעברית
faPersianoفارسی
azAzerbaigianoAzərbaycan
kaGeorgianoქართული
hyArmenoՀայdelays
kkKazakoҚазақша
uzUzbecoOʻzbek
tgTagicoТоҷикӣ
kyKirghisoКыргызча
tkTurkmenoTürkmen
mnMongoloМонгол
psPashtoپښتو
kuCurdoKurdî

Lingue dell'Asia meridionale

CodiceLinguaNome nativo
bnBengaleseবাংলা
taTamilதமிழ்
teTeluguతెలుగు
mrMarathiमराठी
guGujaratiગુજરાતી
knKannadaಕನ್ನಡ
mlMalayalamമലയാളം
paPunjabiਪੰਜਾਬੀ
urUrduاردو
neNepaleseनेपाली
siSingaleseසිංහල
sdSindhiسنڌي
asAssameseঅসমীয়া
orOdiaଓଡ଼ିଆ

Lingue del sud-est asiatico

CodiceLinguaNome nativo
idIndonesianoBahasa Indonesia
thTailandeseไทย
viVietnamitaTiếng Việt
msMaleseBahasa Melayu
myBirmanoမြန်မာ
kmKhmerភាសាខ្មែរ
loLaotianoລາວ
filFilippinoFilipino
tlTagalogTagalog
jvGiavaneseBasa Jawa
suSundaneseBasa Sunda

Lingue africane

CodiceLinguaNome nativo
afAfrikaansAfrikaans
swSwahiliKiswahili
amAmaricoአማርኛ
haHausaHausa
yoYorubaYorùbá
igIgboIgbo
zuZuluisiZulu
xhXhosaisiXhosa
soSomaloSoomaali
mgMalgascioMalagasy

Altre lingue

CodiceLinguaNome nativo
laLatinoLatina
eoEsperantoEsperanto
yiYiddishייִדיש
htCreolo haitianoKreyòl Ayisyen
miMaoriTe Reo Māori
smSamoanoGagana Samoa
toTonganoLea Faka-Tonga
hawHawaianoʻŌ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.

POST /api/v12/18-09-2026/analyze Ultima

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

ParametroTipoRichiestoDescrizione
usernamestringSìIl tuo nome utente API
passwordstringSìLa tua password API
filefileSìImmagine dell'esame del sangue (PNG, JPG, WEBP) o PDF. Max 20MB. Ripeti il campo per inviare più immagini.
languagestringNoCodice lingua della risposta (predefinito: en). Vedi le lingue supportate.
pdf_passwordstringNoPassword 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"
}
POST /api/v12/health-score/analyze Ultima

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"}
  ]
}
Parole chiave di risposta

Il campo score_interpretation utilizza valori standardizzati. Vedi valori del punteggio di salute.

POST /api/v11/01-06-2025/analyze Stabile

Endpoint di produzione per l'analisi del sangue. Consuma 1 credito per richiesta.

Parametri della richiesta

ParametroTipoRichiestoDescrizione
usernamestringSìIl tuo nome utente API
passwordstringSìLa tua password API
filefileSìImmagine dell'esame del sangue (PNG, JPG, WEBP) o PDF. Max 20MB.
languagestringNoCodice 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
CampoTipoDescrizione
statusstring"success" o "error"
dataobjectContiene tutti i risultati dell'analisi
timestampstringTimestamp ISO 8601 della risposta
api_versionstringVersione API utilizzata
Oggetto data.metadata
CampoTipoDescrizione
lab_datestringData del prelievo (AAAA-MM-GG)
results_datestringData di emissione dei risultati (AAAA-MM-GG)
lab_namestringNome del laboratorio
lab_citystringCittà del laboratorio
lab_countrystringPaese del laboratorio
patient_namestringNome completo del paziente (solo metadati, non inviato all'interpretazione)
patient_agestringEtà del paziente
patient_sexstring"male", "female" o "other"
Elemento array data.parameters
CampoTipoDescrizione
categorystringCategoria del parametro (es: "Emocromo", "Profilo lipidico")
long_namestringNome completo del parametro
short_namestringNome abbreviato del parametro
resultstringValore misurato
unitstringUnità di misura
range_minstringIntervallo di riferimento minimo
range_maxstringIntervallo di riferimento massimo
evaluationstringStato del risultato. Vedi valori di valutazione
Elemento array data.interpretation
CampoTipoDescrizione
titlestringTitolo della sezione (es: "Valutazione generale della salute")
contentstringInterpretazione 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"
}
Parole chiave di risposta

Il campo evaluation utilizza valori standardizzati. Vedi valori di valutazione.

Endpoint Sandbox

Vantaggi Sandbox
  • Nessun consumo di quota
  • Restituisce dati di test realistici
  • Stesso formato di richiesta della produzione
APIEndpoint 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
API di Confronto vs API di Analisi delle Tendenze

Scegli l'API giusta per il tuo caso d'uso:

FunzionalitàConfronto IA Esami del SangueAnalisi delle Tendenze
Focus PrincipaleConfronto narrativo IAAnalisi statistica delle tendenze
Elaborazione IANarrativa IA completaIA potenziata + statistiche
Tipo di OutputRiepiloghi narrativiGrafici, statistiche, pattern
Ideale PerCosa è cambiato tra i testMonitoraggio parametri a lungo termine
Min Test22
Max Test2050

API Analisi delle Tendenze

Analizza le tendenze dei parametri di salute nel tempo utilizzando il riconoscimento di pattern basato su IA.

IA Nutrizione con Integratori

Genera piani nutrizionali personalizzati e suggerimenti di integratori basati sull'analisi degli esami del sangue.

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

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"
}
Parole chiave di risposta

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.

POST /api/v1/bloodtest/comparison/analyze

Analizza 2-20 esami del sangue e fornisce un confronto dettagliato con approfondimenti narrativi generati dall'IA.

Requisiti
  • Minimo 2 esami del sangue richiesti
  • Massimo 20 esami del sangue per richiesta
  • Ogni test deve includere lab_date o results_date
  • Almeno un parametro comune tra i test

Parametri di richiesta

ParametroTipoRichiestoPredefinitoDescrizione
usernamestringSì-Il tuo nome utente API
passwordstringSì-La tua password API
languagestringNoenLingua della risposta. Vedi lingue supportate
blood_testsarraySì-Array di oggetti esami del sangue (2-20 test)

Struttura Array blood_tests

CampoTipoRichiestoDescrizione
lab_datestringSì*Data del test in formato YYYY-MM-DD
results_datestringSì*Alternativa a lab_date (YYYY-MM-DD)
parametersarraySìArray di parametri dell'esame del sangue
metadataobjectNoMetadati 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

CampoTipoDescrizione
comparison_idstringIdentificatore univoco per questo confronto (formato: CMP-XXXXXXXX)
comparison_summaryobjectRiepilogo generale: key_findings, overall_trend, date report, time_interval
parameter_analysisarrayAnalisi dettagliata per parametro con tipo di cambiamento e significato clinico
health_assessmentobjectAree di preoccupazione, miglioramento, sviluppi positivi, fattori di rischio
recommendationsobjectTest di follow-up, azioni immediate, modifiche dello stile di vita, referral specialistici
detailed_interpretationobjectSezioni narrative IA con riepilogo esecutivo e raccomandazioni cliniche

Struttura oggetto parameter_analysis

CampoTipoDescrizione
parameter_namestringNome parametro
report1_valuestringValore dal primo report con unità
report2_valuestringValore dal secondo report con unità
change_typestringincreased, decreased o stable
change_magnitudestringsignificant, moderate o minor
clinical_significancestringSpiegazione IA di cosa significa il cambiamento
trend_assessmentstringpositive, 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"
      ]
    }
  }
}
Parole chiave di risposta

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.

ValorePredefinitoDescrizione
comprehensive✓Analisi completa con statistiche, grafici e interpretazione IA
statisticalSolo analisi statistica
summarySolo riepilogo di alto livello

health_goals API Nutrizione

Obiettivi di salute per raccomandazioni nutrizionali personalizzate. Più valori possono essere forniti come array.

ValoreDescrizione
maintainMantenere la salute attuale (predefinito)
improve_energyFocus sui livelli di energia
weight_managementGestione sana del peso
heart_healthSalute cardiovascolare
immune_supportSupporto al sistema immunitario
digestive_healthBenessere digestivo
bone_healthSalute delle ossa
mental_clarityFunzione cognitiva

dietary_restrictions API Nutrizione

Restrizioni alimentari e allergie. Più valori possono essere forniti come array. È accettato anche testo libero per restrizioni personalizzate.

ValoreDescrizione
low_sodiumApporto ridotto di sodio
low_sugarApporto ridotto di zucchero
low_fatApporto ridotto di grassi
gluten_freeSenza glutine
dairy_freeSenza latticini
nut_freeSenza frutta a guscio
soy_freeSenza soia
egg_freeSenza uova
halalConforme halal
kosherConforme kosher
Nota

È 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.

ValoreDescrizione
omnivoreNessuna restrizione (predefinito)
vegetarianNiente carne
veganNessun prodotto animale
pescatarianVegetariano + pesce
ketoDieta chetogenica
paleoDieta paleolitica
mediterraneanDieta mediterranea

activity_level API Nutrizione

Livello di attività fisica per calcoli calorici e nutrizionali.

ValoreDescrizione
sedentaryPoco o nessun esercizio
lightEsercizio leggero 1-3 giorni/settimana
moderateEsercizio moderato 3-5 giorni/settimana (predefinito)
activeEsercizio intenso 6-7 giorni/settimana
very_activeEsercizio molto intenso o lavoro fisico

budget API Nutrizione

Livello di budget per raccomandazioni alimentari e di integratori.

ValoreDescrizione
lowOpzioni economiche
moderateOpzioni bilanciate (predefinito)
highOpzioni premium

gender Tutte le API

Sesso del paziente per intervalli di riferimento e raccomandazioni personalizzate.

ValoreDescrizione
malePaziente maschio
femalePaziente femmina
otherAltro 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.

ValoreDescrizione
normalNell'intervallo di riferimento normale
lowSotto l'intervallo normale
highSopra l'intervallo normale
critical_lowCriticamente basso (attenzione immediata richiesta)
critical_highCriticamente alto (attenzione immediata richiesta)
borderline_lowLeggermente sotto l'intervallo normale
borderline_highLeggermente sopra l'intervallo normale

trend_assessment API Confronto & Tendenze

Valutazione complessiva delle tendenze dei parametri tra i test.

ValoreDescrizione
positiveMigliorato (verso l'intervallo normale)
negativePeggiorato (lontano dall'intervallo normale)
stableRelativamente invariato tra i test
improvingTendenza generale al miglioramento
worseningTendenza generale al peggioramento

trend_direction API Analisi tendenze

Direzione dei cambiamenti di valore dei parametri nel tempo.

ValoreDescrizione
upwardValori in aumento nel tempo
downwardValori in diminuzione nel tempo
stableCambiamento minimo nel tempo

trend_strength API Analisi tendenze

Entità della tendenza osservata.

ValoreDescrizione
strong>15% di cambiamento tra i periodi
moderate5-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.

ValoreDescrizione
excellentTutti i marker nell'intervallo ottimale
goodLa maggior parte dei marker nell'intervallo normale
fairAlcuni marker richiedono attenzione
poorPiù marker richiedono attenzione

Endpoint di utilità

GET /api/info

Restituisce le informazioni della piattaforma API. Nessuna autenticazione richiesta.

GET /api/health

Endpoint di verifica dello stato per il monitoraggio. Nessuna autenticazione richiesta.

POST /api/quota/check

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

Rilasciato: 23 marzo 2026

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.

100+
Lingue
9
Categorie di patologie
14
Relazioni familiari

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.

Funzionalità principali
  • 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

EndpointMetodoDescrizioneAuth
/api/v1/family-health/analyzePOSTGenera rapporto completo di valutazione dei rischiRichiesto (1 credito)
/api/v1/family-health/validatePOSTValida i dati della richiesta (nessun consumo quota)Richiesto (Gratuito)
/api/v1/family-health/supported-languagesGETElenca 100+ lingue supportateNon richiesto
/api/v1/family-health/condition-categoriesGETElenca categorie di patologieNon richiesto
/api/v1/family-health/family-relationsGETElenca tipi di relazioni familiariNon richiesto
/api/v1/family-health/sandbox/analyzePOSTTest sandbox con dati di esempioRichiesto (Gratuito)
POST /api/v1/family-health/analyze Rilasciato 23.03.2026

Genera un rapporto completo di valutazione dei rischi di salute familiare alimentato dall'IA.

Parametri richiesta (JSON Body)

ParametroTipoRichiestoDescrizione
usernamestringSìNome utente API
passwordstringSìPassword API
patient_dataobjectSìInformazioni paziente
family_membersarraySì*Membri della famiglia (max 100)
health_profileobjectSì*Profilo di salute
blood_test_dataarrayNoDati esami del sangue
languagestringNoCodice 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

CodiceHTTPDescrizione
AUTH_1001401Credenziali mancanti
AUTH_1002401Credenziali non valide
QUOTA_1101403Quota API insufficiente
VAL_2001400Campo obbligatorio mancante
VAL_2003400Codice lingua non supportato
PROC_3001500Generazione rapporto fallita
SRV_5001500Errore interno del server

Endpoint Sandbox Family Health

Testa la tua integrazione senza consumare crediti.

APISandboxDescrizione
Family Health/api/v1/family-health/sandbox/analyzeDati di rapporto di esempio

Endpoint di riferimento (Nessuna auth)

EndpointMetodoDescrizione
/api/v1/family-health/supported-languagesGET100+ lingue supportate
/api/v1/family-health/condition-categoriesGET9 categorie di patologie
/api/v1/family-health/family-relationsGET14 relazioni familiari

API Mappa Corporea

Rilasciato: 18 settembre 2026

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.

13
Regioni corporee
39
Lingue di input
0
Chiamate al modello per impostazione predefinita

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.

Funzionalità principali
  • 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

EndpointMetodoDescrizioneAuth
/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
POST /api/v1/body-map/analyze Rilasciato 18.09.2026

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

ParametroTipoRichiestoDescrizione
usernamestringSìIl tuo nome utente API
passwordstringSìLa tua password API
parametersarraySìOggetti con i risultati di laboratorio. Max 500. Ognuno richiede il nome dell'analita e una evaluation.
interpretationarrayNoInterpretazione clinica, usata come contesto solo quando ai_assist è attivo
ai_assistbooleanNoConsente al modello di collocare i marcatori che le tabelle di alias non riconoscono (predefinito: false)
include_imagebooleanNoRichiede l'illustrazione renderizzata (predefinito: false)
image_waitintegerNoSecondi di attesa per un'illustrazione appena generata, 0-30 (predefinito: 0)

Campi dell'oggetto parametro

CampoTipoRichiestoDescrizione
short_namestringSì*Nome dell'analita come stampato dal laboratorio. *È richiesto almeno uno tra short_name, long_name, name, parameter_name o parameter.
long_namestringNoNome completo dell'analita; migliora il riconoscimento delle abbreviazioni
evaluationstringNoUno tra high, low, bad, slightly_high, slightly_low, normal. Solo i valori segnalati compaiono sulla mappa.
resultstring|numberNoIl valore misurato; usato per stabilire quali regioni disegnare
unitstringNoUnità del risultato, con qualsiasi grafia
range_normal_minnumberNoLimite inferiore dell'intervallo di riferimento
range_normal_maxnumberNoLimite superiore dell'intervallo di riferimento
categorystringNoCategoria 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

CampoTipoDescrizione
body_map.specstringIdentificatore canonico di questa combinazione di regioni e gravità. Pannelli identici condividono la stessa spec e quindi la stessa illustrazione in cache.
body_map.regions[].keystringUna delle 13 chiavi di regione
body_map.regions[].levelinteger2 = fuori range, 1 = borderline
body_map.regions[].drawnbooleanIndica se questa regione è dipinta sull'illustrazione. La legenda elenca sempre tutte le regioni; al massimo sei vengono disegnate.
body_map.regions[].markersarrayNomi dei marcatori che hanno portato questa regione sulla mappa, dal peggiore in poi
body_map.unmappedintegerMarcatori segnalati che non è stato possibile collocare in alcuna regione
body_map.image_urlstring|nullIllustrazione in cache. null finché il file non esiste — usa fallback_url come ripiego.
body_map.fallback_urlstringURL firmato di generazione. Sempre presente. Risponde 503 con Retry-After mentre l'illustrazione è ancora in produzione.
all_clearbooleantrue quando non è stata segnalata alcuna anomalia; vale il corpo condiviso "tutto a posto"
modestringdeterministic o ai_assisted
Come rappresentare la legenda

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.

POST /api/v1/body-map/validate Rilasciato 18.09.2026

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.

GET /api/v1/body-map/regions

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
  }
}
GET /api/v1/body-map/info

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 erroreHTTPSignificato
AUTH_1001401Credenziali di autenticazione mancanti
AUTH_1002401Nome utente o password non validi
AUTH_1004400Credenziali malformate (tipo errato o troppo lunghe)
QUOTA_1101403Quota API insufficiente
VAL_2001400parameters è mancante
VAL_2002400Formato dei dati non valido
VAL_2005400parameters è vuoto
VAL_2006400Più di 500 parametri
VAL_2008400Una riga di parametro è malformata o priva di nome
RES_4004422Esistono risultati segnalati ma nessuno è associabile a una regione corporea
RES_4005503Il motore della mappa corporea è disabilitato su questo deployment

API Età Biologica del Sangue

Rilasciato: 18 settembre 2026

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.

9
Marcatori PhenoAge
18
Indici derivati
39
Lingue di input

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.

Funzionalità principali
  • 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

EndpointMetodoDescrizioneAuth
/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
POST /api/v1/blood-age/analyze Rilasciato 18.09.2026

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

ParametroTipoRichiestoDescrizione
usernamestringSìIl tuo nome utente API
passwordstringSìLa tua password API
parametersarraySìOggetti con i risultati di laboratorio. Max 500. Ognuno richiede il nome dell'analita e un risultato.
metadataobjectNoIntestazione del referto. Fortemente consigliata: PhenoAge contiene un termine di età cronologica. Legge patient_age, patient_sex, dob, lab_date.
patientobjectNo{"age": 42, "gender": "female"} — usato quando i metadati non li contengono
interpretationarrayNoInterpretazione clinica, usata solo come contesto per il modello
languagestringNoLingua della nota personale opzionale (predefinito: en). Vedi le lingue supportate.
ai_assistbooleanNoConsente al modello di identificare nomi di analita insoliti (predefinito: false)
ai_estimatebooleanNoConsente al modello di migliorare un'età parziale (predefinito: false)
ai_notebooleanNoRichiede 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.

MarcatoreNome tipicoUnità di destinazione
albuminAlbuminag/L
creatinineCreatininaµmol/L
glucoseGlucosio / Glicemia a digiunommol/L
crpProteina C-reattivamg/L
lymphLinfociti%
mcvVolume corpuscolare mediofL
rdwAmpiezza di distribuzione eritrocitaria%
alpFosfatasi alcalinaU/L
wbcConta dei globuli bianchi10⁹/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

CampoTipoDescrizione
summary.statusstringok, missing_age, missing_markers, needs_markers o unavailable
summary.sourcestringformula (tutti e nove i marcatori), partial (mediane imputate) o ai (stima del modello, solo con ai_estimate)
summary.chronological_ageinteger|nullEtà letta dai metadati o dall'oggetto paziente
summary.biological_agenumber|nullL'età del sangue calcolata, in anni
summary.delta_yearsnumber|nullBiologica meno cronologica. Un valore negativo significa più giovane del calendario.
summary.markers_missingarrayQuali dei nove marcatori PhenoAge non sono stati forniti dal pannello
blood_age.age.inputsobjectI valori convertiti effettivamente usati, nelle unità di destinazione
blood_age.age.labelsobjectIl nome del tuo laboratorio per ogni marcatore riconosciuto dal motore
blood_age.indices[].bandstringok, borderline, high, low o info
blood_age.indices[].fromarrayLe righe di laboratorio da cui è stato ricavato questo indice
modestringdeterministic o ai_assisted
Fornisci un'età cronologica

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.

POST /api/v1/blood-age/validate Rilasciato 18.09.2026

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.

GET /api/v1/blood-age/biomarkers

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."
  }
}
GET /api/v1/blood-age/info

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 erroreHTTPSignificato
AUTH_1001401Credenziali di autenticazione mancanti
AUTH_1002401Nome utente o password non validi
AUTH_1004400Credenziali malformate (tipo errato o troppo lunghe)
QUOTA_1101403Quota API insufficiente
VAL_2001400parameters è mancante
VAL_2002400Formato dei dati non valido
VAL_2003400Codice lingua non supportato
VAL_2005400parameters è vuoto
VAL_2006400Più di 500 parametri
VAL_2007400Oggetto patient non valido
VAL_2008400Una riga di parametro è malformata o priva di nome
VAL_2009400Valore di patient.gender non supportato
RES_4004422Nulla di calcolabile a partire da questi parametri
RES_4005503Il motore dell'età del sangue è disabilitato su questo deployment

API DNA Health: Interpretazione del Test DNA, Referto DNA + Sangue e Consulente Integratori

Rilasciato: 23 settembre 2026

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.

334
Marcatori DNA selezionati
20
Categorie di salute
100+
Lingue di referto

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.

Funzionalità principali
  • Tutte le principali fonti di DNA — File grezzi di 23andMe, AncestryDNA, MyHeritage, FTDNA e LivingDNA e file VCF, anche all'interno di archivi .zip o .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, neutral o watch, 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_library e, 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=1 e 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
Come lavorano insieme i tre moduli

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

EndpointMetodoDescrizioneAuth
/api/v1/dna-interpretation/analyzePOSTFile DNA, righe rsID incollate o pagine di referto → referto completo sulla salute geneticaRichiesto (1 credito)
/api/v1/dna-interpretation/validatePOSTAnalizza il file caricato e mostra cosa è stato trovato, senza chiamata all'IARichiesto (Gratuito)
/api/v1/dna-interpretation/sandboxPOSTReferto genetico di esempioRichiesto (Gratuito)
/api/v1/dna-interpretation/infoGETInput accettati, limiti e lingue di refertoNon richiesto
/api/v1/dna-blood-report/analyzePOSTReferto DNA + esame del sangue interpretato → referto di salute combinatoRichiesto (1 credito)
/api/v1/dna-blood-report/validatePOSTVerifica il payload senza chiamata all'IARichiesto (Gratuito)
/api/v1/dna-blood-report/sandboxPOSTReferto combinato di esempioRichiesto (Gratuito)
/api/v1/dna-blood-report/infoGETCampi della richiesta e limitiNon richiesto
/api/v1/dna-supplements/analyzePOSTReferto DNA + esame del sangue (facoltativo) + questionario → piano di integrazioneRichiesto (1 credito)
/api/v1/dna-supplements/validatePOSTVerifica il payload e le risposte senza chiamata all'IARichiesto (Gratuito)
/api/v1/dna-supplements/sandboxPOSTPiano di integrazione di esempioRichiesto (Gratuito)
/api/v1/dna-supplements/questionnaireGETLe 25 domande e le risposte ammesseNon richiesto
/api/v1/dna-supplements/settingsGET PUTLegge o aggiorna il catalogo prodotti e le impostazioni del consulente della tua clinicaRichiesto (Gratuito)
/api/v1/dna-supplements/infoGETCampi della richiesta e limitiNon richiesto
POST /api/v1/dna-interpretation/analyze Rilasciato 23.09.2026

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

ParametroTipoRichiestoDescrizione
usernamestringSìIl tuo nome utente API (oppure usa l'autenticazione HTTP Basic)
passwordstringSìLa tua password API
filefileSì*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_textstringSì*Righe di genotipo incollate (rsID, cromosoma, posizione, genotipo), fino a 2.000.000 caratteri
languagestringNoCodice della lingua del referto, ad es. en, de, ar (predefinito: en). Vedi le lingue supportate.
patientobjectNoage, sex, diagnoses, comorbidities, medications, treatments, notes. In una richiesta multipart, invialo come stringa JSON.
source_labelstringNoUn 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

CampoTipoDescrizione
sourceobjectCosa è 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.levelstringtypical, slightly_elevated, elevated o high
report.sections[]arrayUna voce per area di salute, con un risk_level e i relativi findings
report.sections[].findings[]arraygene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation
report.pharmacogenomics[]arrayFenotipo metabolizzatore previsto per ciascun gene e classi di farmaci che può influenzare. Il referto non indica mai dosaggi di prescrizione.
report.carrier_status[]arraycarrier, not_detected, affected_pattern o inconclusive, sempre da confermare con un test genetico clinico
report.disease_risks[], nutrigenomics[], traits[]arrayRischi di patologie, risultati relativi ai nutrienti e tratti, con i geni che li determinano
report.recommended_tests[], red_flags[]arrayEsami di approfondimento con relativa motivazione e risultati che richiedono un'attenzione tempestiva
POST /api/v1/dna-interpretation/validate Rilasciato 23.09.2026

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": []}
  }
}
POST /api/v1/dna-blood-report/analyze Rilasciato 23.09.2026

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

ParametroTipoRichiestoDescrizione
dna_reportobjectSìIl referto di /api/v1/dna-interpretation/analyze: data.report, l'intero data o la risposta completa
blood_testobject|arraySì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
languagestringNoCodice della lingua del referto (predefinito: en)
patientobjectNoStessi 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

CampoTipoDescrizione
report.overall_status.levelstringgood, watch, attention o urgent
report.correlations[].concordancestringconfirms, contradicts, neutral o watch
report.risk_matrix[]arrayPer ciascuna area: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) e una valutazione combinata
report.priority_actions[]arraypriority (high, medium, low), l'azione e la relativa motivazione
report.monitoring_plan[]arrayQuale marcatore ricontrollare, quando e perché
POST /api/v1/dna-supplements/analyze Rilasciato 23.09.2026

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

ParametroTipoRichiestoDescrizione
dna_reportobjectSìIl referto di /api/v1/dna-interpretation/analyze
answersobjectSì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_testobject|arrayNoStesso formato del Referto DNA + Sangue
use_clinic_cataloguebooleanNoApplica il catalogo prodotti e le impostazioni della tua clinica (predefinito: true)
languagestringNoCodice della lingua del referto (predefinito: en)
patientobjectNoStessi 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

CampoTipoDescrizione
catalogueobjectLa modalità di catalogo applicata (prefer, only, off) e quanti prodotti della clinica erano disponibili
report.recommendations[]arrayname, form, dose, timing, duration, priority, la rationale genetica / di laboratorio / da questionario, evidence, cautions, interactions e retest
report.recommendations[].sourcestringclinic_library per un prodotto del tuo catalogo (indicato in product), altrimenti evidence_based
report.uncovered_needs[]arrayIn modalità "solo prodotti della clinica": i fabbisogni che il tuo catalogo non copre
report.clinician_review_required[]arrayTutto 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[]arrayCosa evitare, fonti alimentari per ciascun nutriente e quando ricontrollare
GET PUT /api/v1/dna-supplements/settings Rilasciato 23.09.2026

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.

CampoTipoDescrizione
catalogue[]arrayFino a 200 prodotti: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (prodotti della clinica quando sono adatti, altrimenti suggerimenti basati sulle evidenze), only (solo prodotti della clinica) o off (il catalogo viene ignorato)
settings.instructionsstringLe tue istruzioni per l'IA, fino a 1.500 caratteri. Le regole di sicurezza hanno sempre la priorità.
settings.max_itemsintegerNumero 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 erroreHTTPSignificato
AUTH_1001401Credenziali di autenticazione mancanti
AUTH_1002401Nome utente o password non validi
QUOTA_1101403Quota API insufficiente
VAL_2001400Manca un campo obbligatorio: file o genotype_text, dna_report, blood_test oppure una risposta obbligatoria
VAL_2002400Dati di genotipo illeggibili, tipo di file non supportato, JSON non valido o dna_report non valido
VAL_2003400Lingua del referto non supportata
VAL_2006400Dimensioni eccessive: testo incollato, parametri del sangue (500) o catalogo (200 prodotti)
VAL_2007400Oggetto patient non valido
VAL_2008400Nessun parametro dell'esame del sangue utilizzabile (nome e risultato)
PROC_3003500Non è stato possibile produrre o validare la risposta dell'IA; riprova. Non viene addebitato alcun credito.
RES_4005503I moduli DNA sono disabilitati su questo deployment
Supporto alle decisioni cliniche

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

Rilasciato: 14 febbraio 2026

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.

79%
Più veloce dell'OCR
99,7%
Tasso di precisione
100+
Lingue

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.

Funzionalità Chiave ICR
  • 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

EndpointMetodoDescrizioneCosto
/api/icr/v1/extractPOSTEstrazione testo ICR0,5 crediti
/api/icr/v1/sandboxPOSTTest sandbox ICRGratuito
/api/icr/v1/kanPOSTAnalisi documenti analisi del sangue0,5 crediti
/api/icr/v1/kan/sandboxPOSTTest sandbox analisi del sangueGratuito
/api/icr/infoGETDocumentazione e funzionalità APIGratuito
/api/icr/healthGETEndpoint controllo saluteGratuito
/api/icr/v1/quotaPOSTControlla crediti ICR rimanentiGratuito
POST /api/icr/v1/extract Rilasciato 14.02.2026

Estrae tutto il contenuto testuale dai documenti caricati utilizzando la tecnologia ICR di Kantesti.

Parametri Richiesta

ParametroTipoObbligatorioDescrizione
usernamestringSìIl tuo nome utente API
passwordstringSìLa tua password API
filefileSìFile documento (PDF, JPG, JPEG, PNG)
languagestringNoLingua 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.

APIEndpoint SandboxDescrizione
Estrazione ICR/api/icr/v1/sandboxRestituisce dati di esempio dell'estrazione ICR
ICR Kan/api/icr/v1/kan/sandboxRestituisce dati di esempio dei parametri dell'analisi del sangue

Prestazioni ICR vs OCR

Risultati Benchmark — Kantesti ICR vs OCR Tradizionale
MetricaKantesti ICROCR TradizionaleMiglioramento
Velocità di Elaborazione1,2s media5,7s media79% più veloce
Precisione Testo99,7%92,1%+7,6%
Rilevamento Tabelle98,9%71,2%+27,7%
Output StrutturatoJSON con sezioni, tabelle, metadatiTesto grezzo non strutturatoStruttura completa
Supporto Multilingue100+ lingue30-50 lingue2x+ copertura