API de execução penal
A UniCRIMINAL consulta a execução penal de todo o Brasil e devolve tudo em JSON: a lista de processos por número, CPF/CNPJ ou nome, e a cópia completa de cada processo — dados gerais, partes com advogados e todas as movimentações, com a lista de documentos.
curl -s "/processo?numero=0000123-45.2025.8.24.0000&arquivos=1" \ -H "x-api-key: SUA_CHAVE"
Autenticação
Envie a chave de uma destas formas (a primeira é a recomendada):
| x-api-key: SUA_CHAVE | Cabeçalho (recomendado) |
| Authorization: Bearer SUA_CHAVE | Cabeçalho Bearer |
| ?apikey=SUA_CHAVE | Na URL (evite em produção: fica em logs) |
Cada chave tem um limite diário (renova à meia-noite, horário de Brasília). As respostas trazem X-Limite-Dia e X-Uso-Dia. Chaves e uso ficam no painel.
Cópia completa do processo
/processo?numero=NUMERO_CNJ&arquivos=1/processo corpo { "numeroProcesso": "...", "arquivos": true }| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| numero / numeroProcesso | sim* | Número CNJ, com ou sem pontuação. |
| cpf / cpfCnpj | sim* | Alternativa ao número: traz todos os processos da pessoa, cada um completo (até 10). |
| arquivos | não | 1 / true: inclui a lista de documentos dos movimentos que têm arquivo. |
* informe um dos dois.
Resposta completa de /processo
Exemplo real com dados fictícios. Aqui aparecem só 5 das 73 movimentações; a API devolve todas.
{
"ok": true,
"total": 1,
"processos": [
{
"numeroProcesso": "0000123-45.2025.8.24.0000",
"classe": "Execução da Pena",
"assunto": "Pena Restritiva de Direitos",
"orgaoJulgador": "TJSC - Comarca Exemplo - 2ª Vara - Meio Aberto",
"dataAjuizamento": "08/07/2025 às 15:30:11",
"partes": "Autoridade: ESTADO DE SANTA CATARINA · Executado: FULANO DE TAL",
"executado": "FULANO DE TAL",
"situacao": "Em andamento",
"detalhe": {
"numeroProcesso": "0000123-45.2025.8.24.0000",
"diasEmTramitacao": 486,
"classe": {
"codigo": "386",
"descricao": "Execução da Pena"
},
"assunto": {
"codigo": "7790",
"descricao": "Pena Restritiva de Direitos"
},
"nivelSigilo": "Público",
"comarca": "TJSC - Comarca Exemplo",
"competencia": "Vara de Execução em Meio Aberto",
"juizo": "TJSC - Comarca Exemplo - 2ª Vara - Meio Aberto",
"juiz": "Nome do Juiz Exemplo",
"autuacao": {
"texto": "08/07/2025 às 15:30:09",
"data": "2025-07-08",
"hora": "15:30:09"
},
"distribuicao": {
"texto": "08/07/2025 às 15:30:11",
"data": "2025-07-08",
"hora": "15:30:11"
},
"extinto": false,
"partes": [
{
"tipo": "Autoridade",
"nome": "ESTADO DE SANTA CATARINA",
"advogados": [],
"semAdvogado": true
},
{
"tipo": "Executado",
"nome": "FULANO DE TAL",
"observacoes": [
"Maior que 60 anos (conforme Lei 10.741/2003)"
],
"advogados": [
{
"oab": "12345N-SC",
"nome": "ADVOGADO EXEMPLO"
}
]
}
],
"resumo": {
"totalMovimentos": 73,
"primeiroMovimento": "08/07/2025 15:30:09",
"ultimoMovimento": "08/10/2026 14:09:06",
"comArquivos": 3
},
"movimentos": [
{
"seq": 73,
"dataHora": "08/10/2026 14:09:06",
"data": "2026-10-08",
"hora": "14:09:06",
"evento": "JUNTADA DE INFORMAÇÃO",
"movimentadoPor": "A***********",
"perfil": "Estagiário(a)",
"origem": "SERVIDOR",
"origemDescricao": "Servidor",
"grau": 1,
"temArquivos": false
},
{
"seq": 64,
"dataHora": "02/09/2026 17:00:40",
"data": "2026-09-02",
"hora": "17:00:40",
"evento": "CONFIRMADA A INTIMAÇÃO ELETRÔNICA",
"descricao": "Realizada via integração MNI por MINISTÉRIO PÚBLICO, com data de referência de leitura em 02/09/2026, com prazo de 5 dias corridos iniciados em 03/09/2026, referente ao evento REMETIDOS OS AUTOS PARA MINISTÉRIO PÚBLICO (seq. 60)",
"movimentadoPor": "M***********",
"perfil": "Membro(a) do Ministério Público",
"origem": "PROMOTOR",
"origemDescricao": "Membro MP",
"grau": 1,
"referenciaSeq": [
60
],
"temArquivos": false
},
{
"seq": 55,
"dataHora": "03/08/2026 15:24:46",
"data": "2026-08-03",
"hora": "15:24:46",
"evento": "EXPEDIÇÃO DE INTIMAÇÃO",
"descricao": "Para advogados/curador/defensor de FULANO DE TAL com prazo de 5 dias corridos - Referente ao evento (seq. 54) OUTRAS DECISÕES (03/08/2026)",
"movimentadoPor": "W***********",
"perfil": "Magistrado(a)",
"origem": "JUIZ",
"origemDescricao": "Magistrado",
"grau": 1,
"referenciaSeq": [
54
],
"temArquivos": false
},
{
"seq": 54,
"dataHora": "03/08/2026 15:24:45",
"data": "2026-08-03",
"hora": "15:24:45",
"evento": "OUTRAS DECISÕES",
"movimentadoPor": "W***********",
"perfil": "Magistrado(a)",
"origem": "JUIZ",
"origemDescricao": "Magistrado",
"grau": 1,
"temArquivos": true,
"arquivos": [
{
"nome": "online.pdf",
"link": "https://.../documento"
}
]
},
{
"seq": 1,
"dataHora": "08/07/2025 15:30:09",
"data": "2025-07-08",
"hora": "15:30:09",
"evento": "DOCUMENTO",
"descricao": "Guia de Recolhimento Penal",
"movimentadoPor": "SISTEMA",
"origem": "OUTROS",
"origemDescricao": "Outros",
"grau": 1,
"temArquivos": false
}
]
}
}
]
}
Todos os campos
| Campo | Tipo | Descrição |
|---|---|---|
| processos[] | array | Processos encontrados. Por número vem 1; por CPF/nome podem vir vários. |
| numeroProcesso | string | Número CNJ formatado. |
| classe / assunto | string | Classe e assunto (texto) da lista. |
| orgaoJulgador | string | Juízo / vara. |
| dataAjuizamento | string | Distribuição. |
| partes / partesDetalhe / executado | string / objeto | Partes em uma linha, por papel, e o nome do executado. |
| situacao / instancia | string | Em andamento / Extinto; Primeira ou Segunda Instância. |
| detalhe | objeto | Cópia completa (sempre em /processo; em /consulta com detalhes=1). |
| detalhe.classe / detalhe.assunto | { codigo, descricao } | Código da tabela do CNJ e descrição. |
| detalhe.diasEmTramitacao | número | Dias em tramitação. |
| detalhe.nivelSigilo | string | Público, Segredo de Justiça… |
| detalhe.comarca / competencia / juizo / juiz | string | Onde e com quem o processo tramita. |
| detalhe.autuacao / distribuicao | { texto, data, hora } | Data como aparece e em AAAA-MM-DD. |
| detalhe.extinto | boolean | Processo extinto. |
| detalhe.partes[] | array | { tipo, nome, observacoes[], advogados[{ oab, nome }], semAdvogado } |
| detalhe.resumo | objeto | { totalMovimentos, primeiroMovimento, ultimoMovimento, comArquivos } |
| detalhe.movimentos[] | array | Todas as movimentações, da mais recente para a mais antiga. |
| movimentos[].seq | número | Sequência do evento no processo. |
| movimentos[].dataHora / data / hora | string | DD/MM/AAAA HH:MM:SS, AAAA-MM-DD e HH:MM:SS. |
| movimentos[].evento / descricao | string | Evento (ex.: OUTRAS DECISÕES) e complemento. |
| movimentos[].movimentadoPor / perfil | string | Quem movimentou (nomes de servidores vêm mascarados) e o perfil. |
| movimentos[].origem / origemDescricao | string | JUIZ, SERVIDOR, PROMOTOR, ADVOGADO, OFICIALJUSTICA, OUTROS… e por extenso. |
| movimentos[].grau | número | 1 ou 2. |
| movimentos[].referenciaSeq[] | array de números | Eventos citados no texto (seq.). |
| movimentos[].temArquivos / arquivos[] | boolean / array | Se tem documento; com arquivos=1, a lista { nome, link }. |
| detalheErro | string | Quando as movimentações não abriram agora (tente de novo). |
O esquema formal (tipos, enums e exemplos) está em /openapi.json — importe no Postman, Insomnia ou num gerador de cliente.
Lista de processos
/consulta?cpfCnpj=... · ?nomeParteReu=... · ?numeroProcesso=... · &detalhes=1/consulta corpo { "cpfCnpj": "...", "detalhes": true }Sem detalhes, vem só a lista (mais rápido). Com detalhes=1, cada item já traz o campo detalhe igual ao de /processo.
{
"ok": true,
"total": 2,
"processos": [
{
"numeroProcesso": "0000123-45.2025.8.24.0000",
"classe": "Execução da Pena",
"assunto": "Pena Restritiva de Direitos",
"orgaoJulgador": "TJSC - Comarca Exemplo - 2ª Vara",
"dataAjuizamento": "08/07/2025",
"partes": "Autoridade: ESTADO DE SANTA CATARINA · Executado: FULANO DE TAL",
"partesDetalhe": {
"Autoridade": "ESTADO DE SANTA CATARINA",
"Executado": "FULANO DE TAL"
},
"executado": "FULANO DE TAL",
"instancia": "Primeira Instância"
},
{
"numeroProcesso": "0000456-78.2021.8.24.0000",
"classe": "Execução da Pena",
"assunto": "Pena Privativa de Liberdade",
"orgaoJulgador": "TJSC - Comarca Exemplo - Vara de Execuções Penais",
"dataAjuizamento": "10/03/2021",
"partes": "Autoridade: ESTADO DE SANTA CATARINA · Executado: FULANO DE TAL",
"executado": "FULANO DE TAL",
"instancia": "Primeira Instância"
}
]
}
Erros e limites
Erros sempre vêm como { "ok": false, "erro": "mensagem" }.
| HTTP | Quando | O que fazer |
|---|---|---|
| 400 | Faltou número, CPF/CNPJ ou nome | Corrija os parâmetros. |
| 401 | Chave inválida, revogada ou ausente (quando exigida) | Confira a chave no painel. |
| 429 | Limite diário da chave atingido | Aguarde a meia-noite ou peça aumento do limite. |
| 502 | A fonte oficial não respondeu agora | Tente de novo em alguns segundos. |
Se um processo vier com detalheErro, a lista veio, mas as movimentações dele não abriram naquele momento: repita a chamada.
Exemplos de código
Boas práticas
- Use tempo limite de 120 segundos na sua chamada: a primeira consulta pode levar alguns segundos; as seguintes são bem mais rápidas.
- A mesma consulta repetida em até 10 minutos volta na hora (cache).
- Para acompanhar um processo, compare
detalhe.resumo.totalMovimentosou oseqdo primeiro movimento com o que você guardou. - Guarde a chave no servidor (variável de ambiente), nunca no código do navegador de um site público.
- Atenção a homônimos nas buscas por nome; prefira número ou CPF. Use os dados conforme a LGPD.