ZUREE API
EN PT-BR ES
Agendar demo técnica
API de inteligência de documentos clínicos · V1

Documentos médicos entram. Dados clínicos estruturados saem.

Equipes de sinistros e plataformas de telemedicina perdem semanas com PDFs de laboratório, receitas digitalizadas e resumos clínicos enviados por fax. A Zuree lê esses arquivos e devolve fatos normalizados e codificados em LOINC — cada um com um índice de confiança e procedência até o documento de origem exato.

Uma única API REST. Uploads idempotentes, webhooks assinados, um SDK TypeScript tipado e uma representação FHIR R4 de tudo o que é extraído.

Tipos de documento
Laudos laboratoriais · Receitas · Resumos clínicos
Todo fato retorna com
Codificação · Confiança · Procedência
POST /v1/documents/:id/process
Resposta · 202 Accepted
{ "jobId": "job_8Kd2", "status": "QUEUED" }
Webhook · document.processing_completed
{
  "type": "document.processing_completed",
  "data": {
    "documentId": "doc_3Fq9",
    "documentType": "LAB_REPORT",
    "processingStatus": "PROCESSED"
  }
}
GET /v1/patients/:id/observations
{
  "display": "Hemoglobin",
  "coding": { "system": "LOINC", "code": "718-7" },
  "valueNumeric": 13.5, "unit": "g/dL",
  "interpretation": "LOW",
  "confidence": 0.93,
  "provenance": { "documentId": "doc_3Fq9",
                  "method": "AI_TEXT" }
}
01 · O problema

O histórico clínico chega como documento, não como dado.

Um único sinistro ou cadastro pode envolver uma dúzia de arquivos de uma dúzia de laboratórios, cada um com seu próprio layout, unidades e abreviações. Alguém tem de ler tudo.

Abstração manual não escala

Enfermeiros revisores e reguladores de sinistro redigitam valores em formulários. A vazão fica limitada ao quadro de pessoal, e o custo por arquivo nunca cai.

OCR bruto não é resposta

Um despejo de texto ainda precisa ser classificado, codificado e ter unidades normalizadas antes que um motor de regras ou modelo possa usá-lo.

Extração sem origem é inútil

Se o revisor não consegue rastrear um valor até a página de onde veio, ele não sustenta uma decisão que precise ser defendida.

Construir internamente é um desvio

OCR, detecção de templates, versionamento de prompts, validação de schema, retentativas idempotentes, trilhas de auditoria. Meses de trabalho que não são o seu produto.

02 · Como funciona

Dez estágios com checkpoint, em ordem fixa.

Cada estágio é idempotente e tem checkpoint por documento. Uma retentativa retoma de onde parou — nunca duplica trabalho nem cobra novamente uma chamada de IA de um estágio já concluído.

Estágio 01 de 10

Ingestão

O arquivo entra em armazenamento de objetos privado, indexado por tenant mais um SHA-256 dos seus bytes. Esse hash é a identidade do documento, então um reenvio idêntico resolve para o documento existente em vez de criar um segundo.

O que o registro grava
stage: INGESTION
status: ok  ·  42ms
sha256: 9f2c…a71b
dedupe: miss

Toda execução é auditável: um registro de estágios com tempos, tokens, custo e decisões de escalonamento. A saída da IA é tratada como entrada não confiável — passa por validação de schema antes de qualquer leitura a jusante, e JSON reparado é sinalizado como reparado, nunca devolvido como limpo.

03 · Antes e depois

Clique em uma linha do laudo. Veja o fato que ela vira.

Procedência não é nota de rodapé — é campo. Todo fato extraído aponta de volta para o documento, o registro de extração e o método que o produziu.

Entrada · lab-report.pdf 2.1 MB
MERIDIAN CLINICAL LABORATORIES
Amostra 88-41207 · Coletada em 01/07/2026
ANALITORESULT.UNID.REFERÊNCIA
Revisado por C. Okafor, MD · página 1 de 2
Saída · observation LOW
{
  "display": "Hemoglobin",
  "coding": {
    "system": "LOINC",
    "code": "718-7",
    "display": "Hemoglobin"
  },
  "valueNumeric": 13.5,
  "unit": "g/dL",
  "referenceRange": {
    "low": 12, "high": 16, "unit": "g/dL",
    "text": "12.0 - 16.0"
  },
  "interpretation": "LOW",
  "observedAt": "2026-07-01",
  "confidence": 0.93,
  "provenance": {
    "documentId": "doc_3Fq9",
    "extractionId": "ext_7Bm2",
    "method": "AI_TEXT",
    "confidence": 0.93
  }
}
04 · Guia rápido

Cinco chamadas do zero ao dado estruturado.

POST /v1/patients
curl -sX POST "$ZUREE_BASE_URL/v1/patients" \
  -H "Authorization: Bearer $ZUREE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pseudonym":"ext-user-42"}'

# → {"id":"<patientId>",
#     "pseudonym":"ext-user-42",
#     "createdAt":"2026-07-01T09:12:04.000Z"}
SDK @zuree/sdk · criar um paciente
import { ZureeClient } from '@zuree/sdk';

const zuree = new ZureeClient({
  apiKey: process.env.ZUREE_API_KEY!,
  baseUrl: process.env.ZUREE_BASE_URL!,
});

const patient = await zuree.patients.create({
  pseudonym: 'ext-user-42',
});
POST /v1/documents
CONTENT=$(base64 -i lab-report.pdf)

curl -sX POST "$ZUREE_BASE_URL/v1/documents" \
  -H "Authorization: Bearer $ZUREE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d "{\"patientId\":\"$PATIENT_ID\",
       \"filename\":\"lab-report.pdf\",
       \"mimeType\":\"application/pdf\",
       \"content\":\"$CONTENT\"}"

# → {"document":{"id":"<documentId>",
#                "status":"SECURITY_CHECKED"},
#     "duplicate":false}
SDK @zuree/sdk · enviar um documento
import { readFile } from 'node:fs/promises';
import { randomUUID } from 'node:crypto';

const bytes = await readFile('lab-report.pdf');

const { document } = await zuree.documents.create(
  {
    patientId: patient.id,
    filename: 'lab-report.pdf',
    mimeType: 'application/pdf',
    content: bytes.toString('base64'),
  },
  { idempotencyKey: randomUUID() },
);
POST /v1/documents/:id/process
curl -sX POST \
  "$ZUREE_BASE_URL/v1/documents/$DOCUMENT_ID/process" \
  -H "Authorization: Bearer $ZUREE_API_KEY"

# → 202 {"jobId":"<jobId>",
#          "status":"QUEUED",
#          "attempts":0}
SDK @zuree/sdk · enfileirar o processamento
await zuree.documents.process(document.id);

let s = await zuree.documents.status(document.id);
while (s.status === 'PROCESSING') {
  await new Promise((r) => setTimeout(r, 2000));
  s = await zuree.documents.status(document.id);
}
POST /v1/webhooks
curl -sX POST "$ZUREE_BASE_URL/v1/webhooks" \
  -H "Authorization: Bearer $ZUREE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your-app.example/hooks/zuree",
       "events":["document.processing_completed",
                 "document.processing_failed"]}'

# → {"id":"whe_…","secret":"whsec_…"}
SDK @zuree/sdk · reagir ao webhook
import { verifyWebhookSignature } from '@zuree/sdk';

app.post('/hooks/zuree', async (req, res) => {
  const raw = await readRawBody(req);
  const check = verifyWebhookSignature({
    payload: raw,
    signatureHeader: req.headers['zuree-webhook-signature'],
    secret: process.env.ZUREE_WEBHOOK_SECRET!,
  });
  if (!check.ok) return res.status(401).end();

  const event = JSON.parse(raw);
  res.status(200).end();
});
GET /v1/patients/:id/observations
curl -s \
  "$ZUREE_BASE_URL/v1/patients/$PID/observations?limit=50" \
  -H "Authorization: Bearer $ZUREE_API_KEY"

# → { "items": [ { "display": "Hemoglobin",
#       "coding": {"system":"LOINC","code":"718-7"},
#       "valueNumeric": 13.5, "unit": "g/dL",
#       "interpretation": "LOW", "confidence": 0.93,
#       "provenance": {…} } ],
#     "nextCursor": "b2Zmc2V0OjUw" }
SDK @zuree/sdk · ler os fatos clínicos
for await (const obs of zuree.clinical.observationsAll(patient.id)) {
  console.log(
    obs.display,
    obs.valueNumeric ?? obs.valueText,
    obs.unit ?? '',
    `(${obs.confidence})`,
  );
}

for await (const e of zuree.clinical.timelineAll(patient.id)) {
  console.log(e.date ?? '(undated)', e.kind);
}

Idempotente por design

Envie um Idempotency-Key e nenhuma retentativa duplica. Bytes idênticos são deduplicados automaticamente.

Webhooks assinados

Assinatura HMAC, entrega ao menos uma vez com backoff exponencial e log de entregas por endpoint.

Limites de taxa programáveis

429 com Retry-After. O SDK repete automaticamente, respeitando o cabeçalho.

OpenAPI + FHIR R4

Spec ao vivo em /v1/openapi.json. Os dados clínicos também saem como FHIR R4.

05 · Para quem é

Quatro setores, um mesmo gargalo.

Seguros e sinistros

Decida com dados, não com anexos

Envie os anexos do sinistro direto para o seu motor de regras. Observações, medicações e procedimentos codificados chegam com índices de confiança, para aprovar automaticamente os casos limpos e encaminhar a um humano apenas os arquivos ambíguos.

  • Limiares de confiança definem fluxo automático ou revisão manual
  • Procedência em cada campo para decisões e recursos defensáveis
  • Log de auditoria append-only de exportações, exclusões e acessos
Plataformas de telemedicina

O médico vê histórico, não uma pilha de PDFs

Deixe o paciente enviar o que tiver durante o cadastro. A Zuree devolve uma linha do tempo cronológica unificada — exames, medicações, condições, procedimentos, atendimentos — para que a consulta comece com contexto, e não com um visualizador de arquivos.

  • Endpoint /timeline unificado, cronológico entre tipos de fato
  • Pipeline assíncrono com webhooks — o cadastro nunca travar na leitura
  • Valores prontos para tendência: numéricos, unidades normalizadas, faixas preservadas
Operadoras de saúde

Insumos de subscrição realmente comparáveis

Evidências médicas de cem laboratórios diferentes normalizam para o mesmo modelo codificado, então a precificação de risco compara igual com igual. LOINC onde existe código, um código LOCAL explícito da Zuree onde não existe — nunca um palpite silencioso.

  • Normalização de unidades e faixas de referência entre fontes
  • Exportação JSON portável por paciente, além de FHIR R4
  • Janelas de retenção configuráveis por tenant
Startups de health tech

Entregue o recurso, pule o pipeline

Você poderia construir OCR, detecção de templates, versionamento de prompts, validação de schema e uma trilha de auditoria. Ou poderia instalar o SDK hoje à tarde e gastar o trimestre no produto que seus usuários de fato pediram.

  • @zuree/sdk tipado, com paginação automática e retentativa embutidas
  • Pacientes pseudonímicos — nenhum identificador real é exigido
  • Comece no plano mais baixo e cresça para preço por volume
06 · Prova de primeira mão

Lançamos um app de consumo sobre esta API antes de vendê-la.

O Zuree Mobile é um produto de consumo em operação que roda inteiramente sobre os endpoints documentados nesta página — o mesmo modelo de paciente pseudonímico, o mesmo pipeline de dez estágios, a mesma saída codificada. Sem endpoints privados, sem caminho privilegiado.

Isso o torna nossa implementação de referência e nosso benchmark permanente de acurácia: layouts de laboratório desconhecidos chegam a ele todos os dias, e uma regressão aparece em registros reais antes de poder alcançar o tenant de um cliente.

  • Exatamente o caminho /documents → /process → /timeline do guia rápido
  • Volume de consumo em templates de laboratório que ninguém cadastrou antes
  • Os resumos e o acompanhamento ficam acima da API — a API em si só transcreve
zuree.app · cada upload se torna um registro
zuree.app · cada upload se torna um registro
zuree.app · confiança e link para o documento de origem
zuree.app · confiança e link para o documento de origem
A mesma API, uma camada abaixo
zuree.app  (iOS / Android)
   │
   └─ POST /v1/documents
      POST /v1/documents/:id/process
      GET  /v1/patients/:id/timeline
         │
         └─ a mesma API V1 desta página
07 · Privacidade e segurança

Feita para pseudonimidade, não adaptada depois.

Você identifica pacientes com uma referência opaca que você controla. A Zuree nunca precisa de um identificador do mundo real para processar um documento.

O que não afirmamos

A Zuree não faz nenhuma afirmação de conformidade regulatória — nem LGPD, nem GDPR, nem HIPAA, nem qualquer outro arcabouço. Os controles ao lado são os mecanismos técnicos que implementamos e que apresentaremos ao seu time de segurança. Definir bases legais, prazos de retenção e obrigações de eliminação na sua jurisdição continua sendo sua responsabilidade. Preferimos dizer isso de saída, e não na due diligence.

Nenhum conteúdo clínico em telemetria

Logs, métricas, analytics, rastreadores de erro, payloads de webhook e registros de auditoria carregam IDs opacos, códigos e contagens — nunca conteúdo de documento.

Isolamento de tenant em toda consulta

A identidade do tenant é resolvida no servidor a partir da sua chave de API. Um tenant_id nunca é aceito no corpo da requisição.

Armazenamento privado, URLs efêmeras

Os buckets são privados; URLs assinadas expiram em minutos. Uploads passam por varredura de malware e o tipo de conteúdo é verificado nos bytes.

Transparência de provedor de IA

Cada extração registra qual provedor, qual modelo exato, qual versão de prompt e qual versão de pipeline a produziu — legível pela API.

Exclusão coordenada

Excluir um documento o remove do banco, do armazenamento de objetos, da fila de processamento e dos arquivos temporários — deixando um registro de auditoria com IDs e contagens, não conteúdo.

Retenção nos seus termos

Indefinida por padrão — a Zuree nunca exclui o que você não pediu. Habilite uma janela de idade de documento por tenant e os arquivos vencidos são expurgados pelo mesmo caminho.

Disciplina de escopo faz parte da postura de segurança: a Zuree transcreve documentos em dados estruturados. Ela não diagnostica, não interpreta achados, não lê imagens, não recomenda tratamento e não atua como apoio à decisão clínica — e recusamos pedidos de recurso que cruzem essa linha.

08 · Preços

Planos mensais fixos com cota de documentos inclusa.

Um documento é um arquivo enviado a /process. Reenvios deduplicados e retentativas retomadas nunca são cobrados duas vezes. O excedente é medido por documento — um pico custa dinheiro, não uma conversa de upgrade.

Para pilotos e primeiras integrações

Starter

Coloque um fluxo em produção sem passar por um ciclo de compras.

R$ 2.690R$ 2.287 /mês
Cobrança mensal · cancele quando quiserCobrança anual · R$ 27.438 por ano
Documentos inclusos
1.000 / mês
Excedente
R$ 1,85 / documento
  • Todos os três tipos de documento da V1
  • Webhooks assinados e acesso completo ao SDK
  • Exportação FHIR R4 e JSON portável
  • Suporte por e-mail, no próximo dia útil
  • Duas chaves de API, um ambiente
Começar no Starter
O mais comum em volume de produção

Growth

Para times que processam sinistros ou cadastro de pacientes todo dia.

R$ 13.400R$ 11.390 /mês
Cobrança mensal · cancele quando quiserCobrança anual · R$ 136.680 por ano
Documentos inclusos
10.000 / mês
Excedente
R$ 1,05 / documento
  • Tudo do Starter
  • Orçamentos maiores de requisições e concorrência
  • Janela de retenção configurável por tenant
  • Tenants separados de sandbox e produção
  • Canal compartilhado no Slack, resposta no mesmo dia
  • Engenheiro de onboarding dedicado por 30 dias
Escolher Growth
Alto volume e cargas reguladas

Scale

Para operadoras e plataformas em que volume de documentos é o negócio.

R$ 48.500R$ 41.225 /mês
Cobrança mensal · cancele quando quiserCobrança anual · R$ 494.700 por ano
Documentos inclusos
60.000 / mês
Excedente
R$ 0,60 / documento
  • Tudo do Growth
  • Tarifas de excedente com compromisso de volume
  • Fila de processamento prioritária
  • Onboarding de templates dos seus principais emissores
  • Apoio em revisão de segurança e lista de suboperadores
  • Metas contratuais de disponibilidade e resposta
Falar sobre o Scale
Em todos os planos

Os três tipos de documento da V1, codificação LOINC, procedência, confiança, webhooks, a spec OpenAPI, o SDK TypeScript, exportação FHIR R4 e exclusão auditada. Nenhum recurso fica atrás de paywall — só volume e suporte mudam.

Não cobrado

Uploads duplicados (bytes idênticos), retentativas retomadas de um estágio com checkpoint, documentos devolvidos como UNSUPPORTED e toda leitura de dados que você já tem.

Sandbox

Um tenant de sandbox gratuito com 100 documentos acompanha toda avaliação técnica, para você medir a acurácia no seu próprio corpus antes de assinar qualquer coisa.

Calculadora de volume

Quanto custaria o seu volume?

Arraste até o volume mensal de documentos que você espera. Escolhemos o plano mais barato para esse volume, já com excedente.

4.200 documentos / mês
100120.000
Recomendado · Starter
R$ 8.610 /mês
Taxa de plataformaR$ 2.690
Incluso no plano1.000 docs
Excedente · 3.200 docsR$ 5.920
Custo efetivo por documentoR$ 2,050
Agendar demo técnica

Apenas estimativas, sem impostos. A cobrança anual aplica 15% de desconto na taxa de plataforma; o excedente permanece na tarifa do plano. Volumes comprometidos acima de 120.000 documentos por mês são precificados individualmente.

09 · Perguntas

O que segurança e engenharia perguntam primeiro.

Ficou algo de fora? Traga para a call técnica — quem atende é engenheiro, não apenas um vendedor.

Quais tipos de documento a V1 suporta?+

Laudos laboratoriais, receitas e relatórios médicos / resumos clínicos. Um documento que a Zuree reconhece mas que está fora desse escopo retorna status UNSUPPORTED em vez de uma extração adivinhada — e não é cobrado. Tipos adicionais são conversa de roadmap, não expansão silenciosa.

A Zuree interpreta resultados ou faz recomendações?+

Não. A Zuree transcreve e normaliza o que o documento diz. Não é sistema de diagnóstico, de conselho médico, de interpretação de imagens, de recomendação de tratamento nem de apoio à decisão clínica. O campo interpretation em uma observação reflete a marcação impressa no laudo de origem contra a própria faixa de referência dele — é transcrição, não juízo.

Como vocês tratam uma saída ruim do modelo?+

A saída da IA é tratada como entrada não confiável. Toda resposta é validada contra schema antes de qualquer leitura a jusante. As respostas brutas são guardadas de forma imutável, separadas dos fatos normalizados, para que uma extração sempre possa ser rederivada e auditada. JSON que precisou de reparo é sinalizado como tal — nunca devolvido como limpo. E nenhum campo assume padrão silencioso: uma confiança ausente permanece ausente em vez de virar um número plausível.

O conteúdo do documento vai para um provedor de IA terceiro?+

Sim — a extração exige isso. Qual provedor e qual modelo exato tratou um dado documento fica registrado no registro de extração e legível via GET /v1/documents/{id}/extraction, junto das versões de prompt e de pipeline. Os provedores ficam atrás de uma interface interna, então a composição pode mudar; a atribuição em cada registro diz exatamente o que processou o quê. O tratamento pelo provedor é regido pelo contrato dele, que compartilhamos na due diligence.

Quais são os limites de taxa?+

Os limites numéricos são definidos por implantação e plano, não fixados no contrato da API — os do seu tenant constam na sua conta. O mecanismo é estável de todo modo: um 429 com Retry-After, que o SDK respeita automaticamente com backoff e jitter. O processamento em lote é enfileirado contra um orçamento de concorrência em vez de ser rejeitado — enviar mil documentos de uma vez é normal.

Conseguimos tirar nossos dados e conseguimos excluí-los?+

Os dois. Uma exportação JSON portável completa por paciente inclui a contabilidade de provedor por documento, e os dados clínicos também estão disponíveis em FHIR R4. A exclusão é explícita e iniciada pelo tenant — DELETE /v1/documents/{id} remove um documento e seus dados derivados no banco, no armazenamento de objetos, na fila e nos arquivos temporários, deixando um registro de auditoria de quem e quando, nunca do quê.

O que conta como documento cobrado?+

Um arquivo que completa uma execução de processamento. Reenviar bytes idênticos devolve o documento existente com "duplicate": true e não cobra de novo. Uma retentativa que retoma um estágio com checkpoint não recobra a chamada de IA de um estágio já concluído. Leituras de dados que você já possui não são medidas.

Docs

Referência completa da API

Todos os endpoints e campos, com exemplos em curl e SDK lado a lado.

Ler a documentação →
SDK

@zuree/sdk

Cliente TypeScript tipado, com paginação automática, retentativa e verificação de webhook.

npm i @zuree/sdk
Spec

OpenAPI, ao vivo

Gere um cliente na sua linguagem a partir da spec da própria implantação em execução.

/v1/openapi.json
Interoperabilidade

Exportação FHIR R4

O mesmo modelo clínico, renderizado como recursos FHIR para a sua stack atual.

Ver o mapeamento →
Agendar demo técnica

Traga dez dos seus documentos mais complexos.

Quarenta e cinco minutos com um engenheiro, não um pitch. Rodamos seus arquivos reais pelo pipeline, mostramos os registros de extração e a procedência, e dizemos com clareza onde ele tem dificuldade.

Agendar demo técnica Obter acesso ao sandbox

Tenant de sandbox com 100 documentos gratuitos. Sem cartão, sem compras.