Lei Vigente

Dados e privacidade

O que a API recebe, o que guarda, o que registra em log, por quanto tempo e onde, quem são os subprocessadores e o que isso significa sob a LGPD.

Esta página descreve o tratamento de dados como o código faz hoje; as regras de uso do serviço estão nos Termos de uso. Quando o comportamento mudar, esta página muda junto (o histórico fica no repositório da documentação).

O que você envia

RotaDados recebidos
/v1/parse, /v1/resolver-textotexto: até 20.000 caracteres de texto livre: resposta de um LLM, trecho de petição, parecer. Pode conter dados pessoais e informação sigilosa; é você quem decide o que manda.
/v1/resolverCitações estruturadas (sigla, artigo, …) e, opcionalmente, rotulo, a frase que descreve a citação.
Rotas de leitura (/v1/busca, /v1/dispositivos, …)Parâmetros de consulta (q, ref_key, filtros).
/mcp (servidor MCP)Os argumentos das ferramentas (os mesmos dados das rotas acima: texto, citacoes, ref_key, termos de busca) e, opcionalmente, a chave no parâmetro key da URL ou um token OAuth no cabeçalho Authorization.
/conta/* (conta Lei Vigente)O e-mail e a senha com que você cria a conta e entra, o nome que você dá às chaves de API e o cookie de sessão vg_sessao. A senha é usada só para calcular o hash e nunca é gravada nem registrada em log.
/oauth/* (conectar o ChatGPT ou o claude.ai à sua conta)Os dados do protocolo OAuth: identificador e nome do cliente (por exemplo, "ChatGPT"), endereços de retorno, códigos e tokens.
Assinatura (checkout da Stripe)Cartão, endereço de cobrança, nome e CPF/CNPJ são digitados na página da Stripe, não no Lei Vigente.
TodasCabeçalhos HTTP: Authorization (chave ou token), X-Request-Id (se você mandar), IP de origem.

O que não é guardado

texto, rotulo, citacoes e parâmetros de busca são processados em memória durante a requisição e descartados na resposta. Não existe tabela, fila, cache ou arquivo que receba conteúdo enviado por clientes, nem em erro. O log de requisição (abaixo) não inclui corpo, query string nem cabeçalhos. Ter uma conta não muda isso: o que é contado por conta é o número de requisições por dia, nunca o conteúdo.

Dados de cartão nunca passam pelo Lei Vigente: o pagamento é feito no checkout e no portal da Stripe, e o Lei Vigente recebe só identificadores e o estado da assinatura. Nome, endereço e CPF/CNPJ de cobrança ficam na Stripe; o Lei Vigente não os grava no próprio banco (eles são lidos da fatura da Stripe na hora de emitir a nota fiscal, abaixo).

Nada do que você envia é usado para treinar modelo, melhorar o corpus ou gerar estatísticas além da contagem de requisições.

O que é guardado

DadoOndeRetenção
Chave de API: nome informado na criação, prefixo (8 caracteres), SHA-256 da chave, plano, ativa/inativa, data de criação, último uso e, se criada na página da conta, a conta donaPostgresEnquanto a chave existir (revogar a desativa). A chave em claro nunca é armazenada.
Contador de requisições por chave por dia (api_usage_daily)PostgresIndefinida (é o que sustenta o limite mensal). Não há detalhe por requisição.
Conta: e-mail, plano, data de criação e do último loginPostgresEnquanto a conta existir.
Senha: só o hash PBKDF2-SHA256 (100 mil iterações, sal aleatório)PostgresEnquanto a conta existir; trocar a senha substitui o hash e encerra as outras sessões.
Link de recuperação de senha (só quando o envio de e-mail estiver ativado; hoje não está): SHA-256 do token, e-mail, validade, usoPostgresO link vale 15 minutos e uma única vez.
Sessão do navegador: SHA-256 do identificador do cookie vg_sessao, conta, validadePostgres30 dias, ou até você sair.
OAuth: clientes registrados (identificador, nome, endereços de retorno); SHA-256 dos códigos e tokens, conta, escopo, validadePostgresCódigo de autorização: minutos, uso único. Token de acesso: 1 hora. Token de renovação: 30 dias (trocado a cada uso), ou até ser revogado. Os tokens em claro nunca são armazenados.
Contador de requisições por conta por dia (user_usage_daily)PostgresEnquanto a conta existir (sustenta o limite mensal). Não há detalhe por requisição.
Assinatura: identificadores de cliente e de assinatura na Stripe, status, periodicidade (mensal ou anual), fim do período, cancelamento agendado; identificadores dos eventos da Stripe já processadosPostgresEnquanto a conta existir.
Nota fiscal (NFS-e): identificador da fatura na Stripe, conta, valor, status da emissão e identificador no emissorPostgresPelo prazo exigido pela legislação tributária (em regra, 5 anos), mesmo após a exclusão da conta.
IP de chamadas sem chave, para o limite de 30 req/minMemória do processoJanela de 60 segundos; nunca vai a disco nem a log.

O único cookie que a API define é vg_sessao (HttpOnly, 30 dias), necessário para manter você conectado nas páginas da conta. Não há cookie de publicidade nem de rastreamento.

O que vai para log

Uma linha JSON por requisição, com exatamente estes campos:

{
  "ts": "2026-08-27T13:22:11.814Z",
  "level": "info",
  "event": "request",
  "requestId": "3f1c…",
  "method": "POST",
  "path": "/v1/resolver-texto",
  "status": 200,
  "durationMs": 84,
  "auth": "key",
  "keyId": 12
}
  • auth é none, anon, key, user (conta conectada por OAuth) ou admin. Com chave, vai keyId; com conta conectada, vai userId no lugar (o número interno da conta, nunca o e-mail nem o token).
  • requestId é o X-Request-Id que você mandou, ou um UUID gerado; não coloque dados pessoais nele.
  • path é só o caminho: /v1/busca fica sem o q; /mcp fica sem o key.
  • IP, cabeçalhos e corpo não entram. Erros internos registram apenas requestId e a mensagem do erro.
  • A emissão de nota fiscal registra só o identificador da fatura na Stripe e o resultado (emitida, erro); nunca nome, e-mail ou CPF/CNPJ.
  • Além da linha de requisição, há eventos operacionais da conta e da assinatura (falha ao enviar o e-mail de login, sincronização de assinatura, fatura paga, falha no checkout ou no webhook da Stripe). Eles levam só o número da conta, o identificador e o tipo do evento da Stripe, o status e, em falhas, o código do erro; nunca e-mail, nome, endereço, CPF/CNPJ ou dados de cartão.

Os logs ficam no Cloudflare Workers Logs: retenção de 3 dias no plano Free e 7 dias no pago; em nenhum caso mais de 7 dias. Os invocation logs automáticos do Cloudflare (que registrariam a URL completa de cada requisição, inclusive a query string) estão desligados; só a linha acima é gravada.

Onde os dados são processados

  • Execução: Cloudflare Workers, com smart placement: a requisição pode ser executada em um data center próximo ao banco, ou seja, fora do Brasil. O texto transita e é processado nessa memória, sem persistir.
  • Banco: Neon Postgres, região us-east-2 (Ohio, EUA). Contém o corpus público (leis e súmulas), as chaves (hash), as contas e os dados de sessão, OAuth e assinatura descritos acima, e os contadores de uso. Nenhum conteúdo de cliente.
  • Índice remissivo: gerado fora da API, por um script de publicação, que envia ao DeepSeek (API compatível com OpenAI) apenas o texto público das leis. Nenhuma requisição, texto, query ou chave de cliente vai para lá.

Subprocessadores

SubprocessadorPara quêDadosOnde
CloudflareExecução da API, rede, logsIP e cabeçalhos da conexão (dentro dos termos da própria Cloudflare); a linha de log acimaGlobal (inclui EUA)
NeonBanco de dadosO que está em "O que é guardado"EUA (us-east-2)
StripePagamentos e assinaturaE-mail da conta; cartão, nome, endereço e CPF/CNPJ de cobrança, que você informa direto à StripeEUA e outros países, conforme a Stripe
Focus NFeEmissão da nota fiscal de serviço (NFS-e Nacional)Nome, CPF/CNPJ e e-mail do cliente, valor e descrição do serviçoBrasil

A nota fiscal emitida é, por lei, enviada ao Ambiente de Dados Nacional da NFS-e (Receita Federal e município) e fica disponível para consulta nos sistemas oficiais. Não há outro subprocessador. O Lei Vigente não envia e-mails hoje; se a recuperação de senha por link for ativada, o provedor de envio entra nesta tabela antes.

LGPD, em termos práticos

  • Você é o controlador dos dados que envia nas requisições (texto, citações, buscas); o Lei Vigente atua como operador, tratando o texto apenas para devolver a resposta e sem retê-lo.
  • Para os dados da sua conta, da chave e da assinatura (e-mail, sessões, tokens, contadores, identificadores da Stripe), o Lei Vigente é o controlador. Bases legais (art. 7º da LGPD):
    • execução de contrato (inciso V): criar e manter a conta, autenticar, conectar assistentes por OAuth, aplicar os limites do plano e cobrar a assinatura;
    • cumprimento de obrigação legal (inciso II): emitir a nota fiscal e guardar os registros fiscais pelo prazo da legislação tributária;
    • legítimo interesse (inciso IX): contar requisições e limitar o uso por IP para proteger o serviço contra abuso.
  • Há transferência internacional (execução, banco e Stripe nos EUA). Para o texto ela é transitória e sem retenção; para conta, chave, tokens e contadores, é armazenamento. Se a sua política exigir residência no Brasil, fale com hello@igorlourenco.com antes de integrar.
  • Seus direitos (art. 18): confirmação e acesso aos dados, correção, portabilidade, informação sobre compartilhamento, revogação do consentimento quando aplicável e eliminação. Peça por hello@igorlourenco.com, a partir do e-mail da conta; a resposta vem em até 15 dias.
  • Excluir a conta: por enquanto, pelo mesmo e-mail. A exclusão cancela a assinatura na Stripe (se houver) e apaga e-mail, sessões, tokens OAuth, contadores de uso e, se você pedir, as chaves de API emitidas para você. Ficam apenas os registros fiscais (notas emitidas) e o histórico de pagamentos na Stripe, pelo prazo que a lei exige.
  • Você também pode reclamar à Autoridade Nacional de Proteção de Dados (ANPD).

Recomendações para minimizar

  • Envie só o que precisa ser verificado. /v1/parse extrai citações sem contexto; /v1/resolver recebe citações já estruturadas; nenhuma das duas exige o texto inteiro. Só /v1/resolver-texto (sugestões a partir do contexto) se beneficia da frase completa.
  • Anonimize nomes de partes antes de enviar quando isso não afetar as citações; o parser não usa nomes.
  • Não reutilize identificadores internos sensíveis em X-Request-Id.
  • Em assistentes (ChatGPT, claude.ai), prefira conectar a conta por OAuth a colar a chave na URL do conector: a URL deixa de carregar um segredo e o token de acesso expira em 1 hora.

Nesta página