Endpoints da API de análises de sangue

Última atualização:

Referência completa para todos os endpoints da API de Exames de Sangue Kantesti com exemplos de código em múltiplas linguagens.

Novo em 23 de setembro de 2026: a API DNA Health

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.

URL Base
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.

Atualizações Mais Recentes (2026)

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.

APIEndpointStatus
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

DataVersãoAlteraçõ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ãoEndpointStatus
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
Nota

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.

Idioma Padrão

Se nenhum parâmetro language for fornecido, a API retorna respostas em inglês (en).

Principais Idiomas Mundiais

CódigoIdiomaNome Nativo
enInglêsEnglish
zhChinês中文
esEspanholEspañol
arÁrabeالعربية
hiHindiहिन्दी
ptPortuguêsPortuguês
ruRussoРусский
jaJaponês日本語
frFrancêsFrançais
deAlemãoDeutsch
koCoreano한국어
trTurcoTürkçe

Idiomas Europeus

CódigoIdiomaNome Nativo
itItalianoItaliano
nlHolandêsNederlands
plPolonesPolski
elGregoΕλληνικά
svSuecoSvenska
noNorueguêsNorsk
daDinamarquêsDansk
fiFinlandêsSuomi
csTchecoČeština
ukUcranianoУкраїнська
roRomenoRomână
huHúngaroMagyar
bgBúlgaroБългарски
hrCroataHrvatski
skEslovacoSlovenčina
slEslovenoSlovenščina
srSérvioСрпски
ltLituanoLietuvių
lvLetãoLatviešu
etEstonianoEesti
caCatalãoCatalà
euBascoEuskara
glGalegoGalego
cyGalêsCymraeg
gaIrlandêsGaeilge
isIslandêsÍslenska
mtMaltêsMalti
sqAlbanêsShqip
mkMacedonioМакедонски
bsBosnioBosanski
lbLuxemburguêsLëtzebuergesch
beBielorrussoБеларуская

Idiomas do Oriente Médio e Ásia Central

CódigoIdiomaNome Nativo
heHebraicoעברית
faPersaفارسی
azAzerbaijanoAzərbaycan
kaGeorgianoქართული
hyArménioՀայdelays
kkCazaqueҚазақша
uzUzbequeOʻzbek
tgTadjiqueТоҷикӣ
kyQuirguizКыргызча
tkTurcomanoTürkmen
mnMongolМонгол
psPachtoپښتو
kuCurdoKurdî

Idiomas do Sul da Ásia

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

Idiomas do Sudeste Asiático

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

Idiomas Africanos

CódigoIdiomaNome Nativo
afAfricanerAfrikaans
swSuailiKiswahili
amAmáricoአማርኛ
haHaucaHausa
yoIorubaYorùbá
igIgboIgbo
zuZuluisiZulu
xhXhosaisiXhosa
soSomaliSoomaali
mgMalgaxeMalagasy

Outros Idiomas

CódigoIdiomaNome Nativo
laLatimLatina
eoEsperantoEsperanto
yiIídicheייִדיש
htCrioulo HaitianoKreyòl Ayisyen
miMaoriTe Reo Māori
smSamoanoGagana Samoa
toTonganêsLea Faka-Tonga
hawHavaianoʻŌ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.

POST /api/v12/18-09-2026/analyze Mais Recente

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âmetroTipoObrigatórioDescrição
usernamestringSimSeu nome de usuário API
passwordstringSimSua senha API
filefileSimImagem do exame de sangue (PNG, JPG, WEBP) ou PDF. Máx. 20MB. Repita o campo para enviar várias imagens.
languagestringNãoCódigo do idioma da resposta (padrão: en). Ver idiomas suportados.
pdf_passwordstringNãoSenha 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"
}
POST /api/v11/01-06-2025/analyze Estável

Endpoint de produção para análise de exames de sangue. Consome 1 crédito por requisição.

Parâmetros da Requisição

ParâmetroTipoObrigatórioDescrição
usernamestringSimSeu usuário da API
passwordstringSimSua senha da API
filefileSimImagem do exame de sangue (PNG, JPG, WEBP) ou arquivo PDF. Max 20MB.
languagestringNãoCó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
CampoTipoDescrição
statusstring"success" ou "error"
dataobjectContém todos os resultados da análise
timestampstringTimestamp ISO 8601 da resposta
api_versionstringVersão da API utilizada
Objeto data.metadata
CampoTipoDescrição
lab_datestringData da coleta de sangue (AAAA-MM-DD)
results_datestringData de emissão dos resultados (AAAA-MM-DD)
lab_namestringNome do laboratório
lab_citystringCidade do laboratório
lab_countrystringPaís do laboratório
patient_namestringNome completo do paciente (apenas metadados, não enviado para interpretação)
patient_agestringIdade do paciente
patient_sexstring"male", "female" ou "other"
Elemento do array data.parameters
CampoTipoDescrição
categorystringCategoria do parâmetro (ex: "Hemograma", "Perfil lipídico")
long_namestringNome completo do parâmetro
short_namestringNome abreviado do parâmetro
resultstringValor medido
unitstringUnidade de medida
range_minstringIntervalo de referência mínimo
range_maxstringIntervalo de referência máximo
evaluationstringStatus do resultado. Ver valores de avaliação
Elemento do array data.interpretation
CampoTipoDescrição
titlestringTítulo da seção (ex: "Avaliação geral de saúde")
contentstringInterpretaçã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"
}
Palavras-chave de resposta

O campo evaluation usa valores padronizados. Ver valores de avaliação.

POST /api/v12/health-score/analyze Mais Recente

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"}
  ]
}
Palavras-chave de resposta

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.

Benefícios do Sandbox
  • 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
APIEndpoint 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
API de Comparação vs API de Análise de Tendências

Escolha a API certa para seu caso de uso:

FuncionalidadeComparação IA de Exames de SangueAnálise de Tendências
Foco PrincipalComparação narrativa IAAnálise estatística de tendências
Processamento IANarrativa IA completaIA aprimorada + estatísticas
Tipo de SaídaResumos narrativosGráficos, estatísticas, padrões
Ideal ParaO que mudou entre examesAcompanhamento de parâmetros a longo prazo
Min Exames22
Max Exames2050

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.

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.

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

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"
}
Palavras-chave de resposta

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.

POST /api/v1/bloodtest/comparison/analyze

Analisa 2-20 exames de sangue e fornece comparação detalhada com insights narrativos gerados por IA.

Requisitos
  • Mínimo de 2 exames de sangue necessários
  • Máximo de 20 exames de sangue por requisição
  • Cada exame deve incluir lab_date ou results_date
  • Pelo menos um parâmetro comum entre os exames

Parâmetros da Requisição

ParâmetroTipoObrigatórioPadrãoDescrição
usernamestringSim-Seu usuário da API
passwordstringSim-Sua senha da API
languagestringNãoenIdioma da resposta. Ver idiomas suportados
blood_testsarraySim-Array de objetos de exames de sangue (2-20 exames)

Estrutura do Array blood_tests

CampoTipoObrigatórioDescrição
lab_datestringSim*Data do teste no formato YYYY-MM-DD
results_datestringSim*Alternativa ao lab_date (YYYY-MM-DD)
parametersarraySimArray de parâmetros de exames de sangue
metadataobjectNãoMetadados 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

CampoTipoDescrição
comparison_idstringIdentificador único desta comparação (formato: CMP-XXXXXXXX)
comparison_summaryobjectResumo geral: key_findings, overall_trend, datas dos relatórios, time_interval
parameter_analysisarrayAnálise detalhada por parâmetro com tipo de mudança e significância clínica
health_assessmentobjectÁreas de preocupação, melhoria, desenvolvimentos positivos, fatores de risco
recommendationsobjectTestes de acompanhamento, ações imediatas, modificações de estilo de vida, encaminhamentos a especialistas
detailed_interpretationobjectSeções narrativas de IA com resumo executivo e recomendações clínicas

Estrutura do Objeto parameter_analysis

CampoTipoDescrição
parameter_namestringNome do parâmetro
report1_valuestringValor do primeiro relatório com unidade
report2_valuestringValor do segundo relatório com unidade
change_typestringincreased, decreased ou stable
change_magnitudestringsignificant, moderate ou minor
clinical_significancestringExplicação da IA sobre o que a mudança significa
trend_assessmentstringpositive, 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
  }
}
Palavras-chave de Resposta

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.

ValorPadrãoDescrição
comprehensive✓Análise completa com estatísticas, gráficos e interpretação IA
statisticalApenas análise estatística
summaryApenas 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.

ValorDescrição
maintainManter saúde atual (padrão)
improve_energyFoco nos níveis de energia
weight_managementGerenciamento saudável de peso
heart_healthSaúde cardiovascular
immune_supportSuporte ao sistema imunológico
digestive_healthBem-estar digestivo
bone_healthSaúde óssea
mental_clarityFunçã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.

ValorDescrição
low_sodiumIngestão reduzida de sódio
low_sugarIngestão reduzida de açúcar
low_fatIngestão reduzida de gordura
gluten_freeSem glúten
dairy_freeSem laticínios
nut_freeSem nozes
soy_freeSem soja
egg_freeSem ovos
halalConforme halal
kosherConforme kosher
Nota

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.

ValorDescrição
omnivoreSem restrições (padrão)
vegetarianSem carne
veganSem produtos animais
pescatarianVegetariano + peixe
ketoDieta cetogênica
paleoDieta paleolítica
mediterraneanDieta mediterrânea

activity_level API Nutrição

Nível de atividade física para cálculos calóricos e nutricionais.

ValorDescrição
sedentaryPouco ou nenhum exercício
lightExercício leve 1-3 dias/semana
moderateExercício moderado 3-5 dias/semana (padrão)
activeExercício intenso 6-7 dias/semana
very_activeExercício muito intenso ou trabalho físico

budget API Nutrição

Nível de orçamento para recomendações de alimentos e suplementos.

ValorDescrição
lowOpções econômicas
moderateOpções equilibradas (padrão)
highOpções premium

gender Todas as APIs

Sexo do paciente para faixas de referência e recomendações personalizadas.

ValorDescrição
malePaciente masculino
femalePaciente feminino
otherOutro 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.

ValorDescrição
normalDentro da faixa de referência normal
lowAbaixo da faixa normal
highAcima da faixa normal
critical_lowCriticamente baixo (atenção imediata necessária)
critical_highCriticamente alto (atenção imediata necessária)
borderline_lowLigeiramente abaixo da faixa normal
borderline_highLigeiramente acima da faixa normal

trend_assessment APIs Comparação & Tendências

Avaliação geral das tendências dos parâmetros entre os testes.

ValorDescrição
positiveMelhorado (em direção à faixa normal)
negativePiorado (afastando-se da faixa normal)
stableRelativamente inalterado entre os testes
improvingTendência geral de melhoria
worseningTendê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.

ValorDescrição
upwardValores aumentando ao longo do tempo
downwardValores diminuindo ao longo do tempo
stableMudança mínima ao longo do tempo

trend_strength API Análise de tendências

Magnitude da tendência observada.

ValorDescrição
strong>15% de mudança entre os períodos
moderate5-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.

ValorDescrição
excellentTodos os marcadores na faixa ideal
goodA maioria dos marcadores na faixa normal
fairAlguns marcadores precisam de atenção
poorMúltiplos marcadores precisam de atenção

Endpoints Utilitários

POST /api/quota/check

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

Publicado: 23 de março de 2026

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.

100+
Idiomas
9
Categorias de patologias
14
Relações familiares

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.

Funcionalidades principais
  • 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

EndpointMétodoDescriçãoAuth
/api/v1/family-health/analyzePOSTGera relatório completo de avaliação de riscosObrigatório (1 crédito)
/api/v1/family-health/validatePOSTVálida os dados da solicitação (sem consumo de cota)Obrigatório (Gratuito)
/api/v1/family-health/supported-languagesGETLista 100+ idiomas suportadosNão obrigatório
/api/v1/family-health/condition-categoriesGETLista categorias de patologiasNão obrigatório
/api/v1/family-health/family-relationsGETLista tipos de relações familiaresNão obrigatório
/api/v1/family-health/sandbox/analyzePOSTTeste sandbox com dados de exemploObrigatório (Gratuito)
POST /api/v1/family-health/analyze Publicado 23.03.2026

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âmetroTipoObrigatórioDescrição
usernamestringSimNome de usuário da API
passwordstringSimSenha da API
patient_dataobjectSimInformações do paciente
family_membersarraySim*Membros da família (máx. 100)
health_profileobjectSim*Perfil de saúde
blood_test_dataarrayNãoDados de exames de sangue
languagestringNãoCó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ódigoHTTPDescrição
AUTH_1001401Credenciais ausentes
AUTH_1002401Credenciais inválidas
QUOTA_1101403Cota de API insuficiente
VAL_2001400Campo obrigatório ausente
VAL_2003400Código de idioma não suportado
PROC_3001500Falha na geração do relatório
SRV_5001500Erro interno do servidor

Endpoint Sandbox Family Health

Teste sua integração sem consumir créditos.

APISandboxDescrição
Family Health/api/v1/family-health/sandbox/analyzeDados de relatório de exemplo

Endpoints de referência (Sem auth)

EndpointMétodoDescrição
/api/v1/family-health/supported-languagesGET100+ idiomas suportados
/api/v1/family-health/condition-categoriesGET9 categorias de patologias
/api/v1/family-health/family-relationsGET14 relações familiares

API de Mapa Corporal

Publicado: 18 de setembro de 2026

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.

13
Regiões corporais
39
Idiomas de entrada
0
Chamadas ao modelo por padrão

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.

Características principais
  • 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

EndpointMétodoDescriçãoAuth
/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
POST /api/v1/body-map/analyze Publicado 18.09.2026

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âmetroTipoObrigatórioDescrição
usernamestringSimSeu nome de usuário API
passwordstringSimSua senha API
parametersarraySimObjetos de resultados laboratoriais. Máx. 500. Cada um precisa de um nome de analito e de um campo evaluation.
interpretationarrayNãoInterpretação clínica, usada apenas como contexto quando ai_assist está ativado
ai_assistbooleanNãoPermitir que o modelo posicione os marcadores que as tabelas de sinônimos não reconhecem (padrão: false)
include_imagebooleanNãoSolicitar a ilustração renderizada (padrão: false)
image_waitintegerNãoSegundos de espera por uma ilustração recém-gerada, 0-30 (padrão: 0)

Campos do objeto parameters

CampoTipoObrigatórioDescrição
short_namestringSim*Nome do analito conforme impresso pelo laboratório. *É obrigatório pelo menos um entre short_name, long_name, name, parameter_name ou parameter.
long_namestringNãoNome completo do analito; melhora a correspondência de abreviaturas
evaluationstringNãoUm entre high, low, bad, slightly_high, slightly_low, normal. Apenas os valores sinalizados aparecem no mapa.
resultstring|numberNãoO valor medido; usado para ordenar quais regiões são desenhadas
unitstringNãoUnidade do resultado, em qualquer grafia
range_normal_minnumberNãoLimite inferior do intervalo de referência
range_normal_maxnumberNãoLimite superior do intervalo de referência
categorystringNãoCategoria 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

CampoTipoDescrição
body_map.specstringIdentificador 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[].keystringUma das 13 chaves de região
body_map.regions[].levelinteger2 = fora do intervalo, 1 = limítrofe
body_map.regions[].drawnbooleanSe 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[].markersarrayNomes dos marcadores que colocaram esta região no mapa, do pior para o melhor
body_map.unmappedintegerMarcadores sinalizados que não puderam ser posicionados em nenhuma região
body_map.image_urlstring|nullIlustração em cache. null até o arquivo existir — use fallback_url como alternativa.
body_map.fallback_urlstringURL de geração assinada. Sempre presente. Responde 503 com Retry-After enquanto a ilustração ainda está sendo produzida.
all_clearbooleantrue quando nada foi sinalizado; aplica-se o corpo compartilhado "tudo certo"
modestringdeterministic ou ai_assisted
Como exibir a legenda

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.

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

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.

GET /api/v1/body-map/regions

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

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 erroHTTPSignificado
AUTH_1001401Credenciais de autenticação faltantes
AUTH_1002401Usuário ou senha inválidos
AUTH_1004400Credenciais malformadas (tipo incorreto ou demasiado longas)
QUOTA_1101403Cota API insuficiente
VAL_2001400parameters está ausente
VAL_2002400Formato de dados inválido
VAL_2005400parameters está vazio
VAL_2006400Mais de 500 parâmetros
VAL_2008400Uma linha de parâmetros está malformada ou sem nome
RES_4004422Existem resultados sinalizados, mas nenhum corresponde a uma região corporal
RES_4005503O motor de mapa corporal está desabilitado nesta instalação

API de Idade Biológica do Sangue

Publicado: 18 de setembro de 2026

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.

9
Marcadores PhenoAge
18
Índices derivados
39
Idiomas de entrada

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.

Características principais
  • 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

EndpointMétodoDescriçãoAuth
/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
POST /api/v1/blood-age/analyze Publicado 18.09.2026

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âmetroTipoObrigatórioDescrição
usernamestringSimSeu nome de usuário API
passwordstringSimSua senha API
parametersarraySimObjetos de resultados laboratoriais. Máx. 500. Cada um precisa de um nome de analito e de um resultado.
metadataobjectNãoCabeçalho do relatório. Fortemente recomendado: o PhenoAge inclui um termo de idade cronológica. Lê patient_age, patient_sex, dob, lab_date.
patientobjectNão{"age": 42, "gender": "female"} — usado quando os metadados não os trazem
interpretationarrayNãoInterpretação clínica, usada apenas como contexto para o modelo
languagestringNãoIdioma da nota pessoal opcional (padrão: en). Ver idiomas suportados.
ai_assistbooleanNãoPermitir que o modelo identifique nomes de analitos incomuns (padrão: false)
ai_estimatebooleanNãoPermitir que o modelo melhore uma idade parcial (padrão: false)
ai_notebooleanNãoSolicitar 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.

MarcadorNome habitualUnidade de destino
albuminAlbuminag/L
creatinineCreatininaµmol/L
glucoseGlicose / Glicemia de jejummmol/L
crpProteína C reativamg/L
lymphLinfócitos%
mcvVolume corpuscular médiofL
rdwAmplitude de distribuição eritrocitária%
alpFosfatase alcalinaU/L
wbcContagem de leucócitos10⁹/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

CampoTipoDescrição
summary.statusstringok, missing_age, missing_markers, needs_markers ou unavailable
summary.sourcestringformula (os nove marcadores), partial (medianas imputadas) ou ai (estimativa do modelo, apenas com ai_estimate)
summary.chronological_ageinteger|nullIdade lida dos metadados ou do objeto patient
summary.biological_agenumber|nullA idade do sangue calculada, em anos
summary.delta_yearsnumber|nullBiológica menos cronológica. Um valor negativo significa mais jovem que o calendário.
summary.markers_missingarrayQuais dos nove marcadores PhenoAge o painel não forneceu
blood_age.age.inputsobjectOs valores convertidos efetivamente utilizados, nas unidades de destino
blood_age.age.labelsobjectO nome próprio do seu laboratório para cada marcador que o motor reconheceu
blood_age.indices[].bandstringok, borderline, high, low ou info
blood_age.indices[].fromarrayAs linhas laboratoriais das quais este índice foi derivado
modestringdeterministic ou ai_assisted
Forneça uma idade cronológica

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.

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

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.

GET /api/v1/blood-age/biomarkers

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

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 erroHTTPSignificado
AUTH_1001401Credenciais de autenticação faltantes
AUTH_1002401Usuário ou senha inválidos
AUTH_1004400Credenciais malformadas (tipo incorreto ou demasiado longas)
QUOTA_1101403Cota API insuficiente
VAL_2001400parameters está ausente
VAL_2002400Formato de dados inválido
VAL_2003400Código de idioma não suportado
VAL_2005400parameters está vazio
VAL_2006400Mais de 500 parâmetros
VAL_2007400Objeto patient inválido
VAL_2008400Uma linha de parâmetros está malformada ou sem nome
VAL_2009400Valor de patient.gender não suportado
RES_4004422Nada computável a partir destes parâmetros
RES_4005503O 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

Publicado: 23 de setembro de 2026

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.

334
Marcadores de DNA selecionados
20
Categorias de saúde
100+
Idiomas de relatório

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.

Características principais
  • Todas as fontes de DNA habituais — Arquivos brutos da 23andMe, AncestryDNA, MyHeritage, FTDNA e LivingDNA e arquivos VCF, também dentro de .zip ou .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, neutral ou watch, 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_library e, 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=1 e 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
Como os três módulos funcionam em conjunto

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

EndpointMétodoDescriçãoAuth
/api/v1/dna-interpretation/analyzePOSTArquivo de DNA, linhas de rsID coladas ou páginas de relatório → relatório abrangente de saúde genéticaObrigatório (1 crédito)
/api/v1/dna-interpretation/validatePOSTProcessar o arquivo enviado e mostrar o que foi encontrado, sem chamada à IAObrigatório (Grátis)
/api/v1/dna-interpretation/sandboxPOSTRelatório genético de exemploObrigatório (Grátis)
/api/v1/dna-interpretation/infoGETEntradas aceitas, limites e idiomas de relatórioNão obrigatório
/api/v1/dna-blood-report/analyzePOSTRelatório de DNA + exame de sangue interpretado → relatório de saúde combinadoObrigatório (1 crédito)
/api/v1/dna-blood-report/validatePOSTVerificar o payload sem chamada à IAObrigatório (Grátis)
/api/v1/dna-blood-report/sandboxPOSTRelatório combinado de exemploObrigatório (Grátis)
/api/v1/dna-blood-report/infoGETCampos da requisição e limitesNão obrigatório
/api/v1/dna-supplements/analyzePOSTRelatório de DNA + exame de sangue (opcional) + questionário → plano de suplementaçãoObrigatório (1 crédito)
/api/v1/dna-supplements/validatePOSTVerificar o payload e as respostas sem chamada à IAObrigatório (Grátis)
/api/v1/dna-supplements/sandboxPOSTPlano de suplementação de exemploObrigatório (Grátis)
/api/v1/dna-supplements/questionnaireGETAs 25 perguntas e as respectivas respostas permitidasNão obrigatório
/api/v1/dna-supplements/settingsGET PUTLer ou atualizar o catálogo de produtos e as configurações do consultor da sua clínicaObrigatório (Grátis)
/api/v1/dna-supplements/infoGETCampos da requisição e limitesNão obrigatório
POST /api/v1/dna-interpretation/analyze Publicado 23.09.2026

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âmetroTipoObrigatórioDescrição
usernamestringSimSeu nome de usuário API (ou use a autenticação HTTP Basic)
passwordstringSimSua senha API
filefileSim*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_textstringSim*Linhas de genótipo coladas (rsID, cromossomo, posição, genótipo), até 2.000.000 caracteres
languagestringNãoCódigo do idioma do relatório, por exemplo en, de, ar (padrão: en). Consulte a Referência de Idiomas Suportados.
patientobjectNãoage, sex, diagnoses, comorbidities, medications, treatments, notes. Em uma requisição multipart, envie-o como string JSON.
source_labelstringNãoUm 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

CampoTipoDescrição
sourceobjectO 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.levelstringtypical, slightly_elevated, elevated ou high
report.sections[]arrayUma entrada por área de saúde, com um risk_level e os respectivos findings
report.sections[].findings[]arraygene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation
report.pharmacogenomics[]arrayFenó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[]arraycarrier, not_detected, affected_pattern ou inconclusive, a confirmar sempre por teste genético clínico
report.disease_risks[], nutrigenomics[], traits[]arrayRiscos de doenças, achados nutricionais e características, com os genes que os explicam
report.recommended_tests[], red_flags[]arrayExames de acompanhamento com o respectivo motivo e achados que exigem atenção imediata
POST /api/v1/dna-interpretation/validate Publicado 23.09.2026

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

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âmetroTipoObrigatórioDescrição
dna_reportobjectSimO relatório de /api/v1/dna-interpretation/analyze: data.report, o objeto data completo ou a resposta inteira
blood_testobject|arraySimUm 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
languagestringNãoCódigo do idioma do relatório (padrão: en)
patientobjectNãoOs 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

CampoTipoDescrição
report.overall_status.levelstringgood, watch, attention ou urgent
report.correlations[].concordancestringconfirms, contradicts, neutral ou watch
report.risk_matrix[]arrayPor área: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) e uma avaliação combinada
report.priority_actions[]arraypriority (high, medium, low), a ação e a respectiva justificativa
report.monitoring_plan[]arrayQual marcador reavaliar, quando e com que objetivo
POST /api/v1/dna-supplements/analyze Publicado 23.09.2026

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âmetroTipoObrigatórioDescrição
dna_reportobjectSimO relatório de /api/v1/dna-interpretation/analyze
answersobjectSimRespostas 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_testobject|arrayNãoO mesmo formato que no Relatório de Saúde DNA + Sangue
use_clinic_cataloguebooleanNãoAplicar o catálogo de produtos e as configurações da sua clínica (padrão: true)
languagestringNãoCódigo do idioma do relatório (padrão: en)
patientobjectNãoOs 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

CampoTipoDescrição
catalogueobjectO modo de catálogo aplicado (prefer, only, off) e quantos produtos da clínica estavam disponíveis
report.recommendations[]arrayname, form, dose, timing, duration, priority, a rationale genética / laboratorial / do questionário, evidence, cautions, interactions e retest
report.recommendations[].sourcestringclinic_library para um produto do seu catálogo (indicado em product); caso contrário, evidence_based
report.uncovered_needs[]arrayNo modo “apenas produtos da clínica”: necessidades que o seu catálogo não cobre
report.clinician_review_required[]arrayTudo 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[]arrayO que evitar, fontes alimentares de cada nutriente e quando repetir os exames
GET PUT /api/v1/dna-supplements/settings Publicado 23.09.2026

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.

CampoTipoDescrição
catalogue[]arrayAté 200 produtos: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (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.instructionsstringAs suas próprias instruções para a IA, até 1.500 caracteres. As regras de segurança têm sempre prioridade.
settings.max_itemsintegerNú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 erroHTTPSignificado
AUTH_1001401Credenciais de autenticação faltantes
AUTH_1002401Usuário ou senha inválidos
QUOTA_1101403Cota API insuficiente
VAL_2001400Falta um campo obrigatório: file ou genotype_text, dna_report, blood_test ou uma resposta obrigatória
VAL_2002400Dados de genótipo ilegíveis, tipo de arquivo não suportado, JSON inválido ou dna_report inválido
VAL_2003400Idioma de relatório não suportado
VAL_2006400Limite excedido: texto colado, parâmetros do exame de sangue (500) ou catálogo (200 produtos)
VAL_2007400Objeto patient inválido
VAL_2008400Nenhum parâmetro de exame de sangue utilizável (nome e resultado)
PROC_3003500Não foi possível produzir ou validar a resposta da IA; tente novamente. Nenhum crédito é cobrado.
RES_4005503Os módulos de DNA estão desabilitados nesta instalação
Apoio à decisão clínica

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

Lançado: 14 de fevereiro de 2026

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.

79%
Mais rápido que OCR
99,7%
Taxa de precisão
100+
Idiomas

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.

Recursos Principais do ICR
  • 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

EndpointMétodoDescriçãoCusto
/api/icr/v1/extractPOSTExtração de texto ICR0,5 crédito
/api/icr/v1/sandboxPOSTTeste sandbox ICRGrátis
/api/icr/v1/kanPOSTAnálise de documentos de sangue0,5 crédito
/api/icr/v1/kan/sandboxPOSTTeste sandbox análise de sangueGrátis
/api/icr/infoGETDocumentação e recursos da APIGrátis
/api/icr/healthGETEndpoint de verificação de saúdeGrátis
/api/icr/v1/quotaPOSTVerificar créditos ICR restantesGrátis
POST /api/icr/v1/extract Lançado 14.02.2026

Extrai todo o conteúdo textual de documentos carregados usando a tecnologia ICR da Kantesti.

Parâmetros da Requisição

ParâmetroTipoObrigatórioDescrição
usernamestringSimSeu nome de usuário API
passwordstringSimSua senha API
filefileSimArquivo de documento (PDF, JPG, JPEG, PNG)
languagestringNãoIdioma 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.

APIEndpoint SandboxDescrição
ICR Extract/api/icr/v1/sandboxRetorna dados de exemplo de extração ICR
ICR Kan/api/icr/v1/kan/sandboxRetorna dados de exemplo de parâmetros de exame de sangue

Desempenho ICR vs OCR

Resultados de Benchmark — Kantesti ICR vs OCR Tradicional
MétricaKantesti ICROCR TradicionalMelhoria
Velocidade de Processamento1,2s média5,7s média79% mais rápido
Precisão do Texto99,7%92,1%+7,6%
Detecção de Tabelas98,9%71,2%+27,7%
Saída EstruturadaJSON com seções, tabelas, metadadosTexto bruto não estruturadoEstrutura completa
Suporte Multilíngue100+ idiomas30-50 idiomas2x+ cobertura