/v1/chat/completions
Chat no worker com model: "rota/local". stream: true
devolve SSE depois que o job termina; no MVP, o conteúdo chega em um único chunk.
Documentação
A API Rota Nacional começa pela limpeza: detecta PII em texto, áudio e documentos, devolve o conteúdo limpo e grava auditoria cifrada. A mesma chave também acessa modelos e chat completions quando você quiser usar inferência.
Quer experimentar antes de integrar? Teste grátis no navegador: crie a conta, cole um texto e confira o resultado. São 30 dias com quota inicial, sem cartão ou chave de API.
Passo 1
Crie uma conta pública, gere uma chave sk-rota-* e guarde o segredo
como variável de ambiente. O segredo completo aparece uma única vez.
export ROTA_API_KEY="sk-rota-..."
Passo 2
Use /v1/privacy/clean para textos, JSON curto ou itens pequenos. A resposta
traz cleaned, findings, contagens por categoria e audit_id,
sem expor valores detectados.
curl https://rota-nacional.ia.br/v1/privacy/clean \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Paciente com CPF 452.198.736-28, CNS 898001160093761 e CRM-SP 123456.",
"policy": "placeholder"
}'
{
"object": "privacy.clean",
"action": "pseudonymized",
"clean_text": "Paciente com CPF [CPF_1], [CNS_1] e [CRM_1].",
"privacy": {
"categories": ["cns", "cpf", "crm"],
"counts": { "cns": 1, "cpf": 1, "crm": 1 },
"total": 3
},
"audit_id": "aud_..."
}
Batch MVP
O MVP processa o lote de forma síncrona e já retorna status: completed.
O contrato está preparado para fila assíncrona e worker médico sem quebrar clientes.
curl https://rota-nacional.ia.br/v1/privacy/jobs \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "1", "text": "Prontuário ABC-123 com contato pessoa@example.invalid." },
{ "id": "2", "text": "Convênio SAUDE-4455 e consulta 09/07/2026." }
]
}'
Depois consulte metadados do job, sem conteúdo bruto:
curl https://rota-nacional.ia.br/v1/privacy/jobs/privjob_... \
-H "Authorization: Bearer $ROTA_API_KEY"
Áudio
Envie um arquivo de áudio (multipart, até 25 MB) para /v1/audio/transcriptions.
A Rota transcreve, passa o texto pela mesma barreira de privacidade e devolve a transcrição
já sanitizada, com privacy, findings e audit_id.
O áudio bruto nunca é armazenado fora da auditoria cifrada. Contrato compatível com SDKs de
transcrição OpenAI.
curl https://rota-nacional.ia.br/v1/audio/transcriptions \
-H "Authorization: Bearer $ROTA_API_KEY" \
-F "file=@consulta.mp3" \
-F "model=rota/transcricao" \
-F "language=pt"
{
"object": "audio.transcription",
"text": "Paciente [PESSOA_1] no endereço [ENDERECO_1].",
"privacy": { "categories": ["endereco", "nome"], "total": 2 },
"audit_id": "aud_..."
}
Documentos
Envie um documento (multipart, até 25 MB) para /v1/privacy/extract. A Rota extrai o
texto, aplica a barreira e devolve o resultado sanitizado com audit_id.
PDF nato-digital tem extração determinística; imagem (PNG/JPEG/TIFF/WEBP) usa OCR marcado como
beta — melhor-esforço, com notice na resposta. Documento ilegível falha
com erro claro, sem devolver conteúdo bruto.
curl https://rota-nacional.ia.br/v1/privacy/extract \
-H "Authorization: Bearer $ROTA_API_KEY" \
-F "file=@encaminhamento.pdf"
{
"object": "document.extraction",
"source": "pdf",
"pages": 2,
"text": "Paciente com CPF [CPF_1] e [CNS_1].",
"privacy": { "categories": ["cns", "cpf"], "total": 2 },
"audit_id": "aud_..."
}
Inferência pela frota RN
A Rota escolhe o worker disponível; sua aplicação não recebe endereço de GPU nem
precisa conhecer a topologia da frota. Consulte /v1/capabilities para
descobrir o que os workers conectados podem executar naquele momento.
curl https://rota-nacional.ia.br/v1/capabilities \
-H "Authorization: Bearer $ROTA_API_KEY"
/v1/chat/completions
Chat no worker com model: "rota/local". stream: true
devolve SSE depois que o job termina; no MVP, o conteúdo chega em um único chunk.
/v1/embeddingsVetores de texto pelo worker anunciado como rn.embeddings.
/v1/audio/speechSíntese e clonagem de voz. Envie JSON com text, voz e motor opcionais.
/v1/audio/musicGeração de trilha por job assíncrono, com estilo, duração e seed controláveis.
/v1/audio/compositionsMescla voz e fundo. Envie multipart com voice e background.
/v1/ocrOCR local de imagem ou PDF, com resultado novamente tratado pela barreira de privacidade.
/v1/documents/fidelity/jobsOCR documental assíncrono para fluxos que precisam preservar estrutura e páginas.
/v1/documents/review/jobsRevisão estruturada de documento por job, com instruções e JSON Schema do resultado.
/v1/moderationsMensagens avaliadas pela política da organização, com a nota de cada categoria.
/v1/images/generations e /v1/images/editsGeração e edição de imagem por jobs assíncronos quando rn.images.* estiver disponível.
Rotas assíncronas retornam 202, status_url e
result_url. Consulte GET /v1/jobs/{id} e
GET /v1/jobs/{id}/result. Payloads e resultados ficam cifrados e
expiram automaticamente depois de 24 horas.
curl https://rota-nacional.ia.br/v1/audio/compositions \
-H "Authorization: Bearer $ROTA_API_KEY" \
-F "voice=@narracao.mp3" \
-F "background=@trilha.mp3" \
-F "background_gain_db=-18"
Moderação por política
Escreva até 16 categorias em texto: o nome, quando sinalizar e, se quiser, o que não conta e a exceção. Cada mensagem volta com a decisão e a nota de 0 a 1 de cada categoria. Para mudar a política, mude o texto: não há modelo para treinar. Sem política, valem as regras gerais de segurança, como violência, ódio e fraude.
curl https://rota-nacional.ia.br/v1/moderations \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": ["Sua conta foi bloqueada. Faça um Pix de R$ 1 para liberar."],
"categories": [{
"name": "Golpe",
"violation": "Pedir Pix ou código fingindo ser o banco.",
"not_violation": "Dúvida comum sobre pagamento ou boleto."
}]
}'
{
"object": "moderation",
"model": "rota/moderacao",
"mode": "policy",
"results": [{
"flagged": true,
"score": 0.97,
"cutoff": 0.335,
"categories": { "Golpe": true },
"category_scores": { "Golpe": 0.97 },
"category_cutoffs": { "Golpe": 0.335 }
}]
}
O formato é o da moderação da OpenAI, e a política vai no campo extra
categories. A barreira tira os dados pessoais antes do modelo, e a resposta
não repete o texto. A nota é uma estimativa: teste a política com mensagens reais antes de
bloquear alguém. A primeira mensagem depois de uma pausa leva alguns segundos a mais,
porque o modelo sobe nessa hora.
Preços
Cada chamada às capacidades rn.* pela chave de API paga as suas unidades com o
saldo da organização. O saldo entra por Pix no painel, em pacotes de R$ 10, R$ 25, R$ 50 ou
R$ 100. Sem saldo, a chamada pode pagar sozinha por x402: envie X-PAYMENT com
USDC na Base, a partir de US$ 0,001 por chamada. O laboratório do painel continua grátis, com
limite de usos por dia.
| Capacidade | Preço |
|---|---|
Moderação por política/v1/moderations |
R$ 0,002por mensagem |
Embeddings/v1/embeddings |
R$ 0,0002por texto |
Transcrição/v1/audio/transcriptions |
R$ 0,01por MB de áudio (ou fração) |
Voz/v1/audio/speech |
R$ 0,02por mil caracteres (ou fração) |
Música/v1/audio/music |
R$ 0,10por minuto de música |
Composição de áudio/v1/audio/compositions |
R$ 0,01por composição |
OCR/v1/ocr |
R$ 0,01por página lida |
OCR documental/v1/documents/fidelity/jobs |
R$ 0,01por página lida |
Revisão de documento/v1/documents/review/jobs |
R$ 0,05por página |
Geração de imagem/v1/images/generations |
R$ 0,10por imagem |
Edição de imagem/v1/images/edits |
R$ 0,10por imagem |
Limpeza de dados pessoais, sem conta/v1/privacy/clean |
R$ 0,001por mil caracteres (ou fração) |
Extração de documento limpo, sem conta/v1/privacy/extract |
R$ 0,01por MB de documento (ou fração) |
Sem saldo nem pagamento, a resposta é 402, com o accepts do x402, o
preco_brl e o buy_credit_url. O débito do saldo volta se o job
falhar, for cancelado ou vencer na fila. O OCR reserva o máximo de páginas
(max_pages, padrão 40) e devolve as que não leu. O pagamento por x402 vale para
a chamada aceita e não volta automaticamente.
Sem chave e sem conta, a API também aceita x402: a rota paga responde 402 com o
preço e o accepts, e você repete o pedido com X-PAYMENT. A carteira
que paga vira a sua conta aqui: o uso, os jobs e o saldo que sobra ficam nela. Para usar esse
saldo, envie X-Carteira com o endereço; o 402 pede só a diferença. No chat, o
preço é o teto do pedido (max_tokens, padrão 1.024), e a sobra fica na carteira.
O job assíncrono se acompanha pelo token das URLs do 202.
Opcional
curl https://rota-nacional.ia.br/v1/models \
-H "Authorization: Bearer $ROTA_API_KEY"
IDs atuais do catálogo:
Inferência opcional
curl https://rota-nacional.ia.br/v1/chat/completions \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "rota/resumo",
"messages": [
{ "role": "user", "content": "Explique a Rota Nacional em uma frase." }
],
"max_tokens": 80
}'
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ROTA_API_KEY,
baseURL: "https://rota-nacional.ia.br/v1"
});
const resposta = await client.chat.completions.create({
model: "rota/resumo",
messages: [
{ role: "user", content: "ping" }
]
});
console.log(resposta.choices[0]?.message?.content);
Parâmetros
modelObrigatório. ID do catálogo (rota/codigo, rota/auto etc.).
messagesObrigatório. Lista não vazia de { role, content }, papéis system/user/assistant/tool.
max_tokensOpcional. Limite de tokens de saída.
temperatureOpcional. Aleatoriedade da resposta.
streamOpcional. true para SSE (ver seção Streaming).
tools / tool_choiceOpcional. Ver seção Tool calling abaixo.
Streaming
curl -N https://rota-nacional.ia.br/v1/chat/completions \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "rota/resumo",
"stream": true,
"messages": [
{ "role": "user", "content": "Responda em tópicos curtos." }
]
}'
Tool calling
Envie tools no formato OpenAI (function com name,
description e parameters em JSON Schema). O suporte real de
execução depende do modelo escolhido — rota/agentes e rota/codigo
são curados para esse uso; rota/auto direciona automaticamente pra
rota/agentes quando detecta uso de ferramentas na conversa.
curl https://rota-nacional.ia.br/v1/chat/completions \
-H "Authorization: Bearer $ROTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "rota/agentes",
"max_tokens": 300,
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Retorna o clima de uma cidade",
"parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] }
}
}],
"messages": [{ "role": "user", "content": "Qual o clima em Recife?" }]
}'
Privacidade
A política padrão substitui dados pessoais por marcadores por request. O painel mostra categorias e contagens tratadas; conteúdo bruto e payload limpo ficam em arquivo cifrado de auditoria quando a retenção está habilitada, com purge definido pela administração.
Categorias médicas básicas já entram na camada determinística: cns,
crm, prontuario, convenio e
data_clinica.
{
"entrada": "Meu CPF é 452.198.736-28",
"limpo": "Meu CPF é [CPF_1]"
}
Método e evidência
Nomes de pessoas passam primeiro pelo motor neural rn-privacy-0.2.0, executado em São Paulo, que devolve só posições. Depois, as regras rules-v1 aplicam padrões textuais e checksum de CPF/CNPJ numérico. Valores de texto em objetos e arrays são percorridos; chaves JSON e números não são tratados como strings. CNS e CRM usam contexto e formato, sem a mesma validação matemática.
O motor usa MiniLM, DistilBERT, ONNX e projeção Unicode. Se ele estiver indisponível, a requisição falha com 503 e nada segue adiante; textos acima de 256 KB recebem 413. Os escores do detector não são garantia de anonimização.
Consulte a documentação de engenharia para conhecer os efeitos de cada política, o contrato de spans, os limites, o formato cifrado e as referências científicas. Os benchmarks e dados para download permitem recalcular precisão, recall e cobertura de nomes em 46 textos sintéticos.
Roadmap · ainda indisponível
Extensão e aplicativo desktop, substituição contextual, restauração autorizada, ferramentas e proxy MCP, CLI, SDK, conectores empresariais, SSO e implantação dedicada estão planejados. Esses recursos ainda não têm contrato público de API nem data de lançamento.
As rotas documentadas acima continuam sendo o contrato disponível. A conexão de agentes pela API de inferência não equivale a um servidor MCP de privacidade. Consulte a apresentação da plataforma e seu roadmap ou baixe o PDF comercial.
Erros
{ "error": { "message", "type", "code" } }.invalid_json, missing_privacy_input, model_not_found ou invalid_messages — requisição malformada.
invalid_api_key — chave ausente ou inválida.
insufficient_balance — o saldo não cobre a chamada a uma capacidade rn.*; o corpo traz o accepts do x402 e onde comprar crédito.
model_disabled — modelo desabilitado para esta conta.
account_suspended, trial_expired ou account_pending_approval — conta sem uso liberado.
pii_blocked — política da organização bloqueou o payload sensível.
pii_blocked — política de privacidade bloqueou a request.
rate_limited, quota_requests_exceeded ou quota_tokens_exceeded — limite por minuto ou mensal.
upstream_error — falha ao consultar o modelo.
audit_archive_key_not_configured — auditoria temporariamente indisponível (config administrativa).
capability_unavailable — nenhum worker atende a capacidade agora; nada foi cobrado.
person_engine_unavailable ou person_engine_daily_limit — detecção de nomes indisponível; nada foi enviado adiante.
privacy_text_too_large — texto acima de 256 KB por requisição para a detecção de nomes.
not_found — rota inexistente.