{"name":"Rota Nacional","description":"Plataforma brasileira de IA com barreira de privacidade: API compatível com a OpenAI e a Anthropic, dados pessoais tratados antes do modelo, catálogo curado e crédito em reais.","build":"0419241e","base_url":"https://staging.rota-nacional.ia.br","docs":{"llms":"https://staging.rota-nacional.ia.br/llms.txt","llms_full":"https://staging.rota-nacional.ia.br/llms-full.txt","openapi":"https://staging.rota-nacional.ia.br/openapi.json","mcp":"https://staging.rota-nacional.ia.br/mcp","pricing":"https://staging.rota-nacional.ia.br/api/pricing","billing":"https://staging.rota-nacional.ia.br/api/billing","human_ui":"https://staging.rota-nacional.ia.br/"},"conventions":{"format":"JSON em `/api/*` e `/v1/*`; `text/event-stream` com `stream: true`.","auth":"`Authorization: Bearer <chave>` (a da conta, `mmk_…`, ou a `sk-rota-…` de antes).","privacy":"Os dados pessoais são tratados antes de qualquer modelo; o conteúdo bruto só fica na auditoria cifrada.","parity":"Mudou a UI/API → apidocs + MCP no mesmo PR."},"auth":{"none":"Público.","chave":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo.","session":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token.","credito":"Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo."},"quota":{"free":[{"o_que":"catálogo de modelos (`GET /v1/models`), índice, llms.txt, OpenAPI e MCP","limite":"sem cota","janela":null},{"o_que":"teste gratuito da conta nova","limite":"30 dias, 1.000 pedidos e 200 mil tokens no mês, 10 por minuto","janela":null}],"paid":[{"o_que":"modelos vendidos por crédito","price":"de R$ 1,20 a R$ 7,20 por milhão de tokens, conforme o modelo e se o token é de entrada ou de saída (tabela em /modelos)"}],"how_to_pay":"Crédito pré-pago em reais, por Pix automático no painel (`POST /api/credito/asaas` com `oferta: \"saldo\"`), a partir de R$ 5,00. O saldo é da organização (ou da conta pessoal) e vale para todas as chaves dela.","live":"https://staging.rota-nacional.ia.br/api/"},"mcp":{"endpoint":"https://staging.rota-nacional.ia.br/mcp","transport":"streamable-http","tools":6},"mcp_tools":["api_index","listar_modelos","limpar_dados_pessoais","conversar","pricing","billing"],"endpoints":[{"method":"GET","path":"/api/auth/bootstrap","auth":"none","grupo":"Conta","summary":"Prepara o navegador para entrar na conta global.","desc":"Define cookie HttpOnly restrito ao host. CSRF vinculado à sessão atual. Sem CORS.","retorno":{"csrf":{"tipo":"string","desc":"X-CSRF-Token"},"context":{"tipo":"string","desc":"Opaque view context, also in X-MM-Context; not a credential / contexto opaco da vista, não é credencial."}},"erros":{"400":"invalid_request","403":"invalid_origin / invalid_csrf","503":"auth_unavailable: a sessão anterior é preservada / the previous session is preserved"},"returns":"{ csrf, context }","url":"https://staging.rota-nacional.ia.br/api/auth/bootstrap","auth_detail":"Público."},{"method":"GET","path":"/api/account/profile","auth":"session","grupo":"Conta","exemplo":"await fetch(\"$ORIGIN/api/account/profile\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","summary":"Consulta seu perfil global.","desc":"Lê preferências atuais da conta. Altere-as na página da conta; produtos não mantêm perfil autoritativo separado.","retorno":{"_texto":"{profile:{name,locale,timeZone,theme,revision}}"},"erros":{"401":"invalid_session","503":"auth_unavailable"},"returns":"{profile:{name,locale,timeZone,theme,revision}}","url":"https://staging.rota-nacional.ia.br/api/account/profile","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"GET","path":"/api/account/avatar","auth":"session","grupo":"Conta","exemplo":"await fetch(\"$ORIGIN/api/account/avatar\", {credentials: \"same-origin\"}).then(r => {if (!r.ok) throw new Error(\"HTTP \" + r.status); return r.blob();});","exemploLinguagem":"js","summary":"Consulta sua foto de perfil global.","desc":"WebP privado de até 64 KiB, sem cache. Altere-o na conta. Não aceita ID de usuário ou URL de objeto.","retorno":{"_texto":"image/webp; Cache-Control: no-store"},"erros":{"401":"invalid_session","404":"not_found: no photo / sem foto","503":"auth_unavailable"},"returns":"image/webp; Cache-Control: no-store","url":"https://staging.rota-nacional.ia.br/api/account/avatar","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"GET","path":"/api/me","auth":"session","grupo":"Conta","exemplo":"await fetch(\"$ORIGIN/api/me\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","summary":"Lê a conta global atual neste produto.","retorno":{"_texto":"{user:{identityId,sessionId,productId,audience,authTime,methods,mfaState}}"},"erros":{"401":"invalid_session","503":"auth_unavailable"},"returns":"{user:{identityId,sessionId,productId,audience,authTime,methods,mfaState}}","url":"https://staging.rota-nacional.ia.br/api/me","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"POST","path":"/api/auth/logout","auth":"session","grupo":"Conta","exemplo":"// Execute no console da página do produto / Run in the product page console.\n(async () => {\n  const origin = \"$ORIGIN\";\n  const {csrf} = await fetch(origin + \"/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(origin + \"/api/auth/logout\", {\n    method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({})\n  });\n  if (!r.ok) throw new Error(\"Auth HTTP \" + r.status);\n  return r.json();\n})();","exemploLinguagem":"js","summary":"Revoga esta sessão do produto.","desc":"Exige bootstrap/CSRF deste navegador e sessão. As sessões de outros produtos permanecem ativas.","retorno":{"ok":{"tipo":"bool","desc":"true"}},"erros":{"400":"invalid_request","403":"invalid_origin / invalid_csrf","503":"auth_unavailable: a sessão anterior é preservada / the previous session is preserved"},"returns":"{ ok }","url":"https://staging.rota-nacional.ia.br/api/auth/logout","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"GET","path":"/api/account/keys","auth":"session","grupo":"Conta","summary":"Lista suas chaves de API neste produto.","desc":"Nunca devolve a chave: nome, 4 últimos caracteres, organização, criação, último uso (por hora) e se ainda vale.","retorno":{"keys":{"tipo":"object[]","desc":"`id`, `name`, `organizationId`, `last4`, `createdAt`, `lastUsedAt`, `revokedAt`, `active` (false quando revogada ou parada por troca de senha / encerrar todos os acessos)."}},"erros":{"401":"invalid_session","503":"auth_unavailable"},"exemplo":"await fetch(\"$ORIGIN/api/account/keys\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ keys }","url":"https://staging.rota-nacional.ia.br/api/account/keys","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"POST","path":"/api/account/keys/create","auth":"session","grupo":"Conta","summary":"Cria uma chave de API para agentes e scripts.","desc":"Exige entrada nos últimos 5 minutos; a de organização também exige segundo fator na sessão e o papel de dona/administradora com o produto ligado. No máximo 10 chaves vivas por conta e produto. A chave (`secret`) volta UMA vez.","corpo":{"name":{"tipo":"string","obrigatorio":true,"desc":"Até 60 caracteres."},"organizationId":{"tipo":"string","nulo":true,"obrigatorio":true,"desc":"`null` para chave da conta."}},"body":{"name":"agent","organizationId":null},"retorno":{"key":{"tipo":"object","desc":"`id`, `name`, `organizationId`, `last4`, `createdAt`."},"secret":{"tipo":"string","desc":"`mmk_…`, mostrada uma vez."}},"erros":{"400":"invalid_key_name / invalid_organization","401":"invalid_session / reauth_required","403":"invalid_origin / invalid_csrf / organization_forbidden / organization_mfa_required","409":"key_limit_reached","503":"auth_unavailable"},"exemplo":"(async () => {\n  const {csrf} = await fetch(\"$ORIGIN/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(\"$ORIGIN/api/account/keys/create\", {method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({name: \"agent\", organizationId: null})});\n  return r.json();\n})();","exemploLinguagem":"js","returns":"{ key, secret }","url":"https://staging.rota-nacional.ia.br/api/account/keys/create","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"POST","path":"/api/account/keys/revoke","auth":"session","grupo":"Conta","summary":"Revoga uma das suas chaves de API.","desc":"Para a chave na hora. Repetir não faz mal.","corpo":{"id":{"tipo":"string","obrigatorio":true,"desc":"O `id` da chave."}},"body":{"id":"…"},"retorno":{"ok":{"tipo":"bool","desc":"true"}},"erros":{"400":"invalid_key_id","401":"invalid_session","403":"invalid_origin / invalid_csrf","404":"key_not_found","503":"auth_unavailable"},"exemplo":"(async () => {\n  const {csrf} = await fetch(\"$ORIGIN/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(\"$ORIGIN/api/account/keys/revoke\", {method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({id: \"…\"})});\n  return r.json();\n})();","exemploLinguagem":"js","returns":"{ ok }","url":"https://staging.rota-nacional.ia.br/api/account/keys/revoke","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"GET","path":"/api/","auth":"none","summary":"Índice auto-descrito: cada rota, o que cobra e como plugar o MCP.","grupo":"Descoberta","retorno":{"name":{"tipo":"string","desc":"Nome do produto."},"description":{"tipo":"string","desc":"O que o produto faz."},"build":{"tipo":"string","desc":"Commit publicado."},"base_url":{"tipo":"string","desc":"Origem em que esta API está servindo."},"docs":{"tipo":"object","desc":"Links para llms.txt, OpenAPI, MCP e a UI."},"endpoints":{"tipo":"object[]","desc":"Catálogo de endpoints."},"mcp_tools":{"tipo":"string[]","desc":"Tools do MCP."}},"returns":"{ name, description, build, base_url, docs, endpoints, mcp_tools }","url":"https://staging.rota-nacional.ia.br/api/","auth_detail":"Público."},{"method":"GET","path":"/api/health","auth":"none","grupo":"Descoberta","summary":"Se o serviço responde, e o build no ar.","retorno":{"ok":{"tipo":"bool","desc":"Sempre `true` quando o processo responde."},"service":{"tipo":"string","desc":"O serviço: `rota-nacional`."},"build":{"tipo":"string","desc":"O commit no ar."},"request_id":{"tipo":"string","desc":"O id deste pedido, para o suporte."}},"returns":"{ ok, service, build, request_id }","url":"https://staging.rota-nacional.ia.br/api/health","auth_detail":"Público."},{"method":"POST","path":"/mcp","auth":"none","summary":"MCP Streamable HTTP — as tools deste catálogo, despachadas neste mesmo Worker.","grupo":"Descoberta","retorno":{"_texto":"JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call`)."},"exemplo":"curl -s -XPOST $ORIGIN/mcp -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'","returns":"JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call`).","url":"https://staging.rota-nacional.ia.br/mcp","auth_detail":"Público."},{"method":"POST","path":"/api/erro-cliente","auth":"none","summary":"Relato de erro do navegador, enviado pela própria interface. Agente não precisa chamar.","grupo":"Operação","desc":"A interface relata sozinha erro de JS, promessa rejeitada, script/CSS que não carregou e bloqueio de CSP — uma vez por sessão — e o app relata falha tratada por `window.mmErro.relata`. O servidor valida o envelope, redige credencial, e-mail e telefone, junta repetições da mesma falha por minuto e registra um evento operacional; nada é gravado em banco. Não guarda IP, cookie, query nem o User-Agent inteiro. Responde 204 sempre, inclusive para relato inválido.","corpo":{"code":{"tipo":"string","desc":"Código da falha, `UI-` + letras/dígitos (`UI-JS-001` erro global, `UI-PROMESSA-001`, `UI-RECURSO-001`, `UI-CSP-001`, `UI-APP-001` relato do app).","obrigatorio":true},"phase":{"tipo":"string","desc":"Fase em que quebrou, minúsculas: `global`, `promessa`, `script`, `carregar_lista`…","obrigatorio":true},"path":{"tipo":"string","desc":"Caminho da página aberta, sem query; número, hash e token no caminho são guardados como `:id`."},"message":{"tipo":"string","desc":"Mensagem do erro, até 2000 caracteres."},"stack":{"tipo":"string","desc":"Stack trace, até 12000 caracteres."},"source":{"tipo":"string","desc":"Script de origem; só o caminho é guardado."},"line":{"tipo":"int","desc":"Linha no script de origem."},"column":{"tipo":"int","desc":"Coluna no script de origem."},"visivel":{"tipo":"bool","desc":"Se a aba estava visível quando quebrou."},"build":{"tipo":"string","desc":"Build da página que relatou (a `<meta name=\"build\">`), até 64 letras, dígitos, `.`, `_` ou `-`; é ele que data a falha."}},"body":{"code":"UI-APP-001","phase":"carregar_lista","path":"/","message":"lista 500"},"retorno":{"_texto":"204 sem corpo, sempre — relato inválido, repetido ou acima do teto também recebe 204."},"exemplo":"curl -s -XPOST $ORIGIN/api/erro-cliente -H 'content-type: application/json' -d '{\"code\":\"UI-APP-001\",\"phase\":\"carregar_lista\",\"path\":\"/\",\"message\":\"lista 500\"}'","returns":"204 sem corpo, sempre — relato inválido, repetido ou acima do teto também recebe 204.","url":"https://staging.rota-nacional.ia.br/api/erro-cliente","auth_detail":"Público."},{"method":"POST","path":"/api/pagamento/aberto","auth":"none","statusOk":202,"summary":"A interface relata que exibiu uma cobrança. Agentes não devem chamar.","grupo":"Operação","desc":"Relato sem corpo, da mesma origem, enviado automaticamente quando uma cobrança fica visível. Não inicia pagamento, não concede acesso e não recebe identidade ou credencial. Não grava banco por relato. Conta eventos, não pessoas únicas. O painel privado do operador separa pedidos de pagamento da API e aberturas da interface por dia UTC; os dois números podem se sobrepor.","headers":{"Origin":{"tipo":"string","desc":"A origem da página, idêntica à desta rota.","obrigatorio":true},"Sec-Fetch-Site":{"tipo":"string","desc":"`same-origin`, definido pelo navegador.","obrigatorio":true},"X-MM-Payment-View":{"tipo":"string","desc":"`1`, definido pelo componente comum.","obrigatorio":true}},"retorno":{"_texto":"202 sem corpo se aceito; 204 se ignorado. Sempre no-store."},"returns":"202 sem corpo se aceito; 204 se ignorado. Sempre no-store.","url":"https://staging.rota-nacional.ia.br/api/pagamento/aberto","auth_detail":"Público."},{"method":"POST","path":"/api/funil","auth":"none","statusOk":202,"summary":"A interface relata os passos da visita (funil de conversão). Agentes não devem chamar.","grupo":"Operação","desc":"Lote da mesma origem, enviado pela própria página: páginas vistas, engajamento, oferta à vista, clique em comprar, janela de pagamento, pagamento enviado ou aceito. Guarda o id aleatório do navegador, o caminho sem query, o host de quem mandou a pessoa e as utm; nunca IP, e-mail ou conta. Não grava banco: uma linha por lote no diário do dia, com teto. Robô declarado e smoke ficam de fora.","headers":{"Origin":{"tipo":"string","desc":"A origem da página, idêntica à desta rota.","obrigatorio":false},"Content-Type":{"tipo":"string","desc":"`application/json` ou `text/plain`.","obrigatorio":true}},"corpo":{"v":{"tipo":"number","desc":"Versão do lote: `1`.","obrigatorio":true},"vid":{"tipo":"string","desc":"Id aleatório deste navegador (UUID v4).","obrigatorio":true},"sid":{"tipo":"string","desc":"Id da sessão (30 min sem atividade encerram).","obrigatorio":true},"sn":{"tipo":"number","desc":"Número da sessão deste navegador.","obrigatorio":true},"pv":{"tipo":"string","desc":"Id da página vista.","obrigatorio":true},"e":{"tipo":"object[]","desc":"Até 40 eventos `{ t, n, p? }` do vocabulário do funil.","obrigatorio":true}},"retorno":{"_texto":"202 sem corpo se guardado; 204 se ignorado. Sempre no-store."},"exemplo":"curl -s -XPOST $ORIGIN/api/funil -H 'content-type: text/plain' -H 'x-mm-smoke: 1' -d '{\"v\":1,\"vid\":\"0f8b9c1e-2a3b-4c5d-8e6f-7a8b9c0d1e2f\",\"sid\":\"s1abcdefgh\",\"sn\":1,\"pv\":\"p1abcdefgh\",\"e\":[{\"t\":0,\"n\":\"pagina\"}]}'","returns":"202 sem corpo se guardado; 204 se ignorado. Sempre no-store.","url":"https://staging.rota-nacional.ia.br/api/funil","auth_detail":"Público."},{"method":"GET","path":"/api/funil/arquivos","auth":"none","summary":"Operador: os dias do diário do funil guardados neste app, com o tamanho de cada um.","grupo":"Operação","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>`.","obrigatorio":true}},"retorno":{"v":{"tipo":"number","desc":"Versão do lote guardado."},"produto":{"tipo":"string","desc":"O produto."},"teto":{"tipo":"object","desc":"`bytesDia` e `dias` guardados."},"dias":{"tipo":"object[]","desc":"`{ dia, bytes }`, do mais velho ao de hoje."}},"erros":{"401":"Unauthorized","503":"Not configured"},"exemplo":"curl -s $ORIGIN/api/funil/arquivos -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"{ v, produto, teto, dias }","url":"https://staging.rota-nacional.ia.br/api/funil/arquivos","auth_detail":"Público."},{"method":"GET","path":"/api/funil/arquivo","auth":"none","summary":"Operador: um pedaço de um dia do diário do funil, em NDJSON, a partir de um byte.","grupo":"Operação","desc":"Até 4 MiB por resposta, cortados na última linha inteira. `X-MM-Funil-Proximo` diz de onde pedir o resto; `X-MM-Funil-Tamanho`, o tamanho do dia agora.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>`.","obrigatorio":true}},"query":{"dia":{"tipo":"string","desc":"O dia, `AAAA-MM-DD` (UTC).","obrigatorio":true},"desde":{"tipo":"number","desc":"O byte de onde ler; `0` no começo.","obrigatorio":false}},"retorno":{"_texto":"Linhas JSON, uma por lote guardado."},"erros":{"400":"Invalid parameters","401":"Unauthorized","503":"Not configured"},"exemplo":"curl -s \"$ORIGIN/api/funil/arquivo?dia=2026-09-27&desde=0\" -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"Linhas JSON, uma por lote guardado.","url":"https://staging.rota-nacional.ia.br/api/funil/arquivo","auth_detail":"Público."},{"method":"GET","path":"/api/metrics","auth":"none","summary":"Métricas dos últimos 7 dias para o painel do operador; com o token, inclui o financeiro.","grupo":"Operação","desc":"Sem credencial devolve o uso: os pedidos da API por dia (`usage.requests`) e o total de projetos (`accounts.tenants`). Com `METRICS_TOKEN` em Bearer acrescenta o financeiro do razão da casa.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` para incluir o financeiro; token errado é 401.","obrigatorio":false}},"retorno":{"app":{"tipo":"string","desc":"O nome do produto."},"today":{"tipo":"string","desc":"O dia de hoje em UTC (AAAA-MM-DD)."},"days":{"tipo":"object[]","desc":"Os 7 dias, com as visitas de cada um."},"usage":{"tipo":"object","desc":"`requests`: os pedidos de hoje (`today`) e de cada dia (`days`)."},"accounts":{"tipo":"object","desc":"`tenants`: os projetos com conta no RN."}},"erros":{"401":"Token de operador errado.","503":"App sem METRICS_TOKEN configurado."},"exemplo":"curl -s $ORIGIN/api/metrics","returns":"{ app, today, days, usage, accounts }","url":"https://staging.rota-nacional.ia.br/api/metrics","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine","auth":"none","grupo":"Números públicos","summary":"Os números públicos do produto: tráfego, agentes, uso e confiabilidade, sem dinheiro.","desc":"Projeção publicada de hora em hora pelo coletor da casa, arredondada a dois dígitos significativos; `null` é medição ausente, nunca zero. Cache de 15 minutos com ETag (`If-None-Match` → 304). Não há como enviar números por esta rota: a publicação é do coletor, com token próprio.","retorno":{"v":{"tipo":"int","desc":"Versão do contrato (1)."},"produto":{"tipo":"string","desc":"Id do produto."},"publicado":{"tipo":"bool","desc":"`false` antes da primeira publicação do coletor; aí só estas cinco chaves vêm."},"atualizado_em":{"tipo":"string","desc":"Quando o coletor publicou (ISO 8601).","nulo":true},"stale":{"tipo":"bool","desc":"`true` quando a projeção tem mais de 26 h."},"nome":{"tipo":"string","desc":"Nome do produto.","opcional":true},"desde":{"tipo":"string","desc":"Dia a partir do qual a série vale.","nulo":true,"opcional":true},"fuso":{"tipo":"string","desc":"Fuso dos dias (`UTC`).","opcional":true},"hoje":{"tipo":"object","desc":"O dia de hoje: páginas por classe (pessoa, IA, bot), chamadas de API por classe, leituras das superfícies de máquina e uso do produto.","opcional":true},"dias":{"tipo":"object[]","desc":"Até 31 dias, o mais antigo primeiro: `dia`, `paginas`, `api`, `api_ia`, `maquina`, `visitantes`, `uso`.","opcional":true},"janelas":{"tipo":"object","desc":"Somas de 7 e 30 dias (`d7`, `d30`).","opcional":true},"visitantes":{"tipo":"object","desc":"Visitantes únicos na borda em 7 dias.","opcional":true},"pessoas":{"tipo":"object","desc":"GA4 quando há: usuários, sessões, países, aparelhos e quem chegou de IA.","nulo":true,"opcional":true},"agentes":{"tipo":"object","desc":"Os agentes de IA e os bots que mais leem, 7 dias.","opcional":true},"superficies":{"tipo":"object","desc":"Leituras de OKF, llms, well-known, OpenAPI e MCP em 7 dias.","opcional":true},"mcp":{"tipo":"object","desc":"Chamadas MCP em 7 dias.","opcional":true},"uso":{"tipo":"object","desc":"Uso real do produto por recurso: rótulo, hoje, 7 e 30 dias.","opcional":true},"contas":{"tipo":"object","desc":"Usuários e convidados.","nulo":true,"opcional":true},"confiabilidade":{"tipo":"object","desc":"Percentual de pedidos sem 5xx em 7 dias e o build no ar.","opcional":true},"catalogo":{"tipo":"object","desc":"Tamanho do acervo, quando o produto tem um.","nulo":true,"opcional":true},"apoio":{"tipo":"object","desc":"Impressões e cliques por patrocinador, quando houver.","opcional":true}},"exemplo":"curl -s $ORIGIN/api/vitrine","returns":"{ v, produto, publicado, atualizado_em, stale, nome?, desde?, fuso?, hoje?, dias?, janelas?, visitantes?, pessoas?, agentes?, superficies?, mcp?, uso?, contas?, confiabilidade?, catalogo?, apoio? }","url":"https://staging.rota-nacional.ia.br/api/vitrine","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/operador","auth":"none","grupo":"Números públicos","summary":"O documento completo do produto no painel do operador — só com o token do operador.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — a classe operador.","obrigatorio":true}},"retorno":{"produto":{"tipo":"string","desc":"Id do produto."},"atualizado_em":{"tipo":"string","desc":"Quando o coletor publicou.","nulo":true},"operador":{"tipo":"object","desc":"O documento completo do coletor, com o que a projeção pública não carrega.","nulo":true}},"erros":{"401":"Sem token, token errado ou token de outra classe.","503":"Worker sem `METRICS_TOKEN` ou sem o control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/operador -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"{ produto, atualizado_em, operador }","url":"https://staging.rota-nacional.ia.br/api/vitrine/operador","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/painel","auth":"none","grupo":"Números públicos","summary":"O painel da casa inteira, na forma que o gm lê — só com o token do operador.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — a classe operador.","obrigatorio":true}},"retorno":{"apps":{"tipo":"object[]","desc":"Um documento do operador por produto, em ordem de id."},"updated":{"tipo":"string","desc":"Quando o coletor fechou a rodada.","opcional":true},"totals":{"tipo":"object","desc":"Os totais da casa.","opcional":true}},"erros":{"401":"Sem token, token errado ou token de outra classe.","503":"Worker sem `METRICS_TOKEN` ou sem o control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/painel -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"{ apps, updated?, totals? }","url":"https://staging.rota-nacional.ia.br/api/vitrine/painel","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/cursores","auth":"none","grupo":"Números públicos","summary":"O cursor de erro resolvido por produto (`borda`, `cli`) — só com o token do operador.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — a classe operador.","obrigatorio":true}},"retorno":{"_texto":"JSON: `{ [produto]: { borda?: ISO, cli?: ISO } }`; vazio é `{}`."},"erros":{"401":"Sem token, token errado ou token de outra classe.","503":"Worker sem `METRICS_TOKEN` ou sem o control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/cursores -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"JSON: `{ [produto]: { borda?: ISO, cli?: ISO } }`; vazio é `{}`.","url":"https://staging.rota-nacional.ia.br/api/vitrine/cursores","auth_detail":"Público."},{"method":"POST","path":"/api/contact","auth":"none","summary":"Fale com quem faz o produto — de graça, para pessoa e agente.","grupo":"Contato","desc":"Uma rota para dúvida e para proposta de patrocínio, parceria ou anúncio (`tipo`, com os espaços de `GET /api/partners`). Sem captcha, sem conta, sem pagamento. Uma mensagem a cada 10 segundos por rede: a que chega antes espera a vez e sai — sem erro. A mensagem chega à equipe por e-mail, com o `email` como endereço de resposta.","corpo":{"name":{"tipo":"string","desc":"Como chamar quem escreve (alias `nome`).","obrigatorio":true},"email":{"tipo":"string","desc":"Para onde responder.","obrigatorio":true},"message":{"tipo":"string","desc":"O que você quer dizer (alias `mensagem`).","obrigatorio":true},"tipo":{"tipo":"string","desc":"Proposta: `patrocinio`, `parceria` ou `anuncio`. Liga os campos abaixo."},"empresa":{"tipo":"string","desc":"Quem propõe, quando é empresa."},"site":{"tipo":"string","desc":"Site de quem propõe."},"orcamento":{"tipo":"string","desc":"`ate_100`, `100_500`, `500_2000`, `2000_mais` ou `a_combinar`."},"espaco":{"tipo":"string[]","desc":"Ids de placement de `GET /api/partners`, até 6."},"duracao":{"tipo":"string","desc":"Dias de exposição: `30`, `90` ou `365`."},"pagamento":{"tipo":"string","desc":"`usdc`, `deposito` ou `a_combinar`."}},"body":{"name":"Agente","email":"agent@example.com","message":"olá, sou um agente"},"retorno":{"ok":{"tipo":"bool","desc":"Sempre `true` quando a mensagem foi aceita."}},"erros":{"400":"Validação: o `code` diz o campo.","503":"O contato não está configurado neste servidor."},"exemplo":"curl -s -XPOST $ORIGIN/api/contact -H 'content-type: application/json' -d '{\"name\":\"Agente\",\"email\":\"agent@example.com\",\"message\":\"olá, sou um agente\"}'","returns":"{ ok }","url":"https://staging.rota-nacional.ia.br/api/contact","auth_detail":"Público."},{"method":"GET","path":"/api/partners","auth":"none","grupo":"Parceria","summary":"Parceria, patrocínio e anúncio: os espaços do produto com preço sugerido, os números públicos ao lado e como propor.","desc":"Informação sob consulta, sem ativação: espaços do catálogo da casa com preço em USD por 30 dias (90 e 365 dias com desconto), patrocinadores em vigor, recorte de `/api/vitrine`, carteira da casa (USDC na Base) e o caminho de contato — depósito, PIX ou fatura são combinados na resposta. Cache de 1 hora.","retorno":{"status":{"tipo":"string","desc":"`sob_consulta`: informação e proposta, sem ativação nem cobrança."},"produto":{"tipo":"string","desc":"Nome do produto."},"idioma":{"tipo":"string","desc":"Idioma dos textos (o do produto)."},"titulo":{"tipo":"string","desc":"Título da oferta."},"descricao":{"tipo":"string","desc":"Uma frase sobre a oferta."},"publico":{"tipo":"string","desc":"Quem usa o produto — o público que o patrocinador alcança."},"modalidades":{"tipo":"object[]","desc":"`{ id, nome }`: patrocinio, parceria, anuncio."},"placements":{"tipo":"object[]","desc":"Os espaços do produto: `id`, `nome`, `onde`, `formato`, `exclusivo`, `medicao`, `price_usd_30d` (sugestão; `null` é sob consulta), `exposure[{ dias, price_usd }]` para 30, 90 e 365 dias, `disponivel`."},"house_bundle":{"tipo":"object","desc":"O pacote da casa: rodapé e menção para agentes nos dez produtos, com desconto."},"parcerias":{"tipo":"string[]","desc":"Ideias de parceria que o produto aceita discutir."},"current_sponsors":{"tipo":"object[]","desc":"Patrocinadores em vigor: `id`, `nome`, `url`, `frase`, `espacos`, `ate`."},"stats":{"tipo":"object","desc":"Recorte dos números públicos (`hoje`, `janelas`, `agentes`, `confiabilidade`) e o `link` para `/api/vitrine`; `publicado: false` antes da primeira publicação."},"payment":{"tipo":"object","desc":"Como pagar: `rede`, `chain_id`, `ativo`, `pay_to`, `eip681` (a carteira da casa, quando declarada), `alternativas` e a `nota` — depósito, PIX ou fatura pela resposta."},"contact":{"tipo":"object","desc":"`email`, `form_url`, `api_url` (`POST /api/contact`, livre: uma mensagem a cada 10 s por rede), `campos` (os obrigatórios), `campos_proposta` (os opcionais da proposta, com os valores aceitos de cada um), `message_template`, `instructions`."},"politica":{"tipo":"object","desc":"Rótulo do espaço, setores recusados, pagamento adiantado, prazos."},"_links":{"tipo":"object","desc":"`self`, `stats`, `page` (`null` até a página existir), `contact`, `casa` (o mesmo caminho nos dez produtos)."}},"exemplo":"curl -s $ORIGIN/api/partners","returns":"{ status, produto, idioma, titulo, descricao, publico, modalidades, placements, house_bundle, parcerias, current_sponsors, stats, payment, contact, politica, _links }","url":"https://staging.rota-nacional.ia.br/api/partners","auth_detail":"Público."},{"method":"POST","path":"/api/credito","auth":"none","summary":"Recarrega crédito pré-pago: paga uma vez com x402 e recebe o token que desconta em qualquer API da casa.","grupo":"Crédito","query":{"usd":{"tipo":"int","desc":"Pacote: 1, 5, 10 ou 25 dólares.","obrigatorio":true}},"retorno":{"token":{"tipo":"string","desc":"Token portador do saldo (`cred_…`). Mostrado UMA vez — não há como recuperá-lo."},"saldo_usd":{"tipo":"string","desc":"Saldo creditado."},"guarde":{"tipo":"string","desc":"Aviso de que o token é o portador do crédito."},"usar":{"tipo":"string","desc":"Como apresentar o token nas rotas pagas."},"saldo_em":{"tipo":"string","desc":"Onde consultar saldo e extrato."}},"erros":{"400":"Pacote fora da lista (1, 5, 10 ou 25).","402":"Sem pagamento — o corpo traz `accepts[]` do x402."},"exemplo":"curl -s -XPOST '$ORIGIN/api/credito?usd=10'","returns":"{ token, saldo_usd, guarde, usar, saldo_em }","url":"https://staging.rota-nacional.ia.br/api/credito","auth_detail":"Público."},{"method":"GET","path":"/api/credito","auth":"credito","summary":"Saldo e extrato do crédito — as últimas movimentações, sem devolver o token.","grupo":"Crédito","retorno":{"saldo_micros":{"tipo":"int","desc":"Saldo em micro-dólares (1e-6 USD)."},"saldo_usd":{"tipo":"string","desc":"Saldo formatado."},"criado_em":{"tipo":"string","desc":"Quando o crédito foi aberto."},"movimentos":{"tipo":"object[]","desc":"Entradas e saídas recentes, com produto e recurso."}},"erros":{"401":"Sem token ou token desconhecido."},"exemplo":"curl -s $ORIGIN/api/credito -H 'Authorization: Bearer cred_…'","returns":"{ saldo_micros, saldo_usd, criado_em, movimentos }","url":"https://staging.rota-nacional.ia.br/api/credito","auth_detail":"Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo."},{"method":"GET","path":"/api/credito/pix","auth":"none","summary":"Crédito por Pix: a chave, o câmbio fixo, os pacotes em reais e o que o comprovante aceita.","grupo":"Crédito","retorno":{"chave":{"tipo":"string","desc":"A chave Pix que recebe o pagamento."},"brl_por_usd":{"tipo":"number","desc":"Câmbio fixo usado nos pacotes."},"pacotes":{"tipo":"object[]","desc":"Os pacotes (1, 5, 10 ou 25 dólares), cada um com `brl_centavos` e `copia_e_cola` (o Pix copia e cola do valor, o mesmo texto do QR: o app do banco já vem com o valor)."},"comprovante":{"tipo":"object","desc":"Tipos aceitos (foto ou PDF) e o tamanho máximo, em bytes."},"liberacao":{"tipo":"string","desc":"`manual`: o dono confere o Pix e libera."}},"exemplo":"curl -s $ORIGIN/api/credito/pix","returns":"{ chave, brl_por_usd, pacotes, comprovante, liberacao }","url":"https://staging.rota-nacional.ia.br/api/credito/pix","auth_detail":"Público."},{"method":"POST","path":"/api/credito/pix","auth":"none","summary":"Pede crédito pago por Pix: multipart com `usd`, `comprovante` (foto ou PDF até 2 MB) e `email`; o resto é opcional.","desc":"O código de crédito sai na resposta e passa a valer quando o dono confere o Pix e libera (manual, em geral no mesmo dia). O `email` é obrigatório: é por ele que o dono fala com a pessoa. Opcionais: `nome`, `pagina` (a página de onde pediu, até 2.000 caracteres) e o que a pessoa comprava quando recebeu o 402 — `recurso` (até 2.000), `descricao` (até 300) e `preco_usd` (decimal, ex. `0.50`); e `navegador_id` (UUID que liga os pedidos do mesmo navegador). Tudo o que chega fica registrado no pedido — o comprovante inclusive —, com a conta logada (conferida pelo cookie da sessão), a rede e o navegador de quem pediu.","grupo":"Crédito","retorno":{"id":{"tipo":"string","desc":"Id do pedido, para acompanhar."},"estado":{"tipo":"string","desc":"`pendente` até a decisão."},"credito":{"tipo":"string","desc":"O token `cred_…`, mostrado UMA vez; vale depois da liberação."},"estado_em":{"tipo":"string","desc":"Onde acompanhar o pedido."}},"erros":{"400":"Pacote fora da lista (1, 5, 10 ou 25), sem comprovante ou sem e-mail válido.","413":"Comprovante acima de 2 MB.","415":"Comprovante que não é foto (JPEG, PNG, WebP) nem PDF.","429":"A rede já mandou os pedidos do dia.","502":"O e-mail ao dono não saiu: o pedido fica registrado como `falhou`; mande de novo.","503":"Fila de conferência cheia, ou Pix indisponível neste app."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/pix -F usd=5 -F email=voce@empresa.com.br -F comprovante=@pix.pdf","returns":"{ id, estado, credito, estado_em }","url":"https://staging.rota-nacional.ia.br/api/credito/pix","auth_detail":"Público."},{"method":"GET","path":"/api/credito/pix/:id","auth":"none","summary":"Estado de um pedido de crédito por Pix: `pendente`, `liberado`, `recusado` ou `falhou`.","grupo":"Crédito","params":{"id":{"desc":"Id do pedido (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"estado":{"tipo":"string","desc":"`pendente`, `liberado`, `recusado` ou `falhou` (o e-mail ao dono não saiu; mande de novo)."},"usd":{"tipo":"int","desc":"O pacote pedido."},"decidido_em":{"tipo":"string","desc":"Quando o dono decidiu, ou `null`."}},"erros":{"404":"Pedido desconhecido."},"exemplo":"curl -s $ORIGIN/api/credito/pix/0123456789abcdef0123456789abcdef","returns":"{ estado, usd, decidido_em }","url":"https://staging.rota-nacional.ia.br/api/credito/pix/:id","auth_detail":"Público."},{"method":"GET","path":"/api/credito/asaas","auth":"none","summary":"Pix automático: se está disponível neste app, os pacotes em reais e o saldo que o produto vende.","grupo":"Crédito","retorno":{"disponivel":{"tipo":"boolean","desc":"`false` quando o app não tem o Asaas configurado (use o Pix com comprovante)."},"pacotes":{"tipo":"object[]","desc":"Os pacotes de crédito (1, 5, 10 ou 25 dólares), com `brl_centavos`."},"saldo":{"tipo":"object","desc":"Quando o produto vende saldo em reais: a faixa e se a conta logada pode comprar."},"precisa_documento":{"tipo":"boolean","desc":"Se o CPF ou CNPJ de quem paga ainda é pedido."}},"exemplo":"curl -s $ORIGIN/api/credito/asaas","returns":"{ disponivel, pacotes, saldo, precisa_documento }","url":"https://staging.rota-nacional.ia.br/api/credito/asaas","auth_detail":"Público."},{"method":"POST","path":"/api/credito/asaas","auth":"none","summary":"Gera um Pix dinâmico: JSON com `oferta` (`pacote` com `usd`, ou `saldo` com `centavos`) e o pagador.","desc":"O pagamento libera sozinho o que se comprou: o pacote vira o token `cred_…` que já vem na resposta; o saldo cai na organização da conta logada. Na primeira compra vão `documento` (CPF ou CNPJ, que segue para o gateway e não fica guardado aqui) e `nome`; `email`, `pagina` e `navegador_id` são opcionais e ficam registrados.","grupo":"Crédito","retorno":{"id":{"tipo":"string","desc":"Id da cobrança, para acompanhar."},"credito":{"tipo":"string","desc":"No pacote: o token `cred_…`, mostrado UMA vez; vale quando o Pix cair."},"pix":{"tipo":"object","desc":"`copia_e_cola`, `imagem` (QR em PNG, data URI) e `expira_em`."},"estado_em":{"tipo":"string","desc":"Onde acompanhar o pagamento."}},"erros":{"400":"Pacote fora da lista (1, 5, 10 ou 25), valor fora da faixa, ou CPF/CNPJ, nome ou e-mail inválido.","429":"A rede já gerou as cobranças do dia.","502":"O gateway não gerou o Pix; tente de novo.","503":"Pix automático indisponível neste app, ou cobranças demais esperando pagamento."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/asaas -H 'content-type: application/json' -d '{\"oferta\":\"pacote\",\"usd\":5,\"documento\":\"000.000.000-00\",\"nome\":\"Ana\"}'","returns":"{ id, credito, pix, estado_em }","url":"https://staging.rota-nacional.ia.br/api/credito/asaas","auth_detail":"Público."},{"method":"GET","path":"/api/credito/asaas/:id","auth":"none","summary":"Estado de uma cobrança Pix automática: `pendente`, `pago`, `vencido`, `estornado` ou `falhou`.","grupo":"Crédito","params":{"id":{"desc":"Id da cobrança (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"estado":{"tipo":"string","desc":"`pago` libera o token do pacote ou o saldo; o Pix pago depois do vencimento vale."},"pago_em":{"tipo":"string","desc":"Quando o pagamento foi confirmado, ou `null`."}},"erros":{"404":"Cobrança desconhecida."},"exemplo":"curl -s $ORIGIN/api/credito/asaas/0123456789abcdef0123456789abcdef","returns":"{ estado, pago_em }","url":"https://staging.rota-nacional.ia.br/api/credito/asaas/:id","auth_detail":"Público."},{"method":"GET","path":"/v1/models","auth":"none","summary":"O catálogo curado de modelos `rota/*`, com janela de contexto e para que cada um serve.","grupo":"Modelos","retorno":{"object":{"tipo":"string","desc":"`list`."},"data":{"tipo":"object[]","desc":"Os modelos: `id`, `display_name`, `context_window`, `description`."}},"exemplo":"curl -s $ORIGIN/v1/models","returns":"{ object, data }","url":"https://staging.rota-nacional.ia.br/v1/models","auth_detail":"Público."},{"method":"POST","path":"/v1/chat/completions","auth":"chave","summary":"Chat compatível com a OpenAI, com `stream: true` em SSE. Os dados pessoais são tratados antes do modelo.","desc":"O corpo é o da OpenAI (`model`, `messages`, `max_tokens`, `temperature`, `tools`…). Antes de qualquer envio, a barreira troca CPF, CNPJ, e-mail, telefone e nomes por marcadores (`placeholder`), os remove (`redact`) ou recusa o pedido (`block`), conforme a política da organização. `rota/auto` escolhe o modelo pelo conteúdo. Imagem e documento no corpo são recusados com erro claro: use `/v1/privacy/extract` antes.","grupo":"Modelos","corpo":{"model":{"tipo":"string","desc":"Um id do catálogo (`rota/*`, em `GET /v1/models`); `rota/auto` escolhe pelo conteúdo."},"messages":{"tipo":"object[]","desc":"A conversa: `role` (`system`, `user`, `assistant` ou `tool`) e `content` de cada mensagem; o conteúdo passa pela barreira."},"max_tokens":{"tipo":"number","desc":"O teto de tokens da resposta; conta na cota e no débito do crédito."},"stream":{"tipo":"bool","desc":"`true` devolve a resposta em SSE, pedaço a pedaço, sem esperar o fim."}},"body":{"model":"rota/rapido","messages":[{"role":"user","content":"Olá"}],"max_tokens":64},"retorno":{"choices":{"tipo":"object[]","desc":"As respostas, no formato da OpenAI."},"usage":{"tipo":"object","desc":"`prompt_tokens`, `completion_tokens`, `total_tokens`."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","422":"A política de privacidade `block` recusou o envio: havia dados pessoais.","429":"Limite por minuto ou cota do mês."},"exemplo":"curl -s $ORIGIN/v1/chat/completions -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"model\":\"rota/rapido\",\"messages\":[{\"role\":\"user\",\"content\":\"Olá\"}],\"max_tokens\":64}'","returns":"{ choices, usage }","url":"https://staging.rota-nacional.ia.br/v1/chat/completions","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/messages","auth":"chave","summary":"A API Messages da Anthropic (Claude Code e compatíveis), pela mesma barreira de privacidade, cota e auditoria.","desc":"O corpo é o da Anthropic (`model`, `max_tokens`, `messages`, `system`, `tools`, `stream`). A resposta e o fluxo saem no formato da Anthropic. No Claude Code: `ANTHROPIC_BASE_URL=$ORIGIN` e a chave em `ANTHROPIC_AUTH_TOKEN`.","grupo":"Modelos","corpo":{"model":{"tipo":"string","desc":"Um id do catálogo (`rota/*`, em `GET /v1/models`); `rota/auto` escolhe pelo conteúdo."},"max_tokens":{"tipo":"number","desc":"O teto de tokens da resposta; conta na cota e no débito do crédito."},"messages":{"tipo":"object[]","desc":"A conversa: `role` (`system`, `user`, `assistant` ou `tool`) e `content` de cada mensagem; o conteúdo passa pela barreira."},"stream":{"tipo":"bool","desc":"`true` devolve a resposta em SSE, pedaço a pedaço, sem esperar o fim."}},"body":{"model":"rota/rapido","max_tokens":64,"messages":[{"role":"user","content":"Olá"}]},"retorno":{"content":{"tipo":"object[]","desc":"Blocos `text` e `tool_use`."},"stop_reason":{"tipo":"string","desc":"`end_turn`, `max_tokens` ou `tool_use`."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","422":"A política de privacidade `block` recusou o envio: havia dados pessoais.","429":"Limite por minuto ou cota do mês."},"exemplo":"curl -s $ORIGIN/v1/messages -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'content-type: application/json' -d '{\"model\":\"rota/rapido\",\"max_tokens\":64,\"messages\":[{\"role\":\"user\",\"content\":\"Olá\"}]}'","returns":"{ content, stop_reason }","url":"https://staging.rota-nacional.ia.br/v1/messages","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/privacy/clean","auth":"chave","summary":"Limpa dados pessoais de um texto, JSON ou lista, sem modelo nenhum: marcadores, remoção ou bloqueio.","desc":"Mande `text`, `input` ou `items`; `policy` só endurece a da organização. A resposta traz o texto limpo e as categorias encontradas, nunca os valores.","grupo":"Privacidade","corpo":{"text":{"tipo":"string","desc":"O texto a limpar (ou `input`, um JSON, ou `items`, uma lista curta)."},"policy":{"tipo":"string","desc":"`placeholder`, `redact` ou `block`; só endurece a política da organização."}},"body":{"text":"Contato: teste@example.com"},"retorno":{"clean_text":{"tipo":"string","desc":"O texto com os marcadores (`[CPF_1]`, `[EMAIL_1]`…)."},"findings":{"tipo":"object[]","desc":"Categoria, contagem e ação."},"audit_id":{"tipo":"string","desc":"O registro cifrado da chamada."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","422":"A política de privacidade `block` recusou o envio: havia dados pessoais.","429":"Limite por minuto ou cota do mês."},"exemplo":"curl -s $ORIGIN/v1/privacy/clean -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"text\":\"Contato: teste@example.com\"}'","returns":"{ clean_text, findings, audit_id }","url":"https://staging.rota-nacional.ia.br/v1/privacy/clean","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/privacy/jobs","auth":"chave","statusOk":202,"summary":"A mesma limpeza como job consultável depois (`GET /v1/privacy/jobs/:id`), para lotes.","grupo":"Privacidade","corpo":{"items":{"tipo":"string[]","desc":"Os textos do lote, cada um limpo à parte; a resposta traz só categorias e contagens."}},"body":{"items":["Ana, CPF 529.982.247-25"]},"retorno":{"id":{"tipo":"string","desc":"O id do job."},"status":{"tipo":"string","desc":"`completed` ou `blocked`."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","422":"A política de privacidade `block` recusou o envio: havia dados pessoais.","429":"Limite por minuto ou cota do mês."},"exemplo":"curl -s $ORIGIN/v1/privacy/jobs -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"items\":[\"Ana, CPF 529.982.247-25\"]}'","returns":"{ id, status }","url":"https://staging.rota-nacional.ia.br/v1/privacy/jobs","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"GET","path":"/v1/privacy/jobs/:id","auth":"chave","summary":"O resultado de um job de limpeza: categorias, contagens e o registro de auditoria, sem o conteúdo.","grupo":"Privacidade","params":{"id":{"desc":"O id do job (`privjob_…`).","exemplo":"privjob_0123456789abcdef"}},"retorno":{"status":{"tipo":"string","desc":"`completed` ou `failed`."},"privacy":{"tipo":"object","desc":"Categorias, contagens e total."}},"erros":{"401":"Chave de API ausente ou inválida.","404":"Job desconhecido para esta organização."},"exemplo":"curl -s $ORIGIN/v1/privacy/jobs/privjob_0123456789abcdef -H \"Authorization: Bearer $ROTA_API_KEY\"","returns":"{ status, privacy }","url":"https://staging.rota-nacional.ia.br/v1/privacy/jobs/:id","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/privacy/extract","auth":"chave","summary":"Extrai o texto de um PDF (ou de uma imagem, por OCR em beta) e o devolve já limpo pela barreira.","desc":"Multipart com `file` (até 25 MB). O arquivo não fica guardado; PDF escaneado ou imagem ilegível recebem 422 claro.","grupo":"Privacidade","retorno":{"text":{"tipo":"string","desc":"O texto limpo."},"findings":{"tipo":"object[]","desc":"Categoria, contagem e ação."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","413":"Documento acima de 25 MB.","422":"Sem texto extraível, ou bloqueado pela política.","429":"Limite por minuto ou cota do mês."},"exemplo":"curl -s $ORIGIN/v1/privacy/extract -H \"Authorization: Bearer $ROTA_API_KEY\" -F file=@documento.pdf","returns":"{ text, findings }","url":"https://staging.rota-nacional.ia.br/v1/privacy/extract","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/audio/transcriptions","auth":"chave","summary":"Transcreve um áudio (compatível com a OpenAI) e devolve o texto já limpo pela barreira.","desc":"Multipart com `file` (até 25 MB), `language` e `response_format` (`json` ou `text`). O áudio não fica guardado.","grupo":"Privacidade","retorno":{"text":{"tipo":"string","desc":"A transcrição limpa."}},"erros":{"401":"Chave de API ausente ou inválida.","403":"Conta aguardando liberação, teste gratuito encerrado, modelo não liberado ou origem de rede fora da política da organização.","413":"Áudio acima de 25 MB.","422":"A política de privacidade `block` recusou o envio: havia dados pessoais.","429":"Limite por minuto ou cota do mês.","504":"Áudio longo demais para a transcrição síncrona."},"exemplo":"curl -s $ORIGIN/v1/audio/transcriptions -H \"Authorization: Bearer $ROTA_API_KEY\" -F file=@reuniao.mp3","returns":"{ text }","url":"https://staging.rota-nacional.ia.br/v1/audio/transcriptions","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"GET","path":"/v1/capabilities","auth":"chave","summary":"As capacidades `rn.*` que os workers ligados anunciam agora.","grupo":"Capacidades rn.*","retorno":{"capabilities":{"tipo":"string[]","desc":"As capacidades disponíveis."},"workers":{"tipo":"object[]","desc":"Cada worker visto nos últimos 2 min."}},"erros":{"401":"Chave de API ausente ou inválida."},"exemplo":"curl -s $ORIGIN/v1/capabilities -H \"Authorization: Bearer $ROTA_API_KEY\"","returns":"{ capabilities, workers }","url":"https://staging.rota-nacional.ia.br/v1/capabilities","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/embeddings","auth":"chave","statusOk":200,"summary":"Vetores de textos para busca por significado (espera até 2 min; senão, 202 com o job).","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","corpo":{"input":{"tipo":"string[]","desc":"O texto, ou a lista de textos, a vetorizar; passa pela barreira antes do worker."}},"retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/embeddings -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"input\":[\"política de privacidade\"]}'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/embeddings","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/audio/speech","auth":"chave","statusOk":200,"summary":"Voz a partir de um texto (espera até 5 min; senão, 202 com o job).","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","corpo":{"text":{"tipo":"string","desc":"O texto a falar; obrigatório, e passa pela barreira antes do worker."}},"retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/audio/speech -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"text\":\"Bem-vindo à Rota Nacional.\"}'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/audio/speech","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/audio/music","auth":"chave","statusOk":202,"summary":"Música a partir de uma descrição (60, 120 ou 180 s).","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","corpo":{"style":{"tipo":"string","desc":"A descrição do estilo da música (instrumentos, clima, andamento)."},"seconds":{"tipo":"number","desc":"A duração: 60, 120 ou 180 segundos (padrão 60)."}},"retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/audio/music -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"style\":\"Instrumental ambiente\",\"seconds\":60}'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/audio/music","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/audio/compositions","auth":"chave","statusOk":202,"summary":"Composição de voz e fundo com ganhos e rampas.","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/audio/compositions -H \"Authorization: Bearer $ROTA_API_KEY\" -F voice=@voz.mp3 -F background=@fundo.mp3","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/audio/compositions","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/images/generations","auth":"chave","statusOk":202,"summary":"Imagem a partir de uma descrição.","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","corpo":{"prompt":{"tipo":"string","desc":"A descrição da imagem; obrigatória, e passa pela barreira antes do worker."}},"retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/images/generations -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"prompt\":\"Uma cidade-jardim ao amanhecer\"}'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/images/generations","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/images/edits","auth":"chave","statusOk":202,"summary":"Edição de uma imagem com uma instrução.","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/images/edits -H \"Authorization: Bearer $ROTA_API_KEY\" -F image=@foto.png -F prompt='fundo neutro'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/images/edits","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/ocr","auth":"chave","statusOk":200,"summary":"Texto de uma imagem ou documento (espera até 3 min; senão, 202 com o job).","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/ocr -H \"Authorization: Bearer $ROTA_API_KEY\" -F file=@documento.pdf","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/ocr","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/documents/fidelity/jobs","auth":"chave","statusOk":202,"summary":"OCR documental fiel (páginas, imagens), como job.","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/documents/fidelity/jobs -H \"Authorization: Bearer $ROTA_API_KEY\" -F file=@documento.pdf","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/documents/fidelity/jobs","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"POST","path":"/v1/documents/review/jobs","auth":"chave","statusOk":202,"summary":"Revisão documental como job.","desc":"Prévia (`rn.*`): o contrato pode mudar e depende de worker ligado (veja `GET /v1/capabilities`).","grupo":"Capacidades rn.*","corpo":{"document":{"tipo":"string","desc":"O texto do documento; o resto do JSON (instruções, esquema do resultado) segue ao worker depois da barreira."}},"retorno":{"id":{"tipo":"string","desc":"O id do job (`rnj_…`)."},"status":{"tipo":"string","desc":"`queued`, `leased`, `completed`, `failed` ou `cancelled`."},"status_url":{"tipo":"string","desc":"Onde acompanhar."}},"erros":{"401":"Chave de API ausente ou inválida.","413":"Entrada acima do limite.","503":"Workers indisponíveis."},"exemplo":"curl -s $ORIGIN/v1/documents/review/jobs -H \"Authorization: Bearer $ROTA_API_KEY\" -H 'content-type: application/json' -d '{\"document\":\"...\"}'","returns":"{ id, status, status_url }","url":"https://staging.rota-nacional.ia.br/v1/documents/review/jobs","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"GET","path":"/v1/jobs/:id","auth":"chave","summary":"O estado de um job `rn.*` da organização.","grupo":"Capacidades rn.*","params":{"id":{"desc":"O id do job.","exemplo":"rnj_0123456789abcdef"}},"retorno":{"status":{"tipo":"string","desc":"O estado."},"progress_pct":{"tipo":"number","desc":"O progresso, quando o worker informa."}},"erros":{"401":"Chave de API ausente ou inválida.","404":"Job desconhecido para esta organização."},"exemplo":"curl -s $ORIGIN/v1/jobs/rnj_0123456789abcdef -H \"Authorization: Bearer $ROTA_API_KEY\"","returns":"{ status, progress_pct }","url":"https://staging.rota-nacional.ia.br/v1/jobs/:id","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"GET","path":"/v1/jobs/:id/result","auth":"chave","summary":"O resultado de um job concluído: o arquivo gerado, ou o JSON já limpo pela barreira.","grupo":"Capacidades rn.*","params":{"id":{"desc":"O id do job.","exemplo":"rnj_0123456789abcdef"}},"retorno":{"result":{"tipo":"object","desc":"O resultado, quando é JSON."}},"erros":{"401":"Chave de API ausente ou inválida.","404":"Job desconhecido.","409":"Job ainda não concluído."},"exemplo":"curl -s $ORIGIN/v1/jobs/rnj_0123456789abcdef/result -H \"Authorization: Bearer $ROTA_API_KEY\"","returns":"{ result }","url":"https://staging.rota-nacional.ia.br/v1/jobs/:id/result","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"method":"DELETE","path":"/v1/jobs/:id","auth":"chave","summary":"Cancela um job que ainda está na fila.","grupo":"Capacidades rn.*","params":{"id":{"desc":"O id do job.","exemplo":"rnj_0123456789abcdef"}},"retorno":{"status":{"tipo":"string","desc":"`cancelled`."}},"erros":{"401":"Chave de API ausente ou inválida.","404":"Job desconhecido.","409":"O job já saiu da fila."},"exemplo":"curl -s -X DELETE $ORIGIN/v1/jobs/rnj_0123456789abcdef -H \"Authorization: Bearer $ROTA_API_KEY\"","returns":"{ status }","url":"https://staging.rota-nacional.ia.br/v1/jobs/:id","auth_detail":"Chave de API da conta: `Authorization: Bearer mmk_…` ou `X-Api-Key: mmk_…`. Criada na página da conta (Chaves de API), vale só no produto em que nasceu e age como a conta (ou a organização dona dela). A chave criada na conta vale na API do Rota Nacional; as `sk-rota-…` de antes continuam valendo."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"401":"Sem sessão da conta.","404":"Organização desconhecida para esta conta."},"method":"GET","path":"/api/app/resumo","summary":"O resumo do painel: o acesso à API, o teste, a cota do mês, o uso de hoje, os modelos mais usados e o saldo.","retorno":{"acesso":{"tipo":"object","desc":"`status`, `motivo`, `teste_ate`, `liberado_em` e a `politica` de privacidade."},"cota":{"tipo":"object","desc":"Pedidos e tokens do mês contra os limites, e quando a cota reinicia."},"saldo_centavos":{"tipo":"number","desc":"O saldo de crédito em centavos de real."}},"exemplo":"await fetch(\"$ORIGIN/api/app/resumo\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ acesso, cota, saldo_centavos }","url":"https://staging.rota-nacional.ia.br/api/app/resumo","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"401":"Sem sessão da conta.","404":"Organização desconhecida para esta conta."},"method":"GET","path":"/api/app/uso","summary":"O uso do período, do mais novo para o mais velho: só metadados, nunca o texto nem os valores pessoais.","query":{"dias":{"desc":"O período em dias, de 1 a 90 (padrão 30).","exemplo":"30"},"formato":{"desc":"`csv` baixa o mesmo uso em CSV (até 500 linhas); sem ele, JSON (até 100).","exemplo":"csv"}},"retorno":{"eventos":{"tipo":"object[]","desc":"Quando, modelo, rota, status, tokens, latência e as categorias de dados pessoais."}},"exemplo":"await fetch(\"$ORIGIN/api/app/uso?dias=7\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ eventos }","url":"https://staging.rota-nacional.ia.br/api/app/uso","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"401":"Sem sessão da conta.","404":"Organização desconhecida para esta conta."},"method":"GET","path":"/api/app/modelos","summary":"O catálogo com a preferência da pessoa: o modelo desligado recusa a chamada da chave dela com 403.","retorno":{"modelos":{"tipo":"object[]","desc":"Id, nome, contexto, descrição e se está ligado."}},"exemplo":"await fetch(\"$ORIGIN/api/app/modelos\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ modelos }","url":"https://staging.rota-nacional.ia.br/api/app/modelos","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"400":"Id fora do catálogo, ou sem o `ligado`.","401":"Sem sessão da conta.","404":"Organização desconhecida para esta conta."},"method":"PATCH","path":"/api/app/modelos","summary":"Liga ou desliga um modelo do catálogo para as chaves da pessoa.","corpo":{"id":{"tipo":"string","desc":"O id do modelo no catálogo (`rota/*`)."},"ligado":{"tipo":"bool","desc":"`false` desliga: a API recusa o modelo com 403."}},"retorno":{"modelos":{"tipo":"object[]","desc":"O catálogo com a preferência já mudada."}},"exemplo":"await MMConta.fetch(\"$ORIGIN/api/app/modelos\", {method: \"PATCH\", headers: {\"content-type\": \"application/json\"}, body: JSON.stringify({id: \"rota/rapido\", ligado: false})});","exemploLinguagem":"js","returns":"{ modelos }","url":"https://staging.rota-nacional.ia.br/api/app/modelos","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"401":"Sem sessão da conta.","404":"Organização desconhecida para esta conta."},"method":"GET","path":"/api/app/creditos","summary":"O saldo de crédito em reais e as compras por Pix; a compra em si é o Pix automático da casa.","retorno":{"saldo_centavos":{"tipo":"number","desc":"O saldo em centavos de real."},"pode_comprar":{"tipo":"bool","desc":"Se quem pede compra (na organização, só o dono ou um administrador)."},"compras":{"tipo":"object[]","desc":"Cada compra: valor, estado (`pendente`, `pago`, `vencido`, `estornado`) e datas."}},"exemplo":"await fetch(\"$ORIGIN/api/app/creditos\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ saldo_centavos, pode_comprar, compras }","url":"https://staging.rota-nacional.ia.br/api/app/creditos","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"auth":"session","grupo":"Painel","headers":{"X-Organization-Id":{"desc":"A organização em que o pedido age (sem ele, a conta pessoal); o vínculo e o papel são conferidos na conta."}},"erros":{"401":"Sem sessão da conta.","403":"Acesso não liberado.","404":"Organização desconhecida para esta conta.","413":"Texto acima de 8 KB.","422":"Bloqueado pela política.","429":"Limite por minuto ou cota."},"method":"POST","path":"/api/app/privacy/clean","summary":"O teste da barreira no painel: um texto curto pela mesma limpeza da API, com a política da organização.","desc":"Só `text`, até 8 KB, e no máximo 10 por minuto; conta na cota do mês e fica na auditoria cifrada.","corpo":{"text":{"tipo":"string","desc":"O texto de teste (fictício), até 8 KB."}},"retorno":{"clean_text":{"tipo":"string","desc":"O que chegaria ao modelo, com os marcadores."},"privacy":{"tipo":"object","desc":"Categorias, contagens e total, nunca os valores."}},"exemplo":"await MMConta.fetch(\"$ORIGIN/api/app/privacy/clean\", {method: \"POST\", headers: {\"content-type\": \"application/json\"}, body: JSON.stringify({text: \"Contato: teste@example.com\"})});","exemploLinguagem":"js","returns":"{ clean_text, privacy }","url":"https://staging.rota-nacional.ia.br/api/app/privacy/clean","auth_detail":"Sessão global em cookie HttpOnly do produto; escritas exigem Origin exato e X-CSRF-Token."},{"method":"GET","path":"/api/pricing","auth":"none","grupo":"Descoberta","summary":"Preços vigentes e franquias gratuitas.","retorno":{"product":{"tipo":"string","desc":"Product name."},"quota":{"tipo":"PaymentQuota","desc":"Public allowances and current list prices; not personal usage."},"pricing":{"tipo":"string","desc":"Absolute URL of the current price list."},"billing":{"tipo":"string","desc":"Absolute URL of payment discovery or the existing billing summary."},"api_index":{"tipo":"string","desc":"Absolute URL of the API catalog."}},"erros":{"405":"Use GET ou HEAD."},"exemplo":"curl -s $ORIGIN/api/pricing","returns":"{ product, quota{free,paid,how_to_pay,live,free_now?,trial?}, pricing, billing, api_index }","url":"https://staging.rota-nacional.ia.br/api/pricing","auth_detail":"Público."},{"method":"GET","path":"/api/billing","auth":"none","grupo":"Descoberta","summary":"Descoberta pública de pagamento e crédito pré-pago.","retorno":{"product":{"tipo":"string","desc":"Product name."},"quota":{"tipo":"PaymentQuota","desc":"Public allowances and current list prices; not personal usage."},"pricing":{"tipo":"string","desc":"Absolute URL of the current price list."},"billing":{"tipo":"string","desc":"Absolute URL of payment discovery or the existing billing summary."},"api_index":{"tipo":"string","desc":"Absolute URL of the API catalog."},"payment":{"tipo":"PaymentX402","desc":"Public x402 configuration; pay_to=null means not configured."},"credit":{"tipo":"PaymentCredit","desc":"Prepaid credit entry point. Never contains a balance or token."}},"erros":{"405":"Use GET ou HEAD."},"exemplo":"curl -s $ORIGIN/api/billing","returns":"{ product, quota{free,paid,how_to_pay,live,free_now?,trial?}, pricing, billing, api_index, payment{provider,mode,network,chain_id,pay_to,homolog,dev,dev_gate,gratis?,facilitator,asset,asset_address,faucet,wallets}, credit{url,header} }","url":"https://staging.rota-nacional.ia.br/api/billing","auth_detail":"Público."}],"quickstart":["curl -s https://staging.rota-nacional.ia.br/v1/models","curl -s https://staging.rota-nacional.ia.br/api/"]}