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.
{ "jobId": "job_8Kd2", "status": "QUEUED" } {
"type": "document.processing_completed",
"data": {
"documentId": "doc_3Fq9",
"documentType": "LAB_REPORT",
"processingStatus": "PROCESSED"
}
} {
"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" }
} 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.
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.
Um despejo de texto ainda precisa ser classificado, codificado e ter unidades normalizadas antes que um motor de regras ou modelo possa usá-lo.
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.
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.
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.
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.
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.
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.
{
"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
}
} 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"} 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',
}); 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} 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() },
); curl -sX POST \
"$ZUREE_BASE_URL/v1/documents/$DOCUMENT_ID/process" \
-H "Authorization: Bearer $ZUREE_API_KEY"
# → 202 {"jobId":"<jobId>",
# "status":"QUEUED",
# "attempts":0} 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);
} 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_…"} 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();
}); 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" } 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);
} Envie um Idempotency-Key e nenhuma retentativa duplica. Bytes idênticos são deduplicados automaticamente.
Assinatura HMAC, entrega ao menos uma vez com backoff exponencial e log de entregas por endpoint.
429 com Retry-After. O SDK repete automaticamente, respeitando o cabeçalho.
Spec ao vivo em /v1/openapi.json. Os dados clínicos também saem como FHIR R4.
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.
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.
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.
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.
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.
zuree.app (iOS / Android)
│
└─ POST /v1/documents
POST /v1/documents/:id/process
GET /v1/patients/:id/timeline
│
└─ a mesma API V1 desta página 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.
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.
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.
A identidade do tenant é resolvida no servidor a partir da sua chave de API. Um tenant_id nunca é aceito no corpo da requisição.
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.
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.
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.
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.
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.
Coloque um fluxo em produção sem passar por um ciclo de compras.
Para times que processam sinistros ou cadastro de pacientes todo dia.
Para operadoras e plataformas em que volume de documentos é o negócio.
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.
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.
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.
Arraste até o volume mensal de documentos que você espera. Escolhemos o plano mais barato para esse volume, já com excedente.
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.
Ficou algo de fora? Traga para a call técnica — quem atende é engenheiro, não apenas um vendedor.
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.
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.
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.
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.
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.
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ê.
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.
Todos os endpoints e campos, com exemplos em curl e SDK lado a lado.
Ler a documentação →Cliente TypeScript tipado, com paginação automática, retentativa e verificação de webhook.
Gere um cliente na sua linguagem a partir da spec da própria implantação em execução.
O mesmo modelo clínico, renderizado como recursos FHIR para a sua stack atual.
Ver o mapeamento →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.
Tenant de sandbox com 100 documentos gratuitos. Sem cartão, sem compras.