Endpoints de la API de análisis de sangre

Última actualización:

Referencia completa para todos los endpoints de la API de Análisis de Sangre Kantesti con ejemplos de código en múltiples lenguajes.

Novedad del 23 de septiembre de 2026: la API de Salud ADN

Nos enorgullece presentar tres módulos de ADN para la API de Kantesti. La Interpretación de Test de ADN convierte datos de ADN en bruto o un informe genético en un informe genético de salud completo, el Informe de Salud ADN + Sangre lo combina con un análisis de sangre y el Asesor de Suplementos elabora un plan de suplementos personalizado con los productos propios de su clínica. Consulte la referencia de la API de Salud ADN.

URL Base
https://app.aibloodtestinterpret.com

Changelog

Sigue las versiones de la API, actualizaciones e información de migración. Usa los endpoints recomendados para nuevas integraciones.

Últimas Actualizaciones (2026)

Las tres actualizaciones de 2026 se aplicaron a todas las versiones de la API indicadas a continuación. Los números de versión y las rutas de los endpoints no cambiaron, por lo que no es necesaria ninguna migración.

  • 8 de septiembre de 2026 Actualización del modelo de IA y mejoras en toda la plataforma
  • 21 de julio de 2026 Mejoras integrales y correcciones de errores
  • 8 de mayo de 2026 Mejoras integrales y correcciones de errores

Endpoints Estables Actuales

Estos endpoints son recomendados para uso en producción y nuevas integraciones.

APIEndpointEstado
Análisis de Sangre v12 /api/v12/18-09-2026/analyze Recomendado Nuevo 18.09.2026
Análisis de Sangre (Puntuación de Salud) v12 /api/v12/health-score/analyze Recomendado Nuevo 18.09.2026
Mapa Corporal v1 /api/v1/body-map/analyze Publicado 18.09.2026 Nuevo
Edad Biológica de la Sangre v1 /api/v1/blood-age/analyze Publicado 18.09.2026 Nuevo
Interpretación de Test de ADN v1 /api/v1/dna-interpretation/analyze Publicado 23.09.2026 Nuevo
Informe de Salud ADN + Sangre v1 /api/v1/dna-blood-report/analyze Publicado 23.09.2026 Nuevo
Asesor de Suplementos ADN v1 /api/v1/dna-supplements/analyze Publicado 23.09.2026 Nuevo
Análisis de Sangre v11 /api/v11/01-06-2025/analyze Estable Actualizado 08.09.2026
Análisis de Sangre (Puntuación de Salud) v11 /api/v11/health-score/analyze Estable Actualizado 08.09.2026
IA Nutrición v1 /api/v1/nutrition/diet-plan/analyze Estable Actualizado 08.09.2026
Comparación IA de Análisis de Sangre v1 /api/v1/bloodtest/comparison/analyze Estable Actualizado 08.09.2026
Evaluación de Riesgos de Salud Familiar v1 /api/v1/family-health/analyze Publicado 23.03.2026 Actualizado 08.09.2026
ICR - Reconocimiento Inteligente de Caracteres v1 /api/icr/v1/extract Lanzado 14.02.2026 Actualizado 08.09.2026
ICR Kan - Extracción de Análisis de Sangre v1 /api/icr/v1/kan Lanzado 14.02.2026 Actualizado 08.09.2026
Análisis de Tendencias v1 /api/v1/analytics/trends/analyze Estable Actualizado 08.09.2026

Historial de Versiones

FechaVersiónCambios
23 de septiembre de 2026 Interpretación de Test de ADN v1, Informe de Salud ADN + Sangre v1, Asesor de Suplementos ADN v1 API de Salud ADN publicada — interpretación de test de ADN a partir de datos de ADN en bruto (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) o de archivos de informes genéticos frente a 334 marcadores seleccionados, un informe combinado de salud ADN + sangre y un asesor de suplementos con el catálogo de productos propio de la clínica; modo asíncrono y sandbox
Septiembre 2026 Análisis de Sangre v12 Análisis de Sangre v12 publicado — carga de varios archivos, informes en 100 idiomas, puntuación de salud y análisis de riesgo de enfermedades opcionales, modo sandbox
Septiembre 2026 Mapa Corporal v1, Edad Biológica de la Sangre v1 API de Mapa Corporal y API de Edad Biológica de la Sangre publicadas — asignación a nivel de órgano de los resultados fuera de rango en 13 regiones anatómicas, y edad biológica PhenoAge con hasta 18 índices clínicos derivados; ambas ofrecen un modo determinista y un sandbox
Septiembre 2026 Todas las versiones Actualización del modelo de IA, fijado a la versión más reciente del modelo; mejoras integrales y correcciones de errores en todas las versiones de la API; números de versión sin cambios; precisión del 98,89% en exámenes de facultades de medicina (último benchmark de código abierto)
Julio 2026 Todas las versiones Mejoras integrales y correcciones de errores aplicadas a todas las versiones de la API; números de versión sin cambios
Mayo 2026 Todas las versiones Mejoras integrales y correcciones de errores aplicadas a todas las versiones de la API; números de versión sin cambios
Marzo 2026 Family Health v1 API de Evaluación de Riesgos de Salud Familiar publicada — Análisis de riesgos hereditarios por IA, soporte de 100+ idiomas, análisis de árbol genealógico, cronograma de cuidados preventivos, recomendaciones de cribado genético, modo sandbox
Febrero 2026 ICR v1 API ICR (Reconocimiento Inteligente de Caracteres) lanzada — 79% más rápida que OCR, salida JSON estructurada, detección de tipo de documento, extracción de tablas, integración Kan para análisis de sangre
Diciembre 2025 Más Reciente Manejo de errores mejorado, precisión del 98,7%, soporte para 100 idiomas
Junio 2025 v11 Análisis de sangre v11, endpoint de puntuación de salud, soporte multi-archivo
Abril 2025 v9 Modelo api_parameters_v9, extracción de parámetros mejorada
Marzo 2025 v8 Soporte de carga multi-archivo, procesamiento por lotes

Endpoints Heredados

Estos endpoints se mantienen para compatibilidad retroactiva pero no son recomendados para nuevas integraciones.

VersiónEndpointEstado
v10 /api/v10/health-score/analyze Heredado
v9 /api/v9/14-04-2025/analyze Heredado
v8 /api/v8/31-03-2025/analyze Heredado
v6 /api/v6-1/21-11-2024/analyze Heredado
v3 /api/v3/10-10-2024/analyze Heredado
Nota

Los endpoints heredados se mantienen para compatibilidad retroactiva pero no son recomendados para nuevas integraciones. Por favor, migre a los endpoints estables actuales para mejor rendimiento y soporte.

Referencia de Idiomas Soportados

La API de Kantesti soporta 100 idiomas para la localización de respuestas. Use el parámetro language con cualquiera de los códigos ISO 639-1 listados a continuación. Si no se específica, las respuestas se devuelven en inglés (en) por defecto.

Idioma Predeterminado

Si no se proporciona ningún parámetro language, la API devuelve respuestas en inglés (en).

Principales Idiomas Mundiales

CódigoIdiomaNombre Nativo
enInglésEnglish
zhChino中文
esEspañolEspañol
arÁrabeالعربية
hiHindiहिन्दी
ptPortuguésPortuguês
ruRusoРусский
jaJaponés日本語
frFrancésFrançais
deAlemánDeutsch
koCoreano한국어
trTurcoTürkçe

Idiomas Europeos

CódigoIdiomaNombre Nativo
itItalianoItaliano
nlHolandésNederlands
plPolacoPolski
elGriegoΕλληνικά
svSuecoSvenska
noNoruegoNorsk
daDanésDansk
fiFinlandésSuomi
csChecoČeština
ukUcranianoУкраїнська
roRumanoRomână
huHúngaroMagyar
bgBúlgaroБългарски
hrCroataHrvatski
skEslovacoSlovenčina
slEslovenoSlovenščina
srSerbioСрпски
ltLituanoLietuvių
lvLetonLatviešu
etEstonioEesti
caCatalánCatalà
euVascoEuskara
glGallegoGalego
cyGalésCymraeg
gaIrlandésGaeilge
isIslandésÍslenska
mtMaltésMalti
sqAlbanésShqip
mkMacedonioМакедонски
bsBosnioBosanski
lbLuxemburguésLëtzebuergesch
beBielorrusoБеларуская

Idiomas de Oriente Medio y Asia Central

CódigoIdiomaNombre Nativo
heHebreoעברית
faPersaفارسی
azAzerbaiyanoAzərbaycan
kaGeorgianoქართული
hyArmenioՀayerdelays
kkKazajoҚазақша
uzUzbekoOʻzbek
tgTayikoТоҷикӣ
kyKirguisoКыргызча
tkTurkmenoTürkmen
mnMongolМонгол
psPastunپښتو
kuKurdoKurdî

Idiomas del Sur de Asia

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

Idiomas del Sudeste Asiático

CódigoIdiomaNombre Nativo
idIndonesioBahasa Indonesia
thTailandésไทย
viVietnamitaTiếng Việt
msMalayoBahasa Melayu
myBirmanoမြန်မာ
kmJemerភាសាខ្មែរ
loLaosianoລາວ
filFilipinoFilipino
tlTagaloTagalog
jvJavanésBasa Jawa
suSundanésBasa Sunda

Idiomas Africanos

CódigoIdiomaNombre Nativo
afAfrikaansAfrikaans
swSuajiliKiswahili
amAmharicoአማርኛ
haHausaHausa
yoYorubaYorùbá
igIgboIgbo
zuZuluisiZulu
xhXhosaisiXhosa
soSomaliSoomaali
mgMalgacheMalagasy

Otros Idiomas

CódigoIdiomaNombre Nativo
laLatinLatina
eoEsperantoEsperanto
yiYidisייִדיש
htCriollo HaitianoKreyòl Ayisyen
miMaoriTe Reo Māori
smSamoanoGagana Samoa
toTonganoLea Faka-Tonga
hawHawaianoʻŌlelo Hawaiʻi

API de Análisis de Sangre

Analiza imágenes o PDFs de análisis de sangre usando IA para extraer parámetros y generar interpretaciones médicas completas.

POST /api/v12/18-09-2026/analyze Más Reciente

Endpoint de producción para el análisis de sangre. Suba una o varias imágenes del análisis de sangre o un PDF y reciba parámetros estructurados, metadatos del paciente y del laboratorio, y una interpretación clínica completa en cualquiera de los 100 idiomas soportados. Consume 1 crédito por solicitud.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API
passwordstringSíSu contraseña API
filefileSíImagen del análisis de sangre (PNG, JPG, WEBP) o PDF. Máx. 20MB. Repita el campo para enviar varias imágenes.
languagestringNoCódigo del idioma de respuesta (predeterminado: en). Ver idiomas soportados.
pdf_passwordstringNoContraseña para PDFs cifrados

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
  -F "username=SU_USUARIO" \
  -F "password=SU_CONTRASEÑA" \
  -F "language=es" \
  -F "file=@analisis_sangre.pdf"

Ejemplo Python

import requests

def analyze_blood_test(file_paths, username, password, language="es"):
    """
    Analiza un análisis de sangre con Kantesti Análisis de Sangre v12.

    Args:
        file_paths: Una o varias rutas a imágenes del análisis, o un único PDF
        username: Nombre de usuario de la API
        password: Contraseña de la API
        language: Código del idioma del informe (predeterminado: es)

    Returns:
        dict: Parámetros estructurados, metadatos e interpretación clínica
    """
    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()

# Ejemplo de uso
if __name__ == "__main__":
    result = analyze_blood_test(
        file_paths=["analisis_sangre.pdf"],
        username="su_usuario",
        password="su_contrasena",
        language="es"
    )
    print(f"Estado: {result['status']}")
    for param in result["data"]["parameters"]:
        print(f"  {param['short_name']}: {param['result']} {param['unit']} ({param['evaluation']})")

Ejemplo de respuesta

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

Endpoint de producción para análisis de sangre. Consume 1 crédito por solicitud.

Parámetros de Solicitud

ParámetroTipoRequeridoDescripción
usernamestringSiTu usuario de la API
passwordstringSiTu contraseña de la API
filefileSiImagen del análisis de sangre (PNG, JPG, WEBP) o archivo PDF. Max 20MB.
languagestringNoCódigo del idioma de respuesta (por defecto: en). Soporta 100+ idiomas.

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
  -F "username=TU_USUARIO" \
  -F "password=TU_CONTRASEÑA" \
  -F "language=es" \
  -F "file=@analisis_sangre.pdf"

Ejemplo Python

import requests

def analizar_sangre(ruta_archivo: str, usuario: str, contrasena: str, idioma: str = "es"):
    url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"

    with open(ruta_archivo, "rb") as f:
        files = {"file": (ruta_archivo, f, "application/pdf")}
        data = {"username": usuario, "password": contrasena, "language": idioma}
        response = requests.post(url, files=files, data=data, timeout=120)
        return response.json()

resultado = analizar_sangre("analisis_sangre.pdf", "tu_usuario", "tu_contrasena")
print(resultado)

Referencia de campos de respuesta

Nivel raíz
CampoTipoDescripción
statusstring"success" o "error"
dataobjectContiene todos los resultados del análisis
timestampstringMarca de tiempo ISO 8601 de la respuesta
api_versionstringVersión de la API utilizada
Objeto data.metadata
CampoTipoDescripción
lab_datestringFecha de extracción de sangre (AAAA-MM-DD)
results_datestringFecha de emisión de resultados (AAAA-MM-DD)
lab_namestringNombre del laboratorio
lab_citystringCiudad del laboratorio
lab_countrystringPaís del laboratorio
patient_namestringNombre completo del paciente (solo metadatos, no se envía a la interpretación)
patient_agestringEdad del paciente
patient_sexstring"male", "female" o "other"
Elemento del array data.parameters
CampoTipoDescripción
categorystringCategoría del parámetro (ej: "Hemograma", "Perfil lipídico")
long_namestringNombre completo del parámetro
short_namestringNombre abreviado del parámetro
resultstringValor medido
unitstringUnidad de medida
range_minstringRango de referencia mínimo
range_maxstringRango de referencia máximo
evaluationstringEstado del resultado. Ver valores de evaluación
Elemento del array data.interpretation
CampoTipoDescripción
titlestringTítulo de la sección (ej: "Evaluación general de salud")
contentstringInterpretación médica generada por IA

Ejemplo de respuesta completa

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Anna Müller",
      "lab_name": "MedLab Diagnostics International",
      "lab_city": "Madrid",
      "lab_country": "España",
      "lab_date": "2025-12-15",
      "results_date": "2025-12-16",
      "patient_age": "38",
      "patient_sex": "female"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "Recuento de glóbulos blancos",
        "category": "Hemograma completo",
        "result": "6.8",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "4.0",
        "range_max": "11.0",
        "short_description": "Mide el número total de glóbulos blancos.",
        "long_description": "Los glóbulos blancos (leucocitos) son componentes esenciales del sistema inmunológico..."
      },
      {
        "short_name": "RBC",
        "long_name": "Recuento de glóbulos rojos",
        "category": "Hemograma completo",
        "result": "4.52",
        "unit": "10^12/L",
        "evaluation": "normal",
        "range_min": "3.8",
        "range_max": "5.8",
        "short_description": "Mide el número total de glóbulos rojos.",
        "long_description": "Los glóbulos rojos (eritrocitos) transportan oxígeno desde los pulmones a los tejidos..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hemoglobina",
        "category": "Hemograma completo",
        "result": "13.2",
        "unit": "g/dL",
        "evaluation": "normal",
        "range_min": "11.5",
        "range_max": "16.0",
        "short_description": "Proteína en los glóbulos rojos que transporta oxígeno.",
        "long_description": "La hemoglobina es la proteína que contiene hierro en los glóbulos rojos responsable del transporte de oxígeno..."
      },
      {
        "short_name": "GLU",
        "long_name": "Glucosa en ayunas",
        "category": "Panel metabólico",
        "result": "102",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "70",
        "range_max": "140",
        "short_description": "Mide el nivel de azúcar en sangre en ayunas.",
        "long_description": "La glucosa en ayunas es un indicador clave de cómo el cuerpo metaboliza el azúcar..."
      },
      {
        "short_name": "TC",
        "long_name": "Colesterol total",
        "category": "Perfil lipídico",
        "result": "218",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "300",
        "short_description": "Mide el colesterol total en sangre.",
        "long_description": "El colesterol total es la suma del colesterol HDL, LDL y VLDL..."
      },
      {
        "short_name": "LDL",
        "long_name": "Colesterol LDL",
        "category": "Perfil lipídico",
        "result": "142",
        "unit": "mg/dL",
        "evaluation": "high",
        "range_min": "0",
        "range_max": "200",
        "short_description": "Mide el nivel de colesterol 'malo'.",
        "long_description": "El colesterol LDL puede acumularse en las paredes de las arterias..."
      }
    ],
    "interpretation": [
      {
        "title": "Evaluación general de salud",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Visión general completa",
            "items": [
              {"item": "La paciente presenta parámetros hematológicos generalmente saludables con todos los valores del hemograma dentro de la normalidad."},
              {"item": "El perfil lipídico muestra áreas que requieren atención, particularmente los niveles de colesterol LDL."}
            ]
          }
        ]
      },
      {
        "title": "Recomendaciones",
        "shortcode": "recommendations",
        "subsections": [
          {
            "subtitle": "Modificaciones del estilo de vida",
            "items": [
              {"item": "Aumentar la actividad física aeróbica a al menos 150 minutos por semana."},
              {"item": "Adoptar una dieta de tipo mediterráneo rica en verduras, frutas y grasas saludables."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-16T14:32:18Z"
}
Palabras clave de respuesta

El campo evaluation utiliza valores estandarizados. Ver valores de evaluación.

POST /api/v12/health-score/analyze Más Reciente

Endpoint de producción con cálculo completo de la puntuación de salud y análisis de riesgo de enfermedades. Acepta la misma solicitud que /api/v12/18-09-2026/analyze y añade los campos siguientes a la respuesta. Consume 1 crédito por solicitud.

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
  -F "username=SU_USUARIO" \
  -F "password=SU_CONTRASEÑA" \
  -F "language=es" \
  -F "file=@analisis_sangre.pdf"

Campos adicionales de respuesta

{
  "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"}
  ]
}
Palabras clave de respuesta

El campo score_interpretation utiliza valores estandarizados. Ver valores de puntuación de salud.

Endpoints Sandbox

Los endpoints sandbox devuelven datos de prueba realistas sin consumir cuota de API. Úsalos para desarrollo y pruebas de integración.

Beneficios del Sandbox
  • Sin consumo de cuota
  • Devuelve datos de prueba realistas
  • Mismo formato de solicitud que producción
  • Prueba tu integración antes de ir a producción
APIEndpoint Sandbox
Análisis de Sangre v12/api/v12/18-09-2026/sandbox
Análisis de Sangre v12-health/api/v12/health-score/sandbox
Mapa Corporal/api/v1/body-map/sandbox
Edad Biológica de la Sangre/api/v1/blood-age/sandbox
Interpretación de Test de ADN/api/v1/dna-interpretation/sandbox
Informe de Salud ADN + Sangre/api/v1/dna-blood-report/sandbox
Asesor de Suplementos ADN/api/v1/dna-supplements/sandbox
Análisis de Sangre v11/api/v11/01-06-2025/sandbox
Análisis de Sangre v11-health/api/v11/health-score/sandbox
IA Nutricional/api/v1/nutrition/diet-plan/sandbox
Comparación de Análisis/api/v1/bloodtest/comparison/sandbox
Análisis de Tendencias/api/v1/analytics/trends/sandbox
ICR - Reconocimiento Inteligente de Caracteres/api/icr/v1/sandbox
ICR Kan - Análisis de Sangre/api/icr/v1/kan/sandbox
API de Comparación vs API de Análisis de Tendencias

Elija la API correcta para su caso de uso:

CaracterísticaComparación IA de Análisis de SangreAnálisis de Tendencias
Enfoque PrincipalComparación narrativa IAAnálisis estadístico de tendencias
Procesamiento IANarrativa IA completaIA mejorada + estadísticas
Tipo de SalidaResúmenes narrativosGráficos, estadísticas, patrones
Ideal ParaQué cambió entre pruebasSeguimiento de parámetros a largo plazo
Min Pruebas22
Max Pruebas2050

API de Análisis de Tendencias

Analiza tendencias de parámetros de salud a lo largo del tiempo usando reconocimiento de patrones con IA. Identifica mejoras, deterioros e información práctica a partir de datos históricos de análisis de sangre.

IA Nutricional con Suplementos

Genera planes nutricionales personalizados, recomendaciones de dieta y sugerencias de suplementos basados en el análisis de sangre.

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

Genera recomendaciones completas de nutrición y suplementos basadas en los parámetros de análisis de sangre y perfil del paciente.

Esquema del Objeto Paciente

Descripción detallada de todos los campos disponibles para el objeto paciente:

Campo Tipo Requerido Predeterminado Descripción
age integer Sí - Edad del paciente en años (18-120)
gender string Sí - Sexo del paciente. Ver valores
weight number No null Peso en kg (para cálculos calóricos)
height number No null Altura en cm (para cálculos de IMC)
conditions array No [] Condiciones médicas. Ver valores
allergies array No [] Alergias alimentarias. Ver valores
dietary_preferences array No [] Preferencias alimentarias. Ver valores
activity_level string No "moderate" Nivel de actividad física. Ver valores
dietary_restrictions array No [] Restricciones alimentarias (ej: sin gluten, sin lactosa)
liked_foods array No [] Alimentos preferidos para personalización del plan
disliked_foods array No [] Alimentos a evitar en las recomendaciones
meal_frequency integer No 3 Número de comidas por día (1-6)
budget string No "moderate" Nivel de presupuesto: "low", "moderate", "high"
medications array No [] Medicamentos actuales (para interacciones)

Referencia de campos de respuesta

Objeto nutrition_plan.educational_insights
Campo Tipo Descripción
blood_marker_education array Contenido educativo sobre los marcadores sanguíneos analizados
nutrition_principles array Principios nutricionales generales aplicables al paciente
Elemento del array blood_marker_education
Campo Tipo Descripción
marker string Nombre del marcador sanguíneo (ej: "Vitamina D", "Colesterol")
explanation string Explicación educativa sobre la importancia del marcador
normal_range string Rango de valores normales para el marcador
Elemento del array food_recommendations.power_foods
Campo Tipo Descripción
food string Nombre del alimento recomendado
nutrients array Lista de los nutrientes clave proporcionados por este alimento
serving string Tamaño de porción recomendado
why string Explicación de por qué este alimento es beneficioso
Elemento del array supplement_recommendations
Campo Tipo Descripción
supplement string Nombre del suplemento
dosage string Dosis diaria recomendada
timing string Mejor momento para tomar (ej: "Con el desayuno")
duration string Duración recomendada de la suplementación
reason string Justificación basada en los resultados de los análisis

Ejemplo cURL completo

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "tu_nombre_usuario",
    "password": "tu_contraseña",
    "language": "es",
    "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"]
  }'

Respuesta 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 es esencial para la salud ósea, función inmunológica y regulación del estado de ánimo. Tu nivel de 18 ng/mL indica deficiencia que puede afectar la absorción de calcio y la salud general.",
            "normal_range": "30-50 ng/mL"
          },
          {
            "marker": "Colesterol LDL",
            "explanation": "El colesterol LDL, frecuentemente llamado 'colesterol malo', puede acumularse en las paredes arteriales. Tu nivel de 140 mg/dL está elevado y puede aumentar el riesgo cardiovascular.",
            "normal_range": "< 100 mg/dL"
          }
        ],
        "nutrition_principles": [
          "Prioriza los ácidos grasos omega-3 para la salud cardíaca",
          "Aumenta las fibras solubles para reducir el colesterol LDL",
          "Incluye alimentos ricos en vitamina D y exposición solar"
        ]
      }
    },
    "food_recommendations": {
      "power_foods": [
        {
          "food": "Salmón salvaje",
          "nutrients": ["Omega-3", "Vitamina D", "Proteínas"],
          "serving": "150g, 3 veces por semana",
          "why": "Excelente fuente de omega-3 y vitamina D natural para salud cardíaca y ósea"
        },
        {
          "food": "Avena integral",
          "nutrients": ["Beta-glucano", "Fibras", "Magnesio"],
          "serving": "50g al día en el desayuno",
          "why": "Las fibras solubles de la avena ayudan a reducir la absorción del colesterol LDL"
        },
        {
          "food": "Aceite de oliva virgen extra",
          "nutrients": ["Grasas monoinsaturadas", "Polifenoles", "Vitamina E"],
          "serving": "2-3 cucharadas al día",
          "why": "Las grasas saludables mediterráneas mejoran el perfil lipídico y protegen el corazón"
        },
        {
          "food": "Espinacas",
          "nutrients": ["Hierro", "Folato", "Vitamina K"],
          "serving": "100g al día, crudas o cocidas",
          "why": "Ricas en hierro y antioxidantes para energía y salud cardiovascular"
        }
      ]
    },
    "supplement_recommendations": [
      {
        "supplement": "Vitamina D3",
        "dosage": "2000-4000 UI al día",
        "timing": "Con el desayuno (comida con grasas)",
        "duration": "3-6 meses, luego volver a analizar niveles",
        "reason": "Tu nivel de 18 ng/mL está por debajo del óptimo de 30-50 ng/mL"
      },
      {
        "supplement": "Omega-3 (EPA/DHA)",
        "dosage": "1000-2000mg EPA+DHA al día",
        "timing": "Con las comidas principales",
        "duration": "Continuo para salud cardíaca",
        "reason": "Ayuda a reducir triglicéridos y mejora la relación HDL/LDL"
      },
      {
        "supplement": "Coenzima Q10",
        "dosage": "100mg al día",
        "timing": "Con la comida de la mañana",
        "duration": "Mínimo 3 meses",
        "reason": "Apoya la salud cardíaca, particularmente importante con hipertensión"
      }
    ]
  },
  "api_version": "v1",
  "timestamp": "2025-12-22T10:30:00Z"
}
Palabras clave de respuesta

Para una lista completa de todos los valores posibles de respuesta, consulta la sección Palabras clave de salida.

API de Comparación de Análisis de Sangre

Compara múltiples análisis de sangre para identificar cambios, mejoras y áreas que requieren atención con análisis basado en IA. Obtiene resúmenes narrativos completos de IA explicando qué cambió entre pruebas.

POST /api/v1/bloodtest/comparison/analyze

Analiza de 2 a 20 análisis de sangre y proporciona una comparación detallada con información narrativa generada por IA.

Requisitos
  • Mínimo 2 análisis de sangre requeridos
  • Máximo 20 análisis de sangre por solicitud
  • Cada prueba debe incluir lab_date o results_date
  • Al menos un parámetro comun entre pruebas

Parámetros de Solicitud

ParámetroTipoRequeridoPredeterminadoDescripción
usernamestringSi-Tu usuario de la API
passwordstringSi-Tu contraseña de la API
languagestringNoenIdioma de respuesta. Ver idiomas soportados
blood_testsarraySi-Array de objetos de análisis de sangre (2-20 pruebas)

Estructura del Array blood_tests

CampoTipoRequeridoDescripción
lab_datestringSi*Fecha de prueba en formato YYYY-MM-DD
results_datestringSi*Alternativa a lab_date (YYYY-MM-DD)
parametersarraySiArray de parámetros del análisis de sangre
metadataobjectNoMetadatos adicionales (lab_name, notas, etc.)

*Se requiere lab_date o results_date para cada análisis de sangre.

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "TU_USUARIO",
    "password": "TU_CONTRASEÑA",
    "language": "es",
    "blood_tests": [
      {
        "lab_date": "2025-06-15",
        "lab_name": "Laboratorio Medico de la Ciudad",
        "parameters": [
          {"short_name": "HGB", "result": 12.8, "unit": "g/dL"},
          {"short_name": "WBC", "result": 8.2, "unit": "10^9/L"},
          {"short_name": "PLT", "result": 245, "unit": "10^9/L"}
        ]
      },
      {
        "lab_date": "2025-12-15",
        "lab_name": "Laboratorio Medico de la Ciudad",
        "parameters": [
          {"short_name": "HGB", "result": 14.2, "unit": "g/dL"},
          {"short_name": "WBC", "result": 7.1, "unit": "10^9/L"},
          {"short_name": "PLT", "result": 238, "unit": "10^9/L"}
        ]
      }
    ]
  }'

Ejemplo Python

import requests
from typing import Dict, List

def comparar_analisis_sangre(
    usuario: str,
    contrasena: str,
    analisis_sangre: List[Dict],
    idioma: str = "es"
) -> Dict:
    """
    Compara multiples analisis de sangre con analisis narrativo impulsado por IA.

    Args:
        usuario: Usuario de la API
        contrasena: Contrasena de la API
        analisis_sangre: Lista de objetos de analisis de sangre (2-20 pruebas)
        idioma: Idioma de respuesta

    Returns:
        dict: Resultados de comparacion con informacion narrativa de IA
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"

    if len(analisis_sangre) < 2:
        raise ValueError("Se requieren minimo 2 analisis de sangre")
    if len(analisis_sangre) > 20:
        raise ValueError("Se permiten maximo 20 analisis de sangre")

    payload = {
        "username": usuario,
        "password": contrasena,
        "language": idioma,
        "blood_tests": analisis_sangre
    }

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

# Ejemplo de uso
if __name__ == "__main__":
    pruebas = [
        {
            "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"}
            ]
        }
    ]

    resultado = comparar_analisis_sangre("tu_usuario", "tu_contrasena", pruebas)

    print(f"Tendencia general: {resultado['data']['comparison_summary']['overall_trend']}")
    for param in resultado['data']['parameter_analysis']:
        print(f"{param['parameter_name']}: {param['trend_assessment']}")

Referencia de Campos de Respuesta

CampoTipoDescripción
comparison_idstringIdentificador único para esta comparación (formato: CMP-XXXXXXXX)
comparison_summaryobjectResumen general: hallazgos clave, tendencia general, fechas de informes, intervalo de tiempo
parameter_analysisarrayAnálisis detallado por parámetro con tipo de cambio y significancia clínica
health_assessmentobjectÁreas de preocupación, mejora, desarrollos positivos, factores de riesgo
recommendationsobjectPruebas de seguimiento, acciones inmediatas, modificaciones de estilo de vida, derivaciones a especialistas
detailed_interpretationobjectSecciones narrativas de IA con resumen ejecutivo y recomendaciones clínicas

Estructura del Objeto parameter_analysis

CampoTipoDescripción
parameter_namestringNombre del parámetro
report1_valuestringValor del primer informe con unidad
report2_valuestringValor del segundo informe con unidad
change_typestringincreased, decreased o stable
change_magnitudestringsignificant, moderate o minor
clinical_significancestringExplicación IA de lo que significa el cambio
trend_assessmentstringpositive, negative o neutral

Ejemplo de Respuesta

{
  "api_version": "1.0.0",
  "status": "success",
  "message": "Comparacion de analisis de sangre completada exitosamente",
  "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": "improved",
      "report1_date": "2024-06-15",
      "report2_date": "2024-12-15",
      "time_interval": "183 dias entre informes",
      "key_findings": [
        "Los niveles de hemoglobina y globulos rojos se normalizaron indicando resolucion de anemia",
        "La glucosa y HbA1c mejoraron a rango normal sugiriendo mejor control glucemico",
        "El perfil lipidico mejoro con colesterol total, LDL, HDL y trigliceridos normalizados"
      ]
    },
    "parameter_analysis": [
      {
        "parameter_name": "Hemoglobina",
        "report1_value": "12.2 g/dL",
        "report2_value": "14.5 g/dL",
        "change_type": "increased",
        "change_magnitude": "significant",
        "clinical_significance": "Mejora de anemia a niveles normales de hemoglobina",
        "trend_assessment": "positive"
      },
      {
        "parameter_name": "Colesterol LDL",
        "report1_value": "155 mg/dL",
        "report2_value": "98 mg/dL",
        "change_type": "decreased",
        "change_magnitude": "significant",
        "clinical_significance": "LDL cerca del rango optimo, reduciendo riesgo de aterosclerosis",
        "trend_assessment": "positive"
      },
      {
        "parameter_name": "Colesterol HDL",
        "report1_value": "38 mg/dL",
        "report2_value": "55 mg/dL",
        "change_type": "increased",
        "change_magnitude": "significant",
        "clinical_significance": "HDL mejorado protege contra enfermedad cardiaca",
        "trend_assessment": "positive"
      }
    ],
    "health_assessment": {
      "overall_health_trend": "improved",
      "areas_of_improvement": [
        "Correccion de anemia",
        "Control glucemico",
        "Normalizacion del perfil lipidico",
        "Estado de vitamina D y hierro"
      ],
      "areas_of_concern": [],
      "positive_developments": [
        "Resolucion de anemia",
        "Glucosa y HbA1c normales",
        "Perfil de riesgo cardiovascular mejorado"
      ],
      "risk_factors": [
        "Anemia por deficiencia de hierro previa",
        "Dislipidemia anterior",
        "Historia de metabolismo de glucosa alterado"
      ]
    },
    "recommendations": {
      "immediate_actions": [
        "Continuar suplementacion actual de hierro y vitamina D",
        "Mantener control glucemico y lipidico con dieta y ejercicio"
      ],
      "follow_up_tests": [
        "Repetir hemograma y estudios de hierro en 3 meses",
        "Monitorear glucosa en ayunas y HbA1c trimestralmente",
        "Revision del panel lipidico en 6 meses"
      ],
      "lifestyle_modifications": [
        "Adoptar dieta saludable para el corazon baja en grasas saturadas",
        "Aumentar actividad fisica para mantener salud metabolica"
      ],
      "specialist_referrals": [
        "Consultar hematologo si la anemia recurre",
        "Derivacion a endocrinologo si el control de glucosa empeora"
      ],
      "monitoring_frequency": "3 meses"
    },
    "detailed_interpretation": {
      "sections": [
        {
          "title": "Resumen Ejecutivo",
          "content": "El paciente muestra una mejora marcada en anemia, metabolismo de glucosa, perfil lipidico y estado vitaminico en 6 meses."
        },
        {
          "title": "Recomendaciones Clinicas",
          "content": "Continuar suplementacion y medidas de estilo de vida. Monitorear conteos sanguineos, hierro, glucosa y lipidos regularmente."
        }
      ]
    },
    "summary": {
      "improved_parameters": 13,
      "stable_parameters": 0,
      "worsened_parameters": 0,
      "overall_trend": "improved"
    },
    "sandbox_mode": false
  }
}
Palabras clave de respuesta

Los campos de respuesta usan valores estandarizados: overall_trend y trend_assessment (ver evaluación de tendencias), change_type (increased, decreased, stable).

Referencia de Palabras Clave

Referencia completa de todos los valores de palabras clave de entrada utilizados en los endpoints de la API Kantesti. Usa estos valores exactos en las solicitudes de API.

analysis_type API Análisis de Tendencias

Específica el tipo de análisis de tendencias a realizar.

ValorPredeterminadoDescripción
comprehensive✓Análisis completo con estadísticas, gráficos e interpretación IA
statisticalSolo análisis estadístico
summarySolo resumen de alto nivel

health_goals API Nutrición

Objetivos de salud para recomendaciones nutricionales personalizadas. Se pueden proporcionar múltiples valores como array.

ValorDescripción
maintainMantener salud actual (predeterminado)
improve_energyEnfoque en niveles de energía
weight_managementGestión saludable del peso
heart_healthSalud cardiovascular
immune_supportSoporte al sistema inmunológico
digestive_healthBienestar digestivo
bone_healthSalud ósea
mental_clarityFunción cognitiva

dietary_restrictions API Nutrición

Restricciones dietéticas y alergias. Se pueden proporcionar múltiples valores como array. También se acepta texto libre para restricciones personalizadas.

ValorDescripción
low_sodiumIngesta reducida de sodio
low_sugarIngesta reducida de azúcar
low_fatIngesta reducida de grasas
gluten_freeSin gluten
dairy_freeSin lácteos
nut_freeSin frutos secos
soy_freeSin soja
egg_freeSin huevos
halalConforme halal
kosherConforme kosher
Nota

También se acepta texto libre para restricciones dietéticas personalizadas no listadas arriba.

dietary_preferences API Nutrición

Preferencias de estilo de vida alimentario para planificación de comidas.

ValorDescripción
omnivoreSin restricciones (predeterminado)
vegetarianSin carne
veganSin productos animales
pescatarianVegetariano + pescado
ketoDieta cetogénica
paleoDieta paleolítica
mediterraneanDieta mediterránea

activity_level API Nutrición

Nivel de actividad física para cálculos calóricos y nutricionales.

ValorDescripción
sedentaryPoco o ningún ejercicio
lightEjercicio ligero 1-3 días/semana
moderateEjercicio moderado 3-5 días/semana (predeterminado)
activeEjercicio intenso 6-7 días/semana
very_activeEjercicio muy intenso o trabajo físico

budget API Nutrición

Nivel de presupuesto para recomendaciones de alimentos y suplementos.

ValorDescripción
lowOpciones económicas
moderateOpciones equilibradas (predeterminado)
highOpciones premium

gender Todas las APIs

Sexo del paciente para rangos de referencia y recomendaciones personalizadas.

ValorDescripción
malePaciente masculino
femalePaciente femenino
otherOtro o no especificado

Palabras clave de salida

Las siguientes palabras clave aparecen en las respuestas de la API. Comprender estos valores ayuda a interpretar y mostrar los resultados correctamente.

evaluation APIs Análisis de sangre & Comparación

Estado de evaluación del parámetro indicando cómo se compara el resultado con los rangos de referencia.

ValorDescripción
normalDentro del rango de referencia normal
lowPor debajo del rango normal
highPor encima del rango normal
critical_lowCríticamente bajo (atención inmediata requerida)
critical_highCríticamente alto (atención inmediata requerida)
borderline_lowLigeramente por debajo del rango normal
borderline_highLigeramente por encima del rango normal

trend_assessment APIs Comparación & Tendencias

Evaluación general de las tendencias de los parámetros entre pruebas.

ValorDescripción
positiveMejorado (hacia el rango normal)
negativeEmpeorado (alejándose del rango normal)
stableRelativamente sin cambios entre pruebas
improvingTendencia general de mejora
worseningTendencia general de empeoramiento

trend_direction API Análisis de tendencias

Dirección de los cambios de valor de los parámetros a lo largo del tiempo.

ValorDescripción
upwardValores aumentando a lo largo del tiempo
downwardValores disminuyendo a lo largo del tiempo
stableCambio mínimo a lo largo del tiempo

trend_strength API Análisis de tendencias

Magnitud de la tendencia observada.

ValorDescripción
strong>15% de cambio entre períodos
moderate5-15% de cambio entre períodos
mild<5% de cambio entre períodos

health_score / score_interpretation API Puntuación de salud

Interpretación general de la puntuación de salud basada en los parámetros analizados.

ValorDescripción
excellentTodos los marcadores en el rango óptimo
goodLa mayoría de los marcadores en el rango normal
fairAlgunos marcadores necesitan atención
poorMúltiples marcadores necesitan atención

Endpoints Utilitarios

POST /api/quota/check

Verifica tu cuota de API restante. Requiere autenticación.

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

API de Evaluación de Riesgos de Salud Familiar

Publicado: 23 de marzo de 2026

La API Kantesti de Evaluación de Riesgos de Salud Familiar es una plataforma de análisis de riesgos de salud hereditarios impulsada por IA. Genera informes completos de salud familiar analizando el historial médico familiar, perfiles de salud de los pacientes y datos de análisis de sangre para identificar factores de riesgo hereditarios y proporcionar recomendaciones de cuidados preventivos personalizados.

100+
Idiomas
9
Categorías de enfermedades
14
Relaciones familiares

Análisis de riesgos hereditarios por IA

La API Family Health utiliza modelos avanzados de IA para cruzar el historial médico familiar con los datos de análisis de sangre del paciente, identificando patrones de riesgo hereditario en categorías cardiovascular, metabólica, cáncer, neurológica, respiratoria, autoinmune, genética, salud mental y riñón/hígado. Los informes incluyen puntuación de riesgo, cronogramas de cuidados preventivos, recomendaciones de cribado genético y consejos de estilo de vida — todo localizado en más de 100 idiomas.

Características principales
  • Análisis de riesgos hereditarios — Clasificación en riesgo alto, moderado y bajo con puntuación detallada
  • Análisis del árbol genealógico — Mapeo de riesgos de líneas paterna y materna
  • Correlación de análisis de sangre — Cruce de antecedentes familiares con parámetros sanguíneos
  • Recomendaciones de cribado genético — Sugerencias personalizadas de pruebas genéticas
  • Cronograma de cuidados preventivos — Programas de detección adaptados a la edad
  • Análisis de medicamentos — Evaluación de interacciones y sensibilidades hereditarias
  • 100+ idiomas soportados — Localización completa de informes en más de 100 idiomas
  • Modo Sandbox — Pruebe la integración sin consumir créditos
  • 9 categorías de enfermedades — Cardiovascular, Metabólica, Cáncer, Neurológica, Respiratoria, Autoinmune, Genética, Salud mental, Riñón/Hígado
  • 14 relaciones familiares — Padre, madre, hermanos, abuelos, tíos, tías, hijos

Resumen de endpoints

EndpointMétodoDescripciónAuth
/api/v1/family-health/analyzePOSTGenerar informe completo de evaluación de riesgosRequerido (1 crédito)
/api/v1/family-health/validatePOSTValidar datos de solicitud (sin consumo de cuota)Requerido (Gratis)
/api/v1/family-health/supported-languagesGETListar 100+ idiomas soportadosNo requerido
/api/v1/family-health/condition-categoriesGETListar categorías de enfermedadesNo requerido
/api/v1/family-health/family-relationsGETListar tipos de relaciones familiaresNo requerido
/api/v1/family-health/sandbox/analyzePOSTPrueba sandbox con datos de ejemploRequerido (Gratis)
POST /api/v1/family-health/analyze Publicado 23.03.2026

Genere un informe completo de evaluación de riesgos de salud familiar impulsado por IA.

Parámetros de solicitud (JSON Body)

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API
passwordstringSíSu contraseña API
patient_dataobjectSíInformación del paciente
family_membersarraySí*Miembros de la familia (máx. 100). *Requerido si falta health_profile
health_profileobjectSí*Perfil de salud. *Requerido si faltan family_members
blood_test_dataarrayNoDatos de análisis de sangre
languagestringNoCódigo de idioma (defecto: en). 100+ idiomas

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "SU_USUARIO",
    "password": "SU_CONTRASEÑA",
    "patient_data": {"name": "María García", "age": 42, "gender": "female"},
    "family_members": [
      {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
      {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "es"
  }'

Ejemplo Python

import requests
url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"
payload = {
    "username": "SU_USUARIO", "password": "SU_CONTRASEÑA",
    "patient_data": {"name": "María García", "age": 42, "gender": "female"},
    "family_members": [
        {"relation": "father", "age": 70, "conditions": ["hypertension"]},
        {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "es"
}
response = requests.post(url, json=payload, timeout=120)
print(response.json())

Ejemplo de respuesta

{
  "status": "success",
  "data": {
    "report_data": {
      "report_title": "Informe de Evaluación de Riesgos de Salud Familiar",
      "hereditary_risk_analysis": {
        "high_risk": [{"condition": "Enfermedad cardiovascular", "risk_score": 75}],
        "moderate_risk": [{"condition": "Diabetes tipo 2", "risk_score": 60}]
      },
      "genetic_screening_recommendations": ["Prueba genética BRCA1/BRCA2"],
      "preventive_care_timeline": [{"age_range": "40-45", "screenings": ["Mamografía anual"]}]
    }
  },
  "timestamp": "2026-03-23T10:30:00Z",
  "api_version": "1.0.0"
}

Códigos de error Family Health API

CódigoHTTPDescripción
AUTH_1001401Credenciales de autenticación faltantes
AUTH_1002401Usuario o contraseña inválidos
QUOTA_1101403Cuota API insuficiente
VAL_2001400Campo obligatorio faltante
VAL_2003400Código de idioma no soportado
VAL_2007400Estructura de datos de paciente inválida
PROC_3001500Fallo en generación de informe
SRV_5001500Error interno del servidor

Endpoint Sandbox Family Health

Pruebe su integración sin consumir créditos.

APIEndpoint SandboxDescripción
Family Health/api/v1/family-health/sandbox/analyzeDatos de informe de ejemplo

Endpoints de referencia (Sin auth)

EndpointMétodoDescripción
/api/v1/family-health/supported-languagesGET100+ idiomas soportados
/api/v1/family-health/condition-categoriesGET9 categorías de enfermedades
/api/v1/family-health/family-relationsGET14 relaciones familiares

API de Mapa Corporal

Publicado: 18 de septiembre de 2026

La API Kantesti de Mapa Corporal convierte una analítica de laboratorio en anatomía. Cada resultado fuera de rango o limítrofe se sitúa en una de las 13 regiones del cuerpo, y la API devuelve tanto la leyenda — qué región, con qué gravedad, qué marcadores la sitúan ahí — como una URL con la ilustración correspondiente del cuerpo.

13
Regiones corporales
39
Idiomas de entrada
0
Llamadas al modelo por defecto

Determinista por defecto

Los nombres de los marcadores se comparan con tablas multilingües de sinónimos que cubren 39 idiomas de informe, incluidas escrituras no latinas: usted envía los nombres de los analitos exactamente como los imprimió su laboratorio, en el idioma en que los imprimió. No se llama a ningún modelo ni se genera ninguna ilustración salvo que lo pida, de modo que la solicitud por defecto no tiene coste de IA y devuelve siempre la misma respuesta para la misma analítica.

Características principales
  • 13 regiones anatómicas — Cerebro y nervios, tiroides, corazón y vasos, hígado, páncreas, glándulas suprarrenales, riñones, intestino, aparato reproductor, sangre, sistema inmunitario, huesos, músculos
  • Niveles de gravedad — Nivel 2 para resultados fuera de rango, nivel 1 para limítrofes, de modo que la leyenda se puede colorear sin lógica adicional
  • Atribución de marcadores — Cada región enumera los marcadores que la sitúan ahí, del peor al mejor
  • Salida independiente del idioma — Claves de región y sus propios nombres de marcadores; la ilustración no lleva texto, por lo que una sola imagen sirve para todos los idiomas
  • URLs de ilustración firmadas — Cada URL de ilustración lleva una firma HMAC, de modo que nadie puede enumerarlas ni falsificarlas
  • Estados vacíos honestos — Una analítica limpia devuelve el cuerpo compartido "todo correcto"; una analítica cuyos marcadores señalados no se pueden situar devuelve un error en lugar de un cuerpo verde engañoso
  • Modo determinista — Por defecto. Sin llamada al modelo, sin crédito de imagen, salida reproducible
  • Modo Sandbox — Pruebe la integración sin consumir créditos

Resumen de endpoints

EndpointMétodoDescripciónAuth
/api/v1/body-map/analyze POST Construir un mapa corporal a partir de una analítica de laboratorio Requerido (1 crédito)
/api/v1/body-map/validate POST Validar una carga útil y ver qué marcadores se reconocen (sin consumo de cuota) Requerido (Gratis)
/api/v1/body-map/sandbox POST Prueba sandbox con datos de ejemplo (sin consumo de cuota) Requerido (Gratis)
/api/v1/body-map/regions GET Listar las 13 regiones corporales y los niveles de gravedad No requerido
/api/v1/body-map/info GET Metadatos de capacidades, límites y detalles de autenticación No requerido
POST /api/v1/body-map/analyze Publicado 18.09.2026

Sitúa en el cuerpo cada resultado señalado de una analítica de laboratorio. Consume 1 crédito por solicitud correcta. Una solicitud que no supere la validación, o cuyos marcadores señalados no se puedan situar, no se cobra.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API
passwordstringSíSu contraseña API
parametersarraySíObjetos de resultados de laboratorio. Máx. 500. Cada uno necesita un nombre de analito y un campo evaluation.
interpretationarrayNoInterpretación clínica, usada solo como contexto cuando ai_assist está activado
ai_assistbooleanNoPermitir que el modelo sitúe los marcadores que las tablas de sinónimos no reconocen (predeterminado: false)
include_imagebooleanNoSolicitar la ilustración renderizada (predeterminado: false)
image_waitintegerNoSegundos de espera para una ilustración recién generada, 0-30 (predeterminado: 0)

Campos del objeto parameters

CampoTipoRequeridoDescripción
short_namestringSí*Nombre del analito tal como lo imprimió el laboratorio. *Se requiere al menos uno de short_name, long_name, name, parameter_name o parameter.
long_namestringNoNombre completo del analito; mejora la coincidencia de las abreviaturas
evaluationstringNoUno de high, low, bad, slightly_high, slightly_low, normal. Solo los valores señalados aparecen en el mapa.
resultstring|numberNoEl valor medido; se usa para ordenar qué regiones se dibujan
unitstringNoUnidad del resultado, con cualquier grafía
range_normal_minnumberNoLímite inferior del rango de referencia
range_normal_maxnumberNoLímite superior del rango de referencia
categorystringNoCategoría del laboratorio; se usa como alternativa cuando el nombre del analito es desconocido

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "SU_USUARIO",
    "password": "SU_CONTRASEÑA",
    "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"}
    ]
  }'

Ejemplo Python

import requests

def build_body_map(parameters, username, password, include_image=False):
    """
    Sitúa en el cuerpo los resultados del análisis de sangre fuera de rango.

    Args:
        parameters: Lista de objetos de resultados de laboratorio
        username: Nombre de usuario de la API
        password: Contraseña de la API
        include_image: Solicitar la ilustración renderizada (gasta crédito de imagen)

    Returns:
        dict: Bloque del mapa corporal con regiones, leyenda y URLs de ilustración
    """
    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()

# Ejemplo de uso
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="su_usuario",
        password="su_contrasena",
    )

    body_map = result["data"]["body_map"]
    if result["data"]["all_clear"]:
        print("Todo correcto — nada señalado.")
    for region in body_map["regions"]:
        severity = "fuera de rango" if region["level"] == 2 else "limítrofe"
        print(f"  {region['key']}: {severity} ({', '.join(region['markers'])})")
    print(f"Ilustración: {body_map['image_url'] or body_map['fallback_url']}")

Ejemplo de respuesta

{
  "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"
}

Referencia de campos de respuesta

CampoTipoDescripción
body_map.specstringIdentificador canónico de esta combinación de regiones y gravedades. Las analíticas idénticas comparten un spec y, por tanto, comparten una ilustración en caché.
body_map.regions[].keystringUna de las 13 claves de región
body_map.regions[].levelinteger2 = fuera de rango, 1 = limítrofe
body_map.regions[].drawnbooleanSi esta región se pinta en la ilustración. La leyenda siempre enumera todas las regiones; se dibujan seis como máximo.
body_map.regions[].markersarrayNombres de los marcadores que sitúan esta región en el mapa, del peor al mejor
body_map.unmappedintegerMarcadores señalados que no se pudieron situar en ninguna región
body_map.image_urlstring|nullIlustración en caché. null hasta que el archivo existe — use fallback_url como alternativa.
body_map.fallback_urlstringURL de generación firmada. Siempre presente. Responde 503 con Retry-After mientras la ilustración se está produciendo.
all_clearbooleantrue cuando no se señaló nada; se aplica el cuerpo compartido "todo correcto"
modestringdeterministic o ai_assisted
Cómo mostrar la leyenda

La respuesta es independiente del idioma por diseño: lleva claves de región y los nombres de marcadores de su propio laboratorio. Traduzca las 13 claves de región en su cliente y dé prioridad a la leyenda sobre la ilustración: si el modelo de imagen llegara a pintar el órgano equivocado, la leyenda que la acompaña sigue siendo correcta.

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

Comprueba una carga útil sin ejecutar el análisis e informa de cuáles de sus nombres de analitos reconoce el motor. Se requiere autenticación; no se consume cuota y el endpoint sigue funcionando en una cuenta sin créditos.

Ejemplo cURL

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

Ejemplo de respuesta

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

Endpoints de referencia

Ambos endpoints de referencia son gratuitos y no requieren autenticación.

GET /api/v1/body-map/regions

Enumera las 13 regiones corporales en orden canónico, junto con los niveles de gravedad. Úselo para construir sus propias traducciones de la leyenda.

Ejemplo cURL

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

Ejemplo de respuesta

{
  "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

Metadatos de capacidades: si el motor está habilitado en esta instalación, los límites de solicitud, el esquema de autenticación y la lista completa de endpoints.

Ejemplo cURL

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

Sandbox

POST /api/v1/body-map/sandbox devuelve una respuesta de ejemplo exactamente con la forma que produce /analyze, de modo que un cliente escrito contra el sandbox funciona sin cambios contra producción. Se requiere autenticación, por lo que la llamada también verifica sus credenciales, pero no se consume cuota ni se realiza ningún análisis.

Código de errorHTTPSignificado
AUTH_1001401Credenciales de autenticación faltantes
AUTH_1002401Usuario o contraseña inválidos
AUTH_1004400Credenciales mal formadas (tipo incorrecto o demasiado largas)
QUOTA_1101403Cuota API insuficiente
VAL_2001400Falta parameters
VAL_2002400Formato de datos inválido
VAL_2005400parameters está vacío
VAL_2006400Más de 500 parámetros
VAL_2008400Una fila de parámetros está mal formada o sin nombre
RES_4004422Existen resultados señalados pero ninguno se asigna a una región corporal
RES_4005503El motor de mapa corporal está deshabilitado en esta instalación

API de Edad Biológica de la Sangre

Publicado: 18 de septiembre de 2026

La API Kantesti de Edad Biológica de la Sangre responde a una pregunta que un rango de referencia no puede contestar: ¿qué edad aparenta esta sangre? Calcula la edad biológica a partir de una analítica rutinaria mediante el modelo PhenoAge de Levine publicado y, junto a ella, deriva hasta 18 índices clínicos — FIB-4, HOMA-IR, TyG, TFGe, AIP, NLR, anion gap y más — que un informe de laboratorio rara vez imprime.

9
Marcadores PhenoAge
18
Índices derivados
39
Idiomas de entrada

Un número incluso con una analítica parcial

PhenoAge necesita nueve marcadores y la mayoría de las analíticas incluyen menos. Cuando los nueve están presentes, la API devuelve la fórmula publicada sin modificar. Cuando no lo están, los datos que faltan se completan con medianas poblacionales y la respuesta se devuelve como source: "partial", de modo que siempre sabe cuál ha recibido. Ambas vías son deterministas: sin llamada al modelo, sin coste adicional, siempre la misma respuesta para la misma analítica.

Características principales
  • PhenoAge de Levine — El modelo publicado, calculado sin modificar cuando los nueve marcadores están presentes
  • Degradación elegante — Una analítica parcial sigue dando un número, claramente etiquetado como tal, con los marcadores que faltan enumerados
  • 18 índices clínicos — FIB-4, De Ritis, cociente A/G, HOMA-IR, TyG, eAG, TFGe, anion gap, BUN/creatinina, colesterol no-HDL, TG/HDL, AIP, CT/HDL, colesterol remanente, NLR, Mentzer, saturación de transferrina, calcio corregido
  • Conversión automática de unidades — Unidades SI y convencionales, con cualquier grafía, y comprobaciones de plausibilidad fisiológica que rechazan valores imposibles
  • Coincidencia multilingüe de marcadores — Nombres de analitos en 39 idiomas de informe, incluidas escrituras no latinas; nunca envía claves internas
  • Modo determinista — Por defecto. Sin llamada de red, sin coste de IA, salida reproducible
  • Capas de modelo opcionales — Identificación de filas, una estimación mejorada y una nota personal, cada una tras su propio indicador. Un PhenoAge completo de nueve marcadores nunca es anulado por el modelo.
  • 100 idiomas — Para la nota personal opcional
  • Modo Sandbox — Pruebe la integración sin consumir créditos

Resumen de endpoints

EndpointMétodoDescripciónAuth
/api/v1/blood-age/analyze POST Calcular la edad biológica de la sangre y los índices clínicos derivados Requerido (1 crédito)
/api/v1/blood-age/validate POST Validar una carga útil y ver qué marcadores aporta la analítica (sin consumo de cuota) Requerido (Gratis)
/api/v1/blood-age/sandbox POST Prueba sandbox con datos de ejemplo (sin consumo de cuota) Requerido (Gratis)
/api/v1/blood-age/biomarkers GET Listar los marcadores que lee el motor y sus unidades de destino No requerido
/api/v1/blood-age/info GET Metadatos de capacidades, límites y detalles de autenticación No requerido
POST /api/v1/blood-age/analyze Publicado 18.09.2026

Calcula la edad biológica de la sangre y los índices derivados a partir de una analítica de laboratorio. Consume 1 crédito por solicitud correcta. Una solicitud que no supere la validación, o cuya analítica no permita calcular nada, no se cobra.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API
passwordstringSíSu contraseña API
parametersarraySíObjetos de resultados de laboratorio. Máx. 500. Cada uno necesita un nombre de analito y un resultado.
metadataobjectNoCabecera del informe. Muy recomendable: PhenoAge incluye un término de edad cronológica. Lee patient_age, patient_sex, dob, lab_date.
patientobjectNo{"age": 42, "gender": "female"} — se usa cuando los metadatos no los incluyen
interpretationarrayNoInterpretación clínica, usada solo como contexto para el modelo
languagestringNoIdioma de la nota personal opcional (predeterminado: en). Ver idiomas soportados.
ai_assistbooleanNoPermitir que el modelo identifique nombres de analitos inusuales (predeterminado: false)
ai_estimatebooleanNoPermitir que el modelo mejore una edad parcial (predeterminado: false)
ai_notebooleanNoSolicitar una nota personal en language (predeterminado: false)

Los nueve marcadores PhenoAge

Envíelos con los nombres que haya impreso su laboratorio: la coincidencia se hace por nombre, en cualquiera de los 39 idiomas de informe soportados, y las unidades se convierten automáticamente.

MarcadorNombre habitualUnidad de destino
albuminAlbúminag/L
creatinineCreatininaµmol/L
glucoseGlucosa / Glucemia en ayunasmmol/L
crpProteína C reactivamg/L
lymphLinfocitos%
mcvVolumen corpuscular mediofL
rdwAmplitud de distribución eritrocitaria%
alpFosfatasa alcalinaU/L
wbcRecuento de leucocitos10⁹/L

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "SU_USUARIO",
    "password": "SU_CONTRASEÑA",
    "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}
    ]
  }'

Ejemplo Python

import requests

def biological_blood_age(parameters, metadata, username, password):
    """
    Calcula la edad biológica de la sangre a partir de una analítica rutinaria.

    Args:
        parameters: Lista de objetos de resultados de laboratorio
        metadata: Cabecera del informe con patient_age y patient_sex
        username: Nombre de usuario de la API
        password: Contraseña de la API

    Returns:
        dict: Bloque de edad de la sangre, índices derivados y un resumen plano
    """
    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()

# Ejemplo de uso
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="su_usuario",
        password="su_contrasena",
    )

    summary = result["data"]["summary"]
    if summary["status"] != "ok":
        print(f"No se calculó ninguna edad: {summary['status']}")
    else:
        print(f"Cronológica: {summary['chronological_age']}")
        print(f"Biológica:   {summary['biological_age']} ({summary['source']})")
        print(f"Diferencia:  {summary['delta_years']:+} años")

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

Ejemplo de respuesta

{
  "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"
}

Referencia de campos de respuesta

CampoTipoDescripción
summary.statusstringok, missing_age, missing_markers, needs_markers o unavailable
summary.sourcestringformula (los nueve marcadores), partial (medianas imputadas) o ai (estimación del modelo, solo con ai_estimate)
summary.chronological_ageinteger|nullEdad leída de los metadatos o del objeto patient
summary.biological_agenumber|nullLa edad de la sangre calculada, en años
summary.delta_yearsnumber|nullBiológica menos cronológica. Un valor negativo significa más joven que el calendario.
summary.markers_missingarrayCuáles de los nueve marcadores PhenoAge no aportó la analítica
blood_age.age.inputsobjectLos valores convertidos realmente utilizados, en las unidades de destino
blood_age.age.labelsobjectEl nombre propio de su laboratorio para cada marcador que el motor reconoció
blood_age.indices[].bandstringok, borderline, high, low o info
blood_age.indices[].fromarrayLas filas de laboratorio de las que se derivó este índice
modestringdeterministic o ai_assisted
Indique una edad cronológica

PhenoAge incluye un término de edad, así que sin una edad cronológica la respuesta vuelve con status: "missing_age" y sin número. Envíela en metadata.patient_age, o en patient.age, o como fecha de nacimiento en patient.dob. La fórmula se aplica entre los 18 y los 100 años.

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

Comprueba una carga útil sin ejecutar el análisis e informa de cuáles de los nueve marcadores PhenoAge aporta su analítica y de si se pudo leer una edad cronológica — las dos cosas que deciden si obtendrá la fórmula completa o la estimación parcial. Se requiere autenticación; no se consume cuota y el endpoint sigue funcionando en una cuenta sin créditos.

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "SU_USUARIO",
    "password": "SU_CONTRASEÑA",
    "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": "%"}
    ]
  }'

Ejemplo de respuesta

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

Endpoints de referencia

Ambos endpoints de referencia son gratuitos y no requieren autenticación.

GET /api/v1/blood-age/biomarkers

Enumera las nueve entradas de PhenoAge, todos los marcadores que el motor puede leer con su unidad de destino, y el rango de edad al que se aplica la fórmula.

Ejemplo cURL

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

Ejemplo de respuesta

{
  "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

Metadatos de capacidades: si el motor está habilitado en esta instalación, los dos modos y lo que cuesta cada uno, los límites de solicitud, el esquema de autenticación y los idiomas soportados.

Ejemplo cURL

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

Sandbox

POST /api/v1/blood-age/sandbox devuelve una respuesta de ejemplo exactamente con la forma que produce /analyze, de modo que un cliente escrito contra el sandbox funciona sin cambios contra producción. Se requiere autenticación, por lo que la llamada también verifica sus credenciales, pero no se consume cuota ni se realiza ningún análisis.

Código de errorHTTPSignificado
AUTH_1001401Credenciales de autenticación faltantes
AUTH_1002401Usuario o contraseña inválidos
AUTH_1004400Credenciales mal formadas (tipo incorrecto o demasiado largas)
QUOTA_1101403Cuota API insuficiente
VAL_2001400Falta parameters
VAL_2002400Formato de datos inválido
VAL_2003400Código de idioma no soportado
VAL_2005400parameters está vacío
VAL_2006400Más de 500 parámetros
VAL_2007400Objeto patient inválido
VAL_2008400Una fila de parámetros está mal formada o sin nombre
VAL_2009400Valor de patient.gender no soportado
RES_4004422No se puede calcular nada con estos parámetros
RES_4005503El motor de edad de la sangre está deshabilitado en esta instalación

API de Salud ADN: Interpretación de Test de ADN, Informe ADN + Sangre y Asesor de Suplementos

Publicado: 23 de septiembre de 2026

Nos enorgullece presentar la API Kantesti de Salud ADN: tres nuevos módulos de IA que convierten el test de ADN de un paciente en informes clínicos. La Interpretación de Test de ADN lee un archivo de genotipo en bruto o un informe genético y redacta un informe genético de salud completo. El Informe de Salud ADN + Sangre combina ese informe con un análisis de sangre interpretado y muestra dónde los genes y los valores de laboratorio se confirman o se contradicen. El Asesor de Suplementos transforma el ADN, el análisis de sangre y un breve cuestionario en un plan de suplementos personalizado basado en los productos propios de su clínica.

334
Marcadores de ADN seleccionados
20
Categorías de salud
100+
Idiomas de informe

Contrastado con su propio archivo

Un archivo de genotipo en bruto se procesa en el servidor y se compara con un panel seleccionado de 334 marcadores en 20 categorías, desde los genes de metilación, cardiovasculares y lipídicos hasta la farmacogenómica, el metabolismo de los nutrientes, el estado de portador y la longevidad. Cada hallazgo que redacta la IA se contrasta con el archivo cargado: un rsID que el archivo no contiene se descarta y cada genotipo se fija al valor que figura en el archivo, de modo que el informe no puede inventarse un resultado.

Características principales
  • Todas las fuentes de ADN habituales — Archivos en bruto de 23andMe, AncestryDNA, MyHeritage, FTDNA y LivingDNA, archivos VCF, también dentro de .zip o .gz; líneas de rsID pegadas; o un informe genético de hasta 6 archivos PDF, JPG o PNG
  • Informe genético completo — Hallazgos por área de salud, riesgos de enfermedad, estado de portador, farmacogenómica (fenotipos metabolizadores previstos y grupos de fármacos afectados), nutrigenómica, rasgos, pruebas de seguimiento recomendadas y señales de alarma
  • Genes y valores de laboratorio, frente a frente — El informe ADN + Sangre clasifica cada relación entre un hallazgo genético y un resultado de laboratorio como confirms, contradicts, neutral o watch, con una matriz de riesgos, acciones prioritarias y un plan de seguimiento
  • Planes de suplementos con reglas de seguridad — Dosis, forma, momento de la toma, duración, interacciones y fechas para repetir los análisis; las dosis se mantienen dentro de los niveles máximos de ingesta tolerable, se aplican límites seguros durante el embarazo y todo lo que requiera la decisión de un prescriptor se incluye en clinician_review_required
  • Su propio catálogo de productos — El asesor recomienda los productos que tiene su clínica, los marca como clinic_library y, en el modo «solo productos de la clínica», enumera las necesidades que su catálogo no cubre
  • Encadenables y sin estado — Envíe el informe del módulo 1 directamente a los módulos 2 y 3. No se almacena nada asociado a un paciente, y los archivos de genotipo en bruto se eliminan tras procesarlos
  • 100+ idiomas de informe — El informe se redacta en el idioma que usted solicite
  • Modo asíncrono — Añada ?async=1 y consulte /api/jobs/<job_id>, de modo que un análisis largo nunca provoque un tiempo de espera agotado en la pasarela
  • Modo Sandbox — Pruebe la integración sin consumir créditos
Cómo trabajan juntos los tres módulos

1. POST /api/v1/dna-interpretation/analyze con el archivo de ADN devuelve data.report. 2. Envíe ese informe junto con un análisis de sangre interpretado a /api/v1/dna-blood-report/analyze. 3. Envíe el mismo informe, las respuestas del cuestionario y, opcionalmente, el análisis de sangre a /api/v1/dna-supplements/analyze. Los módulos 2 y 3 aceptan el informe de ADN tal como se devolvió: el objeto report, el objeto data completo o la respuesta íntegra.

Resumen de endpoints

EndpointMétodoDescripciónAuth
/api/v1/dna-interpretation/analyzePOSTArchivo de ADN, líneas de rsID pegadas o páginas de un informe → informe genético de salud completoRequerido (1 crédito)
/api/v1/dna-interpretation/validatePOSTProcesar el archivo cargado y mostrar lo encontrado, sin llamada a la IARequerido (Gratis)
/api/v1/dna-interpretation/sandboxPOSTInforme genético de ejemploRequerido (Gratis)
/api/v1/dna-interpretation/infoGETEntradas aceptadas, límites e idiomas de informeNo requerido
/api/v1/dna-blood-report/analyzePOSTInforme de ADN + análisis de sangre interpretado → informe de salud combinadoRequerido (1 crédito)
/api/v1/dna-blood-report/validatePOSTComprobar la carga útil sin llamada a la IARequerido (Gratis)
/api/v1/dna-blood-report/sandboxPOSTInforme combinado de ejemploRequerido (Gratis)
/api/v1/dna-blood-report/infoGETCampos de la solicitud y límitesNo requerido
/api/v1/dna-supplements/analyzePOSTInforme de ADN + análisis de sangre (opcional) + cuestionario → plan de suplementosRequerido (1 crédito)
/api/v1/dna-supplements/validatePOSTComprobar la carga útil y las respuestas sin llamada a la IARequerido (Gratis)
/api/v1/dna-supplements/sandboxPOSTPlan de suplementos de ejemploRequerido (Gratis)
/api/v1/dna-supplements/questionnaireGETLas 25 preguntas y sus respuestas permitidasNo requerido
/api/v1/dna-supplements/settingsGET PUTConsultar o actualizar el catálogo de productos de su clínica y la configuración del asesorRequerido (Gratis)
/api/v1/dna-supplements/infoGETCampos de la solicitud y límitesNo requerido
POST /api/v1/dna-interpretation/analyze Publicado 23.09.2026

Interpreta un test de ADN y devuelve un informe genético de salud completo. Envíe un archivo como multipart/form-data o líneas de genotipo pegadas como JSON. El archivo se procesa mientras usted espera, de modo que un archivo ilegible se responde de inmediato con 400 y no tiene ningún coste. El crédito se cobra solo una vez generado el informe.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API (o utilice la autenticación HTTP Basic)
passwordstringSíSu contraseña API
filefileSí*Un archivo de genotipo en bruto (.txt, .csv, .tsv, .vcf, .zip, .gz, hasta 80 MB) o hasta 6 archivos de informe (PDF de hasta 20 MB, JPG/PNG de hasta 10 MB cada uno). *Envíe file o genotype_text.
genotype_textstringSí*Líneas de genotipo pegadas (rsID, cromosoma, posición, genotipo), hasta 2.000.000 caracteres
languagestringNoCódigo del idioma del informe, p. ej. en, de, ar (predeterminado: en). Ver idiomas soportados.
patientobjectNoage, sex, diagnoses, comorbidities, medications, treatments, notes. En una solicitud multipart, envíelo como cadena JSON.
source_labelstringNoSu propio nombre para la fuente, hasta 120 caracteres

Ejemplo cURL

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

# 202 Accepted: {"status": "pending", "job_id": "...", "poll_url": "/api/jobs/...", ...}
curl -u "SU_USUARIO:SU_CONTRASEÑA" "https://app.aibloodtestinterpret.com/api/jobs/JOB_ID"

Ejemplo Python

import time
import requests

BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("SU_USUARIO", "SU_CONTRASEÑA")


def run(path, poll=True, **kwargs):
    """POST en modo asíncrono y, después, consulta /api/jobs/<id> hasta que el informe esté listo."""
    resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
    body = resp.json()
    if resp.status_code != 202:
        return body                      # un error o una respuesta síncrona
    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) Interpretación del test de ADN
with open("genome_raw_data.txt", "rb") as fh:
    dna = run("/api/v1/dna-interpretation/analyze",
              files={"file": fh},
              data={"language": "en", "patient": '{"age": 41, "sex": "female"}'})
report = dna["data"]["report"]
print(report["executive_summary"])
for section in report["sections"]:
    print(section["title"], "-", section["risk_level"])

Ejemplo de respuesta

{
  "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"
}

Referencia de campos de respuesta

CampoTipoDescripción
sourceobjectLo que se ha leído: kind (raw, text o document), el formato y el ensamblaje del genoma detectados, el número de registros y de genotipos determinados, cuántos de los 334 marcadores del panel se han encontrado y los avisos del procesamiento del archivo
report.overall_assessment.levelstringtypical, slightly_elevated, elevated o high
report.sections[]arrayUna entrada por área de salud, con un risk_level y sus 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 metabolizador previsto para cada gen y los grupos de fármacos a los que puede afectar. El informe nunca indica dosis de prescripción.
report.carrier_status[]arraycarrier, not_detected, affected_pattern o inconclusive, siempre pendiente de confirmación mediante pruebas genéticas clínicas
report.disease_risks[], nutrigenomics[], traits[]arrayRiesgos de enfermedad, hallazgos relativos a nutrientes y rasgos, con los genes implicados
report.recommended_tests[], red_flags[]arrayPruebas de seguimiento con su motivo, y hallazgos que requieren atención inmediata
POST /api/v1/dna-interpretation/validate Publicado 23.09.2026

Procesa el archivo cargado exactamente igual que /analyze e informa de lo encontrado, sin llamada a la IA. Se requiere autenticación; no se consume ningún crédito. Úselo para comprobar un archivo antes de gastar un crédito.

Ejemplo de respuesta

{
  "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 Publicado 23.09.2026

Combina un informe de ADN con un análisis de sangre interpretado en un único informe de salud. Cada relación entre un hallazgo genético y un valor de laboratorio se clasifica, y a continuación se presentan una matriz de riesgos, acciones prioritarias y un plan de seguimiento. Un crédito por solicitud correcta.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
dna_reportobjectSíEl informe de /api/v1/dna-interpretation/analyze: data.report, el objeto data completo o la respuesta íntegra
blood_testobject|arraySíUn análisis de sangre interpretado tal como lo devuelve la API de Análisis de Sangre (metadata, parameters, interpretation), o simplemente una lista de hasta 500 parámetros con un nombre y un result
languagestringNoCódigo del idioma del informe (predeterminado: en)
patientobjectNoLos mismos campos que en la Interpretación de Test de ADN

Ejemplo Python

# 2) Informe de salud ADN + sangre (usa run() y dna del ejemplo anterior)
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"])

Ejemplo de respuesta

{
  "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."
    }
  }
}

Referencia de campos de respuesta

CampoTipoDescripción
report.overall_status.levelstringgood, watch, attention o urgent
report.correlations[].concordancestringconfirms, contradicts, neutral o watch
report.risk_matrix[]arrayPor área: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) y una evaluación combinada
report.priority_actions[]arraypriority (high, medium, low), la acción y su motivo
report.monitoring_plan[]arrayQué marcador repetir, cuándo y por qué
POST /api/v1/dna-supplements/analyze Publicado 23.09.2026

Elabora un plan de suplementos personalizado a partir del informe de ADN, las respuestas del cuestionario y, opcionalmente, un análisis de sangre interpretado. El catálogo de productos de su clínica y la configuración del asesor se aplican automáticamente. Un crédito por solicitud correcta.

Parámetros de solicitud

ParámetroTipoRequeridoDescripción
dna_reportobjectSíEl informe de /api/v1/dna-interpretation/analyze
answersobjectSíRespuestas del cuestionario. diet_type y pregnancy son obligatorias; consulte GET /api/v1/dna-supplements/questionnaire para ver las 25 preguntas. Las claves y los valores desconocidos se descartan.
blood_testobject|arrayNoEl mismo formato que en el Informe ADN + Sangre
use_clinic_cataloguebooleanNoAplicar el catálogo de productos y la configuración de su clínica (predeterminado: true)
languagestringNoCódigo del idioma del informe (predeterminado: en)
patientobjectNoLos mismos campos que en la Interpretación de Test de ADN. Se comprueban las interacciones de los medicamentos indicados aquí.

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/analyze?async=1" \
  -u "SU_USUARIO:SU_CONTRASEÑA" \
  -H "Content-Type: application/json" \
  -d '{
    "dna_report": { ...data.report de la interpretación de ADN... },
    "answers": {"diet_type": "vegetarian", "pregnancy": "no", "sun_exposure": "low", "goals": ["energy", "immunity"]},
    "language": "en"
  }'

Ejemplo Python

# 3) Plan de suplementos (usa run(), dna y blood_test de los ejemplos anteriores)
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"])

Ejemplo de respuesta

{
  "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."
    }
  }
}

Referencia de campos de respuesta

CampoTipoDescripción
catalogueobjectEl modo de catálogo aplicado (prefer, only, off) y cuántos productos de la clínica había disponibles
report.recommendations[]arrayname, form, dose, timing, duration, priority, la justificación genética / de laboratorio / del cuestionario en rationale, evidence, cautions, interactions y retest
report.recommendations[].sourcestringclinic_library para un producto de su catálogo (indicado en product); en caso contrario, evidence_based
report.uncovered_needs[]arrayEn el modo «solo productos de la clínica»: necesidades que su catálogo no cubre
report.clinician_review_required[]arrayTodo lo que requiere la decisión de un prescriptor: interacciones, embarazo, enfermedad renal o hepática, anticoagulantes, dosis cercanas al nivel máximo de ingesta tolerable
report.avoid_or_caution[], dietary_sources[], retest_plan[]arrayQué evitar, fuentes alimentarias de cada nutriente y cuándo repetir los análisis
GET PUT /api/v1/dna-supplements/settings Publicado 23.09.2026

Consulta o actualiza el catálogo de productos de su clínica y la configuración del asesor. Es el mismo catálogo que se usa en el panel de la clínica y en IA Nutricional, de modo que un producto añadido en un lugar está disponible en todos. Se requiere autenticación; no se consume ningún crédito. Envíe catalogue, settings o ambos; el catálogo sustituye a la lista completa.

CampoTipoDescripción
catalogue[]arrayHasta 200 productos: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (productos de la clínica cuando se ajustan y, en caso contrario, sugerencias basadas en la evidencia), only (solo productos de la clínica) u off (ignorar el catálogo)
settings.instructionsstringSus propias instrucciones para la IA, hasta 1500 caracteres. Las reglas de seguridad siempre tienen prioridad.
settings.max_itemsintegerNúmero máximo de recomendaciones por plan, de 3 a 12

Ejemplo cURL

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

Endpoints de referencia

GET /api/v1/dna-supplements/questionnaire enumera las 25 preguntas (dieta, comidas, fruta y verdura, pescado, carne roja, lácteos, alcohol, tabaco, cafeína, exposición solar, ejercicio, sueño, estrés, digestión, energía, suplementos actuales, medicamentos, alergias, enfermedades, embarazo, objetivos, presupuesto, forma preferida y notas) con sus tipos y valores permitidos. Los tres endpoints /info devuelven las entradas aceptadas, los límites, el coste en créditos y la lista completa de idiomas de informe. Ninguno de ellos requiere autenticación.

Sandbox y modo asíncrono

POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox y /api/v1/dna-supplements/sandbox devuelven un informe de ejemplo exactamente con la forma que produce /analyze. Se requiere autenticación; no se consume ningún crédito.

Un informe de IA suele tardar entre uno y tres minutos. Añada ?async=1 (o la cabecera X-Async: 1) y la solicitud responde de inmediato con 202 y un job_id. Consulte GET /api/jobs/<job_id> con las mismas credenciales hasta que status sea completed o failed. La respuesta final se encuentra en result.response y es idéntica a la síncrona.

Código de errorHTTPSignificado
AUTH_1001401Credenciales de autenticación faltantes
AUTH_1002401Usuario o contraseña inválidos
QUOTA_1101403Cuota API insuficiente
VAL_2001400Falta un campo obligatorio: file o genotype_text, dna_report, blood_test o una respuesta obligatoria
VAL_2002400Datos de genotipo ilegibles, tipo de archivo no admitido, JSON no válido o dna_report no válido
VAL_2003400Idioma de informe no soportado
VAL_2006400Tamaño excesivo: texto pegado, parámetros de sangre (500) o catálogo (200 productos)
VAL_2007400Objeto patient inválido
VAL_2008400Ningún parámetro de análisis de sangre utilizable (nombre y resultado)
PROC_3003500No se pudo generar o validar la respuesta de la IA; vuelva a intentarlo. No se cobra ningún crédito.
RES_4005503Los módulos de ADN están deshabilitados en esta instalación
Apoyo a la decisión clínica

La API de Salud ADN genera información mediante IA destinada al médico responsable del tratamiento. No constituye un diagnóstico ni una prescripción. Los chips de genotipado de consumo no equivalen a una secuenciación clínica: confirme los hallazgos accionables y de estado de portador con pruebas genéticas clínicas validadas antes de actuar en consecuencia.

ICR - Reconocimiento Inteligente de Caracteres API

Lanzado: 14 de febrero de 2026

La API Kantesti ICR (Reconocimiento Inteligente de Caracteres) es una tecnología avanzada de extracción de texto de documentos que va mucho más allá del OCR tradicional. Impulsada por el motor de IA propietario de Kantesti, ICR proporciona salida JSON estructurada de cualquier tipo de documento.

79%
Más rápido que OCR
99,7%
Tasa de precisión
100+
Idiomas

Kantesti ICR vs OCR Tradicional

En pruebas de rendimiento, Kantesti ICR demostró un rendimiento 79% superior en comparación con soluciones OCR tradicionales. ICR entiende la estructura del documento, preserva diseños de tablas, extrae metadatos y devuelve JSON estructurado limpio.

Características Principales de ICR
  • Salida JSON Estructurada — Tablas, secciones, metadatos y texto sin procesar en formato JSON limpio
  • Detección de Tipo de Documento — Identifica automáticamente informes médicos, facturas, formularios, cartas, etc.
  • Extracción de Tablas — Preserva encabezados y datos de filas con estructura completa
  • Soporte Multi-formato — Procesamiento de documentos PDF, JPG, JPEG, PNG
  • Integración Análisis de Sangre (Kan) — Endpoint especializado para extracción de documentos de análisis de sangre
  • Modo Sandbox — Pruebe la integración sin consumir créditos
  • Sistema de Créditos — 0,5 créditos por llamada API

Resumen de Endpoints ICR

EndpointMétodoDescripciónCosto
/api/icr/v1/extractPOSTExtracción de texto ICR0,5 crédito
/api/icr/v1/sandboxPOSTPrueba sandbox ICRGratis
/api/icr/v1/kanPOSTAnálisis de documentos de sangre0,5 crédito
/api/icr/v1/kan/sandboxPOSTPrueba sandbox análisis de sangreGratis
/api/icr/infoGETDocumentación y características de la APIGratis
/api/icr/healthGETEndpoint de verificación de saludGratis
/api/icr/v1/quotaPOSTVerificar créditos ICR restantesGratis
POST /api/icr/v1/extract Lanzado 14.02.2026

Extrae todo el contenido textual de los documentos cargados utilizando la tecnología ICR de Kantesti.

Parámetros de Solicitud

ParámetroTipoRequeridoDescripción
usernamestringSíSu nombre de usuario API
passwordstringSíSu contraseña API
filefileSíArchivo de documento (PDF, JPG, JPEG, PNG)
languagestringNoIdioma de salida (predeterminado: en)

Ejemplo cURL

curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/extract" \
  -F "username=SU_USUARIO" \
  -F "password=SU_CONTRASEÑA" \
  -F "language=es" \
  -F "[email protected]"

Ejemplo Python

import requests

def icr_extract(file_path: str, username: str, password: str, language: str = "es"):
    """
    Extraer texto de un documento con la API ICR Kantesti.
    79% más rápido y preciso que OCR tradicional.
    """
    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()

# Ejemplo de uso
result = icr_extract("informe_medico.pdf", "usuario", "contraseña", "es")
print(f"Tipo de documento: {result['data']['document_type']}")
print(f"Páginas: {result['data']['page_count']}")

Ejemplo de Respuesta

{
  "status": "success",
  "data": {
    "document_type": "blood_test_report",
    "page_count": 1,
    "pages": [{"page_number": 1, "content": {"raw_text": "Hospital Universitario de Colonia - Hemograma...", "sections": [{"type": "header", "content": "Hemograma"}], "tables": [{"headers": ["Prueba", "Resultado", "Unidad", "Rango de Referencia"], "rows": [["Glucosa", "92", "mg/dL", "74 - 100"], ["ALT", "22", "U/L", "< 35"]]}]}}],
    "metadata": {"detected_language": "es", "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"
}

Endpoints Sandbox ICR

Prueba tu integración ICR sin consumir créditos. Los endpoints sandbox devuelven datos de ejemplo realistas.

APIEndpoint SandboxDescripción
Extracción ICR/api/icr/v1/sandboxDevuelve datos de ejemplo de extracción ICR
ICR Kan/api/icr/v1/kan/sandboxDevuelve datos de ejemplo de parámetros de análisis de sangre

Rendimiento ICR vs OCR

Resultados de Benchmark — Kantesti ICR vs OCR Tradicional
MétricaKantesti ICROCR TradicionalMejora
Velocidad de Procesamiento1,2s promedio5,7s promedio79% más rápido
Precisión del Texto99,7%92,1%+7,6%
Detección de Tablas98,9%71,2%+27,7%
Salida EstructuradaJSON con secciones, tablas, metadatosTexto sin procesarEstructura completa
Soporte Multilingüe100+ idiomas30-50 idiomas2x+ cobertura