Endpoints da API de análises de sangue
Referência completa para todos os endpoints da API de Exames de Sangue Kantesti com exemplos de código em múltiplas linguagens.
Temos o orgulho de anunciar três módulos de DNA para a API Kantesti. A Interpretação de Testes de DNA transforma dados brutos de DNA ou um relatório genético em um relatório abrangente de saúde genética, o Relatório de Saúde DNA + Sangue combina-o com um exame de sangue e o Consultor de Suplementos elabora um plano de suplementação personalizado com os produtos da sua própria clínica. Leia a referência da API DNA Health.
https://app.aibloodtestinterpret.com
Changelog
Acompanhe versões da API, atualizações e informações de migração. Use os endpoints recomendados para novas integrações.
As três atualizações de 2026 foram aplicadas a todas as versões da API listadas abaixo. Os números de versão e os caminhos dos endpoints não foram alterados, pelo que não é necessária qualquer migração.
- 8 de setembro de 2026 Atualização do modelo de IA e melhorias em toda a plataforma
- 21 de julho de 2026 Melhorias abrangentes e correções de erros
- 8 de maio de 2026 Melhorias abrangentes e correções de erros
Endpoints Estáveis Atuais
Estes endpoints são recomendados para uso em produção e novas integrações.
| API | Endpoint | Status |
|---|---|---|
| Análise de Sangue v12 | /api/v12/18-09-2026/analyze |
Recomendado Novo 18.09.2026 |
| Análise de Sangue (Pontuação de Saúde) v12 | /api/v12/health-score/analyze |
Recomendado Novo 18.09.2026 |
| Mapa Corporal v1 | /api/v1/body-map/analyze |
Publicado 18.09.2026 Novo |
| Idade Biológica do Sangue v1 | /api/v1/blood-age/analyze |
Publicado 18.09.2026 Novo |
| Interpretação de Testes de DNA v1 | /api/v1/dna-interpretation/analyze |
Publicado 23.09.2026 Novo |
| Relatório de Saúde DNA + Sangue v1 | /api/v1/dna-blood-report/analyze |
Publicado 23.09.2026 Novo |
| Consultor de Suplementos por DNA v1 | /api/v1/dna-supplements/analyze |
Publicado 23.09.2026 Novo |
| Análise de Sangue v11 | /api/v11/01-06-2025/analyze |
Estável Atualizado 08.09.2026 |
| Análise de Sangue (Pontuação de Saúde) v11 | /api/v11/health-score/analyze |
Estável Atualizado 08.09.2026 |
| IA Nutrição v1 | /api/v1/nutrition/diet-plan/analyze |
Estável Atualizado 08.09.2026 |
| Comparação IA de Exames de Sangue v1 | /api/v1/bloodtest/comparison/analyze |
Estável Atualizado 08.09.2026 |
| Avaliação de Riscos de Saúde Familiar v1 | /api/v1/family-health/analyze |
Publicado 23.03.2026 Atualizado 08.09.2026 |
| ICR - Reconhecimento Inteligente de Caracteres v1 | /api/icr/v1/extract |
Lançado 14.02.2026 Atualizado 08.09.2026 |
| ICR Kan - Extração de Análise de Sangue v1 | /api/icr/v1/kan |
Lançado 14.02.2026 Atualizado 08.09.2026 |
| Análise de Tendências v1 | /api/v1/analytics/trends/analyze |
Estável Atualizado 08.09.2026 |
Histórico de Versões
| Data | Versão | Alterações |
|---|---|---|
| 23 de setembro de 2026 | Interpretação de Testes de DNA v1, Relatório de Saúde DNA + Sangue v1, Consultor de Suplementos por DNA v1 | API DNA Health lançada — interpretação de testes de DNA a partir de dados brutos de DNA (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) ou de arquivos de relatórios genéticos com base em 334 marcadores selecionados, um relatório de saúde combinado DNA + sangue e um consultor de suplementos com o catálogo de produtos da própria clínica; modo assíncrono e sandbox |
| Setembro de 2026 | Análise de Sangue v12 | Análise de Sangue v12 lançada — upload de vários arquivos, relatórios em 100 idiomas, pontuação de saúde e análise de risco de doenças opcionais, modo sandbox |
| Setembro de 2026 | Mapa Corporal v1, Idade Biológica do Sangue v1 | API de Mapa Corporal e API de Idade Biológica do Sangue lançadas — mapeamento por órgão dos resultados fora do intervalo em 13 regiões anatômicas, e idade biológica PhenoAge com até 18 índices clínicos derivados; ambas oferecem um modo determinístico e um sandbox |
| Setembro de 2026 | Todas as versões | Atualização do modelo de IA, fixado na versão mais recente do modelo; melhorias abrangentes e correções de erros em todas as versões da API; números de versão inalterados; 98,89% de precisão em exames de faculdades de medicina (benchmark de código aberto mais recente) |
| Julho de 2026 | Todas as versões | Melhorias abrangentes e correções de erros aplicadas a todas as versões da API; números de versão inalterados |
| Maio de 2026 | Todas as versões | Melhorias abrangentes e correções de erros aplicadas a todas as versões da API; números de versão inalterados |
| Março 2026 | Family Health v1 | API de Avaliação de Riscos de Saúde Familiar publicada — Análise de riscos hereditários por IA, suporte a 100+ idiomas, análise de árvore genealógica, cronograma de cuidados preventivos, recomendações de triagem genética, modo sandbox |
| Fevereiro 2026 | ICR v1 | API ICR (Reconhecimento Inteligente de Caracteres) lançada — 79% mais rápida que OCR, saída JSON estruturada, detecção de tipo de documento, extração de tabelas, integração Kan para análise de sangue |
| Dezembro 2025 | Mais Recente | Tratamento de erros aprimorado, precisão de 98,7%, suporte a 100 idiomas |
| Junho 2025 | v11 | Análise de sangue v11, endpoint de pontuação de saúde, suporte multi-arquivo |
| Abril 2025 | v9 | Modelo api_parameters_v9, extração de parâmetros aprimorada |
| Março 2025 | v8 | Suporte a upload multi-arquivo, processamento em lote |
Endpoints Legados
Estes endpoints são mantidos para compatibilidade retroativa, mas não são recomendados para novas integrações.
| Versão | Endpoint | Status |
|---|---|---|
| v10 | /api/v10/health-score/analyze |
Legado |
| v9 | /api/v9/14-04-2025/analyze |
Legado |
| v8 | /api/v8/31-03-2025/analyze |
Legado |
| v6 | /api/v6-1/21-11-2024/analyze |
Legado |
| v3 | /api/v3/10-10-2024/analyze |
Legado |
Endpoints legados são mantidos para compatibilidade retroativa, mas não são recomendados para novas integrações. Por favor, migre para os endpoints estáveis atuais para melhor desempenho e suporte.
Referência de Idiomas Suportados
A API Kantesti suporta 100 idiomas para localização de respostas. Use o parâmetro language com um dos códigos ISO 639-1 listados abaixo. Se não especificado, as respostas são retornadas em inglês (en) por padrão.
Se nenhum parâmetro language for fornecido, a API retorna respostas em inglês (en).
Principais Idiomas Mundiais
| Código | Idioma | Nome Nativo |
|---|---|---|
en | Inglês | English |
zh | Chinês | 中文 |
es | Espanhol | Español |
ar | Árabe | العربية |
hi | Hindi | हिन्दी |
pt | Português | Português |
ru | Russo | Русский |
ja | Japonês | 日本語 |
fr | Francês | Français |
de | Alemão | Deutsch |
ko | Coreano | 한국어 |
tr | Turco | Türkçe |
Idiomas Europeus
| Código | Idioma | Nome Nativo |
|---|---|---|
it | Italiano | Italiano |
nl | Holandês | Nederlands |
pl | Polones | Polski |
el | Grego | Ελληνικά |
sv | Sueco | Svenska |
no | Norueguês | Norsk |
da | Dinamarquês | Dansk |
fi | Finlandês | Suomi |
cs | Tcheco | Čeština |
uk | Ucraniano | Українська |
ro | Romeno | Română |
hu | Húngaro | Magyar |
bg | Búlgaro | Български |
hr | Croata | Hrvatski |
sk | Eslovaco | Slovenčina |
sl | Esloveno | Slovenščina |
sr | Sérvio | Српски |
lt | Lituano | Lietuvių |
lv | Letão | Latviešu |
et | Estoniano | Eesti |
ca | Catalão | Català |
eu | Basco | Euskara |
gl | Galego | 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 | Bielorrusso | Беларуская |
Idiomas do Oriente Médio e Ásia Central
| Código | Idioma | Nome Nativo |
|---|---|---|
he | Hebraico | עברית |
fa | Persa | فارسی |
az | Azerbaijano | Azərbaycan |
ka | Georgiano | ქართული |
hy | Arménio | Հայdelays |
kk | Cazaque | Қазақша |
uz | Uzbeque | Oʻzbek |
tg | Tadjique | Тоҷикӣ |
ky | Quirguiz | Кыргызча |
tk | Turcomano | Türkmen |
mn | Mongol | Монгол |
ps | Pachto | پښتو |
ku | Curdo | Kurdî |
Idiomas do Sul da Ásia
| Código | Idioma | Nome Nativo |
|---|---|---|
bn | Bengali | বাংলা |
ta | Tamil | தமிழ் |
te | Telugu | తెలుగు |
mr | Marathi | मराठी |
gu | Gujarati | ગુજરાતી |
kn | Kannada | ಕನ್ನಡ |
ml | Malaiala | മലയാളം |
pa | Punjabi | ਪੰਜਾਬੀ |
ur | Urdu | اردو |
ne | Nepalês | नेपाली |
si | Cingalês | සිංහල |
sd | Sindi | سنڌي |
as | Assames | অসমীয়া |
or | Odia | ଓଡ଼ିଆ |
Idiomas do Sudeste Asiático
| Código | Idioma | Nome Nativo |
|---|---|---|
id | Indonesio | Bahasa Indonesia |
th | Tailandês | ไทย |
vi | Vietnamita | Tiếng Việt |
ms | Malaio | Bahasa Melayu |
my | Birmanês | မြန်မာ |
km | Khmer | ភាសាខ្មែរ |
lo | Laosiano | ລາວ |
fil | Filipino | Filipino |
tl | Tagalo | Tagalog |
jv | Javanês | Basa Jawa |
su | Sundanês | Basa Sunda |
Idiomas Africanos
| Código | Idioma | Nome Nativo |
|---|---|---|
af | Africaner | Afrikaans |
sw | Suaili | Kiswahili |
am | Amárico | አማርኛ |
ha | Hauca | Hausa |
yo | Ioruba | Yorùbá |
ig | Igbo | Igbo |
zu | Zulu | isiZulu |
xh | Xhosa | isiXhosa |
so | Somali | Soomaali |
mg | Malgaxe | Malagasy |
Outros Idiomas
| Código | Idioma | Nome Nativo |
|---|---|---|
la | Latim | Latina |
eo | Esperanto | Esperanto |
yi | Iídiche | ייִדיש |
ht | Crioulo Haitiano | Kreyòl Ayisyen |
mi | Maori | Te Reo Māori |
sm | Samoano | Gagana Samoa |
to | Tonganês | Lea Faka-Tonga |
haw | Havaiano | ʻŌlelo Hawaiʻi |
API de Análise de Exames de Sangue
Análise imagens ou PDFs de exames de sangue usando IA para extrair parâmetros e gerar interpretações médicas abrangentes.
Endpoint de produção para análise de exames de sangue. Envie uma ou mais imagens do exame de sangue ou um PDF e receba parâmetros estruturados, metadados do paciente e do laboratório, e uma interpretação clínica completa em qualquer um dos 100 idiomas suportados. Consome 1 crédito por requisição.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu nome de usuário API |
password | string | Sim | Sua senha API |
file | file | Sim | Imagem do exame de sangue (PNG, JPG, WEBP) ou PDF. Máx. 20MB. Repita o campo para enviar várias imagens. |
language | string | Não | Código do idioma da resposta (padrão: en). Ver idiomas suportados. |
pdf_password | string | Não | Senha para PDFs criptografados |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
-F "username=SEU_USUARIO" \
-F "password=SUA_SENHA" \
-F "language=pt" \
-F "file=@exame_sangue.pdf"
Exemplo Python
import requests
def analyze_blood_test(file_paths, username, password, language="pt"):
"""
Analisa um exame de sangue com o Kantesti Análise de Sangue v12.
Args:
file_paths: Um ou mais caminhos para imagens do exame, ou um único PDF
username: Nome de usuário da API
password: Senha da API
language: Código do idioma do relatório (padrão: pt)
Returns:
dict: Parâmetros estruturados, metadados e interpretação 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()
# Exemplo de uso
if __name__ == "__main__":
result = analyze_blood_test(
file_paths=["exame_sangue.pdf"],
username="seu_usuario",
password="sua_senha",
language="pt"
)
print(f"Status: {result['status']}")
for param in result["data"]["parameters"]:
print(f" {param['short_name']}: {param['result']} {param['unit']} ({param['evaluation']})")
Exemplo de Resposta
{
"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 produção para análise de exames de sangue. Consome 1 crédito por requisição.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu usuário da API |
password | string | Sim | Sua senha da API |
file | file | Sim | Imagem do exame de sangue (PNG, JPG, WEBP) ou arquivo PDF. Max 20MB. |
language | string | Não | Código do idioma da resposta (padrão: en). Suporta 100+ idiomas. |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
-F "username=SEU_USUARIO" \
-F "password=SUA_SENHA" \
-F "language=pt" \
-F "file=@exame_sangue.pdf"
Exemplo Python
import requests
def analisar_exame_sangue(caminho_arquivo: str, usuario: str, senha: str, idioma: str = "pt"):
url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"
with open(caminho_arquivo, "rb") as f:
files = {"file": (caminho_arquivo, f, "application/pdf")}
data = {"username": usuario, "password": senha, "language": idioma}
response = requests.post(url, files=files, data=data, timeout=120)
return response.json()
resultado = analisar_exame_sangue("exame_sangue.pdf", "seu_usuario", "sua_senha")
print(resultado)
Referência dos campos de resposta
Nível raiz
| Campo | Tipo | Descrição |
|---|---|---|
status | string | "success" ou "error" |
data | object | Contém todos os resultados da análise |
timestamp | string | Timestamp ISO 8601 da resposta |
api_version | string | Versão da API utilizada |
Objeto data.metadata
| Campo | Tipo | Descrição |
|---|---|---|
lab_date | string | Data da coleta de sangue (AAAA-MM-DD) |
results_date | string | Data de emissão dos resultados (AAAA-MM-DD) |
lab_name | string | Nome do laboratório |
lab_city | string | Cidade do laboratório |
lab_country | string | País do laboratório |
patient_name | string | Nome completo do paciente (apenas metadados, não enviado para interpretação) |
patient_age | string | Idade do paciente |
patient_sex | string | "male", "female" ou "other" |
Elemento do array data.parameters
| Campo | Tipo | Descrição |
|---|---|---|
category | string | Categoria do parâmetro (ex: "Hemograma", "Perfil lipídico") |
long_name | string | Nome completo do parâmetro |
short_name | string | Nome abreviado do parâmetro |
result | string | Valor medido |
unit | string | Unidade de medida |
range_min | string | Intervalo de referência mínimo |
range_max | string | Intervalo de referência máximo |
evaluation | string | Status do resultado. Ver valores de avaliação |
Elemento do array data.interpretation
| Campo | Tipo | Descrição |
|---|---|---|
title | string | Título da seção (ex: "Avaliação geral de saúde") |
content | string | Interpretação médica gerada por IA |
Exemplo de resposta completa
{
"status": "success",
"data": {
"metadata": {
"patient_name": "Anna Müller",
"lab_name": "MedLab Diagnostics International",
"lab_city": "São Paulo",
"lab_country": "Brasil",
"lab_date": "2025-12-15",
"results_date": "2025-12-16",
"patient_age": "38",
"patient_sex": "female"
},
"parameters": [
{
"short_name": "WBC",
"long_name": "Contagem de glóbulos brancos",
"category": "Hemograma completo",
"result": "6.8",
"unit": "10^9/L",
"evaluation": "normal",
"range_min": "4.0",
"range_max": "11.0",
"short_description": "Mede o número total de glóbulos brancos.",
"long_description": "Os glóbulos brancos (leucócitos) são componentes essenciais do sistema imunológico..."
},
{
"short_name": "RBC",
"long_name": "Contagem de glóbulos vermelhos",
"category": "Hemograma completo",
"result": "4.52",
"unit": "10^12/L",
"evaluation": "normal",
"range_min": "3.8",
"range_max": "5.8",
"short_description": "Mede o número total de glóbulos vermelhos.",
"long_description": "Os glóbulos vermelhos (eritrócitos) transportam oxigênio dos pulmões para os tecidos..."
},
{
"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 nos glóbulos vermelhos que transporta oxigênio.",
"long_description": "A hemoglobina é a proteína contendo ferro nos glóbulos vermelhos responsável pelo transporte de oxigênio..."
},
{
"short_name": "GLU",
"long_name": "Glicose em jejum",
"category": "Painel metabólico",
"result": "102",
"unit": "mg/dL",
"evaluation": "borderline_high",
"range_min": "70",
"range_max": "140",
"short_description": "Mede o nível de açúcar no sangue em jejum.",
"long_description": "A glicose em jejum é um indicador chave de como o corpo metaboliza o açú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": "Mede o colesterol total no sangue.",
"long_description": "O colesterol total é a soma do colesterol HDL, LDL e 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": "Mede o nível de colesterol 'ruim'.",
"long_description": "O colesterol LDL pode se acumular nas paredes das artérias..."
}
],
"interpretation": [
{
"title": "Avaliação geral de saúde",
"shortcode": "overall_health_assessment",
"subsections": [
{
"subtitle": "Visão geral completa",
"items": [
{"item": "A paciente apresenta parâmetros hematológicos geralmente saudáveis com todos os valores do hemograma dentro da normalidade."},
{"item": "O perfil lipídico mostra áreas que requerem atenção, particularmente os níveis de colesterol LDL."}
]
}
]
},
{
"title": "Recomendações",
"shortcode": "recommendations",
"subsections": [
{
"subtitle": "Modificações no estilo de vida",
"items": [
{"item": "Aumentar a atividade física aeróbica para pelo menos 150 minutos por semana."},
{"item": "Adotar uma dieta do tipo mediterrâneo rica em vegetais, frutas e gorduras saudáveis."}
]
}
]
}
]
},
"api_version": "v11",
"timestamp": "2025-12-16T14:32:18Z"
}
O campo evaluation usa valores padronizados. Ver valores de avaliação.
Endpoint de produção com cálculo completo da pontuação de saúde e análise de risco de doenças. Aceita a mesma requisição que /api/v12/18-09-2026/analyze e acrescenta os campos abaixo à resposta. Consome 1 crédito por requisição.
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
-F "username=SEU_USUARIO" \
-F "password=SUA_SENHA" \
-F "language=pt" \
-F "file=@exame_sangue.pdf"
Campos adicionais de resposta
{
"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"}
]
}
O campo score_interpretation utiliza valores padronizados. Ver valores de pontuação de saúde.
Endpoints Sandbox
Endpoints sandbox retornam dados de teste realistas sem consumir cota da API. Use-os para desenvolvimento e testes de integração.
- Sem consumo de cota
- Retorna dados de teste realistas
- Mesmo formato de requisição da produção
- Teste sua integração antes de ir para produção
| API | Endpoint Sandbox |
|---|---|
| Exame de Sangue v12 | /api/v12/18-09-2026/sandbox |
| Exame de Sangue v12-health | /api/v12/health-score/sandbox |
| Mapa Corporal | /api/v1/body-map/sandbox |
| Idade Biológica do Sangue | /api/v1/blood-age/sandbox |
| Interpretação de Testes de DNA | /api/v1/dna-interpretation/sandbox |
| Relatório de Saúde DNA + Sangue | /api/v1/dna-blood-report/sandbox |
| Consultor de Suplementos por DNA | /api/v1/dna-supplements/sandbox |
| Exame de Sangue v11 | /api/v11/01-06-2025/sandbox |
| Exame de Sangue v11-health | /api/v11/health-score/sandbox |
| IA Nutricional | /api/v1/nutrition/diet-plan/sandbox |
| Comparação de Exames | /api/v1/bloodtest/comparison/sandbox |
| Análise de Tendências | /api/v1/analytics/trends/sandbox |
| ICR Extract | /api/icr/v1/sandbox |
| ICR Kan (Análise de Sangue) | /api/icr/v1/kan/sandbox |
Escolha a API certa para seu caso de uso:
| Funcionalidade | Comparação IA de Exames de Sangue | Análise de Tendências |
|---|---|---|
| Foco Principal | Comparação narrativa IA | Análise estatística de tendências |
| Processamento IA | Narrativa IA completa | IA aprimorada + estatísticas |
| Tipo de Saída | Resumos narrativos | Gráficos, estatísticas, padrões |
| Ideal Para | O que mudou entre exames | Acompanhamento de parâmetros a longo prazo |
| Min Exames | 2 | 2 |
| Max Exames | 20 | 50 |
API de Análise de Tendências
Análise tendências de parâmetros de saúde ao longo do tempo usando reconhecimento de padrões com IA. Identifique melhorias, deteriorações e insights acionáveis a partir de dados históricos de exames de sangue.
Analisa tendências de parâmetros de exames de sangue ao longo de múltiplas datas de testes para identificar padrões e fornecer insights de saúde.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu usuário da API |
password | string | Sim | Sua senha da API |
language | string | Não | Idioma da resposta (padrão: en). Ver idiomas suportados. |
blood_tests | array | Sim | Array de objetos de exames de sangue (min: 2, max: 50) |
analysis_type | string | Não | Tipo de análise. Ver valores. |
analysis_options | object | Não | Opções de configuração de análise |
Objeto analysis_options
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
include_predictions | boolean | true | Incluir previsões de tendências IA |
include_statistics | boolean | true | Incluir análise estatística |
include_charts | boolean | true | Incluir dados de configuração de gráficos |
- Mínimo: 2 exames de sangue necessários
- Máximo: 50 exames por solicitação
- Cada exame deve ter lab_date OU results_date
- Use nomes de parâmetros consistentes para rastreamento preciso
Estrutura do Array blood_tests
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lab_date | string | Sim* | Data do teste no formato YYYY-MM-DD |
results_date | string | Sim* | Alternativa ao lab_date (YYYY-MM-DD) |
parameters | array | Sim | Array de parâmetros de exames de sangue |
metadata | object | Não | Metadados adicionais (lab_name, notas, etc.) |
*lab_date ou results_date e obrigatório para cada exame de sangue.
Estrutura blood_tests[].parameters
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
short_name | string | Sim | Nome abreviado do parâmetro (ex: "GLU", "HbA1c", "CHOL") |
result | number | Sim | Valor numérico do resultado |
unit | string | Sim | Unidade de medida (ex: "mg/dL", "g/dL", "%") |
name | string | Não | Nome completo do parâmetro |
reference_range | string | Não | Faixa de referência (ex: "70-100") |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"language": "pt",
"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": 220, "unit": "mg/dL"},
{"short_name": "LDL", "result": 140, "unit": "mg/dL"},
{"short_name": "HDL", "result": 45, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-10",
"parameters": [
{"short_name": "GLU", "result": 102, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.9, "unit": "%"},
{"short_name": "CHOL", "result": 205, "unit": "mg/dL"},
{"short_name": "LDL", "result": 125, "unit": "mg/dL"},
{"short_name": "HDL", "result": 48, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-08-22",
"parameters": [
{"short_name": "GLU", "result": 95, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.6, "unit": "%"},
{"short_name": "CHOL", "result": 190, "unit": "mg/dL"},
{"short_name": "LDL", "result": 110, "unit": "mg/dL"},
{"short_name": "HDL", "result": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"short_name": "GLU", "result": 88, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.3, "unit": "%"},
{"short_name": "CHOL", "result": 175, "unit": "mg/dL"},
{"short_name": "LDL", "result": 95, "unit": "mg/dL"},
{"short_name": "HDL", "result": 55, "unit": "mg/dL"}
]
}
]
}'
Exemplo Python
import requests
from typing import List, Dict, Optional
def analisar_tendencias(
usuario: str,
senha: str,
exames_sangue: List[Dict],
idioma: str = "pt",
tipo_analise: str = "comprehensive"
) -> Dict:
"""
Analisa tendencias de exames de sangue ao longo do tempo.
Args:
usuario: Usuario da API
senha: Senha da API
exames_sangue: Lista de objetos de exames com lab_date e parameters
idioma: Codigo do idioma da resposta
tipo_analise: comprehensive, quick ou focused
Returns:
dict: Resultados da analise de tendencias
"""
url = "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze"
payload = {
"username": usuario,
"password": senha,
"language": idioma,
"analysis_type": tipo_analise,
"blood_tests": exames_sangue
}
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
return response.json()
# Exemplo de uso
if __name__ == "__main__":
exames_sangue = [
{
"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": 220, "unit": "mg/dL"},
{"short_name": "LDL", "result": 140, "unit": "mg/dL"},
{"short_name": "HDL", "result": 45, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-10",
"parameters": [
{"short_name": "GLU", "result": 102, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.9, "unit": "%"},
{"short_name": "CHOL", "result": 205, "unit": "mg/dL"},
{"short_name": "LDL", "result": 125, "unit": "mg/dL"},
{"short_name": "HDL", "result": 48, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-08-22",
"parameters": [
{"short_name": "GLU", "result": 95, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.6, "unit": "%"},
{"short_name": "CHOL", "result": 190, "unit": "mg/dL"},
{"short_name": "LDL", "result": 110, "unit": "mg/dL"},
{"short_name": "HDL", "result": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"short_name": "GLU", "result": 88, "unit": "mg/dL"},
{"short_name": "HbA1c", "result": 5.3, "unit": "%"},
{"short_name": "CHOL", "result": 175, "unit": "mg/dL"},
{"short_name": "LDL", "result": 95, "unit": "mg/dL"},
{"short_name": "HDL", "result": 55, "unit": "mg/dL"}
]
}
]
resultado = analisar_tendencias(
usuario="seu_usuario",
senha="sua_senha",
exames_sangue=exames_sangue
)
print(f"Tendencia geral: {resultado['data']['overall_trend']}")
for tendencia in resultado['data']['parameter_trends']:
print(f"{tendencia['parameter']}: {tendencia['direction']} ({tendencia['change_percent']}%)")
Referência dos Campos de Resposta
| Campo | Tipo | Descrição |
|---|---|---|
analysis_id | string | Identificador único desta análise (formato: TRD-XXXXXXXX) |
analysis_period | object | Detalhes do período: start_date, end_date, span_months, total_tests |
categories | array | Lista de categorias de parâmetros encontradas (ex: "Painel Lipídico", "Hemograma Completo") |
chart_config | object | Dados prontos para gráficos: dates, raw_dates, simple_dates para visualização |
overall_health_trend | object | Resumo, array health_risks e recomendações |
parameter_trends | array | Análise detalhada por parâmetro com estatísticas |
risk_factors | array | Fatores de risco de saúde identificados |
Estrutura do Objeto parameter_trends
| Campo | Tipo | Descrição |
|---|---|---|
parameter | string | Nome padronizado do parâmetro |
short_name | string | Nome abreviado do parâmetro |
category | string | Categoria do parâmetro (ex: "Painel Lipídico") |
unit | string | Unidade de medida |
trend_data | array | Array de objetos {date, value} para gráficos |
statistical_analysis | object | average, min, max, standard_deviation, trend_direction, trend_strength |
analysis | object | Interpretação IA: description, significant_variations, trend |
interpretation | string | Descrição legível do parâmetro |
Exemplo de Resposta
{
"api_version": "1.0.0",
"status": "success",
"message": "Analise de tendencias concluida com sucesso",
"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": [
"Painel Metabolico",
"Vitaminas",
"Marcadores de Diabetes",
"Estudos de Ferro",
"Painel Lipidico",
"Hemograma Completo"
],
"chart_config": {
"dates": ["Jan 2024", "Mai 2024", "Set 2024", "Dez 2024"],
"raw_dates": ["2024-01-15", "2024-05-20", "2024-09-10", "2024-12-18"]
},
"language": "pt",
"overall_health_trend": {
"summary": "No geral, os parametros do exame de sangue mostram tendencias positivas com melhorias na hemoglobina, perfil lipidico incluindo colesterol LDL e HDL, status de vitamina D e reservas de ferro.",
"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": "A hemoglobina mede a proteina transportadora de oxigenio nas celulas vermelhas do sangue.",
"significant_variations": "Inicialmente baixa em 12.8 g/dL, depois aumentou gradualmente para 14.8 g/dL.",
"trend": "increasing",
"unit": "g/dL"
},
"interpretation": "A hemoglobina mede a proteina transportadora de oxigenio nas celulas vermelhas do sangue."
},
{
"parameter": "Colesterol LDL",
"short_name": "LDL",
"category": "Painel 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": "O LDL-C e o colesterol 'ruim' associado ao aumento do risco de doencas cardiacas.",
"significant_variations": "O LDL-C mudou de alto (110 mg/dL) para normal (85 mg/dL).",
"trend": "decreasing"
}
}
],
"risk_factors": [],
"sandbox_mode": false
}
}
Os campos de resposta usam valores padronizados: trend_direction (ver valores), trend_strength (ver valores).
IA Nutricional com Suplementos
Gere planos nutricionais personalizados, recomendações de dieta e sugestões de suplementos baseados na análise de exames de sangue.
Gera recomendações abrangentes de nutrição e suplementos baseadas nos parâmetros de exames de sangue e perfil do paciente.
Esquema do Objeto Paciente
Descrição detalhada de todos os campos disponíveis para o objeto paciente:
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
age |
integer | Sim | - | Idade do paciente em anos (18-120) |
gender |
string | Sim | - | Sexo do paciente. Ver valores |
weight |
number | Não | null | Peso em kg (para cálculos calóricos) |
height |
number | Não | null | Altura em cm (para cálculos de IMC) |
conditions |
array | Não | [] | Condições médicas. Ver valores |
allergies |
array | Não | [] | Alergias alimentares. Ver valores |
dietary_preferences |
array | Não | [] | Preferências alimentares. Ver valores |
activity_level |
string | Não | "moderate" | Nível de atividade física. Ver valores |
dietary_restrictions |
array | Não | [] | Restrições alimentares (ex: sem glúten, sem lactose) |
liked_foods |
array | Não | [] | Alimentos preferidos para personalização do plano |
disliked_foods |
array | Não | [] | Alimentos a evitar nas recomendações |
meal_frequency |
integer | Não | 3 | Número de refeições por dia (1-6) |
budget |
string | Não | "moderate" | Nível de orçamento: "low", "moderate", "high" |
medications |
array | Não | [] | Medicamentos atuais (para interações) |
Referência de campos de resposta
Objeto nutrition_plan.educational_insights
| Campo | Tipo | Descrição |
|---|---|---|
blood_marker_education |
array | Conteúdo educativo sobre os marcadores sanguíneos analisados |
nutrition_principles |
array | Princípios nutricionais gerais aplicáveis ao paciente |
Elemento do array blood_marker_education
| Campo | Tipo | Descrição |
|---|---|---|
marker |
string | Nome do marcador sanguíneo (ex: "Vitamina D", "Colesterol") |
explanation |
string | Explicação educativa sobre a importância do marcador |
normal_range |
string | Faixa de valores normais para o marcador |
Elemento do array food_recommendations.power_foods
| Campo | Tipo | Descrição |
|---|---|---|
food |
string | Nome do alimento recomendado |
nutrients |
array | Lista dos nutrientes principais fornecidos por este alimento |
serving |
string | Tamanho da porção recomendada |
why |
string | Explicação do porquê este alimento é benéfico |
Elemento do array supplement_recommendations
| Campo | Tipo | Descrição |
|---|---|---|
supplement |
string | Nome do suplemento |
dosage |
string | Dosagem diária recomendada |
timing |
string | Melhor momento para tomar (ex: "Com o café da manhã") |
duration |
string | Duração recomendada da suplementação |
reason |
string | Justificativa baseada nos resultados dos exames |
Exemplo cURL completo
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "seu_nome_usuario",
"password": "sua_senha",
"language": "pt",
"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"]
}'
Resposta 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": "A vitamina D é essencial para a saúde óssea, função imunológica e regulação do humor. Seu nível de 18 ng/mL indica deficiência que pode afetar a absorção de cálcio e a saúde geral.",
"normal_range": "30-50 ng/mL"
},
{
"marker": "Colesterol LDL",
"explanation": "O colesterol LDL, frequentemente chamado de 'colesterol ruim', pode se acumular nas paredes arteriais. Seu nível de 140 mg/dL está elevado e pode aumentar o risco cardiovascular.",
"normal_range": "< 100 mg/dL"
}
],
"nutrition_principles": [
"Priorize ácidos graxos ômega-3 para saúde cardíaca",
"Aumente fibras solúveis para reduzir colesterol LDL",
"Inclua alimentos ricos em vitamina D e exposição solar"
]
}
},
"food_recommendations": {
"power_foods": [
{
"food": "Salmão selvagem",
"nutrients": ["Ômega-3", "Vitamina D", "Proteínas"],
"serving": "150g, 3 vezes por semana",
"why": "Excelente fonte de ômega-3 e vitamina D natural para saúde cardíaca e óssea"
},
{
"food": "Aveia integral",
"nutrients": ["Beta-glucana", "Fibras", "Magnésio"],
"serving": "50g por dia no café da manhã",
"why": "As fibras solúveis da aveia ajudam a reduzir a absorção do colesterol LDL"
},
{
"food": "Azeite de oliva extra virgem",
"nutrients": ["Gorduras monoinsaturadas", "Polifenóis", "Vitamina E"],
"serving": "2-3 colheres de sopa por dia",
"why": "Gorduras saudáveis mediterrâneas melhoram o perfil lipídico e protegem o coração"
},
{
"food": "Espinafre",
"nutrients": ["Ferro", "Folato", "Vitamina K"],
"serving": "100g por dia, cru ou cozido",
"why": "Rico em ferro e antioxidantes para energia e saúde cardiovascular"
}
]
},
"supplement_recommendations": [
{
"supplement": "Vitamina D3",
"dosage": "2000-4000 UI por dia",
"timing": "Com o café da manhã (refeição com gorduras)",
"duration": "3-6 meses, depois retestar níveis sanguíneos",
"reason": "Seu nível de 18 ng/mL está abaixo do ideal de 30-50 ng/mL"
},
{
"supplement": "Ômega-3 (EPA/DHA)",
"dosage": "1000-2000mg EPA+DHA por dia",
"timing": "Com as refeições principais",
"duration": "Contínuo para saúde cardíaca",
"reason": "Ajuda a reduzir triglicerídeos e melhora a relação HDL/LDL"
},
{
"supplement": "Coenzima Q10",
"dosage": "100mg por dia",
"timing": "Com a refeição da manhã",
"duration": "Mínimo 3 meses",
"reason": "Apoia a saúde cardíaca, particularmente importante com hipertensão"
}
]
},
"api_version": "v1",
"timestamp": "2025-12-22T10:30:00Z"
}
Para uma lista completa de todos os valores possíveis de resposta, consulte a seção Palavras-chave de saída.
API de Comparação de Exames de Sangue
Compare múltiplos exames de sangue para identificar mudanças, melhorias e áreas que requerem atenção com análise baseada em IA. Obtenha resumos narrativos completos de IA explicando o que mudou entre os exames.
Analisa 2-20 exames de sangue e fornece comparação detalhada com insights narrativos gerados por IA.
- Mínimo de 2 exames de sangue necessários
- Máximo de 20 exames de sangue por requisição
- Cada exame deve incluir
lab_dateouresults_date - Pelo menos um parâmetro comum entre os exames
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
username | string | Sim | - | Seu usuário da API |
password | string | Sim | - | Sua senha da API |
language | string | Não | en | Idioma da resposta. Ver idiomas suportados |
blood_tests | array | Sim | - | Array de objetos de exames de sangue (2-20 exames) |
Estrutura do Array blood_tests
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lab_date | string | Sim* | Data do teste no formato YYYY-MM-DD |
results_date | string | Sim* | Alternativa ao lab_date (YYYY-MM-DD) |
parameters | array | Sim | Array de parâmetros de exames de sangue |
metadata | object | Não | Metadados adicionais (lab_name, notas, etc.) |
*lab_date ou results_date e obrigatório para cada exame de sangue.
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"language": "pt",
"blood_tests": [
{
"lab_date": "2025-06-15",
"lab_name": "Laboratorio Medico Central",
"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 Central",
"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"}
]
}
]
}'
Exemplo Python
import requests
from typing import Dict, List
def comparar_exames_sangue(
usuario: str,
senha: str,
exames_sangue: List[Dict],
idioma: str = "pt"
) -> Dict:
"""
Compara multiplos exames de sangue com analise narrativa baseada em IA.
Args:
usuario: Usuario da API
senha: Senha da API
exames_sangue: Lista de objetos de exames (2-20 exames)
idioma: Idioma da resposta
Returns:
dict: Resultados da comparacao com insights narrativos de IA
"""
url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"
if len(exames_sangue) < 2:
raise ValueError("Minimo de 2 exames de sangue necessarios")
if len(exames_sangue) > 20:
raise ValueError("Maximo de 20 exames de sangue permitidos")
payload = {
"username": usuario,
"password": senha,
"language": idioma,
"blood_tests": exames_sangue
}
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
return response.json()
# Exemplo de uso
if __name__ == "__main__":
exames = [
{
"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_exames_sangue("seu_usuario", "sua_senha", exames)
print(f"Tendencia geral: {resultado['data']['comparison_summary']['overall_trend']}")
for param in resultado['data']['parameter_analysis']:
print(f"{param['parameter_name']}: {param['trend_assessment']}")
Referência dos Campos de Resposta
| Campo | Tipo | Descrição |
|---|---|---|
comparison_id | string | Identificador único desta comparação (formato: CMP-XXXXXXXX) |
comparison_summary | object | Resumo geral: key_findings, overall_trend, datas dos relatórios, time_interval |
parameter_analysis | array | Análise detalhada por parâmetro com tipo de mudança e significância clínica |
health_assessment | object | Áreas de preocupação, melhoria, desenvolvimentos positivos, fatores de risco |
recommendations | object | Testes de acompanhamento, ações imediatas, modificações de estilo de vida, encaminhamentos a especialistas |
detailed_interpretation | object | Seções narrativas de IA com resumo executivo e recomendações clínicas |
Estrutura do Objeto parameter_analysis
| Campo | Tipo | Descrição |
|---|---|---|
parameter_name | string | Nome do parâmetro |
report1_value | string | Valor do primeiro relatório com unidade |
report2_value | string | Valor do segundo relatório com unidade |
change_type | string | increased, decreased ou stable |
change_magnitude | string | significant, moderate ou minor |
clinical_significance | string | Explicação da IA sobre o que a mudança significa |
trend_assessment | string | positive, negative ou neutral |
Exemplo de Resposta
{
"api_version": "1.0.0",
"status": "success",
"message": "Comparacao de exames de sangue concluida com sucesso",
"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 os relatorios",
"key_findings": [
"Niveis de hemoglobina e RBC normalizados indicando resolucao de anemia",
"Glicose e HbA1c melhoraram para faixa normal sugerindo melhor controle glicemico",
"Perfil lipidico melhorou com colesterol total, LDL, HDL e triglicerideos 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": "Melhoria de anemia para niveis normais 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 proximo da faixa ideal, reduzindo risco de aterosclerose",
"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 melhorado protege contra doencas cardiacas",
"trend_assessment": "positive"
}
],
"health_assessment": {
"overall_health_trend": "improved",
"areas_of_improvement": [
"Correcao de anemia",
"Controle glicemico",
"Normalizacao do perfil lipidico",
"Status de vitamina D e ferro"
],
"areas_of_concern": [],
"positive_developments": [
"Resolucao de anemia",
"Glicose e HbA1c normais",
"Perfil de risco cardiovascular melhorado"
],
"risk_factors": [
"Anemia ferropriva previa",
"Dislipidemia anterior",
"Historico de metabolismo de glicose prejudicado"
]
},
"recommendations": {
"immediate_actions": [
"Continuar suplementacao atual de ferro e vitamina D",
"Manter controle glicemico e lipidico com dieta e exercicio"
],
"follow_up_tests": [
"Repetir hemograma e estudos de ferro em 3 meses",
"Monitorar glicose em jejum e HbA1c trimestralmente",
"Reavaliacao do painel lipidico em 6 meses"
],
"lifestyle_modifications": [
"Adotar dieta saudavel para o coracao com baixo teor de gorduras saturadas",
"Aumentar atividade fisica para manter saude metabolica"
],
"specialist_referrals": [
"Consultar hematologista se anemia recorrer",
"Encaminhamento para endocrinologista se controle de glicose piorar"
],
"monitoring_frequency": "3 meses"
},
"detailed_interpretation": {
"sections": [
{
"title": "Resumo Executivo",
"content": "O paciente mostra melhoria acentuada em anemia, metabolismo de glicose, perfil lipidico e status de vitaminas ao longo de 6 meses."
},
{
"title": "Recomendacoes Clinicas",
"content": "Continuar suplementacao e medidas de estilo de vida. Monitorar regularmente hemograma, ferro, glicose e lipidios."
}
]
},
"summary": {
"improved_parameters": 13,
"stable_parameters": 0,
"worsened_parameters": 0,
"overall_trend": "improved"
},
"sandbox_mode": false
}
}
Os campos de resposta usam valores padronizados: overall_trend e trend_assessment (ver avaliação de tendências), change_type (increased, decreased, stable).
Referência de Palavras-chave
Referência completa para todos os valores de palavras-chave de entrada usados nos endpoints da API Kantesti. Use estes valores exatos nas requisições da API.
analysis_type API Análise de Tendências
Específica o tipo de análise de tendências a ser realizada.
| Valor | Padrão | Descrição |
|---|---|---|
comprehensive | ✓ | Análise completa com estatísticas, gráficos e interpretação IA |
statistical | Apenas análise estatística | |
summary | Apenas resumo de alto nível |
health_goals API Nutrição
Objetivos de saúde para recomendações nutricionais personalizadas. Múltiplos valores podem ser fornecidos como array.
| Valor | Descrição |
|---|---|
maintain | Manter saúde atual (padrão) |
improve_energy | Foco nos níveis de energia |
weight_management | Gerenciamento saudável de peso |
heart_health | Saúde cardiovascular |
immune_support | Suporte ao sistema imunológico |
digestive_health | Bem-estar digestivo |
bone_health | Saúde óssea |
mental_clarity | Função cognitiva |
dietary_restrictions API Nutrição
Restrições alimentares e alergias. Múltiplos valores podem ser fornecidos como array. Texto livre também é aceito para restrições personalizadas.
| Valor | Descrição |
|---|---|
low_sodium | Ingestão reduzida de sódio |
low_sugar | Ingestão reduzida de açúcar |
low_fat | Ingestão reduzida de gordura |
gluten_free | Sem glúten |
dairy_free | Sem laticínios |
nut_free | Sem nozes |
soy_free | Sem soja |
egg_free | Sem ovos |
halal | Conforme halal |
kosher | Conforme kosher |
Texto livre também é aceito para restrições alimentares personalizadas não listadas acima.
dietary_preferences API Nutrição
Preferências de estilo de vida alimentar para planejamento de refeições.
| Valor | Descrição |
|---|---|
omnivore | Sem restrições (padrão) |
vegetarian | Sem carne |
vegan | Sem produtos animais |
pescatarian | Vegetariano + peixe |
keto | Dieta cetogênica |
paleo | Dieta paleolítica |
mediterranean | Dieta mediterrânea |
activity_level API Nutrição
Nível de atividade física para cálculos calóricos e nutricionais.
| Valor | Descrição |
|---|---|
sedentary | Pouco ou nenhum exercício |
light | Exercício leve 1-3 dias/semana |
moderate | Exercício moderado 3-5 dias/semana (padrão) |
active | Exercício intenso 6-7 dias/semana |
very_active | Exercício muito intenso ou trabalho físico |
budget API Nutrição
Nível de orçamento para recomendações de alimentos e suplementos.
| Valor | Descrição |
|---|---|
low | Opções econômicas |
moderate | Opções equilibradas (padrão) |
high | Opções premium |
gender Todas as APIs
Sexo do paciente para faixas de referência e recomendações personalizadas.
| Valor | Descrição |
|---|---|
male | Paciente masculino |
female | Paciente feminino |
other | Outro ou não especificado |
Palavras-chave de saída
As seguintes palavras-chave aparecem nas respostas da API. Entender esses valores ajuda a interpretar e exibir os resultados corretamente.
evaluation APIs Análise de sangue & Comparação
Status de avaliação do parâmetro indicando como o resultado se compara às faixas de referência.
| Valor | Descrição |
|---|---|
normal | Dentro da faixa de referência normal |
low | Abaixo da faixa normal |
high | Acima da faixa normal |
critical_low | Criticamente baixo (atenção imediata necessária) |
critical_high | Criticamente alto (atenção imediata necessária) |
borderline_low | Ligeiramente abaixo da faixa normal |
borderline_high | Ligeiramente acima da faixa normal |
trend_assessment APIs Comparação & Tendências
Avaliação geral das tendências dos parâmetros entre os testes.
| Valor | Descrição |
|---|---|
positive | Melhorado (em direção à faixa normal) |
negative | Piorado (afastando-se da faixa normal) |
stable | Relativamente inalterado entre os testes |
improving | Tendência geral de melhoria |
worsening | Tendência geral de piora |
trend_direction API Análise de tendências
Direção das mudanças de valor dos parâmetros ao longo do tempo.
| Valor | Descrição |
|---|---|
upward | Valores aumentando ao longo do tempo |
downward | Valores diminuindo ao longo do tempo |
stable | Mudança mínima ao longo do tempo |
trend_strength API Análise de tendências
Magnitude da tendência observada.
| Valor | Descrição |
|---|---|
strong | >15% de mudança entre os períodos |
moderate | 5-15% de mudança entre os períodos |
mild | <5% de mudança entre os períodos |
health_score / score_interpretation API Pontuação de saúde
Interpretação geral da pontuação de saúde com base nos parâmetros analisados.
| Valor | Descrição |
|---|---|
excellent | Todos os marcadores na faixa ideal |
good | A maioria dos marcadores na faixa normal |
fair | Alguns marcadores precisam de atenção |
poor | Múltiplos marcadores precisam de atenção |
Endpoints Utilitários
Verifique sua cota de API restante. Requer autenticação.
curl -X POST "https://app.aibloodtestinterpret.com/api/quota/check" \
-H "Content-Type: application/json" \
-d '{"username": "SEU_USUARIO", "password": "SUA_SENHA"}'
API de Avaliação de Riscos de Saúde Familiar
A API Kantesti de Avaliação de Riscos de Saúde Familiar é uma plataforma de análise de riscos de saúde hereditários alimentada por IA. Gera relatórios completos de saúde familiar analisando o histórico médico familiar, perfis de saúde dos pacientes e dados de exames de sangue para identificar fatores de risco hereditários e fornecer recomendações personalizadas de cuidados preventivos.
Análise de riscos hereditários por IA
A API Family Health utiliza modelos avançados de IA para cruzar o histórico médico familiar com os dados de exames de sangue do paciente, identificando padrões de risco hereditário nas categorias cardiovascular, metabólica, oncológica, neurológica, respiratória, autoimune, genética, saúde mental e rim/fígado. Os relatórios incluem pontuação de risco, cronograma de cuidados preventivos, recomendações de triagem genética e conselhos sobre estilo de vida — tudo localizado em mais de 100 idiomas.
- Análise de riscos hereditários — Classificação em risco alto, moderado e baixo
- Análise de árvore genealógica — Mapeamento dos riscos das linhas paterna e materna
- Correlação de exames de sangue — Cruzamento do histórico familiar com parâmetros sanguíneos
- Recomendações de triagem genética — Sugestões personalizadas para testes genéticos
- Cronograma de cuidados preventivos — Programas de triagem apropriados à idade
- Análise de medicamentos — Avaliação de interações e sensibilidades hereditárias
- 100+ idiomas suportados — Localização completa dos relatórios
- Modo Sandbox — Teste a integração sem consumir créditos
Resumo dos endpoints
| Endpoint | Método | Descrição | Auth |
|---|---|---|---|
/api/v1/family-health/analyze | POST | Gera relatório completo de avaliação de riscos | Obrigatório (1 crédito) |
/api/v1/family-health/validate | POST | Válida os dados da solicitação (sem consumo de cota) | Obrigatório (Gratuito) |
/api/v1/family-health/supported-languages | GET | Lista 100+ idiomas suportados | Não obrigatório |
/api/v1/family-health/condition-categories | GET | Lista categorias de patologias | Não obrigatório |
/api/v1/family-health/family-relations | GET | Lista tipos de relações familiares | Não obrigatório |
/api/v1/family-health/sandbox/analyze | POST | Teste sandbox com dados de exemplo | Obrigatório (Gratuito) |
Gera um relatório completo de avaliação de riscos de saúde familiar alimentado por IA.
Parâmetros da solicitação (JSON Body)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Nome de usuário da API |
password | string | Sim | Senha da API |
patient_data | object | Sim | Informações do paciente |
family_members | array | Sim* | Membros da família (máx. 100) |
health_profile | object | Sim* | Perfil de saúde |
blood_test_data | array | Não | Dados de exames de sangue |
language | string | Não | Código do idioma (padrão: en) |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
-H "Content-Type: application/json" \
-d '{"username":"USUARIO","password":"SENHA","patient_data":{"name":"Joana Silva","age":42,"gender":"female"},"family_members":[{"relation":"father","age":70,"conditions":["hypertension"]}],"language":"pt"}'
Exemplo Python
import requests
url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"
payload = {"username":"USUARIO","password":"SENHA","patient_data":{"name":"Joana Silva","age":42,"gender":"female"},"family_members":[{"relation":"father","age":70,"conditions":["hypertension"]}],"language":"pt"}
response = requests.post(url, json=payload, timeout=120)
print(response.json())
Exemplo de resposta
{"status":"success","data":{"report_data":{"report_title":"Relatório de Avaliação de Riscos de Saúde Familiar","hereditary_risk_analysis":{"high_risk":[{"condition":"Doença cardiovascular","risk_score":75}]},"genetic_screening_recommendations":["Teste genético BRCA1/BRCA2"]}},"timestamp":"2026-03-23T10:30:00Z","api_version":"1.0.0"}
Códigos de erro Family Health API
| Código | HTTP | Descrição |
|---|---|---|
AUTH_1001 | 401 | Credenciais ausentes |
AUTH_1002 | 401 | Credenciais inválidas |
QUOTA_1101 | 403 | Cota de API insuficiente |
VAL_2001 | 400 | Campo obrigatório ausente |
VAL_2003 | 400 | Código de idioma não suportado |
PROC_3001 | 500 | Falha na geração do relatório |
SRV_5001 | 500 | Erro interno do servidor |
Endpoint Sandbox Family Health
Teste sua integração sem consumir créditos.
| API | Sandbox | Descrição |
|---|---|---|
| Family Health | /api/v1/family-health/sandbox/analyze | Dados de relatório de exemplo |
Endpoints de referência (Sem auth)
| Endpoint | Método | Descrição |
|---|---|---|
/api/v1/family-health/supported-languages | GET | 100+ idiomas suportados |
/api/v1/family-health/condition-categories | GET | 9 categorias de patologias |
/api/v1/family-health/family-relations | GET | 14 relações familiares |
API de Mapa Corporal
A API Kantesti de Mapa Corporal transforma um painel laboratorial em anatomia. Cada resultado fora do intervalo ou limítrofe é posicionado em uma das 13 regiões do corpo, e a API devolve tanto a legenda — qual região, com que gravidade, quais marcadores a colocaram ali — quanto uma URL com a ilustração correspondente do corpo.
Determinístico por padrão
Os nomes dos marcadores são comparados com tabelas multilíngues de sinônimos que cobrem 39 idiomas de relatório, incluindo escritas não latinas: você envia os nomes dos analitos exatamente como o seu laboratório os imprimiu, no idioma em que os imprimiu. Nenhum modelo é chamado e nenhuma ilustração é gerada a menos que você peça, de modo que a requisição padrão não tem custo de IA e devolve sempre a mesma resposta para o mesmo painel.
- 13 regiões anatômicas — Cérebro e nervos, tireoide, coração e vasos, fígado, pâncreas, adrenais, rins, intestino, aparelho reprodutor, sangue, sistema imunitário, ossos, músculos
- Níveis de gravidade — Nível 2 para resultados fora do intervalo, nível 1 para limítrofes, de modo que a legenda pode ser colorida sem lógica adicional
- Atribuição de marcadores — Cada região lista os marcadores que a colocaram ali, do pior para o melhor
- Saída independente do idioma — Chaves de região e os seus próprios nomes de marcadores; a ilustração não contém texto, por isso uma única imagem serve para todos os idiomas
- URLs de ilustração assinadas — Cada URL de ilustração leva uma assinatura HMAC, de modo que ninguém consegue enumerá-las nem falsificá-las
- Estados vazios honestos — Um painel limpo devolve o corpo compartilhado "tudo certo"; um painel cujos marcadores sinalizados não podem ser posicionados devolve um erro em vez de um corpo verde enganoso
- Modo determinístico — Padrão. Sem chamada ao modelo, sem crédito de imagem, saída reproduzível
- Modo Sandbox — Teste sua integração sem consumir créditos
Resumo dos endpoints
| Endpoint | Método | Descrição | Auth |
|---|---|---|---|
/api/v1/body-map/analyze |
POST | Construir um mapa corporal a partir de um painel laboratorial | Obrigatório (1 crédito) |
/api/v1/body-map/validate |
POST | Validar um payload e ver quais marcadores são reconhecidos (sem consumo de cota) | Obrigatório (Grátis) |
/api/v1/body-map/sandbox |
POST | Teste sandbox com dados de exemplo (sem consumo de cota) | Obrigatório (Grátis) |
/api/v1/body-map/regions |
GET | Listar as 13 regiões corporais e os níveis de gravidade | Não obrigatório |
/api/v1/body-map/info |
GET | Metadados de capacidades, limites e detalhes de autenticação | Não obrigatório |
Posiciona no corpo cada resultado sinalizado de um painel laboratorial. Consome 1 crédito por requisição bem-sucedida. Uma requisição que não passe na validação, ou cujos marcadores sinalizados não possam ser posicionados, não é cobrada.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu nome de usuário API |
password | string | Sim | Sua senha API |
parameters | array | Sim | Objetos de resultados laboratoriais. Máx. 500. Cada um precisa de um nome de analito e de um campo evaluation. |
interpretation | array | Não | Interpretação clínica, usada apenas como contexto quando ai_assist está ativado |
ai_assist | boolean | Não | Permitir que o modelo posicione os marcadores que as tabelas de sinônimos não reconhecem (padrão: false) |
include_image | boolean | Não | Solicitar a ilustração renderizada (padrão: false) |
image_wait | integer | Não | Segundos de espera por uma ilustração recém-gerada, 0-30 (padrão: 0) |
Campos do objeto parameters
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
short_name | string | Sim* | Nome do analito conforme impresso pelo laboratório. *É obrigatório pelo menos um entre short_name, long_name, name, parameter_name ou parameter. |
long_name | string | Não | Nome completo do analito; melhora a correspondência de abreviaturas |
evaluation | string | Não | Um entre high, low, bad, slightly_high, slightly_low, normal. Apenas os valores sinalizados aparecem no mapa. |
result | string|number | Não | O valor medido; usado para ordenar quais regiões são desenhadas |
unit | string | Não | Unidade do resultado, em qualquer grafia |
range_normal_min | number | Não | Limite inferior do intervalo de referência |
range_normal_max | number | Não | Limite superior do intervalo de referência |
category | string | Não | Categoria do laboratório; usada como alternativa quando o nome do analito é desconhecido |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"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"}
]
}'
Exemplo Python
import requests
def build_body_map(parameters, username, password, include_image=False):
"""
Posiciona no corpo os resultados do exame de sangue fora do intervalo.
Args:
parameters: Lista de objetos de resultados laboratoriais
username: Nome de usuário da API
password: Senha da API
include_image: Solicitar a ilustração renderizada (gasta crédito de imagem)
Returns:
dict: Bloco do mapa corporal com regiões, legenda e URLs de ilustração
"""
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()
# Exemplo 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="seu_usuario",
password="sua_senha",
)
body_map = result["data"]["body_map"]
if result["data"]["all_clear"]:
print("Tudo certo — nada sinalizado.")
for region in body_map["regions"]:
severity = "fora do intervalo" if region["level"] == 2 else "limítrofe"
print(f" {region['key']}: {severity} ({', '.join(region['markers'])})")
print(f"Ilustração: {body_map['image_url'] or body_map['fallback_url']}")
Exemplo de Resposta
{
"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"
}
Referência dos campos de resposta
| Campo | Tipo | Descrição |
|---|---|---|
body_map.spec | string | Identificador canônico desta combinação de regiões e gravidades. Painéis idênticos partilham um spec e, por isso, partilham uma ilustração em cache. |
body_map.regions[].key | string | Uma das 13 chaves de região |
body_map.regions[].level | integer | 2 = fora do intervalo, 1 = limítrofe |
body_map.regions[].drawn | boolean | Se esta região é pintada na ilustração. A legenda lista sempre todas as regiões; no máximo seis são desenhadas. |
body_map.regions[].markers | array | Nomes dos marcadores que colocaram esta região no mapa, do pior para o melhor |
body_map.unmapped | integer | Marcadores sinalizados que não puderam ser posicionados em nenhuma região |
body_map.image_url | string|null | Ilustração em cache. null até o arquivo existir — use fallback_url como alternativa. |
body_map.fallback_url | string | URL de geração assinada. Sempre presente. Responde 503 com Retry-After enquanto a ilustração ainda está sendo produzida. |
all_clear | boolean | true quando nada foi sinalizado; aplica-se o corpo compartilhado "tudo certo" |
mode | string | deterministic ou ai_assisted |
A resposta é independente do idioma por concepção: traz chaves de região e os nomes de marcadores do seu próprio laboratório. Traduza as 13 chaves de região no seu cliente e dê prioridade à legenda em relação à ilustração: se o modelo de imagem algum dia pintar o órgão errado, a legenda ao lado continua correta.
Verifica um payload sem executar a análise e informa quais dos seus nomes de analitos o motor reconhece. É necessária autenticação; não há consumo de cota e o endpoint continua funcionando em uma conta sem créditos.
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/validate" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"parameters": [
{"short_name": "ALT", "result": "65", "evaluation": "high"},
{"short_name": "Unobtainium", "result": "9", "evaluation": "high"}
]
}'
Exemplo de Resposta
{
"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 referência
Ambos os endpoints de referência são gratuitos e não exigem autenticação.
Lista as 13 regiões corporais em ordem canônica, juntamente com os níveis de gravidade. Use-o para construir as suas próprias traduções da legenda.
Exemplo cURL
curl "https://app.aibloodtestinterpret.com/api/v1/body-map/regions"
Exemplo de Resposta
{
"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
}
}
Metadados de capacidades: se o motor está habilitado nesta instalação, os limites de requisição, o esquema de autenticação e a lista completa de endpoints.
Exemplo cURL
curl "https://app.aibloodtestinterpret.com/api/v1/body-map/info"
Sandbox
POST /api/v1/body-map/sandbox devolve uma resposta de exemplo exatamente com o formato que /analyze produz, de modo que um cliente escrito contra o sandbox funciona sem alterações contra a produção. É necessária autenticação, pelo que a chamada também comprova as suas credenciais, mas não há consumo de cota nem é realizada qualquer análise.
| Código de erro | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciais de autenticação faltantes |
AUTH_1002 | 401 | Usuário ou senha inválidos |
AUTH_1004 | 400 | Credenciais malformadas (tipo incorreto ou demasiado longas) |
QUOTA_1101 | 403 | Cota API insuficiente |
VAL_2001 | 400 | parameters está ausente |
VAL_2002 | 400 | Formato de dados inválido |
VAL_2005 | 400 | parameters está vazio |
VAL_2006 | 400 | Mais de 500 parâmetros |
VAL_2008 | 400 | Uma linha de parâmetros está malformada ou sem nome |
RES_4004 | 422 | Existem resultados sinalizados, mas nenhum corresponde a uma região corporal |
RES_4005 | 503 | O motor de mapa corporal está desabilitado nesta instalação |
API de Idade Biológica do Sangue
A API Kantesti de Idade Biológica do Sangue responde a uma pergunta que um intervalo de referência não consegue responder: que idade este sangue aparenta? Calcula a idade biológica a partir de um painel de rotina usando o modelo PhenoAge de Levine publicado e, ao lado dela, deriva até 18 índices clínicos — FIB-4, HOMA-IR, TyG, TFGe, AIP, NLR, ânion gap e outros — que um relatório laboratorial raramente imprime.
Um número mesmo com um painel parcial
O PhenoAge precisa de nove marcadores e a maioria dos painéis traz menos. Quando os nove estão presentes, a API devolve a fórmula publicada sem alterações. Quando não estão, os dados em falta são preenchidos com medianas populacionais e a resposta é devolvida como source: "partial", de modo que você sempre sabe qual recebeu. Ambos os caminhos são determinísticos: sem chamada ao modelo, sem custo adicional, sempre a mesma resposta para o mesmo painel.
- PhenoAge de Levine — O modelo publicado, calculado sem alterações quando os nove marcadores estão presentes
- Degradação elegante — Um painel parcial ainda produz um número, claramente rotulado como tal, com os marcadores em falta listados
- 18 índices clínicos — FIB-4, De Ritis, relação A/G, HOMA-IR, TyG, eAG, TFGe, ânion gap, ureia/creatinina, colesterol não-HDL, TG/HDL, AIP, CT/HDL, colesterol remanescente, NLR, Mentzer, saturação de transferrina, cálcio corrigido
- Conversão automática de unidades — Unidades SI e convencionais, em qualquer grafia, com verificações de plausibilidade fisiológica que rejeitam valores impossíveis
- Correspondência multilíngue de marcadores — Nomes de analitos em 39 idiomas de relatório, incluindo escritas não latinas; você nunca envia chaves internas
- Modo determinístico — Padrão. Sem chamada de rede, sem custo de IA, saída reproduzível
- Camadas de modelo opcionais — Identificação de linhas, uma estimativa melhorada e uma nota pessoal, cada uma atrás do seu próprio sinalizador. Um PhenoAge completo de nove marcadores nunca é substituído pelo modelo.
- 100 idiomas — Para a nota pessoal opcional
- Modo Sandbox — Teste sua integração sem consumir créditos
Resumo dos endpoints
| Endpoint | Método | Descrição | Auth |
|---|---|---|---|
/api/v1/blood-age/analyze |
POST | Calcular a idade biológica do sangue e os índices clínicos derivados | Obrigatório (1 crédito) |
/api/v1/blood-age/validate |
POST | Validar um payload e ver quais marcadores o painel fornece (sem consumo de cota) | Obrigatório (Grátis) |
/api/v1/blood-age/sandbox |
POST | Teste sandbox com dados de exemplo (sem consumo de cota) | Obrigatório (Grátis) |
/api/v1/blood-age/biomarkers |
GET | Listar os marcadores que o motor lê e as suas unidades de destino | Não obrigatório |
/api/v1/blood-age/info |
GET | Metadados de capacidades, limites e detalhes de autenticação | Não obrigatório |
Calcula a idade biológica do sangue e os índices derivados a partir de um painel laboratorial. Consome 1 crédito por requisição bem-sucedida. Uma requisição que não passe na validação, ou cujo painel não permita calcular nada, não é cobrada.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu nome de usuário API |
password | string | Sim | Sua senha API |
parameters | array | Sim | Objetos de resultados laboratoriais. Máx. 500. Cada um precisa de um nome de analito e de um resultado. |
metadata | object | Não | Cabeçalho do relatório. Fortemente recomendado: o PhenoAge inclui um termo de idade cronológica. Lê patient_age, patient_sex, dob, lab_date. |
patient | object | Não | {"age": 42, "gender": "female"} — usado quando os metadados não os trazem |
interpretation | array | Não | Interpretação clínica, usada apenas como contexto para o modelo |
language | string | Não | Idioma da nota pessoal opcional (padrão: en). Ver idiomas suportados. |
ai_assist | boolean | Não | Permitir que o modelo identifique nomes de analitos incomuns (padrão: false) |
ai_estimate | boolean | Não | Permitir que o modelo melhore uma idade parcial (padrão: false) |
ai_note | boolean | Não | Solicitar uma nota pessoal em language (padrão: false) |
Os nove marcadores PhenoAge
Envie-os com os nomes que o seu laboratório imprimiu — a correspondência é feita por nome, em qualquer um dos 39 idiomas de relatório suportados, e as unidades são convertidas automaticamente.
| Marcador | Nome habitual | Unidade de destino |
|---|---|---|
albumin | Albumina | g/L |
creatinine | Creatinina | µmol/L |
glucose | Glicose / Glicemia de jejum | mmol/L |
crp | Proteína C reativa | mg/L |
lymph | Linfócitos | % |
mcv | Volume corpuscular médio | fL |
rdw | Amplitude de distribuição eritrocitária | % |
alp | Fosfatase alcalina | U/L |
wbc | Contagem de leucócitos | 10⁹/L |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"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}
]
}'
Exemplo Python
import requests
def biological_blood_age(parameters, metadata, username, password):
"""
Calcula a idade biológica do sangue a partir de um painel de rotina.
Args:
parameters: Lista de objetos de resultados laboratoriais
metadata: Cabeçalho do relatório com patient_age e patient_sex
username: Nome de usuário da API
password: Senha da API
Returns:
dict: Bloco de idade do sangue, índices derivados e um resumo 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()
# Exemplo 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="seu_usuario",
password="sua_senha",
)
summary = result["data"]["summary"]
if summary["status"] != "ok":
print(f"Nenhuma idade calculada: {summary['status']}")
else:
print(f"Cronológica: {summary['chronological_age']}")
print(f"Biológica: {summary['biological_age']} ({summary['source']})")
print(f"Diferença: {summary['delta_years']:+} anos")
for index in result["data"]["blood_age"]["indices"]:
print(f" {index['key']}: {index['value']} {index['unit']} [{index['band']}]")
Exemplo de Resposta
{
"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"
}
Referência dos campos de resposta
| Campo | Tipo | Descrição |
|---|---|---|
summary.status | string | ok, missing_age, missing_markers, needs_markers ou unavailable |
summary.source | string | formula (os nove marcadores), partial (medianas imputadas) ou ai (estimativa do modelo, apenas com ai_estimate) |
summary.chronological_age | integer|null | Idade lida dos metadados ou do objeto patient |
summary.biological_age | number|null | A idade do sangue calculada, em anos |
summary.delta_years | number|null | Biológica menos cronológica. Um valor negativo significa mais jovem que o calendário. |
summary.markers_missing | array | Quais dos nove marcadores PhenoAge o painel não forneceu |
blood_age.age.inputs | object | Os valores convertidos efetivamente utilizados, nas unidades de destino |
blood_age.age.labels | object | O nome próprio do seu laboratório para cada marcador que o motor reconheceu |
blood_age.indices[].band | string | ok, borderline, high, low ou info |
blood_age.indices[].from | array | As linhas laboratoriais das quais este índice foi derivado |
mode | string | deterministic ou ai_assisted |
O PhenoAge inclui um termo de idade, por isso sem uma idade cronológica a resposta volta com status: "missing_age" e sem número. Envie-a em metadata.patient_age, ou em patient.age, ou como data de nascimento em patient.dob. A fórmula aplica-se entre os 18 e os 100 anos.
Verifica um payload sem executar a análise e informa quais dos nove marcadores PhenoAge o seu painel fornece e se foi possível ler uma idade cronológica — as duas coisas que decidem se você obterá a fórmula completa ou a estimativa parcial. É necessária autenticação; não há consumo de cota e o endpoint continua funcionando em uma conta sem créditos.
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
-H "Content-Type: application/json" \
-d '{
"username": "SEU_USUARIO",
"password": "SUA_SENHA",
"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": "%"}
]
}'
Exemplo de Resposta
{
"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 referência
Ambos os endpoints de referência são gratuitos e não exigem autenticação.
Lista as nove entradas do PhenoAge, todos os marcadores que o motor consegue ler com a sua unidade de destino, e a faixa etária à qual a fórmula se aplica.
Exemplo cURL
curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/biomarkers"
Exemplo de Resposta
{
"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."
}
}
Metadados de capacidades: se o motor está habilitado nesta instalação, os dois modos e quanto custa cada um, os limites de requisição, o esquema de autenticação e os idiomas suportados.
Exemplo cURL
curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/info"
Sandbox
POST /api/v1/blood-age/sandbox devolve uma resposta de exemplo exatamente com o formato que /analyze produz, de modo que um cliente escrito contra o sandbox funciona sem alterações contra a produção. É necessária autenticação, pelo que a chamada também comprova as suas credenciais, mas não há consumo de cota nem é realizada qualquer análise.
| Código de erro | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciais de autenticação faltantes |
AUTH_1002 | 401 | Usuário ou senha inválidos |
AUTH_1004 | 400 | Credenciais malformadas (tipo incorreto ou demasiado longas) |
QUOTA_1101 | 403 | Cota API insuficiente |
VAL_2001 | 400 | parameters está ausente |
VAL_2002 | 400 | Formato de dados inválido |
VAL_2003 | 400 | Código de idioma não suportado |
VAL_2005 | 400 | parameters está vazio |
VAL_2006 | 400 | Mais de 500 parâmetros |
VAL_2007 | 400 | Objeto patient inválido |
VAL_2008 | 400 | Uma linha de parâmetros está malformada ou sem nome |
VAL_2009 | 400 | Valor de patient.gender não suportado |
RES_4004 | 422 | Nada computável a partir destes parâmetros |
RES_4005 | 503 | O motor de idade do sangue está desabilitado nesta instalação |
API DNA Health: Interpretação de Testes de DNA, Relatório DNA + Sangue e Consultor de Suplementos
Temos o orgulho de apresentar a API Kantesti DNA Health: três novos módulos de IA que transformam o teste de DNA de um paciente em relatórios clínicos. A Interpretação de Testes de DNA lê um arquivo bruto de genótipo ou um relatório genético e redige um relatório abrangente de saúde genética. O Relatório de Saúde DNA + Sangue combina esse relatório com um exame de sangue interpretado e mostra onde os genes e os valores laboratoriais se confirmam ou se contradizem. O Consultor de Suplementos transforma o DNA, o exame de sangue e um breve questionário em um plano de suplementação personalizado, construído com os produtos da sua própria clínica.
Conferido com o seu arquivo
Um arquivo bruto de genótipo é processado no servidor e comparado com um painel selecionado de 334 marcadores em 20 categorias, dos genes de metilação, cardiovasculares e lipídicos à farmacogenômica, ao metabolismo de nutrientes, ao estado de portador e à longevidade. Cada achado que a IA redige é conferido com o arquivo enviado: um rsID que o arquivo não contém é descartado e cada genótipo fica fixado no valor registrado no próprio arquivo, de modo que o relatório não pode inventar um resultado.
- Todas as fontes de DNA habituais — Arquivos brutos da 23andMe, AncestryDNA, MyHeritage, FTDNA e LivingDNA e arquivos VCF, também dentro de
.zipou.gz; linhas de rsID coladas; ou um relatório genético em até 6 arquivos PDF, JPG ou PNG - Relatório genético abrangente — Achados por área de saúde, riscos de doença, estado de portador, farmacogenômica (fenótipos metabolizadores previstos e classes de medicamentos afetadas), nutrigenômica, características, exames de acompanhamento recomendados e sinais de alerta
- Genes e valores laboratoriais lado a lado — O relatório DNA + Sangue classifica cada ligação entre um achado genético e um resultado laboratorial como
confirms,contradicts,neutralouwatch, com matriz de risco, ações prioritárias e plano de monitoramento - Planos de suplementação com regras de segurança — Dose, forma, horário, duração, interações e datas de reavaliação; as doses ficam dentro dos níveis máximos de ingestão toleráveis, aplicam-se limites seguros para a gravidez e tudo o que exige um prescritor vai para
clinician_review_required - O seu próprio catálogo de produtos — O consultor recomenda os produtos que a sua clínica tem em estoque, marca-os como
clinic_librarye, no modo “apenas produtos da clínica”, lista as necessidades que o seu catálogo não cobre - Encadeáveis e sem estado — Envie o relatório do módulo 1 diretamente para os módulos 2 e 3. Nada fica armazenado associado a um paciente, e os arquivos brutos de genótipo são descartados após o processamento
- 100+ idiomas de relatório — O relatório é redigido no idioma que você solicitar
- Modo assíncrono — Adicione
?async=1e consulte/api/jobs/<job_id>, para que uma análise longa nunca atinja o tempo limite do gateway - Modo Sandbox — Teste sua integração sem consumir créditos
1. POST /api/v1/dna-interpretation/analyze com o arquivo de DNA devolve data.report. 2. Envie esse relatório, junto com um exame de sangue interpretado, para /api/v1/dna-blood-report/analyze. 3. Envie o mesmo relatório, as respostas ao questionário e, opcionalmente, o exame de sangue para /api/v1/dna-supplements/analyze. Os módulos 2 e 3 aceitam o relatório de DNA tal como foi devolvido: o objeto report, o objeto data completo ou a resposta inteira.
Resumo dos endpoints
| Endpoint | Método | Descrição | Auth |
|---|---|---|---|
/api/v1/dna-interpretation/analyze | POST | Arquivo de DNA, linhas de rsID coladas ou páginas de relatório → relatório abrangente de saúde genética | Obrigatório (1 crédito) |
/api/v1/dna-interpretation/validate | POST | Processar o arquivo enviado e mostrar o que foi encontrado, sem chamada à IA | Obrigatório (Grátis) |
/api/v1/dna-interpretation/sandbox | POST | Relatório genético de exemplo | Obrigatório (Grátis) |
/api/v1/dna-interpretation/info | GET | Entradas aceitas, limites e idiomas de relatório | Não obrigatório |
/api/v1/dna-blood-report/analyze | POST | Relatório de DNA + exame de sangue interpretado → relatório de saúde combinado | Obrigatório (1 crédito) |
/api/v1/dna-blood-report/validate | POST | Verificar o payload sem chamada à IA | Obrigatório (Grátis) |
/api/v1/dna-blood-report/sandbox | POST | Relatório combinado de exemplo | Obrigatório (Grátis) |
/api/v1/dna-blood-report/info | GET | Campos da requisição e limites | Não obrigatório |
/api/v1/dna-supplements/analyze | POST | Relatório de DNA + exame de sangue (opcional) + questionário → plano de suplementação | Obrigatório (1 crédito) |
/api/v1/dna-supplements/validate | POST | Verificar o payload e as respostas sem chamada à IA | Obrigatório (Grátis) |
/api/v1/dna-supplements/sandbox | POST | Plano de suplementação de exemplo | Obrigatório (Grátis) |
/api/v1/dna-supplements/questionnaire | GET | As 25 perguntas e as respectivas respostas permitidas | Não obrigatório |
/api/v1/dna-supplements/settings | GET PUT | Ler ou atualizar o catálogo de produtos e as configurações do consultor da sua clínica | Obrigatório (Grátis) |
/api/v1/dna-supplements/info | GET | Campos da requisição e limites | Não obrigatório |
Interpreta um teste de DNA e devolve um relatório abrangente de saúde genética. Envie um arquivo como multipart/form-data ou linhas de genótipo coladas como JSON. O arquivo enviado é processado na hora, de modo que um arquivo ilegível recebe de imediato a resposta 400 e não tem custo. O crédito só é cobrado depois de o relatório ter sido produzido.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu nome de usuário API (ou use a autenticação HTTP Basic) |
password | string | Sim | Sua senha API |
file | file | Sim* | Um arquivo bruto de genótipo (.txt, .csv, .tsv, .vcf, .zip, .gz, até 80 MB) ou até 6 arquivos de relatório (PDF até 20 MB, JPG/PNG até 10 MB cada). *Envie file ou genotype_text. |
genotype_text | string | Sim* | Linhas de genótipo coladas (rsID, cromossomo, posição, genótipo), até 2.000.000 caracteres |
language | string | Não | Código do idioma do relatório, por exemplo en, de, ar (padrão: en). Consulte a Referência de Idiomas Suportados. |
patient | object | Não | age, sex, diagnoses, comorbidities, medications, treatments, notes. Em uma requisição multipart, envie-o como string JSON. |
source_label | string | Não | Um nome à sua escolha para a fonte, até 120 caracteres |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-interpretation/analyze?async=1" \
-u "SEU_USUARIO:SUA_SENHA" \
-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 "SEU_USUARIO:SUA_SENHA" "https://app.aibloodtestinterpret.com/api/jobs/JOB_ID"
Exemplo Python
import time
import requests
BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("SEU_USUARIO", "SUA_SENHA")
def run(path, poll=True, **kwargs):
"""POST em modo assíncrono; depois consulta /api/jobs/<id> até o relatório ficar pronto."""
resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
body = resp.json()
if resp.status_code != 202:
return body # um erro ou uma resposta 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) Interpretação de testes de DNA
with open("genome_raw_data.txt", "rb") as fh:
dna = run("/api/v1/dna-interpretation/analyze",
files={"file": fh},
data={"language": "en", "patient": '{"age": 41, "sex": "female"}'})
report = dna["data"]["report"]
print(report["executive_summary"])
for section in report["sections"]:
print(section["title"], "-", section["risk_level"])
Exemplo de Resposta
{
"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"
}
Referência dos campos de resposta
| Campo | Tipo | Descrição |
|---|---|---|
source | object | O que foi lido: kind (raw, text ou document), o formato e a versão do genoma de referência detectados, o número de registros e de genótipos determinados, quantos dos 334 marcadores do painel foram encontrados e os avisos do parser |
report.overall_assessment.level | string | typical, slightly_elevated, elevated ou high |
report.sections[] | array | Uma entrada por área de saúde, com um risk_level e os respectivos 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 | Fenótipo metabolizador previsto por gene e as classes de medicamentos que pode afetar. O relatório nunca indica doses de prescrição. |
report.carrier_status[] | array | carrier, not_detected, affected_pattern ou inconclusive, a confirmar sempre por teste genético clínico |
report.disease_risks[], nutrigenomics[], traits[] | array | Riscos de doenças, achados nutricionais e características, com os genes que os explicam |
report.recommended_tests[], red_flags[] | array | Exames de acompanhamento com o respectivo motivo e achados que exigem atenção imediata |
Processa o arquivo enviado exatamente como /analyze e informa o que foi encontrado, sem chamada à IA. É necessária autenticação; não há consumo de créditos. Use-o para verificar um arquivo antes de gastar um crédito.
Exemplo de Resposta
{
"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 um relatório de DNA com um exame de sangue interpretado em um único relatório de saúde. Cada ligação entre um achado genético e um valor laboratorial é classificada, seguida de uma matriz de risco, ações prioritárias e um plano de monitoramento. Consome 1 crédito por requisição bem-sucedida.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dna_report | object | Sim | O relatório de /api/v1/dna-interpretation/analyze: data.report, o objeto data completo ou a resposta inteira |
blood_test | object|array | Sim | Um exame de sangue interpretado tal como a API de Análise de Exames de Sangue o devolve (metadata, parameters, interpretation), ou apenas uma lista de até 500 parâmetros com um nome e um result |
language | string | Não | Código do idioma do relatório (padrão: en) |
patient | object | Não | Os mesmos campos que na Interpretação de Testes de DNA |
Exemplo Python
# 2) Relatório de saúde DNA + sangue (usa run() e dna do exemplo acima)
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"])
Exemplo de Resposta
{
"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."
}
}
}
Referência dos campos de resposta
| Campo | Tipo | Descrição |
|---|---|---|
report.overall_status.level | string | good, watch, attention ou urgent |
report.correlations[].concordance | string | confirms, contradicts, neutral ou watch |
report.risk_matrix[] | array | Por área: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) e uma avaliação combinada |
report.priority_actions[] | array | priority (high, medium, low), a ação e a respectiva justificativa |
report.monitoring_plan[] | array | Qual marcador reavaliar, quando e com que objetivo |
Elabora um plano de suplementação personalizado a partir do relatório de DNA, das respostas ao questionário e, opcionalmente, de um exame de sangue interpretado. O catálogo de produtos e as configurações do consultor da sua clínica são aplicados automaticamente. Consome 1 crédito por requisição bem-sucedida.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dna_report | object | Sim | O relatório de /api/v1/dna-interpretation/analyze |
answers | object | Sim | Respostas ao questionário. diet_type e pregnancy são obrigatórios; consulte GET /api/v1/dna-supplements/questionnaire para ver as 25 perguntas. Chaves e valores desconhecidos são descartados. |
blood_test | object|array | Não | O mesmo formato que no Relatório de Saúde DNA + Sangue |
use_clinic_catalogue | boolean | Não | Aplicar o catálogo de produtos e as configurações da sua clínica (padrão: true) |
language | string | Não | Código do idioma do relatório (padrão: en) |
patient | object | Não | Os mesmos campos que na Interpretação de Testes de DNA. Os medicamentos indicados aqui são verificados quanto a interações. |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/analyze?async=1" \
-u "SEU_USUARIO:SUA_SENHA" \
-H "Content-Type: application/json" \
-d '{
"dna_report": { ...data.report da interpretação de DNA... },
"answers": {"diet_type": "vegetarian", "pregnancy": "no", "sun_exposure": "low", "goals": ["energy", "immunity"]},
"language": "en"
}'
Exemplo Python
# 3) Plano de suplementação (usa run(), dna e blood_test dos exemplos acima)
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"])
Exemplo de Resposta
{
"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."
}
}
}
Referência dos campos de resposta
| Campo | Tipo | Descrição |
|---|---|---|
catalogue | object | O modo de catálogo aplicado (prefer, only, off) e quantos produtos da clínica estavam disponíveis |
report.recommendations[] | array | name, form, dose, timing, duration, priority, a rationale genética / laboratorial / do questionário, evidence, cautions, interactions e retest |
report.recommendations[].source | string | clinic_library para um produto do seu catálogo (indicado em product); caso contrário, evidence_based |
report.uncovered_needs[] | array | No modo “apenas produtos da clínica”: necessidades que o seu catálogo não cobre |
report.clinician_review_required[] | array | Tudo o que exige a decisão de um prescritor: interações, gravidez, doença renal ou hepática, anticoagulantes, doses próximas do nível máximo de ingestão |
report.avoid_or_caution[], dietary_sources[], retest_plan[] | array | O que evitar, fontes alimentares de cada nutriente e quando repetir os exames |
Lê ou atualiza o catálogo de produtos e as configurações do consultor da sua clínica. É o mesmo catálogo do painel da clínica e da IA Nutricional, de modo que um produto adicionado em um lugar fica disponível em todos. É necessária autenticação; não há consumo de créditos. Envie catalogue, settings ou ambos; o catálogo substitui a lista inteira.
| Campo | Tipo | Descrição |
|---|---|---|
catalogue[] | array | Até 200 produtos: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description |
settings.mode | string | prefer (produtos da clínica quando forem adequados; caso contrário, sugestões baseadas em evidências), only (apenas produtos da clínica) ou off (ignorar o catálogo) |
settings.instructions | string | As suas próprias instruções para a IA, até 1.500 caracteres. As regras de segurança têm sempre prioridade. |
settings.max_items | integer | Número máximo de recomendações por plano, de 3 a 12 |
Exemplo cURL
curl -X PUT "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/settings" \
-u "SEU_USUARIO:SUA_SENHA" \
-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 referência
GET /api/v1/dna-supplements/questionnaire lista as 25 perguntas (dieta, refeições, frutas e legumes, peixe, carne vermelha, laticínios, álcool, tabagismo, cafeína, exposição solar, exercício físico, sono, estresse, digestão, energia, suplementos atuais, medicamentos, alergias, doenças, gravidez, objetivos, orçamento, forma preferida e observações) com os respectivos tipos e valores permitidos. Os três endpoints /info devolvem as entradas aceitas, os limites, o custo em créditos e a lista completa de idiomas de relatório. Nenhum deles exige autenticação.
Sandbox e modo assíncrono
POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox e /api/v1/dna-supplements/sandbox devolvem um relatório de exemplo exatamente com o formato que /analyze produz. É necessária autenticação; não há consumo de créditos.
Um relatório de IA leva normalmente de um a três minutos. Adicione ?async=1 (ou o cabeçalho X-Async: 1) e a requisição responde de imediato com 202 e um job_id. Consulte GET /api/jobs/<job_id> com as mesmas credenciais até que status seja completed ou failed. A resposta final fica em result.response, idêntica à resposta síncrona.
| Código de erro | HTTP | Significado |
|---|---|---|
AUTH_1001 | 401 | Credenciais de autenticação faltantes |
AUTH_1002 | 401 | Usuário ou senha inválidos |
QUOTA_1101 | 403 | Cota API insuficiente |
VAL_2001 | 400 | Falta um campo obrigatório: file ou genotype_text, dna_report, blood_test ou uma resposta obrigatória |
VAL_2002 | 400 | Dados de genótipo ilegíveis, tipo de arquivo não suportado, JSON inválido ou dna_report inválido |
VAL_2003 | 400 | Idioma de relatório não suportado |
VAL_2006 | 400 | Limite excedido: texto colado, parâmetros do exame de sangue (500) ou catálogo (200 produtos) |
VAL_2007 | 400 | Objeto patient inválido |
VAL_2008 | 400 | Nenhum parâmetro de exame de sangue utilizável (nome e resultado) |
PROC_3003 | 500 | Não foi possível produzir ou validar a resposta da IA; tente novamente. Nenhum crédito é cobrado. |
RES_4005 | 503 | Os módulos de DNA estão desabilitados nesta instalação |
A API DNA Health produz informação gerada por IA destinada ao médico responsável pelo paciente. Não constitui um diagnóstico nem uma prescrição. Os chips de genotipagem destinados ao consumidor não equivalem a sequenciamento clínico: confirme os achados acionáveis e de portador com testes genéticos clínicos validados antes de agir com base neles.
ICR - Reconhecimento Inteligente de Caracteres API
A API Kantesti ICR (Reconhecimento Inteligente de Caracteres) é uma tecnologia avançada de extração de texto de documentos que vai muito além do OCR tradicional. Alimentada pelo motor de IA proprietário da Kantesti, o ICR fornece saída JSON estruturada de qualquer tipo de documento.
Kantesti ICR vs OCR Tradicional
Em testes de benchmark, o Kantesti ICR demonstrou desempenho 79% superior em comparação com soluções OCR tradicionais. O ICR entende a estrutura do documento, preserva layouts de tabelas, extrai metadados e retorna JSON estruturado limpo.
- Saída JSON Estruturada — Tabelas, seções, metadados e texto bruto em formato JSON limpo
- Detecção de Tipo de Documento — Identifica automaticamente relatórios médicos, faturas, formulários, cartas, etc.
- Extração de Tabelas — Preserva cabeçalhos e dados das linhas com estrutura completa
- Suporte Multi-formato — Processamento de documentos PDF, JPG, JPEG, PNG
- Integração Análise de Sangue (Kan) — Endpoint especializado para extração de documentos de análise de sangue
- Modo Sandbox — Teste a integração sem consumir créditos
- Sistema de Créditos — 0,5 créditos por chamada API
Resumo dos Endpoints ICR
| Endpoint | Método | Descrição | Custo |
|---|---|---|---|
/api/icr/v1/extract | POST | Extração de texto ICR | 0,5 crédito |
/api/icr/v1/sandbox | POST | Teste sandbox ICR | Grátis |
/api/icr/v1/kan | POST | Análise de documentos de sangue | 0,5 crédito |
/api/icr/v1/kan/sandbox | POST | Teste sandbox análise de sangue | Grátis |
/api/icr/info | GET | Documentação e recursos da API | Grátis |
/api/icr/health | GET | Endpoint de verificação de saúde | Grátis |
/api/icr/v1/quota | POST | Verificar créditos ICR restantes | Grátis |
Extrai todo o conteúdo textual de documentos carregados usando a tecnologia ICR da Kantesti.
Parâmetros da Requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username | string | Sim | Seu nome de usuário API |
password | string | Sim | Sua senha API |
file | file | Sim | Arquivo de documento (PDF, JPG, JPEG, PNG) |
language | string | Não | Idioma de saída (padrão: en) |
Exemplo cURL
curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/extract" \
-F "username=SEU_USUARIO" \
-F "password=SUA_SENHA" \
-F "language=pt" \
-F "[email protected]"
Exemplo Python
import requests
def icr_extract(file_path: str, username: str, password: str, language: str = "pt"):
"""
Extrair texto de um documento com a API ICR Kantesti.
79% mais rápido e 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()
# Exemplo de uso
result = icr_extract("relatorio_medico.pdf", "usuario", "senha", "pt")
print(f"Tipo de documento: {result['data']['document_type']}")
print(f"Páginas: {result['data']['page_count']}")
Exemplo de Resposta
{
"status": "success",
"data": {
"document_type": "blood_test_report",
"page_count": 1,
"pages": [{"page_number": 1, "content": {"raw_text": "Hospital Universitário de Colônia - Hemograma...", "sections": [{"type": "header", "content": "Hemograma"}], "tables": [{"headers": ["Teste", "Resultado", "Unidade", "Faixa de Referência"], "rows": [["Glicose", "92", "mg/dL", "74 - 100"], ["ALT", "22", "U/L", "< 35"]]}]}}],
"metadata": {"detected_language": "pt", "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
Teste sua integração ICR sem consumir créditos. Os endpoints sandbox retornam dados de exemplo realistas.
| API | Endpoint Sandbox | Descrição |
|---|---|---|
| ICR Extract | /api/icr/v1/sandbox | Retorna dados de exemplo de extração ICR |
| ICR Kan | /api/icr/v1/kan/sandbox | Retorna dados de exemplo de parâmetros de exame de sangue |
Desempenho ICR vs OCR
| Métrica | Kantesti ICR | OCR Tradicional | Melhoria |
|---|---|---|---|
| Velocidade de Processamento | 1,2s média | 5,7s média | 79% mais rápido |
| Precisão do Texto | 99,7% | 92,1% | +7,6% |
| Detecção de Tabelas | 98,9% | 71,2% | +27,7% |
| Saída Estruturada | JSON com seções, tabelas, metadados | Texto bruto não estruturado | Estrutura completa |
| Suporte Multilíngue | 100+ idiomas | 30-50 idiomas | 2x+ cobertura |