Lei Vigente

Comece aqui

Primeira chamada à API Lei Vigente: sem chave para ler o corpus, com chave para verificar citações.

Todas as rotas ficam sob /v1 e respondem JSON em UTF-8. A URL base de produção é https://api.leivigente.com.br; nos exemplos, $VIGENTE_URL é essa URL (ou http://localhost:3000 em desenvolvimento local). A Referência da API tem um "Try it" em cada rota que chama a produção direto do navegador.

export VIGENTE_URL="https://api.leivigente.com.br"

1. Leia o corpus sem chave

As rotas de leitura (/v1/diplomas, /v1/dispositivos, /v1/sumulas, /v1/busca, /v1/alteracoes) não exigem autenticação: 30 requisições por minuto por IP.

curl "$VIGENTE_URL/v1/dispositivos/CF.5.LXXVIII"
{
  "ref_key": "CF.5.LXXVIII",
  "sigla": "CF",
  "artigo": "5",
  "paragrafo": null,
  "inciso": "LXXVIII",
  "alinea": null,
  "item": null,
  "texto": "a todos, no âmbito judicial e administrativo, são assegurados a razoável duração do processo e os meios que garantam a celeridade de sua tramitação.",
  "caput_texto": null,
  "revogado": false,
  "hierarquia": "Título II – Dos Direitos e Garantias Fundamentais > Capítulo I – Dos Direitos e Deveres Individuais e Coletivos",
  "ordem": 127,
  "anotacoes": ["Incluído pela Emenda Constitucional nº 45, de 2004", "Vide ADIN 3392"],
  "alterado_por": "Emenda Constitucional nº 45, de 2004",
  "revogado_por": null
}

O ref_key vai na URL como está, sem escape. Detalhes do formato em Corpus → ref_key. texto vem limpo; as marcações do Planalto ficam em anotacoes; veja Corpus → Texto limpo e anotações.

2. Obtenha uma chave

As rotas de verificação (/v1/resolver, /v1/parse, /v1/resolver-texto) exigem uma chave vg_live_… no cabeçalho Authorization. Entre em sua conta com o seu e-mail (o login é com e-mail e senha; se ainda não tiver conta, crie uma na mesma página) e clique em Gerar chave; copie-a na hora, ela é exibida uma única vez. Se você opera a própria instância, gere uma com bun run create-key <nome> [--plano pro]; a chave é impressa uma única vez e o banco guarda só o hash.

export VIGENTE_KEY="vg_live_..."

3. Verifique um texto

POST /v1/resolver-texto extrai as citações de um texto livre e verifica cada uma:

curl -X POST "$VIGENTE_URL/v1/resolver-texto" \
  -H "Authorization: Bearer $VIGENTE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"texto": "O CPC prevê, no art. 1.003, § 5º, o prazo de 15 dias. O art. 9.999 do CC obriga a reparar o dano causado por ato ilícito."}'
{
  "citacoes": [
    {
      "citacao": {
        "tipo": "dispositivo",
        "sigla": "CPC",
        "artigo": "1003",
        "paragrafo": "5",
        "inciso": null,
        "alinea": null,
        "item": null,
        "rotulo": "art. 1.003, § 5º",
        "offset": 16,
        "fim": 32,
        "diploma_inferido": true
      },
      "resolucao": {
        "status": "verificado",
        "ref_key": "CPC.1003.5",
        "texto": "Excetuados os embargos de declaração, o prazo para interpor os recursos e para responder-lhes é de 15 (quinze) dias.",
        "hierarquia": "Parte Especial > Livro III – Dos Processos nos Tribunais e dos Meios de Impugnação das Decisões Judiciais > Título II – Dos Recursos > Capítulo I – Disposições Gerais",
        "revogado": false,
        "anotacoes": [],
        "alterado_por": null,
        "revogado_por": null
      }
    },
    {
      "citacao": {
        "tipo": "dispositivo",
        "sigla": "CC",
        "artigo": "9999",
        "paragrafo": null,
        "inciso": null,
        "alinea": null,
        "item": null,
        "rotulo": "art. 9.999 do CC",
        "offset": 56,
        "fim": 72,
        "diploma_inferido": false
      },
      "resolucao": {
        "status": "nao_encontrado",
        "mensagem": "CC: art. 9999 não existe no corpus.",
        "sugestao": [
          {
            "ref_key": "CC.927",
            "artigo": "927",
            "trecho": "Aquele que, por <b>ato</b> <b>ilícito</b> (arts. 186 e 187), <b>causar</b> <b>dano</b> a outrem, fica <b>obrigado</b> a repará-lo.\nParágrafo único ... Haverá <b>obrigação</b> de <b>reparar</b> o <b>dano</b>, independentemente de culpa, nos casos especificados em lei, ou quando a atividade normalmente desenvolvida"
          }
        ]
      }
    }
  ]
}

Repare em três detalhes:

  • diploma_inferido: true: "art. 1.003, § 5º" não nomeia a lei; o parser pegou "CPC" do contexto.
  • offset/fim são posições no texto original: dá para grifar a citação inválida na interface.
  • sugestao veio da frase ao redor da citação ("obriga a reparar o dano causado por ato ilícito"), não da citação em si, e o contexto determinou a resposta: o art. 927 do CC é exatamente isso, e só ele foi sugerido. Quando o contexto não determina nada ("Ver também art. 9.999 do CC.") a lista vem vazia: "sugestao": []. Uma sugestão plausível mas errada é pior que nenhuma; veja Verificação → sugestões.

4. Verifique citações estruturadas

Se o seu sistema já sabe qual lei e qual artigo, pule o parser e chame POST /v1/resolver: até 100 citações por requisição, resposta na mesma ordem:

curl -X POST "$VIGENTE_URL/v1/resolver" \
  -H "Authorization: Bearer $VIGENTE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "citacoes": [
      { "sigla": "CF", "artigo": "5", "inciso": "LXXVIII" },
      { "sigla": "CPP", "artigo": "594" },
      { "tribunal": "STF", "numero": 11, "vinculante": true }
    ]
  }'
{
  "resultados": [
    { "status": "verificado", "ref_key": "CF.5.LXXVIII", "texto": "a todos, no âmbito judicial…", "hierarquia": "Título II – …", "revogado": false },
    { "status": "revogado", "ref_key": "CPP.594", "texto": "", "hierarquia": "Livro III – …", "revogado": true, "revogado_por": "Lei nº 11.719, de 2008" },
    { "status": "verificado", "ref_key": "SV.STF.11", "texto": "Só é lícito o uso de algemas em casos de resistência…", "cancelada": false, "vinculante": true }
  ]
}

Próximos passos

Nesta página