---
name: DJEN API Guide
slug: djen-api-guide
category: DevOps
description: Practical guide for the Brazilian National Electronic Justice Gazette API (DJEN/Comunica PJe), covering querying court publications and known production quirks like geo-blocking, pagination limits, and OAB suffix variations. Use when integrating with or debugging this API.
github: "https://github.com/rvsanches/skills-datajud-djen/tree/main/skills/djen"
stars: 10
forks: 4
install: "git clone https://github.com/rvsanches/skills-datajud-djen"
added: 2026-07-17T07:10:03.490Z
last_synced: 2026-07-17T07:10:03.490Z
canonical_url: "https://dirskills.com/skills/djen-api-guide"
---

# DJEN API Guide

Practical guide for the Brazilian National Electronic Justice Gazette API (DJEN/Comunica PJe), covering querying court publications and known production quirks like geo-blocking, pagination limits, and OAB suffix variations. Use when integrating with or debugging this API.

**Install:** `git clone https://github.com/rvsanches/skills-datajud-djen`

## README

# API do DJEN / Comunica PJe (CNJ)

O DJEN (Diário de Justiça Eletrônico Nacional) centraliza as comunicações
processuais — **intimações, citações e demais publicações** — de todos os
tribunais brasileiros (Resolução CNJ nº 455; cobertura nacional obrigatória
desde 2025). A API pública do Comunica PJe expõe essas comunicações para
consulta.

Diferença-chave para o DataJud: o DataJud mostra **movimentações** (o que
aconteceu no processo); o DJEN mostra **o que dispara prazo** contra o
advogado. Para monitorar prazos, é o DJEN que importa.

Portal: <https://comunica.pje.jus.br>. Swagger: <https://comunicaapi.pje.jus.br>.
Este guia registra o que a documentação não conta, aprendido operando a API
em produção (projeto Judis, 2026).

## Início rápido

```bash
# ATENÇÃO: precisa rodar de IP brasileiro (ver regra nº 1)
curl 'https://comunicaapi.pje.jus.br/api/v1/comunicacao?numeroOab=123456&ufOab=SP&dataDisponibilizacaoInicio=2026-07-11&dataDisponibilizacaoFim=2026-07-12&pagina=1&itensPorPagina=50' \
  -H 'Accept: application/json'
```

Sem autenticação, sem chave, sem cadastro. A resposta é
`{ "count": <total>, "items": [ ... ] }`.

## As 7 regras de ouro (aprendidas em produção)

1. **A API geo-bloqueia IPs fora do Brasil: HTTP 403.** Funciona do seu
   notebook e falha no deploy — porque sua cloud function/container está em
   região estrangeira (`us-central1`, `us-east-1`…). Rode o backend em região
   brasileira (GCP `southamerica-east1`, AWS `sa-east-1`). Descobrimos em
   smoke test de produção: mesma requisição, 200 do Brasil, 403 dos EUA.
   O DataJud **não** tem esse bloqueio — é específico do Comunica.

2. **`itensPorPagina` máximo é 50 — e o erro é silencioso.** Acima de 50 a
   API responde `items: []` com `count` preenchido, sem erro. Parece "sem
   resultados", mas é o parâmetro. Use exatamente 50 e pagine.

3. **Página vazia ≠ fim dos dados.** Sob instabilidade a API retorna páginas
   intermitentemente vazias no meio da paginação. Se `acumulado < count`,
   retente a **mesma** página com backoff antes de desistir.

4. **Monitorando por OAB, consulte as variantes de sufixo.** O filtro
   `numeroOab` é match exato de string, e cada tribunal grava a inscrição de
   um jeito (`123456` no TJSP, `123456-O` ou `123456-A` no TJMT…). Sem varrer
   os sufixos `["", "-O", "-A", "-N", "-B", "-S", "-E"]`, a maior parte das
   publicações fica invisível. E **nunca** case por nome do advogado —
   grafias variam entre tribunais; só OAB normalizada (dígitos) + UF.

5. **`count` é capado em ~10.000** por consulta. Para volumes grandes,
   particione por data/tribunal em vez de paginar até o fim.

6. **Deduplique pelo campo `id`** (número, único por comunicação). A mesma
   consulta em janelas sobrepostas retorna repetidos — janela sobreposta é
   inclusive recomendada (ontem+hoje) para tolerar atrasos de
   disponibilização.

7. **O campo `texto` é HTML de dezenas de tribunais — trate como input
   hostil.** Sanitize na exibição removendo não só `script`/handlers, mas
   também `class`/`style`/`id`: com CSS utilitário global (Tailwind), um
   `class="fixed inset-0 z-50"` vindo numa publicação cobre a tela inteira
   do seu app (UI redressing).

## Referências (leia conforme a tarefa)

| Arquivo | Quando ler |
|---|---|
| [references/consultas.md](references/consultas.md) | Montar requests: filtros, paginação correta (com os quirks), variantes de OAB, certidão em PDF, janelas de data |
| [references/resposta.md](references/resposta.md) | Interpretar respostas: todos os campos (snake_case misturado com camelCase), dedupe, cancelamento de publicação, normalização |
| [references/producao.md](references/producao.md) | Operar em produção: geo-bloqueio e regiões, retry/backoff/circuit breaker, tetos de segurança, sanitização de HTML, agendamento e alertas |

## Relação com o DataJud

| | DJEN | DataJud (skill `datajud`) |
|---|---|---|
| Conteúdo | Intimações/citações — *o que dispara prazo* | Movimentações — *o que aconteceu* |
| Autenticação | Nenhuma | Chave pública (header `APIKey`) |
| Geo-bloqueio | **403 para IP fora do Brasil** | Não tem |
| Protocolo | GET REST com query string | POST, Elasticsearch Query DSL |
| Rate limit | Não documentado (500 sob rajada) | Cota global por chave compartilhada |

Ambas são do CNJ, sem SLA nem versionamento formal — projete para
indisponibilidade e mudanças sem aviso, e mantenha na interface o aviso de
que a ferramenta **não substitui a consulta oficial** ao diário.
