Legislação de qualquer estado ou município
Como consultar a legislação de qualquer ente da federação — o padrão SAPL (uma API igual em centenas de câmaras), portais estaduais e o que fazer quando não há dado estruturado.
Os playbooks anteriores cobrem o Distrito Federal e a esfera federal. Este cobre o resto do país: 26 estados e 5.568 municípios, cada um com sua fonte. Não há um portal único — mas há padrões, e um deles resolve centenas de casos com uma única API.
Consulte o catálogo de fontes para saber a que categoria cada ente pertence antes de começar.
A ordem de tentativa
- SAPL — se o ente usa, você tem API REST estruturada. Comece por aqui.
- Portal oficial da assembleia/câmara — busca em HTML.
- Diário oficial do ente — quando não há portal de legislação consolidada.
- Recuse — se nenhuma fonte confiável existir, diga isso. Não recorra a sites não oficiais nem à sua memória.
Padrão 1 — SAPL (Interlegis): a API que se repete
O SAPL é o sistema de processo legislativo mantido pelo Interlegis (Senado) e adotado por mais de mil casas legislativas. Todas as instâncias expõem a mesma API REST, sem chave. É o que torna a cobertura nacional viável: um único contrato de API serve centenas de municípios.
Descubra as instâncias pelo registro oficial (não adivinhe o host)
O Interlegis publica um registro aberto de todas as casas e serviços — o SIGI:
GET https://sigi.interlegis.leg.br/api/servicos/?tipo_servico=SAPL&format=json&page_size=100
Devolve 1.163 instâncias SAPL (verificado em 18/08/2026), cada uma com:
{
"url": "https://sapl.barracao.pr.leg.br/",
"casa_legislativa": {
"nome": "Câmara Municipal de Barracão", "sigla": "CMB",
"cnpj": "02.021.151/0001-51", "municipio": "Barracão", "uf": "PR"
},
"hospedagem_interlegis": true,
"data_ativacao": "..."
}
Filtros úteis: uf=PR, search=<termo>, page=N, page_size (máx. 100).
Outros recursos do SIGI: /api/casas/orgaoatendido/ (3.113 casas legislativas
com endereço e todos os serviços) e /api/servicos/resumoprodutos/ (contagem
por produto).
Documentação: https://sigi.interlegis.leg.br/api/ (Swagger).
Padrão de host, para conferência (o prefixo sapl. é obrigatório na prática):
https://sapl.<municipio>.<uf>.leg.br/ (câmaras municipais)
https://sapl.al.<uf>.leg.br/ (assembleias estaduais)
O domínio .leg.br é controlado pelo Interlegis — se o host responde, é
oficial.
O registro subnotifica. Foram encontradas assembleias vivas que não constam no SIGI (PB, RR, TO). Use o SIGI como semente e confirme o host direto quando o ente procurado não estiver na lista.
Listar normas:
GET https://sapl.<ente>.<uf>.leg.br/api/norma/normajuridica/?format=json&page=1
Resposta:
{
"pagination": { "total_entries": 7415, "total_pages": 742, "page": 1,
"links": { "next": "...?format=json&page=2" } },
"results": [{
"id": 13408, "numero": "36", "ano": 2026,
"esfera_federacao": "M",
"data": "2026-08-17", "data_publicacao": "2026-08-14",
"ementa": "...",
"texto_integral": "https://.../media/sapl/public/normajuridica/2026/13408/....pdf"
}]
}
Campos que importam:
| Campo | Uso |
|---|---|
esfera_federacao |
M municipal · E estadual · F federal — confirme a esfera antes de citar |
texto_integral |
URL do PDF oficial, sem autenticação — é a fonte a citar |
ementa |
resumo oficial; use para triar antes de baixar o PDF |
data_publicacao |
a data que importa para vigência |
Filtros testados e funcionando:
| Parâmetro | Efeito |
|---|---|
page_size=100 |
100 resultados por página (padrão: 10) — reduz muito o número de requisições |
page=N |
paginação |
ano=2024 |
filtra por ano |
ano__gte=2023 |
ano a partir de |
data__gte=2020-01-01 / data__lte= |
intervalo de datas |
numero=N |
número da norma (combine com ano) |
esfera_federacao=M |
M municipal · E estadual · F federal |
ementa__icontains=agua |
busca na ementa (sem normalizar acento) |
Não funcionam (ignorados silenciosamente): limit, search,
data_inicial/data_final. Use os da tabela.
O payload também traz data_ultima_atualizacao, útil para sincronização
incremental.
Limites honestos desta cobertura
Diga isso ao usuário quando a busca não achar o que ele espera:
- ~31% das instâncias têm base vazia. Estar no registro não significa ter acervo publicado.
- As grandes capitais em geral NÃO usam SAPL — São Paulo, Rio, Belo Horizonte, Porto Alegre, Curitiba e Salvador operam sistemas próprios. O SAPL cobre bem o interior e mal os grandes centros. Para capitais, vá ao portal próprio (Padrão 2).
- Apenas 9 assembleias estaduais usam SAPL (AC, AL, AM, MT, PB, PI, RO, RR, TO). Nos demais estados, use o portal da assembleia.
- O SAPL registra o que a casa cadastrou: acervo raso em período antigo significa digitalização parcial, não que a norma não existe.
Padrão 2 — Portal estadual
A maioria das assembleias tem portal próprio, quase sempre sem API. O que fazer:
- Localize o sistema de legislação no site da assembleia (procure por “legislação”, “normas”, “leis estaduais”).
- Prefira a busca por URL parametrizada quando existir — permite chegar direto ao resultado.
- Leia a página da norma e extraia: número, ano, ementa, data, situação e o link permanente.
- Cite o link do portal oficial, nunca um agregador de terceiros.
Padrão 3 — Diário oficial
Quando não há legislação consolidada, o diário oficial do ente é a fonte primária do texto publicado. Limitação séria: o diário traz o texto como publicado, sem consolidar alterações posteriores. Avise o usuário de que a norma pode ter sido alterada depois.
LexML: identidade sim, descoberta não
O LexML resolve URNs estaduais — mas há duas armadilhas que derrubam quem tenta usá-lo como buscador:
- Use o resolvedor certo.
lexml.gov.br/urn/<urn>resolve estadual;normas.leg.bré federal apenas (devolve 200 com a página federal). - A data tem que ser exata. A URN inclui a data de promulgação. Com data chutada, a resposta é 200 com “urn não encontrada” e a mensagem reveladora: “O documento solicitado não pôde ser encontrado, embora a urn informada possa ser válida”. Ou seja: não dá para montar a URN só com tipo, número e ano — é preciso descobrir a data na fonte do ente primeiro.
Verificado:
lexml.gov.br/urn/urn:lex:br;minas.gerais:estadual:lei:2018-03-28;23000
→ 200, “Lei nº 23000, de 28 de março de 2018 (Estadual - Minas Gerais)”.
Padrão: urn:lex:br;<localidade.com.pontos>:estadual:<tipo>:<AAAA-MM-DD>;<numero>
O fluxo correto é: descobrir na fonte do ente (API/portal) → extrair a data exata → montar a URN → usar o LexML como identificador estável e link de verificação.
A busca SRU do LexML continua bloqueada por anti-bot do Senado — não serve como via de descoberta.
O que NÃO usar como fonte
- Agregadores comerciais de legislação municipal: úteis para achar, mas a citação deve apontar para a fonte oficial do ente.
- Sua memória. Número de lei municipal é exatamente o tipo de dado que um modelo alucina com confiança. Sem fonte aberta na hora, recuse.
Reconhecer a esfera correta
Antes de responder, confirme de quem é a competência — citar lei municipal para uma questão de competência estadual é erro grave:
| Assunto típico | Competência usual |
|---|---|
| Uso do solo, zoneamento, IPTU, transporte urbano | Municipal |
| ICMS, IPVA, polícia civil/militar, educação básica (rede estadual) | Estadual |
| Direito penal, civil, trabalhista, normas gerais | Federal |
| Saúde, educação, meio ambiente, consumidor | Concorrente — pode haver norma nas três esferas |
Em competência concorrente, a União edita normas gerais e os entes suplementam. A resposta completa muitas vezes precisa das duas camadas.
Citar
Inclua sempre a esfera e o ente:
(Art. 12 — Lei municipal nº 16.050/2014, São Paulo/SP) Fonte:
Aplicam-se integralmente as regras do Playbook 03.
Histórico de versões
Servimos apenas a versão corrente. Se você citou uma versão anterior deste método, é aqui que descobre o que mudou desde então — e em /metodologia.json há a mesma informação em JSON, com uma impressão digital do conteúdo para detectar mudança automaticamente.
- v0.1
Publicação inicial: o padrão SAPL via registro do SIGI, portais estaduais e o resolvedor de URN do LexML.