Endpoints de la API de análisis de sangre
Referencia completa para todos los endpoints de la API de Análisis de Sangre Kantesti con ejemplos de código en múltiples lenguajes.
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.
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.
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.
| API | Endpoint | Estado |
|---|---|---|
| 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
| Fecha | Versión | Cambios |
|---|---|---|
| 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ón | Endpoint | Estado |
|---|---|---|
| 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 |
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.
Si no se proporciona ningún parámetro language, la API devuelve respuestas en inglés (en).
Principales Idiomas Mundiales
| Código | Idioma | Nombre Nativo |
|---|---|---|
en | Inglés | English |
zh | Chino | 中文 |
es | Español | Español |
ar | Árabe | العربية |
hi | Hindi | हिन्दी |
pt | Portugués | Português |
ru | Ruso | Русский |
ja | Japonés | 日本語 |
fr | Francés | Français |
de | Alemán | Deutsch |
ko | Coreano | 한국어 |
tr | Turco | Türkçe |
Idiomas Europeos
| Código | Idioma | Nombre Nativo |
|---|---|---|
it | Italiano | Italiano |
nl | Holandés | Nederlands |
pl | Polaco | Polski |
el | Griego | Ελληνικά |
sv | Sueco | Svenska |
no | Noruego | Norsk |
da | Danés | Dansk |
fi | Finlandés | Suomi |
cs | Checo | Čeština |
uk | Ucraniano | Українська |
ro | Rumano | Română |
hu | Húngaro | Magyar |
bg | Búlgaro | Български |
hr | Croata | Hrvatski |
sk | Eslovaco | Slovenčina |
sl | Esloveno | Slovenščina |
sr | Serbio | Српски |
lt | Lituano | Lietuvių |
lv | Leton | Latviešu |
et | Estonio | Eesti |
ca | Catalán | Català |
eu | Vasco | Euskara |
gl | Gallego | Galego |
cy | Galés | Cymraeg |
ga | Irlandés | Gaeilge |
is | Islandés | Íslenska |
mt | Maltés | Malti |
sq | Albanés | Shqip |
mk | Macedonio | Македонски |
bs | Bosnio | Bosanski |
lb | Luxemburgués | Lëtzebuergesch |
be | Bielorruso | Беларуская |
Idiomas de Oriente Medio y Asia Central
| Código | Idioma | Nombre Nativo |
|---|---|---|
he | Hebreo | עברית |
fa | Persa | فارسی |
az | Azerbaiyano | Azərbaycan |
ka | Georgiano | ქართული |
hy | Armenio | Հayerdelays |
kk | Kazajo | Қазақша |
uz | Uzbeko | Oʻzbek |
tg | Tayiko | Тоҷикӣ |
ky | Kirguiso | Кыргызча |
tk | Turkmeno | Türkmen |
mn | Mongol | Монгол |
ps | Pastun | پښتو |
ku | Kurdo | Kurdî |
Idiomas del Sur de Asia
| Código | Idioma | Nombre Nativo |
|---|---|---|
bn | Bengali | বাংলা |
ta | Tamil | தமிழ் |
te | Telugu | తెలుగు |
mr | Marathi | मराठी |
gu | Gujarati | ગુજરાતી |
kn | Kannada | ಕನ್ನಡ |
ml | Malayalam | മലയാളം |
pa | Punjabi | ਪੰਜਾਬੀ |
ur | Urdu | اردو |
ne | Nepali | नेपाली |
si | Cingalés | සිංහල |
sd | Sindhi | سنڌي |
as | Asames | অসমীয়া |
or | Odia | ଓଡ଼ିଆ |
Idiomas del Sudeste Asiático
| Código | Idioma | Nombre Nativo |
|---|---|---|
id | Indonesio | Bahasa Indonesia |
th | Tailandés | ไทย |
vi | Vietnamita | Tiếng Việt |
ms | Malayo | Bahasa Melayu |
my | Birmano | မြန်မာ |
km | Jemer | ភាសាខ្មែរ |
lo | Laosiano | ລາວ |
fil | Filipino | Filipino |
tl | Tagalo | Tagalog |
jv | Javanés | Basa Jawa |
su | Sundanés | Basa Sunda |
Idiomas Africanos
| Código | Idioma | Nombre Nativo |
|---|---|---|
af | Afrikaans | Afrikaans |
sw | Suajili | Kiswahili |
am | Amharico | አማርኛ |
ha | Hausa | Hausa |
yo | Yoruba | Yorùbá |
ig | Igbo | Igbo |
zu | Zulu | isiZulu |
xh | Xhosa | isiXhosa |
so | Somali | Soomaali |
mg | Malgache | Malagasy |
Otros Idiomas
| Código | Idioma | Nombre Nativo |
|---|---|---|
la | Latin | Latina |
eo | Esperanto | Esperanto |
yi | Yidis | ייִדיש |
ht | Criollo Haitiano | Kreyòl Ayisyen |
mi | Maori | Te Reo Māori |
sm | Samoano | Gagana Samoa |
to | Tongano | Lea Faka-Tonga |
haw | Hawaiano | ʻŌlelo Hawaiʻi |
API 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.
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API |
password | string | Sí | Su contraseña API |
file | file | Sí | Imagen del análisis de sangre (PNG, JPG, WEBP) o PDF. Máx. 20MB. Repita el campo para enviar varias imágenes. |
language | string | No | Código del idioma de respuesta (predeterminado: en). Ver idiomas soportados. |
pdf_password | string | No | Contraseñ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"
}
Endpoint de producción para análisis de sangre. Consume 1 crédito por solicitud.
Parámetros de Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Si | Tu usuario de la API |
password | string | Si | Tu contraseña de la API |
file | file | Si | Imagen del análisis de sangre (PNG, JPG, WEBP) o archivo PDF. Max 20MB. |
language | string | No | Có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
| Campo | Tipo | Descripción |
|---|---|---|
status | string | "success" o "error" |
data | object | Contiene todos los resultados del análisis |
timestamp | string | Marca de tiempo ISO 8601 de la respuesta |
api_version | string | Versión de la API utilizada |
Objeto data.metadata
| Campo | Tipo | Descripción |
|---|---|---|
lab_date | string | Fecha de extracción de sangre (AAAA-MM-DD) |
results_date | string | Fecha de emisión de resultados (AAAA-MM-DD) |
lab_name | string | Nombre del laboratorio |
lab_city | string | Ciudad del laboratorio |
lab_country | string | País del laboratorio |
patient_name | string | Nombre completo del paciente (solo metadatos, no se envía a la interpretación) |
patient_age | string | Edad del paciente |
patient_sex | string | "male", "female" o "other" |
Elemento del array data.parameters
| Campo | Tipo | Descripción |
|---|---|---|
category | string | Categoría del parámetro (ej: "Hemograma", "Perfil lipídico") |
long_name | string | Nombre completo del parámetro |
short_name | string | Nombre abreviado del parámetro |
result | string | Valor medido |
unit | string | Unidad de medida |
range_min | string | Rango de referencia mínimo |
range_max | string | Rango de referencia máximo |
evaluation | string | Estado del resultado. Ver valores de evaluación |
Elemento del array data.interpretation
| Campo | Tipo | Descripción |
|---|---|---|
title | string | Título de la sección (ej: "Evaluación general de salud") |
content | string | Interpretació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"
}
El campo evaluation utiliza valores estandarizados. Ver valores de evaluación.
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"}
]
}
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.
- 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
| API | Endpoint 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 |
Elija la API correcta para su caso de uso:
| Característica | Comparación IA de Análisis de Sangre | Análisis de Tendencias |
|---|---|---|
| Enfoque Principal | Comparación narrativa IA | Análisis estadístico de tendencias |
| Procesamiento IA | Narrativa IA completa | IA mejorada + estadísticas |
| Tipo de Salida | Resúmenes narrativos | Gráficos, estadísticas, patrones |
| Ideal Para | Qué cambió entre pruebas | Seguimiento de parámetros a largo plazo |
| Min Pruebas | 2 | 2 |
| Max Pruebas | 20 | 50 |
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.
Analiza las tendencias de los parámetros del análisis de sangre durante múltiples fechas de prueba para identificar patrones y proporcionar información sobre la salud.
Parámetros de Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Si | Tu usuario de la API |
password | string | Si | Tu contraseña de la API |
language | string | No | Idioma de respuesta (predeterminado: en). Ver idiomas soportados. |
blood_tests | array | Si | Array de objetos de análisis de sangre (min: 2, max: 50) |
analysis_type | string | No | Tipo de análisis. Ver valores. |
analysis_options | object | No | Opciones de configuración de análisis |
Objeto analysis_options
| Campo | Tipo | Predeterminado | Descripción |
|---|---|---|---|
include_predictions | boolean | true | Incluir predicciones de tendencias IA |
include_statistics | boolean | true | Incluir análisis estadístico |
include_charts | boolean | true | Incluir datos de configuración de gráficos |
- Mínimo: 2 análisis de sangre requeridos
- Máximo: 50 análisis por solicitud
- Cada prueba debe tener
lab_dateOresults_date - Use nombres de parámetros consistentes para seguimiento preciso
Estructura del Array blood_tests
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
lab_date | string | Si* | Fecha de prueba en formato YYYY-MM-DD |
results_date | string | Si* | Alternativa a lab_date (YYYY-MM-DD) |
parameters | array | Si | Array de parámetros del análisis de sangre |
metadata | object | No | Metadatos adicionales (lab_name, notas, etc.) |
*Se requiere lab_date o results_date para cada análisis de sangre.
Estructura blood_tests[].parameters
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
short_name | string | Si* | Nombre abreviado del parámetro (ej: "HGB", "GLU") |
name | string | Si* | Nombre completo del parámetro (alternativa a short_name) |
result | number | Si* | Valor numérico del resultado |
value | number | Si* | Valor numérico (alternativa a result) |
unit | string | Si | Unidad de medida (ej: "g/dL", "mg/dL") |
reference_range | string | No | Rango de referencia del laboratorio |
status | string | No | Estado del resultado (normal, high, low) |
*Se requiere short_name o name para identificación. Se requiere result o value para el valor numérico.
Ejemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "TU_USUARIO",
"password": "TU_CONTRASEÑA",
"language": "es",
"analysis_type": "comprehensive",
"blood_tests": [
{
"lab_date": "2024-01-15",
"parameters": [
{"short_name": "GLU", "result": 110, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 6.2, "unit": "%"},
{"short_name": "CHOL", "result": 240, "unit": "mg/dL"},
{"short_name": "LDL", "result": 155, "unit": "mg/dL"},
{"short_name": "HDL", "result": 45, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-10",
"parameters": [
{"short_name": "GLU", "result": 105, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.9, "unit": "%"},
{"short_name": "CHOL", "result": 220, "unit": "mg/dL"},
{"short_name": "LDL", "result": 140, "unit": "mg/dL"},
{"short_name": "HDL", "result": 48, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-08-22",
"parameters": [
{"short_name": "GLU", "result": 98, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.6, "unit": "%"},
{"short_name": "CHOL", "result": 200, "unit": "mg/dL"},
{"short_name": "LDL", "result": 120, "unit": "mg/dL"},
{"short_name": "HDL", "result": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"short_name": "GLU", "result": 92, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.4, "unit": "%"},
{"short_name": "CHOL", "result": 185, "unit": "mg/dL"},
{"short_name": "LDL", "result": 105, "unit": "mg/dL"},
{"short_name": "HDL", "result": 58, "unit": "mg/dL"}
]
}
]
}'
Ejemplo Python
import requests
from typing import List, Dict
def analizar_tendencias(
usuario: str,
contrasena: str,
analisis_sangre: List[Dict],
idioma: str = "es",
tipo_analisis: str = "comprehensive"
) -> Dict:
"""
Analiza tendencias de analisis de sangre a lo largo del tiempo.
Args:
usuario: Usuario de la API
contrasena: Contrasena de la API
analisis_sangre: Lista de objetos de analisis con lab_date y parametros
idioma: Codigo de idioma de respuesta
tipo_analisis: comprehensive, quick o focused
Returns:
dict: Resultados del analisis de tendencias
"""
url = "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze"
payload = {
"username": usuario,
"password": contrasena,
"language": idioma,
"analysis_type": tipo_analisis,
"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__":
analisis_sangre = [
{
"lab_date": "2025-01-15",
"parameters": [
{"short_name": "HGB", "result": 12.5, "unit": "g/dL"},
{"short_name": "CHOL", "result": 220, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-06-15",
"parameters": [
{"short_name": "HGB", "result": 13.2, "unit": "g/dL"},
{"short_name": "CHOL", "result": 195, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-12-01",
"parameters": [
{"short_name": "HGB", "result": 14.1, "unit": "g/dL"},
{"short_name": "CHOL", "result": 180, "unit": "mg/dL"}
]
}
]
resultado = analizar_tendencias(
usuario="tu_usuario",
contrasena="tu_contrasena",
analisis_sangre=analisis_sangre
)
print(f"Tendencia general: {resultado['data']['overall_health_trend']}")
for tendencia in resultado['data']['parameter_trends']:
print(f"{tendencia['parameter']}: {tendencia['statistical_analysis']['trend_direction']}")
Referencia de Campos de Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
analysis_id | string | Identificador único para este análisis (formato: TRD-XXXXXXXX) |
analysis_period | object | Detalles del período de tiempo: start_date, end_date, span_months, total_tests |
categories | array | Lista de categorías de parámetros encontradas (ej: "Perfil Lipídico", "Hemograma Completo") |
chart_config | object | Datos listos para graficar: dates, raw_dates, simple_dates para visualización |
overall_health_trend | object | Resumen, array de riesgos de salud y recomendaciones |
parameter_trends | array | Análisis detallado por parámetro con estadísticas |
risk_factors | array | Factores de riesgo de salud identificados |
Estructura del Objeto parameter_trends
| Campo | Tipo | Descripción |
|---|---|---|
parameter | string | Nombre estandarizado del parámetro |
short_name | string | Nombre abreviado del parámetro |
category | string | Categoría del parámetro (ej: "Perfil Lipídico") |
unit | string | Unidad de medida |
trend_data | array | Array de objetos {date, value} para graficar |
statistical_analysis | object | average, min, max, standard_deviation, trend_direction, trend_strength |
analysis | object | Interpretación IA: description, significant_variations, trend |
interpretation | string | Descripción legible del parámetro |
Ejemplo de Respuesta
{
"api_version": "1.0.0",
"status": "success",
"message": "Analisis de tendencias completado exitosamente",
"timestamp": "2025-12-22T01:12:49.262700Z",
"data": {
"analysis_id": "TRD-49B4C616",
"analysis_period": {
"start_date": "2024-01-15",
"end_date": "2024-12-18",
"span_months": 11,
"total_tests": 4
},
"categories": [
"Panel Metabolico",
"Vitaminas",
"Marcadores de Diabetes",
"Estudios de Hierro",
"Perfil Lipidico",
"Hemograma Completo"
],
"chart_config": {
"dates": ["Ene 2024", "May 2024", "Sep 2024", "Dic 2024"],
"raw_dates": ["2024-01-15", "2024-05-20", "2024-09-10", "2024-12-18"]
},
"language": "es",
"overall_health_trend": {
"summary": "En general, los parametros del analisis de sangre muestran tendencias positivas con mejoras en hemoglobina, perfil lipidico incluyendo colesterol LDL y HDL, estado de vitamina D y reservas de hierro.",
"health_risks": [],
"recommendations": []
},
"parameter_trends": [
{
"parameter": "Hemoglobina (Hb)",
"short_name": "Hemoglobina",
"category": "Hemograma Completo",
"unit": "g/dL",
"original_names": ["Hemoglobina", "HGB"],
"trend_data": [
{"date": "2024-01-15", "value": 12.8},
{"date": "2024-05-20", "value": 13.5},
{"date": "2024-09-10", "value": 14.2},
{"date": "2024-12-18", "value": 14.8}
],
"statistical_analysis": {
"average": 13.82,
"min": 12.8,
"max": 14.8,
"standard_deviation": 0.87,
"trend_direction": "upward",
"trend_strength": "moderate"
},
"analysis": {
"description": "La hemoglobina mide la proteina transportadora de oxigeno en los globulos rojos.",
"significant_variations": "Inicialmente baja en 12.8 g/dL, luego aumento gradualmente a 14.8 g/dL.",
"trend": "increasing",
"unit": "g/dL"
},
"interpretation": "La hemoglobina mide la proteina transportadora de oxigeno en los globulos rojos."
},
{
"parameter": "Colesterol de Lipoproteinas de Baja Densidad (LDL-C)",
"short_name": "LDL",
"category": "Perfil Lipidico",
"unit": "mg/dL",
"trend_data": [
{"date": "2024-01-15", "value": 110.0},
{"date": "2024-05-20", "value": 102.0},
{"date": "2024-09-10", "value": 92.0},
{"date": "2024-12-18", "value": 85.0}
],
"statistical_analysis": {
"average": 97.25,
"min": 85.0,
"max": 110.0,
"standard_deviation": 11.0,
"trend_direction": "downward",
"trend_strength": "strong"
},
"analysis": {
"description": "El LDL-C es el colesterol 'malo' asociado con mayor riesgo de enfermedad cardiaca.",
"significant_variations": "El LDL-C paso de alto (110 mg/dL) a normal (85 mg/dL).",
"trend": "decreasing"
}
}
],
"risk_factors": [],
"sandbox_mode": false
}
}
Los campos de respuesta usan valores estandarizados: trend_direction (ver valores), trend_strength (ver valores).
IA Nutricional con Suplementos
Genera planes nutricionales personalizados, recomendaciones de dieta y sugerencias de suplementos basados en el análisis de sangre.
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"
}
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.
Analiza de 2 a 20 análisis de sangre y proporciona una comparación detallada con información narrativa generada por IA.
- Mínimo 2 análisis de sangre requeridos
- Máximo 20 análisis de sangre por solicitud
- Cada prueba debe incluir
lab_dateoresults_date - Al menos un parámetro comun entre pruebas
Parámetros de Solicitud
| Parámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
username | string | Si | - | Tu usuario de la API |
password | string | Si | - | Tu contraseña de la API |
language | string | No | en | Idioma de respuesta. Ver idiomas soportados |
blood_tests | array | Si | - | Array de objetos de análisis de sangre (2-20 pruebas) |
Estructura del Array blood_tests
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
lab_date | string | Si* | Fecha de prueba en formato YYYY-MM-DD |
results_date | string | Si* | Alternativa a lab_date (YYYY-MM-DD) |
parameters | array | Si | Array de parámetros del análisis de sangre |
metadata | object | No | Metadatos 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
| Campo | Tipo | Descripción |
|---|---|---|
comparison_id | string | Identificador único para esta comparación (formato: CMP-XXXXXXXX) |
comparison_summary | object | Resumen general: hallazgos clave, tendencia general, fechas de informes, intervalo de tiempo |
parameter_analysis | array | Análisis detallado por parámetro con tipo de cambio y significancia clínica |
health_assessment | object | Áreas de preocupación, mejora, desarrollos positivos, factores de riesgo |
recommendations | object | Pruebas de seguimiento, acciones inmediatas, modificaciones de estilo de vida, derivaciones a especialistas |
detailed_interpretation | object | Secciones narrativas de IA con resumen ejecutivo y recomendaciones clínicas |
Estructura del Objeto parameter_analysis
| Campo | Tipo | Descripción |
|---|---|---|
parameter_name | string | Nombre del parámetro |
report1_value | string | Valor del primer informe con unidad |
report2_value | string | Valor del segundo informe con unidad |
change_type | string | increased, decreased o stable |
change_magnitude | string | significant, moderate o minor |
clinical_significance | string | Explicación IA de lo que significa el cambio |
trend_assessment | string | positive, 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
}
}
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.
| Valor | Predeterminado | Descripción |
|---|---|---|
comprehensive | ✓ | Análisis completo con estadísticas, gráficos e interpretación IA |
statistical | Solo análisis estadístico | |
summary | Solo resumen de alto nivel |
health_goals API Nutrición
Objetivos de salud para recomendaciones nutricionales personalizadas. Se pueden proporcionar múltiples valores como array.
| Valor | Descripción |
|---|---|
maintain | Mantener salud actual (predeterminado) |
improve_energy | Enfoque en niveles de energía |
weight_management | Gestión saludable del peso |
heart_health | Salud cardiovascular |
immune_support | Soporte al sistema inmunológico |
digestive_health | Bienestar digestivo |
bone_health | Salud ósea |
mental_clarity | Funció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.
| Valor | Descripción |
|---|---|
low_sodium | Ingesta reducida de sodio |
low_sugar | Ingesta reducida de azúcar |
low_fat | Ingesta reducida de grasas |
gluten_free | Sin gluten |
dairy_free | Sin lácteos |
nut_free | Sin frutos secos |
soy_free | Sin soja |
egg_free | Sin huevos |
halal | Conforme halal |
kosher | Conforme kosher |
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.
| Valor | Descripción |
|---|---|
omnivore | Sin restricciones (predeterminado) |
vegetarian | Sin carne |
vegan | Sin productos animales |
pescatarian | Vegetariano + pescado |
keto | Dieta cetogénica |
paleo | Dieta paleolítica |
mediterranean | Dieta mediterránea |
activity_level API Nutrición
Nivel de actividad física para cálculos calóricos y nutricionales.
| Valor | Descripción |
|---|---|
sedentary | Poco o ningún ejercicio |
light | Ejercicio ligero 1-3 días/semana |
moderate | Ejercicio moderado 3-5 días/semana (predeterminado) |
active | Ejercicio intenso 6-7 días/semana |
very_active | Ejercicio muy intenso o trabajo físico |
budget API Nutrición
Nivel de presupuesto para recomendaciones de alimentos y suplementos.
| Valor | Descripción |
|---|---|
low | Opciones económicas |
moderate | Opciones equilibradas (predeterminado) |
high | Opciones premium |
gender Todas las APIs
Sexo del paciente para rangos de referencia y recomendaciones personalizadas.
| Valor | Descripción |
|---|---|
male | Paciente masculino |
female | Paciente femenino |
other | Otro 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.
| Valor | Descripción |
|---|---|
normal | Dentro del rango de referencia normal |
low | Por debajo del rango normal |
high | Por encima del rango normal |
critical_low | Críticamente bajo (atención inmediata requerida) |
critical_high | Críticamente alto (atención inmediata requerida) |
borderline_low | Ligeramente por debajo del rango normal |
borderline_high | Ligeramente por encima del rango normal |
trend_assessment APIs Comparación & Tendencias
Evaluación general de las tendencias de los parámetros entre pruebas.
| Valor | Descripción |
|---|---|
positive | Mejorado (hacia el rango normal) |
negative | Empeorado (alejándose del rango normal) |
stable | Relativamente sin cambios entre pruebas |
improving | Tendencia general de mejora |
worsening | Tendencia 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.
| Valor | Descripción |
|---|---|
upward | Valores aumentando a lo largo del tiempo |
downward | Valores disminuyendo a lo largo del tiempo |
stable | Cambio mínimo a lo largo del tiempo |
trend_strength API Análisis de tendencias
Magnitud de la tendencia observada.
| Valor | Descripción |
|---|---|
strong | >15% de cambio entre períodos |
moderate | 5-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.
| Valor | Descripción |
|---|---|
excellent | Todos los marcadores en el rango óptimo |
good | La mayoría de los marcadores en el rango normal |
fair | Algunos marcadores necesitan atención |
poor | Múltiples marcadores necesitan atención |
Endpoints Utilitarios
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
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.
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.
- 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
| Endpoint | Método | Descripción | Auth |
|---|---|---|---|
/api/v1/family-health/analyze | POST | Generar informe completo de evaluación de riesgos | Requerido (1 crédito) |
/api/v1/family-health/validate | POST | Validar datos de solicitud (sin consumo de cuota) | Requerido (Gratis) |
/api/v1/family-health/supported-languages | GET | Listar 100+ idiomas soportados | No requerido |
/api/v1/family-health/condition-categories | GET | Listar categorías de enfermedades | No requerido |
/api/v1/family-health/family-relations | GET | Listar tipos de relaciones familiares | No requerido |
/api/v1/family-health/sandbox/analyze | POST | Prueba sandbox con datos de ejemplo | Requerido (Gratis) |
Genere un informe completo de evaluación de riesgos de salud familiar impulsado por IA.
Parámetros de solicitud (JSON Body)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API |
password | string | Sí | Su contraseña API |
patient_data | object | Sí | Información del paciente |
family_members | array | Sí* | Miembros de la familia (máx. 100). *Requerido si falta health_profile |
health_profile | object | Sí* | Perfil de salud. *Requerido si faltan family_members |
blood_test_data | array | No | Datos de análisis de sangre |
language | string | No | Có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ódigo | HTTP | Descripción |
|---|---|---|
AUTH_1001 | 401 | Credenciales de autenticación faltantes |
AUTH_1002 | 401 | Usuario o contraseña inválidos |
QUOTA_1101 | 403 | Cuota API insuficiente |
VAL_2001 | 400 | Campo obligatorio faltante |
VAL_2003 | 400 | Código de idioma no soportado |
VAL_2007 | 400 | Estructura de datos de paciente inválida |
PROC_3001 | 500 | Fallo en generación de informe |
SRV_5001 | 500 | Error interno del servidor |
Endpoint Sandbox Family Health
Pruebe su integración sin consumir créditos.
| API | Endpoint Sandbox | Descripción |
|---|---|---|
| Family Health | /api/v1/family-health/sandbox/analyze | Datos de informe de ejemplo |
Endpoints de referencia (Sin auth)
| Endpoint | Método | Descripción |
|---|---|---|
/api/v1/family-health/supported-languages | GET | 100+ idiomas soportados |
/api/v1/family-health/condition-categories | GET | 9 categorías de enfermedades |
/api/v1/family-health/family-relations | GET | 14 relaciones familiares |
API de Mapa Corporal
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.
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.
- 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
| Endpoint | Método | Descripción | Auth |
|---|---|---|---|
/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 |
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API |
password | string | Sí | Su contraseña API |
parameters | array | Sí | Objetos de resultados de laboratorio. Máx. 500. Cada uno necesita un nombre de analito y un campo evaluation. |
interpretation | array | No | Interpretación clínica, usada solo como contexto cuando ai_assist está activado |
ai_assist | boolean | No | Permitir que el modelo sitúe los marcadores que las tablas de sinónimos no reconocen (predeterminado: false) |
include_image | boolean | No | Solicitar la ilustración renderizada (predeterminado: false) |
image_wait | integer | No | Segundos de espera para una ilustración recién generada, 0-30 (predeterminado: 0) |
Campos del objeto parameters
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
short_name | string | Sí* | 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_name | string | No | Nombre completo del analito; mejora la coincidencia de las abreviaturas |
evaluation | string | No | Uno de high, low, bad, slightly_high, slightly_low, normal. Solo los valores señalados aparecen en el mapa. |
result | string|number | No | El valor medido; se usa para ordenar qué regiones se dibujan |
unit | string | No | Unidad del resultado, con cualquier grafía |
range_normal_min | number | No | Límite inferior del rango de referencia |
range_normal_max | number | No | Límite superior del rango de referencia |
category | string | No | Categorí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
| Campo | Tipo | Descripción |
|---|---|---|
body_map.spec | string | Identificador 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[].key | string | Una de las 13 claves de región |
body_map.regions[].level | integer | 2 = fuera de rango, 1 = limítrofe |
body_map.regions[].drawn | boolean | Si 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[].markers | array | Nombres de los marcadores que sitúan esta región en el mapa, del peor al mejor |
body_map.unmapped | integer | Marcadores señalados que no se pudieron situar en ninguna región |
body_map.image_url | string|null | Ilustración en caché. null hasta que el archivo existe — use fallback_url como alternativa. |
body_map.fallback_url | string | URL de generación firmada. Siempre presente. Responde 503 con Retry-After mientras la ilustración se está produciendo. |
all_clear | boolean | true cuando no se señaló nada; se aplica el cuerpo compartido "todo correcto" |
mode | string | deterministic o ai_assisted |
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.
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.
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
}
}
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 error | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciales de autenticación faltantes |
AUTH_1002 | 401 | Usuario o contraseña inválidos |
AUTH_1004 | 400 | Credenciales mal formadas (tipo incorrecto o demasiado largas) |
QUOTA_1101 | 403 | Cuota API insuficiente |
VAL_2001 | 400 | Falta parameters |
VAL_2002 | 400 | Formato de datos inválido |
VAL_2005 | 400 | parameters está vacío |
VAL_2006 | 400 | Más de 500 parámetros |
VAL_2008 | 400 | Una fila de parámetros está mal formada o sin nombre |
RES_4004 | 422 | Existen resultados señalados pero ninguno se asigna a una región corporal |
RES_4005 | 503 | El motor de mapa corporal está deshabilitado en esta instalación |
API de Edad Biológica de la Sangre
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.
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.
- 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
| Endpoint | Método | Descripción | Auth |
|---|---|---|---|
/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 |
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API |
password | string | Sí | Su contraseña API |
parameters | array | Sí | Objetos de resultados de laboratorio. Máx. 500. Cada uno necesita un nombre de analito y un resultado. |
metadata | object | No | Cabecera del informe. Muy recomendable: PhenoAge incluye un término de edad cronológica. Lee patient_age, patient_sex, dob, lab_date. |
patient | object | No | {"age": 42, "gender": "female"} — se usa cuando los metadatos no los incluyen |
interpretation | array | No | Interpretación clínica, usada solo como contexto para el modelo |
language | string | No | Idioma de la nota personal opcional (predeterminado: en). Ver idiomas soportados. |
ai_assist | boolean | No | Permitir que el modelo identifique nombres de analitos inusuales (predeterminado: false) |
ai_estimate | boolean | No | Permitir que el modelo mejore una edad parcial (predeterminado: false) |
ai_note | boolean | No | Solicitar 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.
| Marcador | Nombre habitual | Unidad de destino |
|---|---|---|
albumin | Albúmina | g/L |
creatinine | Creatinina | µmol/L |
glucose | Glucosa / Glucemia en ayunas | mmol/L |
crp | Proteína C reactiva | mg/L |
lymph | Linfocitos | % |
mcv | Volumen corpuscular medio | fL |
rdw | Amplitud de distribución eritrocitaria | % |
alp | Fosfatasa alcalina | U/L |
wbc | Recuento de leucocitos | 10⁹/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
| Campo | Tipo | Descripción |
|---|---|---|
summary.status | string | ok, missing_age, missing_markers, needs_markers o unavailable |
summary.source | string | formula (los nueve marcadores), partial (medianas imputadas) o ai (estimación del modelo, solo con ai_estimate) |
summary.chronological_age | integer|null | Edad leída de los metadatos o del objeto patient |
summary.biological_age | number|null | La edad de la sangre calculada, en años |
summary.delta_years | number|null | Biológica menos cronológica. Un valor negativo significa más joven que el calendario. |
summary.markers_missing | array | Cuáles de los nueve marcadores PhenoAge no aportó la analítica |
blood_age.age.inputs | object | Los valores convertidos realmente utilizados, en las unidades de destino |
blood_age.age.labels | object | El nombre propio de su laboratorio para cada marcador que el motor reconoció |
blood_age.indices[].band | string | ok, borderline, high, low o info |
blood_age.indices[].from | array | Las filas de laboratorio de las que se derivó este índice |
mode | string | deterministic o ai_assisted |
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.
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.
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."
}
}
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 error | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciales de autenticación faltantes |
AUTH_1002 | 401 | Usuario o contraseña inválidos |
AUTH_1004 | 400 | Credenciales mal formadas (tipo incorrecto o demasiado largas) |
QUOTA_1101 | 403 | Cuota API insuficiente |
VAL_2001 | 400 | Falta parameters |
VAL_2002 | 400 | Formato de datos inválido |
VAL_2003 | 400 | Código de idioma no soportado |
VAL_2005 | 400 | parameters está vacío |
VAL_2006 | 400 | Más de 500 parámetros |
VAL_2007 | 400 | Objeto patient inválido |
VAL_2008 | 400 | Una fila de parámetros está mal formada o sin nombre |
VAL_2009 | 400 | Valor de patient.gender no soportado |
RES_4004 | 422 | No se puede calcular nada con estos parámetros |
RES_4005 | 503 | El 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
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.
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.
- Todas las fuentes de ADN habituales — Archivos en bruto de 23andMe, AncestryDNA, MyHeritage, FTDNA y LivingDNA, archivos VCF, también dentro de
.zipo.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,neutralowatch, 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_libraryy, 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=1y 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
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
| Endpoint | Método | Descripción | Auth |
|---|---|---|---|
/api/v1/dna-interpretation/analyze | POST | Archivo de ADN, líneas de rsID pegadas o páginas de un informe → informe genético de salud completo | Requerido (1 crédito) |
/api/v1/dna-interpretation/validate | POST | Procesar el archivo cargado y mostrar lo encontrado, sin llamada a la IA | Requerido (Gratis) |
/api/v1/dna-interpretation/sandbox | POST | Informe genético de ejemplo | Requerido (Gratis) |
/api/v1/dna-interpretation/info | GET | Entradas aceptadas, límites e idiomas de informe | No requerido |
/api/v1/dna-blood-report/analyze | POST | Informe de ADN + análisis de sangre interpretado → informe de salud combinado | Requerido (1 crédito) |
/api/v1/dna-blood-report/validate | POST | Comprobar la carga útil sin llamada a la IA | Requerido (Gratis) |
/api/v1/dna-blood-report/sandbox | POST | Informe combinado de ejemplo | Requerido (Gratis) |
/api/v1/dna-blood-report/info | GET | Campos de la solicitud y límites | No requerido |
/api/v1/dna-supplements/analyze | POST | Informe de ADN + análisis de sangre (opcional) + cuestionario → plan de suplementos | Requerido (1 crédito) |
/api/v1/dna-supplements/validate | POST | Comprobar la carga útil y las respuestas sin llamada a la IA | Requerido (Gratis) |
/api/v1/dna-supplements/sandbox | POST | Plan de suplementos de ejemplo | Requerido (Gratis) |
/api/v1/dna-supplements/questionnaire | GET | Las 25 preguntas y sus respuestas permitidas | No requerido |
/api/v1/dna-supplements/settings | GET PUT | Consultar o actualizar el catálogo de productos de su clínica y la configuración del asesor | Requerido (Gratis) |
/api/v1/dna-supplements/info | GET | Campos de la solicitud y límites | No requerido |
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API (o utilice la autenticación HTTP Basic) |
password | string | Sí | Su contraseña API |
file | file | Sí* | 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_text | string | Sí* | Líneas de genotipo pegadas (rsID, cromosoma, posición, genotipo), hasta 2.000.000 caracteres |
language | string | No | Código del idioma del informe, p. ej. en, de, ar (predeterminado: en). Ver idiomas soportados. |
patient | object | No | age, sex, diagnoses, comorbidities, medications, treatments, notes. En una solicitud multipart, envíelo como cadena JSON. |
source_label | string | No | Su 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
| Campo | Tipo | Descripción |
|---|---|---|
source | object | Lo 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.level | string | typical, slightly_elevated, elevated o high |
report.sections[] | array | Una entrada por área de salud, con un risk_level y sus findings |
report.sections[].findings[] | array | gene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation |
report.pharmacogenomics[] | array | Fenotipo 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[] | array | carrier, not_detected, affected_pattern o inconclusive, siempre pendiente de confirmación mediante pruebas genéticas clínicas |
report.disease_risks[], nutrigenomics[], traits[] | array | Riesgos de enfermedad, hallazgos relativos a nutrientes y rasgos, con los genes implicados |
report.recommended_tests[], red_flags[] | array | Pruebas de seguimiento con su motivo, y hallazgos que requieren atención inmediata |
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": []}
}
}
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
dna_report | object | Sí | El informe de /api/v1/dna-interpretation/analyze: data.report, el objeto data completo o la respuesta íntegra |
blood_test | object|array | Sí | 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 |
language | string | No | Código del idioma del informe (predeterminado: en) |
patient | object | No | Los 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
| Campo | Tipo | Descripción |
|---|---|---|
report.overall_status.level | string | good, watch, attention o urgent |
report.correlations[].concordance | string | confirms, contradicts, neutral o watch |
report.risk_matrix[] | array | Por área: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) y una evaluación combinada |
report.priority_actions[] | array | priority (high, medium, low), la acción y su motivo |
report.monitoring_plan[] | array | Qué marcador repetir, cuándo y por qué |
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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
dna_report | object | Sí | El informe de /api/v1/dna-interpretation/analyze |
answers | object | Sí | 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_test | object|array | No | El mismo formato que en el Informe ADN + Sangre |
use_clinic_catalogue | boolean | No | Aplicar el catálogo de productos y la configuración de su clínica (predeterminado: true) |
language | string | No | Código del idioma del informe (predeterminado: en) |
patient | object | No | Los 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
| Campo | Tipo | Descripción |
|---|---|---|
catalogue | object | El modo de catálogo aplicado (prefer, only, off) y cuántos productos de la clínica había disponibles |
report.recommendations[] | array | name, form, dose, timing, duration, priority, la justificación genética / de laboratorio / del cuestionario en rationale, evidence, cautions, interactions y retest |
report.recommendations[].source | string | clinic_library para un producto de su catálogo (indicado en product); en caso contrario, evidence_based |
report.uncovered_needs[] | array | En el modo «solo productos de la clínica»: necesidades que su catálogo no cubre |
report.clinician_review_required[] | array | Todo 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[] | array | Qué evitar, fuentes alimentarias de cada nutriente y cuándo repetir los análisis |
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.
| Campo | Tipo | Descripción |
|---|---|---|
catalogue[] | array | Hasta 200 productos: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description |
settings.mode | string | prefer (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.instructions | string | Sus propias instrucciones para la IA, hasta 1500 caracteres. Las reglas de seguridad siempre tienen prioridad. |
settings.max_items | integer | Nú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 error | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciales de autenticación faltantes |
AUTH_1002 | 401 | Usuario o contraseña inválidos |
QUOTA_1101 | 403 | Cuota API insuficiente |
VAL_2001 | 400 | Falta un campo obligatorio: file o genotype_text, dna_report, blood_test o una respuesta obligatoria |
VAL_2002 | 400 | Datos de genotipo ilegibles, tipo de archivo no admitido, JSON no válido o dna_report no válido |
VAL_2003 | 400 | Idioma de informe no soportado |
VAL_2006 | 400 | Tamaño excesivo: texto pegado, parámetros de sangre (500) o catálogo (200 productos) |
VAL_2007 | 400 | Objeto patient inválido |
VAL_2008 | 400 | Ningún parámetro de análisis de sangre utilizable (nombre y resultado) |
PROC_3003 | 500 | No se pudo generar o validar la respuesta de la IA; vuelva a intentarlo. No se cobra ningún crédito. |
RES_4005 | 503 | Los módulos de ADN están deshabilitados en esta instalación |
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
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.
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.
- 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
| Endpoint | Método | Descripción | Costo |
|---|---|---|---|
/api/icr/v1/extract | POST | Extracción de texto ICR | 0,5 crédito |
/api/icr/v1/sandbox | POST | Prueba sandbox ICR | Gratis |
/api/icr/v1/kan | POST | Análisis de documentos de sangre | 0,5 crédito |
/api/icr/v1/kan/sandbox | POST | Prueba sandbox análisis de sangre | Gratis |
/api/icr/info | GET | Documentación y características de la API | Gratis |
/api/icr/health | GET | Endpoint de verificación de salud | Gratis |
/api/icr/v1/quota | POST | Verificar créditos ICR restantes | Gratis |
Extrae todo el contenido textual de los documentos cargados utilizando la tecnología ICR de Kantesti.
Parámetros de Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Su nombre de usuario API |
password | string | Sí | Su contraseña API |
file | file | Sí | Archivo de documento (PDF, JPG, JPEG, PNG) |
language | string | No | Idioma 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.
| API | Endpoint Sandbox | Descripción |
|---|---|---|
| Extracción ICR | /api/icr/v1/sandbox | Devuelve datos de ejemplo de extracción ICR |
| ICR Kan | /api/icr/v1/kan/sandbox | Devuelve datos de ejemplo de parámetros de análisis de sangre |
Rendimiento ICR vs OCR
| Métrica | Kantesti ICR | OCR Tradicional | Mejora |
|---|---|---|---|
| Velocidad de Procesamiento | 1,2s promedio | 5,7s promedio | 79% más rápido |
| Precisión del Texto | 99,7% | 92,1% | +7,6% |
| Detección de Tablas | 98,9% | 71,2% | +27,7% |
| Salida Estructurada | JSON con secciones, tablas, metadatos | Texto sin procesar | Estructura completa |
| Soporte Multilingüe | 100+ idiomas | 30-50 idiomas | 2x+ cobertura |