API DataJud — guia completo para integrar com 61 tribunais brasileiros
Tudo o que importa sobre a API pública do DataJud do CNJ: autenticação, query DSL, endpoints, rate limit, gotchas de produção e exemplos de código prontos.

TL;DR
- API pública do CNJ, autenticada por chave gratuita, com query DSL no formato Elasticsearch.
- Um índice por tribunal (61 no total). Use o slug api_publica_tjsp, api_publica_trf3, etc.
- Paginação cursor-based (search_after), rate limit por chave, e sem inteiro teor de peças — só metadados.
O que é o DataJud
O DataJud é a base nacional de dados do Poder Judiciário, mantida pelo Conselho Nacional de Justiça (CNJ). Reúne metadados de processos de 61 tribunais brasileiros — superiores, federais, trabalhistas, eleitorais e estaduais.
O CNJ expõe os dados em duas camadas: o portal de visualização, para humanos, e a API pública, para máquinas. Este guia foca na segunda.
Autenticação e onboarding
O acesso requer uma chave de API gratuita emitida pelo CNJ.
- Acessar o Wiki DataJud e seguir o link de cadastro.
- Preencher o formulário com nome, instituição, finalidade de uso e aceite de boas práticas.
- Aguardar 1 a 5 dias úteis.
- Usar a chave no header Authorization: APIKey SUA_CHAVE.
Estrutura: um índice por tribunal
Cada tribunal tem seu próprio índice nomeado api_publica_<sigla>. Exemplos:
- api_publica_tjsp — Tribunal de Justiça de SP
- api_publica_trf3 — Tribunal Regional Federal da 3ª Região
- api_publica_trt2 — TRT da 2ª Região
- api_publica_stj — Superior Tribunal de Justiça
Para consultas multi-tribunal, faça fan-out paralelo aos índices relevantes.
Query DSL — sintaxe Elasticsearch
A API aceita match, term, bool, range, multi_match e agregações simples.
~~~bash curl -X POST \ "https://api-publica.datajud.cnj.jus.br/api_publica_tjsp/_search" \ -H "Authorization: APIKey SUA_CHAVE_AQUI" \ -H "Content-Type: application/json" \ -d '{ "query": { "match": { "numeroProcesso": "10000000020258260100" } } }' ~~~
| Campo | Descrição | Tipo | |---|---|---| | numeroProcesso | Número CNJ (20 dígitos) | keyword | | classe.codigo | Código da classe processual TPU | integer | | assuntos.codigo | Código do assunto TPU | integer | | orgaoJulgador.nome | Nome da vara/órgão julgador | text | | movimentos.codigo | Código de movimentação TPU | integer | | partes.documento | CPF/CNPJ da parte | keyword | | dataAjuizamento | Data de ajuizamento | date | | @timestamp | Última atualização do documento | date |
Exemplo: busca por CNPJ em TypeScript
~~~ts const API_KEY = process.env.DATAJUD_API_KEY!; const TRIBUNAL = "tjsp";
async function searchByCnpj(cnpj: string) { const url = "https://api-publica.datajud.cnj.jus.br/api_publica_" + TRIBUNAL + "/_search"; const res = await fetch(url, { method: "POST", headers: { Authorization: "APIKey " + API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ size: 100, query: { bool: { should: [ { match: { "partes.documento": cnpj } }, { match: { "partes.nome": cnpj } }, ], }, }, sort: [{ "@timestamp": { order: "desc" } }], }), }); if (!res.ok) throw new Error("DataJud " + res.status + ": " + await res.text()); return res.json(); } ~~~
Paginação correta: search_after
O parâmetro from tradicional funciona até a página 10 000. Para volumes maiores, use search_after com sort estável.
~~~ts const firstPage = await fetch(URL, { method: "POST", headers, body: JSON.stringify({ size: 100, query: { match_all: {} }, sort: [{ "@timestamp": "desc" }, { _id: "asc" }], }), }).then((r) => r.json());
const lastHit = firstPage.hits.hits.at(-1); ~~~
Rate limit e estratégia de cache
O rate limit oficial não é publicado de forma estável, mas em produção fica em torno de 50 a 120 requisições por minuto por chave. Use cache agressivo, cache curto para movimentações, backoff exponencial, distribuição entre tribunais e janela noturna.
Gotchas comuns em produção
- Tribunais com cobertura desigual.
- Códigos TPU mudam.
- Partes em segredo de justiça aparecem como SIGILOSO.
- O índice api_publica_tjxx nem sempre cobre processos eletrônicos antigos.
- Datas em fuso UTC precisam ser convertidas para America/Sao_Paulo.
- Encoding pode variar em retornos antigos.
Quando vale abstrair com a Lupa.law
Para um único tribunal e um caso de uso pontual, integrar diretamente é razoável. O custo cresce quando você precisa cobrir 10+ tribunais, fazer monitoramento contínuo, cruzar processos com sanções e manter audit log para LGPD.
O monitoramento da Lupa.law implementa fan-out paralelo aos 61 tribunais, cache por tribunal, diff engine baseado em hash SHA-256 e severidade automática. Para due diligence pontual, a due diligence de CNPJ consulta DataJud junto com Receita, sanções e TCU.
Perguntas frequentes
Lupa.law cruza CEIS, CNEP, CEPIM, TCU e DataJud em uma busca
Cada relatório consulta as fontes oficiais em paralelo, classifica risco e cita a fonte por linha. Teste Solo Founder por 7 dias, sem cartão.