UniCRIMINAL · API
Execução penal de todo o Brasil em JSON · documentação para integrar em outros sistemas

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.

1. Crie uma chave no painel.  2. Envie no cabeçalho x-api-key.  3. Chame GET /processo?numero=....
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_CHAVECabeçalho (recomendado)
Authorization: Bearer SUA_CHAVECabeçalho Bearer
?apikey=SUA_CHAVENa 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

GET/processo?numero=NUMERO_CNJ&arquivos=1
POST/processo  corpo { "numeroProcesso": "...", "arquivos": true }
ParâmetroObrigatórioDescrição
numero / numeroProcessosim*Número CNJ, com ou sem pontuação.
cpf / cpfCnpjsim*Alternativa ao número: traz todos os processos da pessoa, cada um completo (até 10).
arquivosnão1 / 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

CampoTipoDescrição
processos[]arrayProcessos encontrados. Por número vem 1; por CPF/nome podem vir vários.
numeroProcessostringNúmero CNJ formatado.
classe / assuntostringClasse e assunto (texto) da lista.
orgaoJulgadorstringJuízo / vara.
dataAjuizamentostringDistribuição.
partes / partesDetalhe / executadostring / objetoPartes em uma linha, por papel, e o nome do executado.
situacao / instanciastringEm andamento / Extinto; Primeira ou Segunda Instância.
detalheobjetoCó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.diasEmTramitacaonúmeroDias em tramitação.
detalhe.nivelSigilostringPúblico, Segredo de Justiça…
detalhe.comarca / competencia / juizo / juizstringOnde e com quem o processo tramita.
detalhe.autuacao / distribuicao{ texto, data, hora }Data como aparece e em AAAA-MM-DD.
detalhe.extintobooleanProcesso extinto.
detalhe.partes[]array{ tipo, nome, observacoes[], advogados[{ oab, nome }], semAdvogado }
detalhe.resumoobjeto{ totalMovimentos, primeiroMovimento, ultimoMovimento, comArquivos }
detalhe.movimentos[]arrayTodas as movimentações, da mais recente para a mais antiga.
movimentos[].seqnúmeroSequência do evento no processo.
movimentos[].dataHora / data / horastringDD/MM/AAAA HH:MM:SS, AAAA-MM-DD e HH:MM:SS.
movimentos[].evento / descricaostringEvento (ex.: OUTRAS DECISÕES) e complemento.
movimentos[].movimentadoPor / perfilstringQuem movimentou (nomes de servidores vêm mascarados) e o perfil.
movimentos[].origem / origemDescricaostringJUIZ, SERVIDOR, PROMOTOR, ADVOGADO, OFICIALJUSTICA, OUTROS… e por extenso.
movimentos[].graunúmero1 ou 2.
movimentos[].referenciaSeq[]array de númerosEventos citados no texto (seq.).
movimentos[].temArquivos / arquivos[]boolean / arraySe tem documento; com arquivos=1, a lista { nome, link }.
detalheErrostringQuando 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

GET/consulta?cpfCnpj=... · ?nomeParteReu=... · ?numeroProcesso=... · &detalhes=1
POST/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" }.

HTTPQuandoO que fazer
400Faltou número, CPF/CNPJ ou nomeCorrija os parâmetros.
401Chave inválida, revogada ou ausente (quando exigida)Confira a chave no painel.
429Limite diário da chave atingidoAguarde a meia-noite ou peça aumento do limite.
502A fonte oficial não respondeu agoraTente 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.totalMovimentos ou o seq do 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.
um sistema UNICONTROLLER. · Dev Jackson Tomelin