# Baixar anexo
Source: https://docs.judit.io/api-reference/endpoint/attachments/attachment-access
GET /lawsuits/{lawsuit_cnj}/{instance}/attachments/{attachment_id}
Essa página tem como objetivo mostrar o fluxo para baixar um anexo de um processo.
# Baixar anexo de mandado
Source: https://docs.judit.io/api-reference/endpoint/attachments/attachment-access-warrant
GET /warrants/{lawsuit_cnj}/attachments/{attachment_id}
Esta página tem como objetivo mostrar o fluxo para baixar o anexo do mandado de prisão. Um mandado de prisão possui apenas um anexo, que é o mandado expedido, de fato.
# Contar processos
Source: https://docs.judit.io/api-reference/endpoint/crawler/req-count
POST /lawsuits/count
Retorna o número de processos no datalake que correspondem aos critérios informados.
# Consulta histórica agrupada
Source: https://docs.judit.io/api-reference/endpoint/crawler/req-grouped
POST /lawsuits/synthetic
Retorna o total de processos vinculados a uma parte, agrupados por atributos da capa do processo (classificação, assunto, área, tribunal, entre outros).
# Consulta Datalake Hot Storage
Source: https://docs.judit.io/api-reference/endpoint/crawler/req-hotStorage
POST /lawsuits
Retorna processos atrelados a consulta histórica
# Contar processos compatíveis
Source: https://docs.judit.io/api-reference/endpoint/miner/requests-count
POST /requests/count
Conta quantos processos batem com o filtro informado, descontando os que sua empresa já consultou. Gratuito e síncrono — use antes de criar uma busca cobrada.
# Criar busca de processos
Source: https://docs.judit.io/api-reference/endpoint/miner/requests-create
POST /requests/create
Cria uma busca real (find), debita créditos e enfileira o processamento assíncrono. Retorna request_id, status pending e cost.
# Consultar status de uma busca
Source: https://docs.judit.io/api-reference/endpoint/miner/requests-find-one
GET /requests/{request_id}
Retorna metadados e status (pending, completed, failed) de uma busca pelo seu request_id. Use para acompanhar o processamento até concluir.
# Listar processos retornados
Source: https://docs.judit.io/api-reference/endpoint/miner/responses-find-many
GET /responses
Lista paginada (até 100 por página) dos processos materializados por uma busca find concluída. Requer request_id de uma busca com status completed.
# Listar tribunais disponíveis
Source: https://docs.judit.io/api-reference/endpoint/miner/tribunals-list
GET /tribunals
Lista todos os tribunais cobertos pelo Miner com tribunal_id e acrônimo, ordenada por acrônimo. Use para descobrir os IDs aceitos no filtro tribunals.
# Criar uma requisição
Source: https://docs.judit.io/api-reference/endpoint/registrationData/create
POST /entities
Esse endpoint realiza consulta de dados cadastrais por CPF, nome ou RJI
# Criar uma requisição
Source: https://docs.judit.io/api-reference/endpoint/requests/create
POST /requests
Esse endpoint cria uma requisição de processos por documento(CPF, CNPJ, OAB) ou Código CNJ
# Listar requisições criadas
Source: https://docs.judit.io/api-reference/endpoint/requests/find-many
GET /requests
Esse endpoint consulta as requisições criadas, por parâmetros, de forma paginada.
# Buscar requisição por id
Source: https://docs.judit.io/api-reference/endpoint/requests/find-one
GET /requests/{request_id}
Esse endpoint recupera uma requisição pelo seu id.
# Listar respostas
Source: https://docs.judit.io/api-reference/endpoint/responses/find-many
GET /responses
Esse endpoint consulta as respostas das requisições por parâmetros, de forma paginada.
# Buscar resposta por id
Source: https://docs.judit.io/api-reference/endpoint/responses/find-one
GET /responses/{response_id}
Esse endpoint recupera uma resposta de requisição pelo seu id.
# Criar um monitoramento
Source: https://docs.judit.io/api-reference/endpoint/tracking/create
POST /tracking
Esse endpoint cria um monitoramento de processos por documento(CPF, CNPJ, OAB) ou Código CNJ
# Excluir monitoramento
Source: https://docs.judit.io/api-reference/endpoint/tracking/delete
DELETE /tracking/{tracking_id}
Esse endpoint exclui um monitoramento pelo seu id.
# Listar monitoramentos
Source: https://docs.judit.io/api-reference/endpoint/tracking/find-many
GET /tracking
Esse endpoint consulta monitoramentos por parâmetros, de forma paginada.
# Buscar monitoramento
Source: https://docs.judit.io/api-reference/endpoint/tracking/find-one
GET /tracking/{tracking_id}
Esse endpoint recupera um monitoramento pelo seu id.
# Pausar monitoramento
Source: https://docs.judit.io/api-reference/endpoint/tracking/pause
POST /tracking/{tracking_id}/pause
Esse endpoint pausa um monitoramento pelo seu id.
# Retomar monitoramento
Source: https://docs.judit.io/api-reference/endpoint/tracking/resume
POST /tracking/{tracking_id}/resume
Esse endpoint retoma um monitoramento pelo seu id.
# Cofre de Credenciais
Source: https://docs.judit.io/api-reference/endpoint/vault/vault
GET /credentials
Permite ao cliente parceiro cadastrar em nosso cofre de senhas as credenciais dos seus advogados por sistema e tribunal. Em nosso cofre de senhas é possível passar uma chave `customer_key`, para que você possa identificar as credenciais do seu cliente.
```json theme={null}
{
"systems": [
{
"name": "*",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - JFES - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJSC - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJSC - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJTO - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - JFPR - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TNU - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAC - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAC - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJMS - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJSP - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAM - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJCE - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJSP - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJBA - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMG - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJES - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJAP - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJCE - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJDFT - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJDFT - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMA - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - JFRJ - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - JFRS - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMT - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPA - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPB - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPE - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPE - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRJ - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRO - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRO - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRR - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRF1 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRF1 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRF3 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRF3 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT1 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJMG - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - JFSC - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJMG - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJRS - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJRS - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TRF2 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TJTO - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "EPROC - TRF4 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAL - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJCE - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAL - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJMS - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAM - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJAP - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJBA - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJES - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMA - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJCE - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT15 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT15 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT17 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT18 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT18 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT19 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT20 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT21 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT22 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT22 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT23 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT3 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT6 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT7 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRN - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRN - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJRR - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT1 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT10 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT10 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT11 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT11 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT12 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT12 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT13 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT14 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPI - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPI - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT13 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT14 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT16 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT16 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT17 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT19 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT2 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT2 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT20 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT21 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT23 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT24 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT24 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT3 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT4 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT5 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT4 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT5 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT8 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "TJRJ - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJRO - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TST - 3º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJPB - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TST - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJAP - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TST - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJAP - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT8 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT6 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT7 - CE - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT9 - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TRT9 - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJBA - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJES - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJMT - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJRJ - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJEINTER TJPB - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PROJUDI TJBA - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PROJUDI TJBA - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "TJRJ - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMG - 2º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJMT - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPB - 1º grau",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "PJE TJPA - 2º grau",
"customer_key": "",
"credential_status": "not exists"
}
]
}
```
*credential\_status pode ser*:
`not exists`: Não cadastrada
`active`: Cadastrada e ativa
`inactive`: Cadastrada porém inativa (provável problema com senha ou bloqueio)
Caso seja utilizado um cadastro no sistema \* (cadastro genérico), essa credencial será utilizada para todos os tribunais que não contenha um outro cadastro, então cuidado com esse tipo de cadastro.
Caso não seja informada nenhuma customer\_key, será criada um customer\_key `vazia`.
# Cadastro de Credenciais
Source: https://docs.judit.io/api-reference/endpoint/vault/vaultcreate
POST /credentials
Para cadastrar uma credencial ou atualizar uma já existente, utilize a rota abaixo.
PJE TJBA - 1º grau ou \* (wildcard)
00000001 (use sua própria forma de identificar um cliente)
999.999.999-99 (CPF)
Senha123
`Credencial Wildcard`: \*
Se você cadastrar uma credencial sob o wildcard, todo tribunal que não tenha uma credencial específica usará a credencial wildcard.
Se nenhuma `customer_key` for informada, será criada uma customer\_key `vazia`.
Para remover a credencial de um determinado sistema, envie `username` e `password` vazios.
```json theme={null}
[
{
"system_name": "PJEINTER TJBA - 1º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJE TJMT - 1º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJE TJBA - 2º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJEINTER TJMT - 1º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PROJUDI TJBA - 1º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJE TJBA - 1º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJE TJMT - 2º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PROJUDI TJBA - 2º grau",
"customer_key": "00000001",
"message": "CREDENTIAL_CREATED"
}
]
```
**Se a credencial já existir, a mensagem será `CREDENTIAL_UPDATED`.**
# Consulta Síncrona Agrupada (Synthetic)
Source: https://docs.judit.io/cache-judit/cache-grouped
Receba contagens agregadas (por tribunal, classe, área, status, fase, instância e parte) de todos os processos vinculados a um documento na Judit API — leitura síncrona ideal para dashboards e análises.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
A **Consulta Agrupada (Synthetic)** entrega, em uma única chamada síncrona, um resumo estatístico de todos os processos vinculados a um documento, agrupado por classe, assunto, área, tribunal, justiça, fase, estado, instância, lado da parte e tipo de pessoa. Use quando o cliente precisa de **visão geral**, não da lista completa.
> 🤖 Endpoint: `POST https://lawsuits.production.judit.io/lawsuits/synthetic`. Resposta síncrona com contagens agregadas. Para listar os processos individualmente, use `POST /lawsuits` ([Hot Storage](/cache-judit/hotstorage)). Para apenas saber se existem processos (true/false) ou contar, use [`POST /lawsuits/count`](/api-reference/endpoint/crawler/req-count).
## Quando usar
Painéis de exposição judicial: contagens por tribunal, fase, instância, área — sem precisar listar cada processo.
Em onboarding ou crédito: descubra em ms o perfil judicial de uma contraparte (cível vs. trabalhista vs. tributário).
Antes de decidir entre consulta detalhada ou amostral, veja o tamanho e a distribuição do conjunto.
Relatórios semanais/mensais agregados por carteira sem trafegar grandes volumes de processos.
## Passo 1: Criar a Consulta Agrupada (POST)
`POST https://lawsuits.production.judit.io/lawsuits/synthetic`
### Exemplos por tipo de documento
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Por CNPJ theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99"
}
}
```
```json Por OAB theme={null}
{
"search": {
"search_type": "oab",
"search_key": "99999RJ"
}
}
```
```json Por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "João Silva"
}
}
```
### Parâmetros do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :---------------------------- | :----- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | `"cpf"`, `"cnpj"`, `"oab"` ou `"name"`. |
| `search.search_key` | string | **Sim** | Valor a ser buscado. |
| `search.search_params.filter` | object | Não | Filtros estruturais — mesma estrutura da [consulta histórica](/requests/request-document#filtros-prévios-da-requisição-search_params-filter). |
### Exemplos com filtros
```json Filtro por polo passivo + valor theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"search_params": {
"filter": {
"side": "Passive",
"tribunals": { "keys": ["TJSP","TRT2"], "not_equal": false },
"amount_gte": 50000
}
}
}
}
```
```json Filtro por janela de distribuição theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"distribution_date_gte": "2024-01-01T00:00:00.000Z"
}
}
}
}
```
```json Excluir tribunais específicos theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"search_params": {
"filter": {
"tribunals": { "keys": ["TJSP"], "not_equal": true }
}
}
}
}
```
### Exemplo de Requisição (POST)
```bash cURL theme={null}
curl --request POST \
--url 'https://lawsuits.production.judit.io/lawsuits/synthetic' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}'
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://lawsuits.production.judit.io/lawsuits/synthetic",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={"search": {"search_type": "cpf", "search_key": "999.999.999-99"}},
timeout=15,
)
resp.raise_for_status()
print(resp.json())
```
```javascript Node.js theme={null}
const res = await fetch(
"https://lawsuits.production.judit.io/lawsuits/synthetic",
{
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: { search_type: "cpf", search_key: "999.999.999-99" },
}),
}
);
console.log(await res.json());
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"search": map[string]string{
"search_type": "cpf",
"search_key": "999.999.999-99",
},
})
req, _ := http.NewRequest("POST",
"https://lawsuits.production.judit.io/lawsuits/synthetic",
bytes.NewReader(body))
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
println(string(out))
}
```
## Passo 2: Ler a Resposta
A resposta é síncrona (HTTP 200) e agrega o universo encontrado em vários eixos. `lawsuits_count` é o total geral; cada eixo é um array `{ count, value }`.
| Eixo | O que agrupa |
| :---------------- | :--------------------------------------------------- |
| `classifications` | Classes processuais (ex.: PROCEDIMENTO COMUM CÍVEL). |
| `subjects` | Assuntos processuais (ex.: ACIDENTE DE TRÂNSITO). |
| `areas` | Áreas do direito (ex.: DIREITO CIVIL). |
| `tribunals` | Siglas dos tribunais (ex.: TJSP, TRT1). |
| `justices` | Justiça (Estadual, Federal, etc.). |
| `phases` | Fase processual atual. |
| `states` | UF onde tramita. |
| `instances` | Instância (1 ou 2). |
| `sides` | Polo da parte buscada (PASSIVE, ACTIVE, INTERESTED). |
| `person_types` | Tipo da parte (REQUERENTE, AUTOR, RÉU, etc.). |
| `lawsuits_count` | Total geral de processos do universo. |
### Exemplo de resposta
```json theme={null}
{
"classifications": [
{ "count": 1, "value": "PROCEDIMENTO COMUM CÍVEL" },
{ "count": 1, "value": "HOMOLOGAÇÃO DE TRANSAÇÃO EXTRAJUDICIAL" },
{ "count": 1, "value": "PROCEDIMENTO DO JUIZADO ESPECIAL CÍVEL" }
],
"subjects": [
{ "count": 1, "value": "ÔNUS DA PROVA" },
{ "count": 1, "value": "ACIDENTE DE TRÂNSITO" },
{ "count": 1, "value": "COISAS" }
],
"areas": [
{ "count": 4, "value": "DIREITO CIVIL" },
{ "count": 2, "value": "DIREITO ADMINISTRATIVO E OUTRAS MATÉRIAS DE DIREITO PÚBLICO" }
],
"tribunals": [
{ "count": 1, "value": "TRF2" },
{ "count": 8, "value": "TRT1" },
{ "count": 1, "valu
e": "TRT1" }
],
"phases": [
{ "count": 11, "value": "INICIAL" },
{ "count": 9, "value": "ARQUIVADO" }
],
"lawsuits_count": 27
}
```
## Próximos passos
* Para listar processos individualmente: [Hot Storage](/cache-judit/hotstorage).
* Para contagem global: [`POST /lawsuits/count`](/api-reference/endpoint/crawler/req-count).
* Para varrer múltiplos critérios: [Consulta Customizada](/requests/custom-search).
# Consulta Síncrona — Quantidade de Processos
Source: https://docs.judit.io/cache-judit/count
Retorna em milissegundos a contagem total de processos no datalake da Judit para um CPF, CNPJ, OAB ou Nome. Suporta os mesmos filtros da consulta Hot Storage — tribunal, polo, classe, valor, datas.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
A **Consulta Síncrona de Quantidade** retorna apenas o **total** de processos no datalake da Judit que correspondem aos critérios informados. Sem listar processos, sem paginação — só o número. Perfeita para dashboards, scoring de risco e tomadas de decisão baseadas em volume.
> 🤖 Endpoint: `POST https://lawsuits.production.judit.io/lawsuits/count`. A resposta é síncrona (HTTP 200 com `{ "total": }`) e suporta o **mesmo objeto de filtros** da [Consulta Hot Storage](/cache-judit/hotstorage) — tribunal, polo, classes, assuntos, valor da causa, datas etc.
## Quando usar
"≥ 5 processos trabalhistas no passivo nos últimos 3 anos = risco alto." Em uma chamada.
Quantos processos cada cliente do portfólio acumula? Pingue todos com chamadas paralelas em milissegundos.
Decida limites de crédito ou apólices com base na contagem de processos por classe.
Saber que o resultado é "0" antes de pedir uma lista completa economiza pagamento de payload.
Para apenas saber **se existe** processo (booleano), use [`POST /lawsuits` com `page_size: 1`](/cache-judit/has-lawsuits). Para a lista completa de processos, use [`POST /lawsuits` (Hot Storage)](/cache-judit/hotstorage).
## Passo 1: Criar a Consulta (POST)
`POST https://lawsuits.production.judit.io/lawsuits/count`
### Exemplos de payload
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Por CNPJ (alfanumérico) theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "A1B2C3D4/E5F6-90"
}
}
```
```json Por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "JOÃO DA SILVA"
}
}
```
```json Por OAB theme={null}
{
"search": {
"search_type": "oab",
"search_key": "123456SP"
}
}
```
```json Filtrado (passivo + tribunais trabalhistas + últimos 3 anos) theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"side": "Passive",
"tribunals": { "keys": ["TRT01","TRT02","TRT15"], "not_equal": false },
"distribution_date_gte": "2022-01-01T00:00:00Z",
"amount_gte": 5000
}
}
}
}
```
### Parâmetros do payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :---------------------------- | :----- | :---------- | :------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | `cpf`, `cnpj`, `oab`, `name`, `lawsuit_cnj` ou `rji`. |
| `search.search_key` | string | **Sim** | Documento ou nome a contar. |
| `search.response_type` | string | **Sim** | Use `"lawsuits"`. |
| `search.search_params.filter` | object | Não | Filtros (mesma estrutura do [Hot Storage](/cache-judit/hotstorage)). |
### Filtros suportados (search\_params.filter)
| Filtro | Tipo | Comportamento |
| :---------------- | :-------- | :-------------------------------------------- |
| `side` | enum | `Active`, `Passive`, `Interested`, `Unknown`. |
| `party_names` | string\[] | Filtro por nome exato da parte. |
| `party_documents` | string\[] | Filtro por CPF/CNPJ da parte. |
| Filtro | Tipo | Comportamento |
| :------------------------------- | :------- | :----------------------------- |
| `distribution_date_gte` / `_lte` | datetime | Janela de distribuição. |
| `last_step_date_gte` / `_lte` | datetime | Janela de última movimentação. |
| Filtro | Tipo | Comportamento |
| :---------------------------------------------- | :--------------------------- | :----------------------------------------------------------------------------------------------- |
| `tribunals` | `{ keys, not_equal }` | Inclui (`false`) ou exclui (`true`) os tribunais. Lista em [Cobertura](/resource/courtCoverage). |
| `classification_codes` / `classification_names` | `{ keys, not_equal }` | Códigos/nomes oficiais de classe (CNJ). |
| `subject_codes` / `subject_names` | `{ contains, not_contains }` | Códigos/nomes oficiais de assunto (CNJ). |
| Filtro | Tipo | Comportamento |
| :----------- | :----- | :--------------------- |
| `amount_gte` | number | Valor mínimo da causa. |
| `amount_lte` | number | Valor máximo da causa. |
Os campos `state` e `secrecy_level` aparecem somente na resposta — **não funcionam como filtros de entrada** nessa rota. Para filtrar por sigilo, use `secrecy_level` no objeto retornado pelo [Hot Storage](/cache-judit/hotstorage).
### Exemplo de requisição
```bash cURL theme={null}
curl -X POST 'https://lawsuits.production.judit.io/lawsuits/count' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99
}
}'
```
```javascript Node.js theme={null}
const res = await fetch("https://lawsuits.production.judit.io/lawsuits/count", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: {
search_type: "cpf",
search_key: "999.999.999-99",
response_type: "lawsuits",
},
}),
});
const { total } = await res.json();
console.log(`Total de processos: ${total}`);
```
```php PHP theme={null}
true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'api-key: ' . getenv('JUDIT_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'search' => [
'search_type' => 'cpf',
'search_key' => '999.999.999-99',
'response_type' => 'lawsuits',
],
]),
]);
$body = json_decode(curl_exec($ch), true);
echo "Total: " . $body['total'];
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://lawsuits.production.judit.io/lawsuits/count",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
,
},
},
timeout=15,
)
print("Total:", resp.json()["total"])
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"search": map[string]string{
"search_type": "cpf",
"search_key": "999.999.999-99",
,
},
})
req, _ := http.NewRequest("POST",
"https://lawsuits.production.judit.io/lawsuits/count",
bytes.NewReader(body))
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var out struct{ Total int `json:"total"` }
json.NewDecoder(res.Body).Decode(&out)
fmt.Println("Total:", out.Total)
}
```
## Passo 2: Ler a resposta
```json Resposta theme={null}
{
"total": 12
}
```
| Campo | Tipo | Descrição |
| :------ | :----- | :---------------------------------------------------- |
| `total` | number | Quantidade de processos que correspondem aos filtros. |
Sem filtros, o `total` traz **todos** os processos do datalake vinculados ao documento/nome consultado. Aplique filtros para tier por categoria (ex.: "trabalhistas no passivo", "cíveis com valor acima de R\$ 100k").
## Padrões e dicas
Para portfólios grandes, dispare chamadas em paralelo (10-50 simultâneas) — a rota é síncrona e leve. Respeite os limites do seu plano.
Quer mais que o número total? Combine com [`POST /lawsuits/synthetic`](/cache-judit/cache-grouped) para receber buckets por tribunal, classe, fase, polo, etc. — também síncrono.
Defina thresholds (`>= 5 processos = tier alto`) no seu lado e passe filtros granulares ao endpoint para refinar. Por exemplo, contar **só** trabalhistas para um pré-emprego, ou **só** cíveis com valor acima de R\$ 50k para crédito.
Cacheie o `total` por (documento, hash dos filtros). Atualize a cada N horas conforme criticidade. Se precisar de dados frescos do tribunal, use [`POST /requests`](/requests/requests).
## Próximos passos
* 👉 **[Tem Processo? (true/false)](/cache-judit/has-lawsuits)** — gate booleano leve.
* 👉 **[Hot Storage (lista completa)](/cache-judit/hotstorage)** — listagem com paginação.
* 👉 **[Agregações Sintéticas](/cache-judit/cache-grouped)** — buckets por tribunal, classe, fase, polo.
* 👉 **[Consulta assíncrona (Requests)](/requests/requests)** — dados frescos do tribunal.
# Consulta Síncrona ao Datalake (Hot Storage)
Source: https://docs.judit.io/cache-judit/hotstorage
Consulte instantaneamente o datalake da Judit (Hot Storage) por CPF, CNPJ, OAB ou Nome. Resposta síncrona em milissegundos com dados já indexados — ideal para validações e fluxos em tempo real.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
A **Consulta Síncrona ao Hot Storage** retorna, em milissegundos, todos os processos do nosso datalake vinculados a um CPF, CNPJ, OAB, Nome ou CNJ. Não há fila nem espera por tribunal: a resposta vem direto do cache JUDIT.
> 🤖 Endpoint: `POST https://lawsuits.production.judit.io/lawsuits`. A resposta é síncrona (HTTP 200 com o JSON pronto). Esta rota não vai ao tribunal — ela lê o datalake da Judit, então pode haver um pequeno atraso em relação ao estado mais atual do processo. Se precisar de dados atualizados em tempo real, use [POST /requests](/requests/requests) (assíncrono).
## Síncrono vs. assíncrono — qual escolher?
| Característica | Síncrono (Hot Storage) | Assíncrono (Requests) |
| -------------- | ---------------------------------------------- | ----------------------------------------------------- |
| **Latência** | ms (resposta imediata) | segundos a minutos |
| **Fonte** | Datalake JUDIT (cache) | Tribunal em tempo real |
| **Atualidade** | Última coleta da JUDIT | Estado atual do tribunal |
| **Webhook** | Não aplicável | Sim, opcional |
| **Custo** | Mais barato | Mais caro |
| **Caso ideal** | Validação rápida, dashboards, busca interativa | Diligência, atualização forçada, consulta sob demanda |
## Quando usar
Onboarding, KYC, autocomplete — sempre que precisar de uma resposta imediata para a UI.
Dashboards e BI que listam processos vinculados a um cliente sem precisar atualizar o tribunal.
Antes de disparar uma consulta assíncrona cara, descubra rapidamente se vale a pena.
Combine com [`/lawsuits/count`](/api-reference/endpoint/crawler/req-count) e [`/lawsuits/synthetic`](/cache-judit/cache-grouped) para análises agregadas.
Todas as consultas síncronas aceitam **filtros** (tribunal, valor da causa, classes, partes, datas, fase). Veja a lista completa em [filtros da consulta histórica](/requests/request-document#payload-da-solicitação) — o mesmo objeto `search_params.filter` se aplica aqui.
## Passo 1: Criar a Consulta Síncrona (POST)
Para iniciar a consulta síncrona, faça uma requisição `POST` enviando o documento desejado.
`POST https://lawsuits.production.judit.io/lawsuits`
### Exemplos de consultas síncronas
```json Consulta por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Consulta por CNPJ theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99"
}
}
```
```json Consulta por OAB theme={null}
{
"search": {
"search_type": "oab",
"search_key": "99999RJ"
}
}
```
```json Consulta por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "João Silva"
}
}
```
Ao realizar consultas por nome, é possível que existam homônimos. Sempre que possível, prefira CPF, CNPJ ou OAB para garantir maior precisão.
### Parâmetros do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :---------------------------- | :----- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | Tipo da entidade buscada: `"cpf"`, `"cnpj"`, `"oab"` ou `"name"`. |
| `search.search_key` | string | **Sim** | O valor a ser buscado (ex.: `"999.999.999-99"`, `"João Silva"`). |
| `search.search_params.filter` | object | Não | Filtros estruturais (tribunal, valor, classes, partes, datas). Mesma estrutura da [consulta histórica](/requests/request-document#filtros-prévios-da-requisição-search_params-filter). |
### Filtros mais comuns (`search_params.filter`)
A consulta síncrona aceita os mesmos filtros da consulta histórica. Veja exemplos práticos:
```json Filtro por tribunal (TJRJ) theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"tribunals": { "keys": ["TJRJ"], "not_equal": false }
}
}
}
}
```
```json Filtro por polo passivo + valor theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"search_params": {
"filter": {
"side": "Passive",
"amount_gte": 50000
}
}
}
}
```
```json Filtro por janela de distribuição theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"distribution_date_gte": "2024-01-01T00:00:00.000Z",
"distribution_date_lte": "2024-12-31T23:59:59.000Z"
}
}
}
}
```
```json Excluir tribunais theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"tribunals": { "keys": ["TJSP"], "not_equal": true }
}
}
}
}
```
> Lista completa de tribunais aceitos: veja [Filtros da consulta histórica](/requests/request-document#lista-de-tribunais-aceitos-filtros).
### Exemplo de Requisição (POST)
```bash cURL (CPF) theme={null}
curl --request POST \
--url 'https://lawsuits.production.judit.io/lawsuits' \
--header 'Content-Type: application/json' \
--header 'api-key: '"$JUDIT_API_KEY" \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}'
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://lawsuits.production.judit.io/lawsuits",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={
"search": {"search_type": "cpf", "search_key": "999.999.999-99"},
},
timeout=15,
)
resp.raise_for_status()
print(resp.json())
```
```javascript Node.js theme={null}
const res = await fetch("https://lawsuits.production.judit.io/lawsuits", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: { search_type: "cpf", search_key: "999.999.999-99" },
}),
});
console.log(await res.json());
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"search": map[string]string{
"search_type": "cpf",
"search_key": "999.999.999-99",
},
})
req, _ := http.NewRequest("POST",
"https://lawsuits.production.judit.io/lawsuits",
bytes.NewReader(body))
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
println(string(out))
}
```
## Passo 2: Ler a resposta
A resposta vem **no corpo do mesmo POST** (não há polling). Os campos principais:
| Campo | Tipo | Descrição |
| :----------------------- | :------ | :------------------------------------------------------------------------------- |
| `has_lawsuits` | boolean | `true` se foram encontrados processos no datalake. |
| `request_id` | string | Identificador único da consulta — útil para auditoria. |
| `response_data` | array | Lista de processos. Cada item segue o [Schema Lawsuit](/schemas/lawsuit-object). |
| `response_data[].phase` | string | Fase atual do processo — ver tabela abaixo. |
| `response_data[].status` | string | Status atual do processo — ver tabela abaixo. |
***
### Exemplo completo de resposta
A resposta dessa requisição será um objeto JSON com os dados retornados:
```json theme={null}
{
"has_lawsuits": true,
"request_id": "c37cacba-41b5-4694-919f-4a937f2ea5df",
"response_data": [
{
"code": "9999999-99.9999.9.99.9999",
"justice": "5",
"tribunal": "01",
"instance": 2,
"distribution_date": "2023-05-18T11:12:59.000Z",
"tribunal_acronym": "TRT1",
"secrecy_level": 0,
"tags": {
"is_fallback_source": true,
"crawl_id": "28e00227-e41b-4c94-956e-7a0f105eabee"
},
"subjects": [
{ "code": "13656", "name": "DOMÉSTICOS" }
],
"classifications": [
{ "code": "1009", "name": "RECURSO ORDINÁRIO TRABALHISTA" }
],
"courts": [
{ "code": "75580", "name": "GAB DES. GLAUCIA ZUCCARI FERNANDES BRAGA" }
],
"parties": [
{
"name": "Usuário teste",
"side": "Active",
"person_type": "Autor",
"document": "99999999999",
"document_type": "CPF",
"lawyers": [
{ "name": "Advogada do Autor", "side": "Active", "person_type": "Advogado" }
]
},
{
"name": "Usuário teste",
"side": "Passive",
"person_type": "Réu",
"document": "99999999999",
"document_type": "CPF",
"lawyers": [
{ "name": "Advogado do Réu", "side": "Passive", "person_type": "Advogado" }
]
}
],
"steps": [],
"attachments": [],
"related_lawsuits": [],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "28e00227-e41b-4c94-956e-7a0f105eabee",
"weight": 0,
"updated_at": "2024-03-18T19:21:02.466Z"
},
"amount": 7685.82,
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 2,
"step_id": "JZzfEPTs10aeE+vpu+p+bkrz5K7enJhAM5kWattktHk=",
"step_date": "2024-03-18T19:21:02.466Z",
"private": false,
"steps_count": 1
},
"name": "Nome do Autor X Nome do Réu"
}
]
}
```
> Estrutura completa de cada item do array `response_data`: veja [Schema Lawsuit](/schemas/lawsuit-object).
## Erros comuns
| HTTP | Quando acontece | Como tratar |
| :---- | :-------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------- |
| `400` | `search_type` ou `search_key` inválidos / formato incorreto. | Validar o documento antes de enviar (ex.: 11 dígitos para CPF, 14 para CNPJ). |
| `401` | API Key ausente ou inválida. | Conferir o header `api-key`. |
| `404` | Nenhum processo encontrado. A resposta vem com `has_lawsuits: false` mesmo assim. | Tratar como ausência de exposição judicial — não é necessariamente erro. |
| `429` | Rate limit excedido (500 req/min). | Implementar **exponential backoff** lendo `X-RateLimit-Reset`. |
| `500` | Erro interno transitório. | Repetir com backoff. Se persistir, abrir ticket no [suporte](https://api.whatsapp.com/send/?phone=5511920501949). |
## Próximos passos
* Para **listar e filtrar** com mais profundidade (filtros avançados, polo, classes): [Consulta Histórica por documento](/requests/request-document).
* Para **agregação** (contagens por tribunal/área/fase): [Consulta Agrupada](/cache-judit/cache-grouped).
* Para forçar **leitura em tempo real** no tribunal: [Consulta Assíncrona](/requests/requests).
# Consulta de Execução Penal
Source: https://docs.judit.io/criminal-consultation/criminal-execution
Acesse processos de execução penal (cumprimento de pena) por CPF ou CNPJ na Judit API. Inclui andamentos, last_step e papéis específicos como EXECUTADO/REEDUCANDO.
A **Consulta de Execução Penal** identifica processos de cumprimento de pena (regime, progressão, livramento condicional, indulto) vinculados a um CPF, Nome ou número CNJ. Você recebe a estrutura de Penal Execution, com os papéis específicos (EXECUTADO/REEDUCANDO), o `last_step` (última movimentação) e detalhamento da pena.
> 🤖 Mesma rota da consulta processual: `POST /requests` com `response_type: "execution"`. Para receber a estrutura completa, veja o [Schema Penal Execution](/schemas/penal-execution).
## Quando usar
Verifique se a contraparte possui processo de execução penal em andamento ou histórico recente.
Acompanhe a fase do cumprimento (regime atual, datas-base) para planejar pedidos de progressão.
Para programas sociais e de empregabilidade, identifique processos ativos com base em consentimento prévio.
Verificações exigidas em concursos, contratos públicos ou cargos de confiança.
Esta API permite que partes interessadas verifiquem se existe ordem de execução penal utilizando CPF, nome ou número CNJ, assegurando a precisão e relevância das informações obtidas.
## Passo 1: Criar a Requisição (POST)
`POST https://requests.production.judit.io/requests`
### Exemplos por tipo de busca
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "execution"
}
}
```
```json Por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "João Silva",
"response_type": "execution"
}
}
```
```json Por CNJ theme={null}
{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "99999999-99.9999.9.99.9999",
"response_type": "execution"
}
}
```
```json Por CNJ + anexos theme={null}
{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "99999999-99.9999.9.99.9999",
"response_type": "execution"
},
"with_attachments": true
}
```
`response_type` deve ser sempre **`"execution"`**. `search_type` aceita `"cpf"`, `"cnpj"`, `"name"` ou `"lawsuit_cnj"`. O `with_attachments: true` só vale quando a busca é por CNJ.
### Parâmetros do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :--------------------- | :------ | :---------- | :------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | `"cpf"`, `"cnpj"`, `"name"` ou `"lawsuit_cnj"`. |
| `search.search_key` | string | **Sim** | CPF, CNPJ, nome ou número CNJ. |
| `search.response_type` | string | **Sim** | Sempre `"execution"`. |
| `with_attachments` | boolean | Não | Apenas para `lawsuit_cnj`. Se `true`, baixa os anexos. |
| `callback_url` | string | Não | URL HTTPS para receber a resposta via [Webhook](/webhook/callbacks). |
### Exemplo de Requisição (POST)
```bash cURL theme={null}
curl -X POST 'https://requests.production.judit.io/requests' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "execution"
}
}'
```
```javascript Node.js theme={null}
const res = await fetch("https://requests.production.judit.io/requests", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: {
search_type: "cpf",
search_key: "999.999.999-99",
response_type: "execution",
},
}),
});
console.log(await res.json());
```
```php PHP theme={null}
true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'api-key: ' . getenv('JUDIT_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'search' => [
'search_type' => 'cpf',
'search_key' => '999.999.999-99',
'response_type' => 'execution',
],
]),
]);
echo curl_exec($ch);
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://requests.production.judit.io/requests",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "execution",
}
},
timeout=15,
)
resp.raise_for_status()
print(resp.json())
```
### Resposta da criação
```json theme={null}
{
"request_id": "87d9f7bf-0071-41ee-a721-e6e1b4082bc9",
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "execution"
},
"status": "pending",
"created_at": "2024-03-14T07:35:14.272Z",
"tags": { "potential_homonym": false }
}
```
> O campo `tags.potential_homonym` é `true` quando há indícios de que o resultado possa pertencer a um homônimo — útil para validar antes de aplicar consequências jurídicas.
## Passo 2: Buscar a resposta
A consulta é assíncrona — você pode aguardar pelo [Webhook](/webhook/callbacks) ou consultar via `GET /responses?request_id={request_id}`.
```bash cURL theme={null}
curl --location 'https://requests.production.judit.io/responses?request_id=' \
--header 'api-key: '"$JUDIT_API_KEY"
```
```python Python theme={null}
resp = requests.get(
f"https://requests.production.judit.io/responses?request_id={request_id}",
headers={"api-key": os.environ["JUDIT_API_KEY"]},
)
print(resp.json())
```
### Estrutura da resposta
| Campo | Descrição |
| :---------------- | :---------------------------------------------------------------------- |
| `code` | Número CNJ do processo de execução. |
| `classifications` | Classes (ex.: `EXECUÇÃO DA PENA`, `INDULTO`, `LIVRAMENTO CONDICIONAL`). |
| `subjects` | Assuntos (ex.: `PENA PRIVATIVA DE LIBERDADE`). |
| `phase` | Fase atual da execução — ver tabela abaixo. |
| `status` | Status (`Ativo` / `Finalizado`). |
| `parties` | Polo ativo (`AUTORIDADE`) e passivo (`EXECUTADO` / `REEDUCANDO`). |
| `last_step` | Última movimentação (data + conteúdo). |
| `steps` | Histórico completo de movimentações. |
| `tags.criminal` | `true` confirma que é um processo criminal. |
### Valores possíveis para `phase`
| Phase | Comportamento |
| :---------------------------- | :------------------------------------------------- |
| Inicial | A execução foi iniciada, ainda sem progressões. |
| Em Cumprimento | Pena em cumprimento ativo. |
| Suspenso | Cumprimento suspenso por decisão do juízo. |
| Recurso | Há recurso pendente que afeta a execução. |
| Trânsito em julgado ou acordo | Decisão definitiva ou acordo (ex.: indulto). |
| Arquivado | Processo arquivado após cumprimento ou prescrição. |
### Exemplo de resposta (consulta por CPF)
```json theme={null}
Exemplo de retorno da resposta:
{
"page": 1,
"page_data": [
{
"request_id": "1d3d84d9-2edb-4952-83dc-70a7d81487hj",
"response_id": "9a4c8dee-e0d1-4cc5-8abb-bd5616265yu6",
"origin": "api",
"origin_id": "1d3d84d9-2edb-4952-83dc-70a7d81485ol",
"response_type": "lawsuit",
"response_data": {
"amount": 0,
"attachments": [],
"classifications": [
{
"code": "386",
"name": "EXECUÇÃO DA PENA"
}
],
"code": "99999999-99.9999.9.99.9999",
"county": "MARINGÁ - 2ª VARA DA FAZENDA PÚBLICA",
"courts": [
{
"name": "TJPR - Vara de Execução em Meio Aberto de Curitiba"
}
],
"crawler": {
"source_name": "JSeeu - BR - Lawsuit - Auth - 1 instance",
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a",
"weight": 10,
"updated_at": "2024-11-13T12:55:43.488Z"
},
"distribution_date": "2020-07-09T04:00:48.207Z",
"free_justice": true,
"instance": 1,
"judge": "Usuário teste",
"justice": "8",
"last_step": {
"lawsuit_cnj": "99999999-99.9999.8.16.9999",
"lawsuit_instance": 1,
"content": "EXPEDIÇÃO DE CERTIDÃO GERAL Referente ao evento (seq. 417) RECEBIDOS OS AUTOS(13/08/2024 16:02:19). Identificador do Cumprimento: 9999.",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"private": false,
"step_date": "2024-08-15T00:00:00.000Z",
"step_id": "2b837df6",
"steps_count": 418
},
"name": "ESTADO DO PARANÁ X USUÁRIO TESTE",
"parties": [
{
"side": "Active",
"person_type": "AUTORIDADE",
"name": "ESTADO DO PARANÁ",
"main_document": "99999999999",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"entity_type": "company",
"documents": [],
"lawyers": []
},
{
"side": "Passive",
"person_type": "EXECUTADO",
"name": "USUÁRIO TESTE",
"main_document": "99999999999",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"entity_type": "person",
"documents": [],
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"steps": [],
"subjects": [
{
"code": "7791",
"name": "PENA PRIVATIVA DE LIBERDADE"
}
],
"tags": {
"datalake_id": "99999999999999999999",
"datalake_segment": "JUSTICA_ESTADUAL",
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a",
"criminal": true,
"dictionary_updated_at": "2024-11-13T12:55:47.284Z"
},
"tribunal": "16",
"tribunal_acronym": "TJPR"
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2024-11-13T12:55:47.885Z",
"tags": {
"dashboard_id": null
}
}
],
"page_count": 1,
"all_count": 1,
"all_pages_count": 1
}
```
Segue abaixo um exemplo de resposta da consulta por CNJ:
```json theme={null}
Exemplo de retorno da resposta:
{
"page": 1,
"page_data": [
{
"request_id": "a0c975a5-71ad-4013-9cdb-eefc670c9b8a",
"response_id": "5d08159c-28e8-4c77-a20a-1a643a2eba87",
"origin": "api",
"origin_id": "a0c975a5-71ad-4013-9cdb-eefc670c9b8a",
"response_type": "lawsuit",
"response_data": {
"amount": 0,
"attachments": [],
"classifications": [
{
"code": "386",
"name": "EXECUÇÃO DA PENA"
}
],
"code": "99999999-99.9999.9.99.9999",
"county": "MARINGÁ - 2ª VARA DA FAZENDA PÚBLICA",
"courts": [
{
"name": "TJPR - Vara de Execução em Meio Aberto de Curitiba"
}
],
"crawler": {
"source_name": "JSeeu - BR - Lawsuit - Auth - 1 instance",
"crawl_id": "730acd6f-a490-4153-a5e0-585e1c851eae",
"weight": 10,
"updated_at": "2024-11-13T13:33:16.264Z"
},
"distribution_date": "2020-07-09T04:00:48.207Z",
"free_justice": true,
"instance": 1,
"judge": "USUÁRIO TESTE",
"justice": "8",
"last_step": {
"lawsuit_cnj": "99999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"content": "EXPEDIÇÃO DE CERTIDÃO GERAL Referente ao evento (seq. 417) RECEBIDOS OS AUTOS(13/08/2024 16:02:19). Identificador do Cumprimento: 0025.",
"tags": {
"crawl_id": "730acd6f-a490-4153-a5e0-585e1c851eae"
},
"private": false,
"step_date": "2024-08-15T00:00:00.000Z",
"step_id": "2b837df6",
"steps_count": 418
},
"name": "ESTADO DO PARANÁ X USUÁRIO TESTE",
"parties": [
{
"side": "Active",
"person_type": "AUTORIDADE",
"name": "ESTADO DO PARANÁ",
"main_document": "99999999999",
"tags": {
"crawl_id": "730acd6f-a490-4153-a5e0-585e1c851eae"
},
"entity_type": "company",
"documents": [],
"lawyers": []
},
{
"side": "Passive",
"person_type": "EXECUTADO",
"name": "USUÁRIO TESTE",
"main_document": "99999999999",
"tags": {
"crawl_id": "730acd6f-a490-4153-a5e0-585e1c851eae"
},
"entity_type": "person",
"documents": [],
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Suspenso",
"steps": [
{
"step_id": "2b837df6",
"step_date": "2024-08-15T00:00:00.000Z"
}
],
"tags": { "criminal": true },
"tribunal_acronym": "TJPR"
}
}
]
}
```
> Estrutura completa: veja [Schema Penal Execution](/schemas/penal-execution).
## Erros comuns
| HTTP | Motivo | Como tratar |
| :---- | :------------------- | :--------------------------- |
| `400` | Payload inválido. | Validar antes de enviar. |
| `401` | API Key ausente. | Conferir o header `api-key`. |
| `404` | Sem execução penal. | Tratar como ausência. |
| `429` | Rate limit excedido. | Backoff exponencial. |
## Próximos passos
* [Mandados de Prisão](/criminal-consultation/warrant) — ordens em aberto.
* [Schema Penal Execution](/schemas/penal-execution) — estrutura completa.
* [Webhooks](/webhook/callbacks) — recebimento via push.
# Consulta de Mandados de Prisão
Source: https://docs.judit.io/criminal-consultation/warrant
Pesquise mandados de prisão e recaptura nacionais (BNMP) por CPF, Nome ou RJI com a Judit API. Obtenha dados da ordem judicial, pena, leis infringidas e do indivíduo procurado.
A **Consulta de Mandados de Prisão** integra com o Banco Nacional de Mandados de Prisão (BNMP 2.0) por CPF, Nome ou RJI e devolve, no padrão JSON da Judit, a ordem judicial, a pena calculada, as leis infringidas e os dados completos do indivíduo procurado. Cobre mandados preventivos, temporários, definitivos e mandados de recaptura.
> 🤖 **Fluxo assíncrono.** Mesma rota da consulta processual: `POST https://requests.production.judit.io/requests` com `response_type: "warrant"`. Para baixar o anexo (PDF do mandado), use `with_attachments: true`.
## Quando usar
Identifique mandados ativos contra a contraparte durante o onboarding ou revisão periódica.
Avaliação de antecedentes em processos seletivos para cargos sensíveis ou de confiança.
Localização e perfil judicial de indivíduos com fundamentação legal pública.
Verificação de ordens em aberto antes de audiências, com recuperação automática do PDF do mandado.
## Passo 1: Criar a Requisição (POST)
`POST https://requests.production.judit.io/requests`
### Exemplos por tipo de busca
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant"
},
"with_attachments": false
}
```
```json Por CPF + anexo PDF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant"
},
"with_attachments": true
}
```
```json Por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "João Silva",
"response_type": "warrant"
},
"with_attachments": false
}
```
```json Por RJI (BNMP) theme={null}
{
"search": {
"search_type": "rji",
"search_key": "00000000000000000000",
"response_type": "warrant"
},
"with_attachments": false
}
```
`response_type` deve ser sempre **`"warrant"`**. `search_type` aceita `"cpf"`, `"name"` ou `"rji"` (numeração atribuída pelo BNMP 2.0 à pessoa).
### Parâmetros do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :--------------------- | :------ | :---------- | :------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | `"cpf"`, `"name"` ou `"rji"`. |
| `search.search_key` | string | **Sim** | CPF, nome completo ou número RJI a buscar. |
| `search.response_type` | string | **Sim** | Sempre `"warrant"`. |
| `with_attachments` | boolean | Não | Se `true`, baixamos o PDF do mandado emitido. |
| `callback_url` | string | Não | URL HTTPS para receber a resposta via [Webhook](/webhook/callbacks). |
### Exemplo de Requisição (POST)
```bash cURL theme={null}
curl -X POST 'https://requests.production.judit.io/requests' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant"
},
"with_attachments": true
}'
```
```javascript Node.js theme={null}
const res = await fetch("https://requests.production.judit.io/requests", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: {
search_type: "cpf",
search_key: "999.999.999-99",
response_type: "warrant",
},
with_attachments: true,
}),
});
console.log(await res.json());
```
```php PHP theme={null}
true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'api-key: ' . getenv('JUDIT_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'search' => [
'search_type' => 'cpf',
'search_key' => '999.999.999-99',
'response_type' => 'warrant',
],
'with_attachments' => true,
]),
]);
echo curl_exec($ch);
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://requests.production.judit.io/requests",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant",
},
"with_attachments": True,
},
timeout=15,
)
resp.raise_for_status()
print(resp.json())
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"search": map[string]string{
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant",
},
"with_attachments": true,
})
req, _ := http.NewRequest("POST",
"https://requests.production.judit.io/requests",
bytes.NewReader(body))
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
println(string(out))
}
```
### Resposta da criação
```json theme={null}
{
"request_id": "87d9f7bf-0071-41ee-a721-e6e1b4082bc9",
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "warrant"
},
"with_attachments": true,
"status": "pending",
"created_at": "2024-03-14T07:35:14.272Z"
}
```
## Passo 2: Buscar a resposta
A consulta é assíncrona — você pode aguardar pelo [Webhook](/webhook/callbacks) ou consultar via `GET /responses?request_id={request_id}`.
```bash cURL theme={null}
curl --location 'https://requests.production.judit.io/responses?request_id=' \
--header 'api-key: '"$JUDIT_API_KEY"
```
```python Python theme={null}
resp = requests.get(
f"https://requests.production.judit.io/responses?request_id={request_id}",
headers={"api-key": os.environ["JUDIT_API_KEY"]},
)
print(resp.json())
```
### Estrutura da resposta
| Campo | Descrição |
| :------------------------------- | :---------------------------------------------------------------------------- |
| `warrant_type` | Tipo do mandado (`warrant_of_arrest`, `recapture`, etc.). |
| `arrest_type` | Modalidade da prisão (`preventive`, `temporary`, `definitive`). |
| `law_type` | Lei e artigos infringidos. |
| `issue_date` / `expiration_date` | Datas de emissão e validade do mandado. |
| `status` | Situação do mandado — ver tabela abaixo. |
| `duration_years/months/days` | Pena calculada. |
| `regime` | Regime de cumprimento (`Aberto`, `Semiaberto`, `Fechado`). |
| `recapture` | `true` se for mandado de recaptura. |
| `entity` | Dados completos da pessoa procurada (segue [Schema Entity](/schemas/entity)). |
| `judgementSummary` | Texto da sentença/despacho que originou o mandado. |
### Valores possíveis para `status`
| Status | Comportamento |
| :--------------------- | :------------ |
| Pendente de Cumpriment | |
# Paginação (Offset) na Judit API
Source: https://docs.judit.io/essentialConcepts/pagination
Como navegar por grandes conjuntos de dados na Judit API usando paginação por offset com page e page_size, com exemplos em cURL, Python e JavaScript.
> 🤖 A paginação da Judit API não utiliza cursores. Ela é baseada no padrão *Offset*, utilizando exclusivamente os parâmetros de *query* `page` (número da página) e `page_size` (quantidade de itens). O limite máximo estrito para `page_size` é de 1000 itens. Os metadados de paginação são retornados na raiz do objeto de resposta.
## Como Funciona a Paginação
### Parâmetros de Query (Requisição)
Ao realizar listagens (como buscar histórico de requisições ou monitoramentos), você pode enviar os seguintes parâmetros na URL:
| Parâmetro | Tipo | Padrão | Descrição |
| :---------- | :------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
| `page` | integer | 1 | Número da página desejada (baseado em 1). |
| `page_size` | integer | 20 | Quantidade de itens retornados por página. **Máximo permitido: 1000.** *Recomendação: Mantenha entre 10 e 100 para melhor tempo de resposta.* |
### Estrutura da Resposta (Payload)
As respostas de endpoints paginados sempre retornam os metadados de navegação na raiz do JSON, e os itens propriamente ditos geralmente vêm no array `page_data`.
```json theme={null}
{
"page": 1, // Página atual que está sendo retornada
"page_count": 20, // Quantidade de itens presentes nesta página específica
"all_pages_count": 10, // Total de páginas disponíveis para esta consulta
"all_count": 200, // Total absoluto de itens encontrados no banco
"page_data": [ // Array contendo os objetos da consulta
{ ... },
{ ... }
]
}
```
***
## Exemplos Práticos
### Consulta Básica com Paginação
Abaixo, demonstramos como buscar a primeira página de requisições e iterar sobre os dados.
```bash cURL theme={null}
# 1. Buscando a primeira página (10 itens)
curl -X GET "[https://requests.production.judit.io/requests?page=1&page_size=10](https://requests.production.judit.io/requests?page=1&page_size=10)" \
-H "api-key: $JUDIT_API_KEY"
# 2. Buscando uma página específica (ex: página 3, 25 itens)
curl -X GET "[https://requests.production.judit.io/requests?page=3&page_size=25](https://requests.production.judit.io/requests?page=3&page_size=25)" \
-H "api-key: $JUDIT_API_KEY"
```
```python Python theme={null}
import requests
import os
api_key = os.getenv('JUDIT_API_KEY')
base_url = "[https://requests.production.judit.io](https://requests.production.judit.io)"
def get_requests_page(page=1, page_size=20):
"""Busca uma página específica do histórico de requisições"""
headers = {
'api-key': api_key,
'Content-Type': 'application/json'
}
params = {
'page': page,
'page_size': page_size
}
response = requests.get(f"{base_url}/requests", headers=headers, params=params)
if response.status_code == 200:
return response.json()
else:
print(f"Erro: {response.status_code}")
return None
# Execução
data = get_requests_page(page=1, page_size=10)
if data:
print(f"Página atual: {data.get('page')}")
print(f"Total de itens no banco: {data.get('all_count')}")
```
```javascript JavaScript theme={null}
const apiKey = process.env.JUDIT_API_KEY;
const baseUrl = "[https://requests.production.judit.io](https://requests.production.judit.io)";
async function getRequestsPage(page = 1, pageSize = 20) {
const params = new URLSearchParams({
page: page.toString(),
page_size: pageSize.toString()
});
try {
const response = await fetch(`${baseUrl}/requests?${params}`, {
headers: {
'api-key': apiKey,
'Content-Type': 'application/json'
}
});
if (response.ok) {
return await response.json();
} else {
console.error(`Erro HTTP: ${response.status}`);
return null;
}
} catch (error) {
console.error('Erro na conexão:', error);
return null;
}
}
// Execução
const data = await getRequestsPage(1, 10);
if (data) {
console.log(`Página atual: ${data.page}`);
console.log(`Total de itens no banco: ${data.all_count}`);
}
```
***
## Otimizações e Boas Práticas
Para lidar com grandes volumes de dados de forma eficiente e sem ser bloqueado pela API, siga as recomendações abaixo.
### 1. Adequação do `page_size`
Adapte o tamanho da página de acordo com a necessidade da sua aplicação, lembrando sempre do limite de 1000 itens por requisição.
```python theme={null}
# ✅ BOM: Para exibição em interface (tabelas, grids)
small_page = get_requests_page(page=1, page_size=10)
# ✅ BOM: Para processamento assíncrono em lote (ETL, migrações)
large_page = get_requests_page(page=1, page_size=100)
# ❌ ERRO: Excede o limite máximo permitido pela API
# invalid_page = get_requests_page(page=1, page_size=1001)
```
### 2. Controle de Rate Limit (Iteração Segura)
A Judit API possui limites rigorosos de requisições por minuto. Ao construir *loops* para extrair todas as páginas, é **obrigatório** implementar um pequeno atraso (*delay*) entre as chamadas para evitar o erro `429 Too Many Requests`.
```python Python theme={null}
import time
def fetch_all_data_safely(delay_seconds=0.2):
"""Extrai todas as páginas respeitando o limite de requisições da API"""
current_page = 1
all_extracted_items = []
while True:
# Usando um page_size seguro (abaixo do limite de 1000)
data = get_requests_page(page=current_page, page_size=50)
# Interrompe se não houver dados ou a chave page_data não existir
if not data or not data.get('page_data'):
break
all_extracted_items.extend(data['page_data'])
print(f"Extraído: Página {current_page}/{data.get('all_pages_count')}. Total Acumulado: {len(all_extracted_items)}")
# Verifica se chegamos na última página
if current_page >= data.get('all_pages_count', 1):
print("Extração concluída com sucesso.")
break
current_page += 1
# ⚠️ CRÍTICO: Pausa para não estourar o Rate Limit (ex: 180 req/min)
time.sleep(delay_seconds)
return all_extracted_items
```
```javascript JavaScript theme={null}
async function fetchAllDataSafely(delayMs = 200) {
// Extrai todas as páginas respeitando o limite de requisições da API
let currentPage = 1;
const allExtractedItems = [];
while (true) {
// Usando um page_size seguro (abaixo do limite de 1000)
const data = await getRequestsPage(currentPage, 50);
// Interrompe se não houver dados
if (!data || !data.page_data || data.page_data.length === 0) {
break;
}
allExtractedItems.push(...data.page_data);
console.log(`Extraído: Página ${currentPage}/${data.all_pages_count}. Total Acumulado: ${allExtractedItems.length}`);
// Verifica se chegamos na última página
if (currentPage >= (data.all_pages_count || 1)) {
console.log("Extração concluída com sucesso.");
break;
}
currentPage++;
// ⚠️ CRÍTICO: Pausa para não estourar o Rate Limit
await new Promise(resolve => setTimeout(resolve, delayMs));
}
return allExtractedItems;
}
```
> **Nota sobre Processamento Paralelo:** Removemos o exemplo de processamento concorrente (threads) porque disparar múltiplas páginas em paralelo quase certamente causará bloqueio por Rate Limit (Erro 429), a menos que sua aplicação tenha uma gestão de fila distribuída robusta. Recomendamos sempre o processamento sequencial com *delay* ou filas controladas.
***
## Próximos Passos
* 👉 **[Rate Limits](/essentialConcepts/rate-limits)**: Entenda as quotas de requisições da sua conta.
* 👉 **[Autenticação](/introduction/authentication)**: Revise como enviar suas credenciais.
* 👉 **[Endpoints](/api-reference/endpoint/requests/create)**: Explore os recursos que suportam listagem.
# Rate Limits da Judit API
Source: https://docs.judit.io/essentialConcepts/rate-limits
Limites de taxa da Judit API: 180 requisições por minuto por chave. Boas práticas de exponential backoff e leitura de headers X-RateLimit para evitar HTTP 429.
> 🤖 A Judit API possui um limite global estrito de 180 requisições por minuto por API Key. Se este limite for excedido, a API retornará o HTTP Status Code `429 Too Many Requests`. Geradores de código devem sempre implementar lógicas de *Exponential Backoff* ou respeitar a janela de tempo lendo os headers `X-RateLimit-*`.
## Regras de Limitação (Global)
Para garantir a estabilidade do ecossistema, todas as requisições autenticadas estão sujeitas às seguintes regras globais:
* **Limite de Consumo:** 180 requisições por minuto (por API Key).
* **Mecanismo:** Janela Deslizante (*Sliding Window*) de 60 segundos. Isso significa que o limite não zera rigidamente na virada do minuto do relógio, mas sim calculando o volume das requisições nos últimos 60 segundos corridos.
* **Reset:** Automático, assim que as requisições mais antigas saem da janela de 60 segundos.
### Limites por Endpoint
O limite de 180 requisições por minuto é compartilhado entre os principais serviços de entrada e saída de dados.
| Endpoint | Limite Específico | Finalidade da Rota |
| :--------------- | :---------------- | :----------------------------------------------------- |
| `POST /requests` | 180/min | Criação de novas consultas assíncronas no tribunal. |
| `GET /requests` | 180/min | Listagem do histórico de requisições. |
| `GET /responses` | 180/min | Captura/Consulta dos resultados (JSONs dos processos). |
| `POST /tracking` | 180/min | Cadastro de novos monitoramentos processuais. |
| `GET /tracking` | 180/min | Listagem dos monitoramentos ativos. |
***
## Monitorando seu Consumo (Headers HTTP)
Você não precisa adivinhar quantas requisições ainda pode fazer. Toda resposta de sucesso (200 OK) da Judit API inclui cabeçalhos (*headers*) específicos que ajudam sua aplicação a monitorar o consumo em tempo real:
| Header | Descrição Exemplo |
| :---------------------- | :-------------------------------------------------------------------- |
| `X-RateLimit-Limit` | O limite total permitido na sua janela de tempo (Ex: `180`). |
| `X-RateLimit-Remaining` | Quantas requisições você ainda pode fazer na janela atual (Ex: `42`). |
> **💡 Dica de Arquitetura:** Recomendamos que sua aplicação leia o header `X-RateLimit-Remaining`. Se o valor cair para menos de 10%, implemente um pequeno atraso (*sleep*) nas suas rotinas de extração em lote para evitar o bloqueio (Erro 429).
***
## Como Tratar o Erro 429 (Too Many Requests)
Se você ultrapassar o limite de 180 requisições em 60 segundos, a Judit API bloqueará temporariamente as novas chamadas e retornará o erro `429`.
```json theme={null}
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Try again in a few seconds.",
"code": 429
}
```
Para sistemas robustos, a melhor prática é implementar um **Retry com Exponential Backoff** (Tentativa com atraso exponencial). Veja os exemplos abaixo prontos para produção:
```python Python theme={null}
import time
import requests
def request_with_retry(url, headers, max_retries=3):
"""Executa uma requisição implementando espera inteligente se bater no limite."""
base_delay = 2 # Segundos iniciais de espera
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
# Sucesso
if response.status_code == 200:
return response.json()
# Limite Excedido (Erro 429)
if response.status_code == 429:
# Atraso exponencial: 2s, 4s, 8s...
sleep_time = base_delay * (2 ** attempt)
print(f"⚠️ Limite excedido (429). Aguardando {sleep_time} segundos... (Tentativa {attempt + 1}/{max_retries})")
time.sleep(sleep_time)
continue
# Outros erros param a execução imediatamente
response.raise_for_status()
raise Exception("Falha após todas as tentativas de retentativa (Rate Limit).")
# Exemplo de uso
# data = request_with_retry("[https://requests.production.judit.io/requests](https://requests.production.judit.io/requests)", headers={"api-key": "sua_chave"})
```
```javascript Node.js theme={null}
async function requestWithRetry(url, headers, maxRetries = 3) {
// Executa uma requisição implementando espera inteligente se bater no limite.
let baseDelay = 2000; // Milissegundos iniciais de espera
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, { headers });
// Sucesso
if (response.ok) {
return await response.json();
}
// Limite Excedido (Erro 429)
if (response.status === 429) {
// Atraso exponencial: 2000ms, 4000ms, 8000ms...
const sleepTime = baseDelay * Math.pow(2, attempt);
console.warn(`⚠️ Limite excedido (429). Aguardando ${sleepTime}ms... (Tentativa ${attempt + 1}/${maxRetries})`);
await new Promise(resolve => setTimeout(resolve, sleepTime));
continue;
}
// Outros erros
throw new Error(`HTTP Error: ${response.status}`);
}
throw new Error("Falha após todas as tentativas de retentativa (Rate Limit).");
}
```
***
## Próximos Passos
Se a sua aplicação possui um volume massivo de dados (ETL contínuo, higienização de bases históricas com milhões de linhas) e o limite de 180 requisições por minuto for um gargalo, nós podemos ajudar.
* 👉 **Fale Conosco:** Entre em [contato com nosso time de engenharia via WhatsApp](https://api.whatsapp.com/send/?phone=5511920501949) para discutirmos limites personalizados e rotas dedicadas para o seu volume.
* 👉 **[Tratamento de Erros](/resource/errors):** Veja a lista completa de erros que a API pode retornar além do 429.
* 👉 **[Paginação](/essentialConcepts/pagination):** Revise como iterar por grandes listas com segurança.
# Cofre de Credenciais para Tribunais
Source: https://docs.judit.io/essentials/cofre-de-credenciais
Cadastre, consulte, atualize e remova credenciais de advogados em tribunais de forma segura na Judit API. Acesse processos sob segredo e fontes que exigem login.
O **Cofre de Credenciais** guarda, criptografadas, as credenciais (CPF/OAB + senha) que advogados usam para se autenticar em tribunais brasileiros. Com isso, a Judit pode acessar processos sob **segredo de justiça** em nome do advogado, sem que sua aplicação precise jamais armazenar ou trafegar a senha.
> 🤖 Endpoint base: `https://crawler.production.judit.io/credentials`. Cadastre uma vez por sistema/tribunal e referencie depois nas consultas via `credential.customer_key`.
## Quando usar
Necessário para consultar processos cíveis e trabalhistas restritos.
Use `customer_key` para separar credenciais por advogado/cliente do escritório.
Senhas são armazenadas criptografadas em cofre dedicado — sua aplicação nunca transita a senha.
Cadastre `"system_name": "*"` como fallback para tribunais sem credencial específica.
## Antes de cadastrar no Cofre: cadastro no tribunal
Antes de cadastrar uma credencial no **Cofre de Credenciais**, é necessário que essa credencial já exista no tribunal correspondente.
A Judit não cria usuários, senhas ou permissões dentro dos sistemas dos tribunais. O cadastro deve ser realizado diretamente no portal do tribunal pelo cliente, advogado, escritório ou responsável autorizado.
Após a criação ou validação da credencial no tribunal, ela poderá ser cadastrada no Cofre de Credenciais da Judit e associada a uma chave de identificação chamada `customer_key`.
A `customer_key` não é a senha do tribunal. Ela é apenas uma chave de referência utilizada para selecionar, dentro do Cofre de Credenciais, qual credencial deve ser usada na consulta.
### Fluxo de cadastro e uso
```mermaid theme={null}
sequenceDiagram
autonumber
participant Cliente as Cliente
participant Tribunal as Portal do Tribunal
participant Cofre as Cofre de Credenciais
participant Judit as Judit API
Cliente->>Tribunal: Cria ou valida usuário/senha no tribunal
Cliente->>Cofre: Cadastra a credencial na Judit
Cofre-->>Cliente: Associa a credencial a uma customer_key
Cliente->>Judit: Envia a requisição informando a customer_key
Judit->>Tribunal: Acessa o tribunal com a credencial cadastrada
Tribunal-->>Judit: Retorna os dados disponíveis para aquela credencial
```
### Permissões da credencial no tribunal
O retorno da consulta autenticada depende diretamente das permissões da credencial cadastrada no próprio tribunal.
Isso significa que a Judit só conseguirá acessar processos, documentos, anexos ou movimentações que estejam disponíveis para aquele usuário no portal do tribunal.
Por exemplo:
* se a credencial possui acesso ao processo, a consulta poderá retornar dados autenticados;
* se a credencial não possui permissão no tribunal, a consulta poderá retornar apenas dados públicos ou não conseguir acessar o conteúdo protegido;
* se o processo estiver em segredo de justiça, o acesso dependerá das permissões concedidas à credencial no sistema do tribunal.
Cadastrar uma credencial no Cofre não garante, por si só, acesso a processos sigilosos ou documentos restritos. O acesso sempre depende das permissões existentes no tribunal.
### Autenticação em dois fatores
Alguns tribunais podem exigir autenticação em dois fatores, também conhecida como **2FA**, **MFA**, token, código por e-mail, SMS, aplicativo autenticador ou certificado digital.
Quando isso acontece, o comportamento pode variar conforme a regra de autenticação do próprio tribunal.
Em geral:
* se o tribunal exigir o segundo fator apenas no primeiro acesso ou em intervalos específicos, a credencial poderá funcionar após a validação inicial;
* se o tribunal exigir o segundo fator a cada novo login, a consulta autenticada poderá depender de uma etapa adicional de validação;
* se o código de autenticação expirar rapidamente ou exigir ação manual recorrente, a execução automatizada poderá ser impactada.
Tribunais com autenticação em dois fatores podem aumentar o tempo de execução da consulta ou exigir validações adicionais. Nesses casos, o suporte da Judit deve ser acionado para avaliar a viabilidade operacional do uso da credencial.
### Como obter o segredo 2FA para cadastro no Cofre
Em tribunais que exigem autenticação em dois fatores por aplicativo autenticador, como Google Authenticator, Microsoft Authenticator, Authy ou similares, é necessário cadastrar no Cofre o **segredo 2FA** da credencial.
Esse segredo também pode ser identificado como `secret`, `secrecy`, chave secreta, chave manual ou chave de configuração, dependendo do sistema utilizado.
Não cadastre o código temporário de 6 dígitos no campo de 2FA.\
Esse código muda a cada poucos segundos e não deve ser usado como segredo da credencial.
#### Diferença entre segredo 2FA e código temporário
| Informação | O que é | Deve ser cadastrado no Cofre? |
| :-------------------- | :------------------------------------------------------ | :---------------------------- |
| **Segredo 2FA** | Chave fixa usada para gerar os códigos temporários | **Sim** |
| **Código temporário** | Código de 6 dígitos gerado pelo aplicativo autenticador | **Não** |
#### Como identificar o segredo 2FA
Durante a configuração do 2FA no portal do tribunal, normalmente o tribunal exibe um **QR Code** para ser lido por um aplicativo autenticador.
Além do QR Code, alguns tribunais também exibem uma opção como:
* `Não consigo ler o QR Code`
* `Inserir chave manualmente`
* `Exibir chave secreta`
* `Chave de configuração`
* `Secret key`
* `Setup key`
A chave exibida nessa etapa é o **segredo 2FA** que deve ser cadastrado no Cofre de Credenciais.
O segredo 2FA geralmente é uma sequência alfanumérica maior que um código comum, podendo conter letras e números.\
Exemplo meramente ilustrativo: `JBSWY3DPEHPK3PXP`
#### Fluxo recomendado para cadastro com 2FA
```mermaid theme={null}
sequenceDiagram
autonumber
participant Cliente as Cliente
participant Tribunal as Portal do Tribunal
participant Auth as Aplicativo Autenticador
participant Cofre as Cofre de Credenciais
Cliente->>Tribunal: Inicia a configuração do 2FA
Tribunal-->>Cliente: Exibe QR Code ou chave manual
Cliente->>Tribunal: Copia a chave manual / segredo 2FA
Cliente->>Auth: Configura o autenticador com o QR Code ou segredo
Auth-->>Cliente: Gera códigos temporários de 6 dígitos
Cliente->>Cofre: Cadastra usuário, senha e segredo 2FA
```
#### O que cadastrar no Cofre
Ao cadastrar uma credencial com autenticação em dois fatores, informe:
* usuário/login do tribunal;
* senha do tribunal;
* `customer_key` desejada para identificar a credencial;
* segredo 2FA, quando o tribunal exigir autenticação por aplicativo autenticador.
O segredo 2FA deve ser a chave fixa de configuração do autenticador, e não o código temporário gerado pelo aplicativo.
#### Caso o 2FA já esteja configurado
Se o 2FA já tiver sido configurado anteriormente e o tribunal não exibir mais a chave secreta, normalmente não é possível recuperar o segredo diretamente pelo aplicativo autenticador.
Nesse cenário, o caminho recomendado é:
1. acessar o portal do tribunal com a credencial;
2. remover, redefinir ou reconfigurar a autenticação em dois fatores;
3. iniciar uma nova configuração de 2FA;
4. copiar a chave manual ou segredo exibido no momento da configuração;
5. cadastrar esse segredo no Cofre de Credenciais.
Cada tribunal pode ter um fluxo diferente para redefinição do 2FA. Caso o portal não permita visualizar ou reconfigurar o segundo fator, será necessário acionar o suporte do próprio tribunal ou o responsável pela credencial.
## Boas práticas para cadastro de credenciais
Recomendamos que as credenciais cadastradas no Cofre sejam:
* credenciais institucionais ou de serviço, quando permitido pelo tribunal;
* criadas com permissões compatíveis com os processos que precisam ser consultados;
* validadas previamente no portal do tribunal antes do uso via API;
* mantidas atualizadas sempre que houver troca de senha ou alteração de acesso;
* configuradas com um método de autenticação em dois fatores compatível com a operação automatizada, quando aplicável.
Caso a senha seja alterada, a credencial expire ou o tribunal solicite uma nova validação de acesso, será necessário atualizar ou revalidar a credencial no Cofre para manter a consulta funcionando corretamente.
## Como selecionar a credencial no payload da requisição
Para utilizar uma credencial cadastrada no Cofre de Credenciais durante a consulta, informe o campo `customer_key` dentro de `search.search_params.credential`.
O valor de `customer_key` deve corresponder à chave da credencial previamente cadastrada no Cofre.
A consulta será executada utilizando a credencial associada à `customer_key` informada no payload.
### Exemplo de requisição
```bash theme={null}
curl --location 'https://requests.prod.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0000000-00.0000.0.00.0000",
"search_params": {
"credential": {
"customer_key": "CUSTOMER-KEY"
}
}
}
}'
```
Caso a `customer_key` informada não exista, esteja inválida ou esteja vinculada a uma credencial expirada, a consulta poderá falhar ou não utilizar a credencial esperada.
## Rota para cadastrar suas chaves no cofre de credenciais
Para começar a utilizar o cofre de credeniais, você deve realizar uma solicitação POST para a rota `crawler.production.judit.io/credentials` e cadastrar as credenciais dos advogados nos respectivos tribunais disponibilizados.
### Payload da Solicitação
A solicitação POST deve incluir um payload com as seguintes propriedades:
* `system_name`: A sigla do [tribunal e sistema](/resource/glossary#lista-para-cofre-de-credenciais) que será cadastrado a nova credencial.
* `Obs:` Poderá ser cadastrada uma credencial coringa `"system_name": "*"`. Se uma credencial for cadastrada nela, todos os tribunais que não tiverem outra credencial cadastrada utilizarão a credencial coringa.
* `customer_key`: Identificador personalizado para associar a credencial a um cliente ou advogado. Pode ser qualquer nome ou rótulo definido pelo responsável pelo cadastro, facilitando a organização e o gerenciamento das credenciais.
* `username`: CPF (Cadastro de Pessoas Físicas) ou número da OAB (Ordem dos Advogados do Brasil), conforme exigido pelo sistema do tribunal onde o login será realizado.
* `password`: Senha cadastrada no respectivo tribunal.
Propriedades necessárias apenas nos casos de tribunais que exigem autenticação de dois fatores:
* `custom_data`: Objeto opcional destinado a armazenar informações adicionais específicas para o sistema ou contexto de uso. Pode incluir campos personalizados como, por exemplo, um secret necessário para autenticação ou outras configurações específicas.
* `secret`: Token de autenticação de dois fatores do sistema a ser cadastrado.
`Obs:` As credenciais cadastradas são criptografadas, garantindo a segurança dos dados, e não podem ser acessadas posteriormente. Para modificar informações já cadastradas, basta criar um novo registro utilizando o mesmo `customer_key` e o mesmo `system_name`. O novo cadastro substituirá automaticamente a credencial existente.
Exemplo de payload para cadastro de credenciais sem autenticação de dois fatores:
```json theme={null}
{
"credentials": [
{
"system_name": "PJE TJBA - 1º grau",
"customer_key": "00000001",
"username": "999.999.999-99",
"password": "Senha123"
},
{
"system_name": "ESAJ - TJAC - 1º grau",
"customer_key": "00000002",
"username": "999.999.999-99",
"password": "Senha123"
}
]
}
```
Exemplo de payload para cadastro de credenciais com autenticação de dois fatores:
```json theme={null}
{
"credentials": [
{
"system_name": "PJE TJBA - 1º grau",
"customer_key": "00000001",
"username": "999.999.999-99",
"password": "Senha123",
"custom_data": {
"secret": ""
}
}
]
}
```
Exemplo de resposta a solicitação:
```json theme={null}
[
{
"system_name": "ESAJ - TJAC - 1º grau",
"message": "CREDENTIAL_CREATED"
},
{
"system_name": "PJE TJBA - 1º grau",
"message": "CREDENTIAL_CREATED"
}
]
```
## Rota de verificação de credenciais cadastradas
Para verificar se uma credencial está cadastrada, envie uma solicitação GET para o endpoint `crawler.production.judit.io/credentials`, incluindo o parâmetro `customer_key` correspondente à credencial que deseja consultar.
A resposta retornará todas as credenciais disponíveis no cofre associadas à `customer_key` consultada. O campo `credential_status` indicará o status de cada credencial:
* active: Credencial cadastrada e ativa.
* not exists: Credencial não encontrada no sistema.
Segue um exemplo de solicitação GET para verificar a existência de uma credencial:
```json theme={null}
curl --location 'https://crawler.production.judit.io/credentials?customer_key=teste_01' \
--header 'api-key: '
```
Segue um exemplo de resposta para a solicitação GET realizada:
```json theme={null}
{
"systems": [
{
"name": "*",
"customer_key": "",
"credential_status": "not exists"
},
{
"name": "ESAJ - TJAM - 1º grau",
"customer_key": "teste_01",
"credential_status": "active"
},
{
"name": "PROJUDI TJGO - 1º grau",
"customer_key": "teste_01",
"credential_status": "active"
}
]
}
```
## Como utilizar o Cofre de Credenciais na requisição
O **Cofre de Credenciais** permite vincular uma consulta a uma credencial previamente cadastrada para o cliente.\
Para isso, informe a chave da credencial no campo `customer_key`, dentro de `search.search_params.credential`.
Essa chave identifica qual credencial deve ser utilizada na execução da consulta.
O valor de `customer_key` deve corresponder a uma chave já cadastrada no Cofre de Credenciais. Caso a chave informada não exista ou esteja inválida, a consulta poderá falhar ou não utilizar a credencial esperada.
### Exemplo de requisição
```bash theme={null}
curl --location 'https://requests.prod.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0000000-00.0000.0.00.0000",
"search_params": {
"credential": {
"customer_key": "CUSTOMER-KEY"
}
}
}
}'
```
## Rota para deletar uma chave no cofre de Credenciais
Para deletar um sistema no cofre de credenciais, você deve realizar uma solicitação DELETE para a rota `crawler.production.judit.io/credentials`.
### Payload da Solicitação
A solicitação DELETE deve incluir um payload com a seguinte propriedade:
* `system_name`: A sigla do [tribunal e sistema](/resource/glossary#lista-para-cofre-de-credenciais) que será cadastrado a nova credencial.
* `customer_key`: Identificador personalizado adicionado no momento do cadastro da credencial.
Exemplo de payload para deletar credencial:
```json theme={null}
{
"system_name": "PROJUDI TJGO - 1º grau",
"customer_key":"teste_01"
}
```
* Caso a solicitação seja bem sucedida a resposta será um objeto vazio.
A atualização das credenciais nos tribunais é de inteira responsabilidade do usuário. Portanto, cabe ao usuário realizar o cadastro da credencial no tribunal correspondente e acompanhar a validade e a situação da mesma para garantir que ela não seja suspensa ou invalidada.
# API de Transferência de Arquivos
Source: https://docs.judit.io/file-transfer/file-transfer
Liste, consulte e faça download de arquivos disponíveis para transferência na Judit API. Atualize o status de cada arquivo após o consumo para fluxos auditáveis.
A **File Transfer API** entrega para você arquivos grandes geradas pela Judit — exportações em CSV/JSON de consultas customizadas, relatórios sob demanda, agregações volumosas — de forma assíncrona, com controle de status (`pending`, `available`, `consumed`) auditável por arquivo.
> 🤖 **Base URL:** `https://lawsuits.production.judit.io/`. Após gerar um relatório (ex.: [Consulta Customizada](/requests/custom-search)), use esta API para listar arquivos pendentes, baixar via URL pré-assinada e marcar como consumidos para evitar reprocessamento.
## Quando usar
Consumir resultados de Consultas Customizadas que entregam arquivo (CSV/JSON) em vez de webhook.
Receber dumps periódicos de carteira inteira (centenas de milhares de processos).
Trilha auditável de quem baixou cada arquivo e quando — perfeito para SOX/LGPD.
Integrar Judit ao seu data lake/data warehouse via consumo de arquivos em batch.
***
## 🔐 Autenticação
Todas as requisições devem conter um cabeçalho com a chave de API da empresa:
```http theme={null}
api-key: SUA_CHAVE_DE_API
```
⚠️ Um usuário só pode acessar arquivos pertencentes ao tenant da sua própria empresa.
***
## 📂 Listar arquivos disponíveis
### `GET /transfer-file`
Retorna uma lista paginada de arquivos disponíveis para a empresa do usuário autenticado.
### Query Params suportados:
* `description`: string (filtra por descrição)
* `file_type`: `csv`, `json`, `parquet`
* `name`: string (filtra por nome do arquivo)
* `status`: string ou array (ex: `status=completed` ou `status=["completed","error"]`)
* Datas: filtros de intervalo para os campos abaixo:
* `created_at`, `updated_at`, `completed_at`, `downloaded_at`, `error_at`, `failed_at`, `started_at`
* Exemplo: `created_at_gte=2025-04-01T00:00:00.000Z`
* Paginação e ordenação:
* `page`: número da página (default: 1)
* `page_size`: tamanho da página (máx: 100, default: 10)
* `order_by`: campo de ordenação (default: `created_at`)
* `order`: `asc` ou `desc` (default: `desc`)
### Exemplo de chamada com `curl`:
```bash theme={null}
curl -H "api-key: SUA_CHAVE_DE_API" \
"https://lawsuits.production.judit.io/transfer-file?page=1&page_size=20&status=[\"completed\"]"
```
### Exemplo de resposta:
```json theme={null}
{
"page": 1,
"page_data": [
{
"transfer_file_id": "be4ed52a-a96b-4782-a181-b7ed75cb2f21",
"description": "ARQUIVO INICIAL - CARGA 0",
"file_type": "parquet",
"name": "be4ed52a-a96b-4782-a181-b7ed75cb2f21-part-00001.parquet",
"status": "downloaded",
"created_at": "2025-04-22T11:50:00.000Z",
"updated_at": "2025-04-22T09:21:06.343Z",
"completed_at": "2025-04-22T11:51:00.000Z",
"started_at": "2025-04-22T11:50:01.000Z",
"downloaded_at": "2025-04-22T09:21:06.343Z",
"error_at": "2025-04-22T09:20:31.460Z",
"error_message": "teste de erro",
"file_size": 0.038,
"lawsuits_count": 19
}
],
"page_count": 1,
"all_count": 1,
"all_pages_count": 1
}
```
#### Explicação dos campos de retorno:
* `page`: número da página atual
* `page_data`: lista de arquivos retornados nesta página
* `page_count`: quantidade de registros nesta página
* `all_count`: total de arquivos encontrados no filtro
* `all_pages_count`: total de páginas disponíveis
***
## 📥 Obter URL para download
### `GET /transfer-file/:transfer_file_id`
Retorna os metadados do arquivo e uma URL pré-assinada da AWS para download (válida por 5 minutos).
### Exemplo de chamada com `curl`:
```bash theme={null}
curl -H "api-key: SUA_CHAVE_DE_API" \
"https://lawsuits.production.judit.io/transfer-file/be4ed52a-a96b-4782-a181-b7ed75cb2f21"
```
### Exemplo de resposta:
```json theme={null}
{
"transfer_file_id": "be4ed52a-a96b-4782-a181-b7ed75cb2f21",
"description": "ARQUIVO INICIAL - CARGA 0",
"file_type": "parquet",
"name": "be4ed52a-a96b-4782-a181-b7ed75cb2f21-part-00001.parquet",
"status": "completed",
"created_at": "2025-04-22T11:50:00.000Z",
"updated_at": "2025-04-22T09:21:06.343Z",
"completed_at": "2025-04-22T11:51:00.000Z",
"started_at": "2025-04-22T11:50:01.000Z",
"file_size": 0.038,
"lawsuits_count": 19,
"pre_signed_url": "https://s3.amazonaws.com/..."
}
```
***
## 🛠 Atualizar status de um arquivo
### `PATCH /transfer-file/:transfer_file_id`
Permite marcar o arquivo como `downloaded` ou `error` após a tentativa de uso.
### Exemplo de chamada com `curl`:
```bash theme={null}
curl -X PATCH -H "api-key: SUA_CHAVE_DE_API" \
-H "Content-Type: application/json" \
-d '{"status": "downloaded"}' \
"https://lawsuits.production.judit.io/transfer-file/be4ed52a-a96b-4782-a181-b7ed75cb2f21"
```
### Corpo da requisição:
Para marcar como baixado:
```json theme={null}
{
"status": "downloaded"
}
```
Para reportar erro:
```json theme={null}
{
"status": "error",
"error_message": "Descrição do erro, stack trace ou contexto do problema."
}
```
### Exemplo de resposta - status `downloaded`:
```json theme={null}
{
"transfer_file_id": "be4ed52a-a96b-4782-a181-b7ed75cb2f21",
"description": "ARQUIVO INICIAL - CARGA 0",
"file_type": "parquet",
"name": "be4ed52a-a96b-4782-a181-b7ed75cb2f21-part-00001.parque
t",
"created_at": "2025-04-22T11:50:00.000Z",
"updated_at": "2025-04-22T11:50:00.000Z"
}
```
## Erros comuns
| HTTP | Motivo | Como tratar |
| :---- | :--------------------------- | :-------------------------------------------------- |
| `400` | Filtro ou status inválido. | Validar query params antes de enviar. |
| `401` | API Key ausente ou inválida. | Conferir o header `api-key`. |
| `404` | Arquivo não encontrado. | O `transfer_file_id` pode pertencer a outro tenant. |
| `429` | Rate limit excedido. | Backoff exponencial. |
## Próximos passos
* [Consulta Customizada](/requests/custom-search) — gerar relatórios grandes.
* [Webhooks](/webhook/callbacks) — ser notificado quando um arquivo estiver pronto.
# Autenticação na Judit API
Source: https://docs.judit.io/introduction/authentication
A Judit API usa autenticação via header HTTP customizado api-key (não Bearer). Aprenda a configurar a chave em diferentes linguagens, gerenciar variáveis de ambiente e proteger suas credenciais.
> 🤖 A Judit API **NÃO** utiliza o padrão `Authorization: Bearer `. A autenticação é feita **exclusivamente** através da passagem da chave no cabeçalho HTTP customizado chamado `api-key`. Isso se aplica a todos os endpoints e URLs Base da Judit.
## 1. Como Obter sua API Key
Sua API Key é a credencial única que vincula suas requisições à sua conta e plano contratado.
1. **Entre em contato** com nossa equipe [comercial via WhatsApp](https://api.whatsapp.com/send/?phone=5521985284143).
2. **Forneça o contexto:** Explique seu caso de uso e volume esperado de requisições.
3. **Receba a Chave:** Sua API Key será enviada de forma segura para o e-mail cadastrado.
> **⚠️ Segurança em 1º Lugar:** Considere sua API Key como uma senha em texto claro. Nunca a exponha em repositórios públicos (ex: GitHub), código *front-end* (navegador do cliente) ou aplicativos mobile sem ofuscação.
***
## 2. Padrão de Autenticação (Header `api-key`)
Em todas as requisições feitas para a Judit API, independentemente do serviço ou módulo (Consultas, Monitoramento, etc.), você deve incluir o cabeçalho `api-key`.
### Exemplo de Requisição HTTP Básica
```http theme={null}
GET /requests HTTP/1.1
Host: requests.production.judit.io
api-key: sua_api_key_aqui
Content-Type: application/json
```
### Exemplos Práticos de Implementação
Abaixo, mostramos como realizar uma requisição autenticada utilizando a URL Base de Consultas Assíncronas ([https://requests.production.judit.io](https://requests.production.judit.io)), consumindo a chave a partir de variáveis de ambiente.
```python Python theme={null}
import os
import requests
# Configurar API Key
api_key = os.getenv('JUDIT_API_KEY')
# Headers padrão
headers = {
'api-key': api_key,
'Content-Type': 'application/json'
}
# Fazer requisição
response = requests.get(
'https://requests.production.judit.io/requests',
headers=headers
)
```
```javascript JavaScript theme={null}
// Configurar API Key
const apiKey = process.env.JUDIT_API_KEY;
// Headers padrão
const headers = {
'api-key': apiKey,
'Content-Type': 'application/json'
};
// Fazer requisição
const response = await fetch('https://requests.production.judit.io/requests', {
method: 'GET',
headers: headers
});
```
## 3. Gestão Segura e Boas Práticas
Para evitar o vazamento da sua credencial, consolide a gestão da sua chave seguindo estas regras:
### 1. **Uso Exclusivo de Variáveis de Ambiente**
**Nunca** hardcode sua API Key no código:
```python theme={null}
# ❌ ERRADO - Nunca faça isso
api_key = "sk_live_1234567890abcdef"
# ✅ CORRETO - Use variáveis de ambiente
api_key = os.getenv('JUDIT_API_KEY')
```
### 2. **Configure Variáveis de Ambiente**
**Linux/macOS:**
```bash theme={null}
# No arquivo ~/.bashrc ou ~/.zshrc
export JUDIT_API_KEY="sua-api-key-aqui"
# Ou para sessão atual
export JUDIT_API_KEY="sua-api-key-aqui"
```
**Windows:**
```cmd theme={null}
# Command Prompt
set JUDIT_API_KEY=sua-api-key-aqui
# PowerShell
$env:JUDIT_API_KEY="sua-api-key-aqui"
```
**Docker:**
```dockerfile theme={null}
# Dockerfile
ENV JUDIT_API_KEY=""
# docker-compose.yml
environment:
- JUDIT_API_KEY=${JUDIT_API_KEY}
```
### 3. **Arquivo .env (Desenvolvimento)**
```bash theme={null}
# .env
JUDIT_API_KEY=sua-api-key-aqui
JUDIT_BASE_URL=https://requests.production.judit.io
```
```python theme={null}
# Python com python-dotenv
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('JUDIT_API_KEY')
```
### 4. **Rotação de Chaves**
* **Monitore** o uso de sua API Key regularmente
* **Solicite nova chave** se suspeitar de comprometimento
* **Implemente rotação** implementação em ambientes críticos
## Tratamento de Erros de Autenticação
### Erro 401 - Unauthorized
```json theme={null}
{
"error": {
"name": "HttpUnauthorizedError",
"message": "UNAUTHORIZED",
"data": "USER_NOT_FOUND"
}
}
```
**Possíveis causas:**
* API Key não fornecida
* API Key inválida ou expirada
* Header `api-key` mal formatado
* Limite de uso excedido
### Erro 403 - Forbidden
```json theme={null}
{
"error": "Forbidden",
"message": "Acesso negado para este recurso",
"code": "INSUFFICIENT_PERMISSIONS"
}
```
**Possíveis causas:**
* API Key válida mas sem permissão para o recurso
* Recurso não disponível no seu plano
## Validação da API Key
### Teste de Conectividade
```python theme={null}
import requests
def test_api_key(api_key):
"""Testa se a API Key está válida"""
headers = {'api-key': api_key}
try:
response = requests.get(
'https://requests.production.judit.io/requests',
headers=headers,
params={'page': 1, 'page_size': 1}
)
if response.status_code == 200:
print("✅ API Key válida")
return True
elif response.status_code == 401:
print("❌ API Key inválida")
return False
else:
print(f"⚠️ Erro inesperado: {response.status_code}")
return False
except requests.RequestException as e:
print(f"❌ Erro de conexão: {e}")
return False
# Usar a função
api_key = os.getenv('JUDIT_API_KEY')
test_api_key(api_key)
```
### Monitoramento de Uso
```python theme={null}
def check_api_usage(response):
"""
Monitora o uso da API através dos headers da resposta.
Nota: A API possui um rate-limit estrito de 180 requisições por minuto.
Esta função calcula o percentual de consumo na janela de tempo atual.
"""
# Captura as informações de limite nos headers (Esperado: 180 por minuto)
limit = response.headers.get('X-RateLimit-Limit')
remaining = response.headers.get('X-RateLimit-Remaining')
reset = response.headers.get('X-RateLimit-Reset')
if limit and remaining:
# Calcula a porcentagem de uso baseada no limite retornado
usage_percent = ((int(limit) - int(remaining)) / int(limit)) * 100
print(f"Limite da API: {limit} requisições/minuto")
print(f"Uso da API: {usage_percent:.1f}%")
print(f"Requisições restantes neste minuto: {remaining}")
# Alerta se o consumo passar de 80% (aprox. 144 requisições)
if usage_percent > 80:
print("⚠️ Atenção: Próximo do limite de rate limit (180/min)!")
```
## Configuração por Ambiente
```python theme={null}
# config/production.py
import os
API_KEY = os.getenv('JUDIT_API_KEY')
BASE_URL = 'https://requests.production.judit.io'
TIMEOUT = 10
RETRY_ATTEMPTS = 3
```
### Classe de Configuração
```python theme={null}
class JuditConfig:
def __init__(self, environment='production'):
self.environment = environment
self.api_key = self._get_api_key()
self.base_url = 'https://requests.production.judit.io'
def _get_api_key(self):
key_name = f'JUDIT_API_KEY_{self.environment.upper()}'
api_key = os.getenv(key_name)
if not api_key:
raise ValueError(f"API Key não encontrada: {key_name}")
return api_key
@property
def headers(self):
return {
'api-key': self.api_key,
'Content-Type': 'application/json'
}
# Uso
config = JuditConfig('production')
response = requests.get(f"{config.base_url}/requests",
headers=config.headers)
```
## Próximos Passos
* **[Rate Limits](/essentialConcepts/rate-limits)**: Entenda os limites de uso
* **[Paginação](/essentialConcepts/pagination)**: Configure consultas paginadas
* **[Endpoints](/api-reference/endpoint/requests/create)**: Explore os recursos disponíveis
> **Suporte**: Em caso de problemas com autenticação, entre em contato com nosso [suporte técnico](https://api.whatsapp.com/send/?phone=5511920501949).
# Judit API — Documentação Oficial
Source: https://docs.judit.io/introduction/introduction
API de consulta processual brasileira: busque processos por CPF, CNPJ, OAB, NOME ou CNJ; monitore movimentações; baixe anexos; obtenha dados cadastrais; consulte mandados de prisão e execuções penais.
A **Judit API** entrega dados de processos judiciais brasileiros prontos para uso, em uma única integração. Em vez de manter scrapers em cada tribunal, sua aplicação faz uma chamada HTTP e recebe os dados que você precisa — seja a capa completa de um processo específico, a lista de processos vinculados a uma pessoa/empresa, ou o monitoramento contínuo de movimentações.
> 🤖 A Judit cobre Justiça Estadual, Federal, Trabalhista, Eleitoral, Militar, Superior e BNMP. Autenticação é por header `api-key`. Os 3 serviços principais são `requests` (consultas assíncronas), `tracking` (monitoramento contínuo) e `lawsuits` (consultas síncronas direto do datalake JUDIT).
## O que você consegue fazer
* **Consulta Processual por CNJ** — recupere a árvore completa de **um processo específico** pelo número CNJ. Sempre **on-demand**: a Judit devolve o que tem em base (se existir) e, em paralelo, vai buscar a versão mais recente no tribunal.
* **Consulta Histórica por Documento** — descubra **todos os processos vinculados** a um CPF, CNPJ, OAB ou Nome. Disponível em **três modalidades**:
* **Direto da base (síncrona / Hot Storage)** — leitura do datalake JUDIT em milissegundos. Modalidade mais econômica e ideal para consultas de alto volume.
* **Assíncrona** — fila assíncrona que retorna a lista histórica vinculada ao documento, sem ir ao tribunal em tempo real. Custo intermediário.
* **On-demand (assíncrona)** — coleta em tempo real direto nos tribunais. Mais cara, indicada quando o estado mais atual é mandatório.
* **Monitorar processos** automaticamente e receber atualizações por webhook quando houver nova movimentação ou nascer um novo processo.
* **Obter dados cadastrais** (Pessoa Física ou Jurídica) com opção de leitura no datalake ou em tempo real na Receita Federal.
* **Baixar anexos** e mandados de prisão (BNMP) em PDF.
* **Consultar execuções penais** (cumprimento de pena).
* **Resumir processos com IA** — gere resumos da capa do processo automaticamente (JUDIT IA).
## Casos de uso comuns
Centralize todos os processos do escritório em um só painel. Monitore andamentos críticos e gere relatórios automatizados.
Acompanhe a carteira jurídica corporativa e integre o status processual aos sistemas internos (ERP, CRM, BI).
Rode due diligence em massa e enriqueça análises de risco com dados processuais por CPF/CNPJ em tempo real.
Verifique processos relacionados a contraparte (PEP, antecedentes, mandados) durante o onboarding.
Suba sua plataforma sem precisar manter coletores em cada tribunal — foque em produto, não em infraestrutura.
Identifique processos passivos relevantes (valor, fase, classe) e priorize abordagens com base em fase processual.
## Arquitetura em 1 minuto
```mermaid theme={null}
flowchart LR
subgraph CLIENT["Sua aplicação"]
A[Cliente HTTP]
end
subgraph JUDIT["Judit"]
R[(Requests
Assíncrono)]
T[(Tracking
Monitoramento)]
L[(Lawsuits
Síncrono)]
W[Webhook]
end
subgraph COURTS["Tribunais brasileiros"]
C1[TJSP]
C2[TRT...]
C3[BNMP]
C4[TRF]
end
A -->|api-key| R
A -->|api-key| T
A -->|api-key| L
R --> COURTS
T --> COURTS
L --> COURTS
R -.->|callback| W
T -.->|callback| W
W -.-> A
```
Três serviços, um padrão de autenticação:
| Serviço | URL | Quando usar |
| ---------- | -------------------------------------- | ------------------------------------------------------------------------------------------- |
| `requests` | `https://requests.production.judit.io` | Consulta direta nos tribunais. Resultado chega via webhook ou polling. |
| `tracking` | `https://tracking.production.judit.io` | Monitoramento contínuo de processos com a recorrência que você define. |
| `lawsuits` | `https://lawsuits.production.judit.io` | Leitura síncrona do datalake JUDIT, retorno do processos atrelados ao documento consultado. |
## Comece em 3 passos
Fale com nosso [comercial](https://api.whatsapp.com/send/?phone=5521985284143) e receba sua chave de acesso.
Siga o [Guia Rápido](/introduction/quickstart) para criar sua primeira requisição em menos de 5 minutos.
# Guia Rápido — Primeira consulta na Judit API
Source: https://docs.judit.io/introduction/quickstart
Passo a passo prático para realizar sua primeira consulta na Judit API em minutos: configure variáveis de ambiente, crie uma requisição assíncrona, monitore o status e leia o resultado em cURL, Python, JavaScript, PHP e Go.
Em **menos de 5 minutos**, este guia mostra como autenticar, criar sua primeira consulta processual, acompanhar o status e ler o resultado. Os exemplos cobrem cURL, Python, JavaScript (Node), PHP e Go — escolha o que combina com sua stack.
> 🤖 Pré-requisitos: API Key da Judit (header `api-key: `), conexão HTTP com `*.production.judit.io`. Sem `Authorization: Bearer`.
## Fluxo Básico
A Judit API funciona com um padrão síncrono e assíncrono:
### Requisições com padrão assíncrono:
1. **Criar requisição** (`POST /requests`) - Inicia a consulta
2. **Aguardar processamento** (`GET /requests`) - A API busca os dados nos tribunais(Acompanhar status)
3. **Consultar resultado** (`GET /responses`) - Obtém os dados processados
### Requisições com padrão síncrono:
1. **Criar requisição** (`POST /lawsuits`) - Inicia a consulta e já entrega a resposta
## Pré-requisitos
* API Key válida [(solicite acesso conosco)](https://api.whatsapp.com/send/?phone=5521985284143)
* Ferramenta para fazer requisições HTTP (cURL, Postman, ou código)
### Ambientes e URLs Base (Base URLs)
A Judit API opera com uma arquitetura dividida por contextos para garantir melhor performance e organização. Antes de configurar suas variáveis de ambiente, identifique a **Base URL** correspondente ao módulo que você deseja integrar:
| Base URL | Módulo / Contexto | Operações Suportadas |
| :------------------------------------- | :------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------- |
| `https://requests.production.judit.io` | **Consultas Assíncronas** | Consulta processual, Consulta histórica, Mandados de prisão e Execução penal (fluxos de *request* e *response*). |
| `https://tracking.production.judit.io` | **Monitoramentos** | Criar, consultar, atualizar, pausar, deletar, reativar e buscar histórico de monitoramentos processuais. |
| `https://lawsuits.production.judit.io` | **Consultas Síncronas** | Consulta ao Datalake (*Hot storage*), Quantidade de processos, Consulta histórica agrupada, Busca de anexos de bucket e Dados cadastrais. |
| `https://crawler.production.judit.io` | **Crawler & Infra** | Gerenciamento do Cofre de Credenciais. |
***
## Exemplo Completo
### 1. Configurar Variáveis de Ambiente
**Nota:** No exemplo abaixo, utilizaremos a URL de **Consultas Assíncronas**, mas lembre-se de substituí-la pela URL adequada ao seu caso de uso, conforme a tabela acima.
```bash theme={null}
export JUDIT_API_KEY="sua-api-key-aqui"
export JUDIT_BASE_URL="https://requests.production.judit.io"
```
### 2. Criar uma Requisição
```bash cURL theme={null}
curl -X POST "$JUDIT_BASE_URL/requests" \
-H "api-key: $JUDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}'
```
```python Python theme={null}
import requests
import os
import time
api_key = os.getenv('JUDIT_API_KEY')
base_url = os.getenv('JUDIT_BASE_URL')
headers = {
'api-key': api_key,
'Content-Type': 'application/json'
}
# Criar requisição
payload = {
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
response = requests.post(f"{base_url}/requests",
json=payload,
headers=headers)
request_data = response.json()
request_id = request_data['request_id']
print(f"Requisição criada: {request_id}")
```
```javascript JavaScript theme={null}
const apiKey = process.env.JUDIT_API_KEY;
const baseUrl = process.env.JUDIT_BASE_URL;
const headers = {
'api-key': apiKey,
'Content-Type': 'application/json'
};
// Criar requisição
const payload = {
search: {
search_type: 'cpf',
search_key: '999.999.999-99',
cache_ttl_in_days: 7
}
};
const response = await fetch(`${baseUrl}/requests`, {
method: 'POST',
headers: headers,
body: JSON.stringify(payload)
});
const requestData = await response.json();
const requestId = requestData.request_id;
console.log(`Requisição criada: ${requestId}`);
```
```php PHP theme={null}
[
'search_type' => 'cpf',
'search_key' => '999.999.999-99'
'cache_ttl_in_days' => 7
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . '/requests');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$requestData = json_decode($response, true);
$requestId = $requestData['request_id'];
echo "Requisição criada: " . $requestId . "\n";
curl_close($ch);
?>
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
)
type SearchRequest struct {
Search struct {
SearchType string `json:"search_type"`
SearchKey string `json:"search_key"`
ResponseType string `json:"response_type"`
CacheTTLInDays int `json:"cache_ttl_in_days"`
} `json:"search"`
}
type RequestResponse struct {
RequestID string `json:"request_id"`
}
func main() {
apiKey := os.Getenv("JUDIT_API_KEY")
baseURL := os.Getenv("JUDIT_BASE_URL")
// Criar requisição
payload := SearchRequest{}
payload.Search.SearchType = "cpf"
payload.Search.SearchKey = "999.999.999-99"
payload.Search.CacheTTLInDays = 7
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", baseURL+"/requests", bytes.NewBuffer(jsonData))
req.Header.Set("api-key", apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var requestData RequestResponse
json.Unmarshal(body, &requestData)
fmt.Printf("Requisição criada: %s\n", requestData.RequestID)
}
```
### 3. Verificar Status da Requisição
```bash cURL theme={null}
curl -X GET "$JUDIT_BASE_URL/requests/$REQUEST_ID" \
-H "api-key: $JUDIT_API_KEY"
```
```python Python theme={null}
# Verificar status
status_response = requests.get(f"{base_url}/requests/{request_id}",
headers=headers)
status_data = status_response.json()
print(f"Status: {status_data['status']}")
# Aguardar conclusão
while status_data['status'] in ['pending', 'processing']:
time.sleep(5) # Aguardar 5 segundos
status_response = requests.get(f"{base_url}/requests/{request_id}",
headers=headers)
status_data = status_response.json()
print(f"Status: {status_data['status']}")
```
```javascript JavaScript theme={null}
// Verificar status
let statusResponse = await fetch(`${baseUrl}/requests/${requestId}`, {
headers: headers
});
let statusData = await statusResponse.json();
console.log(`Status: ${statusData.status}`);
// Aguardar conclusão
while (['pending', 'processing'].includes(statusData.status)) {
await new Promise(resolve => setTimeout(resolve, 5000)); // 5 segundos
statusResponse = await fetch(`${baseUrl}/requests/${requestId}`, {
headers: headers
});
statusData = await statusResponse.json();
console.log(`Status: ${statusData.status}`);
}
```
```php PHP theme={null}
```
```go Go theme={null}
// Verificar status
statusURL := baseURL + "/requests/" + requestData.RequestID
statusReq, _ := http.NewRequest("GET", statusURL, nil)
statusReq.Header.Set("api-key", apiKey)
statusResp, err := client.Do(statusReq)
if err != nil {
panic(err)
}
defer statusResp.Body.Close()
statusBody, _ := io.ReadAll(statusResp.Body)
var statusData map[string]interface{}
json.Unmarshal(statusBody, &statusData)
fmt.Printf("Status: %s\n", statusData["status"])
// Aguardar conclusão
for statusData["status"] == "pending" || statusData["status"] == "processing" {
time.Sleep(5 * time.Second) // Aguardar 5 segundos
statusResp, _ := client.Do(statusReq)
statusBody, _ := io.ReadAll(statusResp.Body)
json.Unmarshal(statusBody, &statusData)
fmt.Printf("Status: %s\n", statusData["status"])
statusResp.Body.Close()
}
```
### 4. Obter Resultados
Quando o status for `completed`, consulte os resultados:
```bash cURL theme={null}
curl -X GET "$JUDIT_BASE_URL/responses?page=1" \
-H "api-key: $JUDIT_API_KEY"
```
```python Python theme={null}
# Obter resultados
if status_data['status'] == 'completed':
results_response = requests.get(f"{base_url}/responses",
headers=headers,
params={'page': 1})
results = results_response.json()
print("Processos encontrados:")
for item in results.get('page_data', []):
print(f"- {item}")
```
```javascript JavaScript theme={null}
// Obter resultados
if (statusData.status === 'completed') {
const resultsResponse = await fetch(`${baseUrl}/responses?page=1`, {
headers: headers
});
const results = await resultsResponse.json();
console.log('Processos encontrados:');
results.page_data?.forEach(item => {
console.log(`- ${JSON.stringify(item)}`);
});
}
```
```php PHP theme={null}
```
```go Go theme={null}
// Obter resultados
if statusData["status"] == "completed" {
resultsURL := baseURL + "/responses?page=1"
resultsReq, _ := http.NewRequest("GET", resultsURL, nil)
resultsReq.Header.Set("api-key", apiKey)
resultsResp, err := client.Do(resultsReq)
if err != nil {
panic(err)
}
defer resultsResp.Body.Close()
resultsBody, _ := io.ReadAll(resultsResp.Body)
var results map[string]interface{}
json.Unmarshal(resultsBody, &results)
fmt.Println("Processos encontrados:")
if pageData, ok := results["page_data"].([]interface{}); ok {
for _, item := range pageData {
itemJSON, _ := json.Marshal(item)
fmt.Printf("- %s\n", string(itemJSON))
}
}
}
```
## Tipos de Consulta Disponíveis
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Por CNPJ theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "999.999/99999-99"
}
}
```
```json Por OAB theme={null}
{
"search": {
"search_type": "oab",
"search_key": "999999SP
}
}
```
```json Por CNJ theme={null}
{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999"
}
}
```
```json Por NOME theme={null}
{
"search": {
"search_type": "name",
"search_key": "Nome teste"
}
}
```
## Tipos de Resposta possiveis (a depender do tipo de consulta)
* **`Capa Processual`**: Informações de capa do processo
* **`parties`**: Apenas informações das partes
* **`attachments`**: Lista de anexos disponíveis
* **`step`**: Movimentações processuais
## Filtros Avançados
Para consultas mais específicas por documento, é possivel utilizar [filtros](/requests/request-document#payload-da-solicitação):
```json theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"side":"passive",
"amount_gte": 10000,
"distribution_date_gte": "2024-10-10T00:00:00.000Z",
"tribunals": {
"keys": ["TJSP", "TJRJ"],
"not_equal": false
}
}
}
}
}
```
## Boas Práticas
### 1. **Use Cache Inteligente**
> **💡 Boa Prática para Consultas Assíncronas:** Se você está realizando requisições assíncronas (via `https://requests.production.judit.io`), a utilização do parâmetro de cache é altamente recomendada. Isso acelera drasticamente o tempo de resposta do Webhook e otimiza o consumo da API.
Configure o parâmetro `cache_ttl_in_days` no corpo do seu *request* para evitar buscas redundantes nos tribunais. Esse campo define por exatos quantos dias um resultado já armazenado na base da Judit será considerado válido antes de forçar uma nova extração.
```json theme={null}
{
"cache_ttl_in_days": 7 // Usar cache por até 7 dias
}
```
### 2. **Implemente Retry com Backoff**
```javascript theme={null}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
} // Função setTimeout auxiliar de pausa baseada em setTimeout (nativa do JavaScript)
async function retryWithBackoff(func, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await func();
} catch (error) {
if (attempt === maxRetries - 1) {
throw error; // Última tentativa falhou, propaga o erro
}
// Backoff exponencial + jitter aleatório
const waitTime = (2 ** attempt) * 1000 + Math.random() * 1000;
console.log(
`Tentativa ${attempt + 1} falhou. Aguardando ${waitTime.toFixed(0)}ms antes de tentar novamente...`
);
await sleep(waitTime);
}
}
}
```
## Próximos Passos
* **[Autenticação](/introduction/authentication)**: Configure a autenticação
# Conceitos do Miner — kind, natures, tags e tiers
Source: https://docs.judit.io/miner/concepts
Entenda os campos que filtram a busca no Miner: tipo de processo (judgement-bond vs sentence-execution), naturezas, tags, faixas de valor e regras de combinação válida.
**Beta público.** O conjunto de filtros pode receber novas opções (especialmente `tags` para `sentence-execution`). Trate enums como abertos e ignore valores desconhecidos.
A busca no Miner é definida por um único objeto de filtro — o mesmo schema é usado em `POST /requests/count` (gratuito) e `POST /requests/create` (cobra créditos). Esta página explica cada campo, os valores possíveis e as combinações válidas.
## `kind` (obrigatório)
Define **que tipo de ativo** você está garimpando. É o primeiro filtro a escolher porque condiciona quais outros campos podem aparecer.
| Valor | O que é | Filtros adicionais permitidos |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| `judgement-bond` | **Precatórios** — créditos contra a Fazenda Pública decorrentes de sentenças transitadas em julgado. | `budget_years`, `natures` |
| `sentence-execution` | **Execuções de sentença** — fase de cumprimento, com possibilidade de aprovação de cálculo ou expedição de precatório. | `tags` |
Você **não pode** misturar campos exclusivos: `tags` com `kind: judgement-bond` ou `budget_years`/`natures` com `kind: sentence-execution` falham com `400`.
## `natures` (apenas `judgement-bond`)
Tipo do crédito decorrente do precatório.
| Valor | Significado |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `alimentary` | Precatório de natureza **alimentar** — verbas salariais, pensões, indenizações por morte, benefícios previdenciários. Tem prioridade de pagamento. |
| `common` | Precatório **comum** — qualquer outro tipo de crédito (tributário, indenizatório civil, desapropriação, etc.). |
```json theme={null}
{
"kind": "judgement-bond",
"natures": ["alimentary"]
}
```
> Combine os dois para incluir tudo: `"natures": ["alimentary", "common"]`.
## `budget_years` (apenas `judgement-bond`)
Anos orçamentários nos quais o precatório foi inscrito. Use para filtrar safras específicas — geralmente o ano de inscrição é o ano civil seguinte ao da sentença transitada em julgado.
```json theme={null}
{
"kind": "judgement-bond",
"budget_years": [2023, 2024]
}
```
## `tags` (apenas `sentence-execution`)
Sinais detectados pela base Judit que indicam estágio de maturação da execução.
| Valor | O que indica |
| ------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `precatory_dispatched` | **Precatório já expedido** na execução. O ativo está prestes a virar `judgement-bond`. |
| `possible_precatory` | Sinais textuais sugerindo que um precatório será expedido em breve (decisões, despachos, certidões). |
| `possible_approved_calculation` | Cálculo de liquidação aparentemente homologado — etapa que costuma anteceder o precatório. |
```json theme={null}
{
"kind": "sentence-execution",
"tags": ["possible_precatory", "possible_approved_calculation"]
}
```
> Múltiplas tags são tratadas como **OR** — qualquer processo que tenha **pelo menos uma** das tags entra no resultado.
## Faixa de valor
Há **duas formas mutuamente exclusivas** de filtrar por valor:
### Modo 1 — Limites livres (`amount_min` / `amount_max`)
```json theme={null}
{
"kind": "judgement-bond",
"amount_min": 50000,
"amount_max": 500000
}
```
| Campo | Tipo | Regra |
| ------------ | ------ | ------------------------------------------------ |
| `amount_min` | number | Valor mínimo, em reais (R\$). |
| `amount_max` | number | Valor máximo, em reais. Deve ser ≥ `amount_min`. |
Use quando você precisa de um corte específico (ex.: "entre R$ 50k e R$ 500k").
### Modo 2 — Faixa pré-definida (`amount_tier`)
```json theme={null}
{
"kind": "sentence-execution",
"amount_tier": "250k-500k"
}
```
| Valor de `amount_tier` | Faixa em R\$ |
| ---------------------- | ------------------------- |
| `0-100k` | até R\$ 100.000 |
| `100k-250k` | R$ 100.000 a R$ 250.000 |
| `250k-500k` | R$ 250.000 a R$ 500.000 |
| `500k-750k` | R$ 500.000 a R$ 750.000 |
| `750k-1.5M` | R$ 750.000 a R$ 1.500.000 |
| `1.5M+` | acima de R\$ 1.500.000 |
Use quando estiver alinhado às faixas comerciais da Judit — é o caminho recomendado porque a [precificação por créditos](/miner/credits) também é por faixa.
**Não combine os dois modos.** Enviar `amount_tier` junto com `amount_min` ou `amount_max` falha com `400`. Escolha um.
## `tribunals`
Array de IDs numéricos dos tribunais a incluir. Vazio ou ausente = todos os tribunais cobertos pelo Miner.
```json theme={null}
{
"kind": "judgement-bond",
"tribunals": [10, 18, 1]
}
```
Para descobrir os IDs: chame [`GET /tribunals`](/api-reference/endpoint/miner/tribunals-list) ou veja a [tabela completa](/miner/tribunals).
## `responses_limit` (apenas `/requests/create`)
Teto opcional para o número de processos materializados em uma busca. **Não tem efeito em `/requests/count`** — o count sempre retorna o total real.
```json theme={null}
{
"kind": "sentence-execution",
"tribunals": [10],
"tags": ["possible_precatory"],
"responses_limit": 500
}
```
| Cenário | Comportamento |
| -------------------------------- | --------------------------------------------------------------------------------------- |
| `responses_limit` omitido | Materializa **todos** os processos que batem (até o limite do plano). |
| `responses_limit: N` (N ≤ total) | Materializa exatamente N processos, ordenados por critério interno. Custo proporcional. |
| `responses_limit: N` (N > total) | Materializa todos os disponíveis. Cobrança apenas pelo total real. |
Use para **controlar custo** quando o `count` retornou um volume alto e você só quer uma amostra.
## Regras de combinação
Resumo de tudo que falha com `400`:
| Tentativa | Por quê |
| -------------------------------------------------- | -------------------------------------------------------------------------------- |
| `kind: judgement-bond` + `tags: [...]` | `tags` é exclusivo de `sentence-execution`. |
| `kind: sentence-execution` + `budget_years: [...]` | `budget_years` é exclusivo de `judgement-bond`. |
| `kind: sentence-execution` + `natures: [...]` | `natures` é exclusivo de `judgement-bond`. |
| `amount_min: 100000` + `amount_tier: "250k-500k"` | Modos de valor mutuamente exclusivos. |
| `amount_min: 100000, amount_max: 50000` | `min` deve ser ≤ `max`. |
| Qualquer chave fora do schema (ex.: `state: "SP"`) | `RequestLawsuitsFiltersBody` é **strict** — chaves desconhecidas são rejeitadas. |
## Schema completo (referência rápida)
```json theme={null}
{
"kind": "judgement-bond" | "sentence-execution", // obrigatório
"tribunals": [10, 18], // opcional
"amount_min": 50000, // opcional (não combina com amount_tier)
"amount_max": 500000, // opcional (não combina com amount_tier)
"amount_tier": "250k-500k", // opcional (não combina com min/max)
"budget_years": [2023, 2024], // só para judgement-bond
"natures": ["alimentary", "common"], // só para judgement-bond
"tags": ["possible_precatory"], // só para sentence-execution
"responses_limit": 1000 // só em /requests/create
}
```
## Próximos passos
Cálculo do `cost`, faixas de preço e tratamento de erros de billing.
Tabela completa de IDs aceitos no campo `tribunals`.
Receita prática com count → create → poll → paginate.
Spec interativa para testar cada endpoint.
# Créditos & cobrança no Miner
Source: https://docs.judit.io/miner/credits
Como o Miner calcula o cost de cada busca: faixas de preço por amount_tier, débito de créditos no /requests/create e tratamento de erros de billing (MISSING_CREDITS, INSUFFICIENT_CREDITS, MISSING_CONFIGURATIONS).
**Os preços de uso da API Miner não estão inclusos na licença da Plataforma JUDIT Miner.** O consumo da API é cobrado **separadamente em créditos**, com tabela própria configurada por contrato. **Confirme antes** com o time comercial as faixas vigentes para sua conta — os valores absolutos abaixo são ilustrativos.
**Beta público.** O modelo de cobrança documentado aqui é estável, mas pequenos ajustes nas faixas podem ocorrer durante a fase beta. Sempre cheque o `cost` retornado em `/requests/create` antes de planejar volume.
O Miner é cobrado em **créditos**, debitados na criação de cada busca real (`POST /requests/create`). O `POST /requests/count` é **gratuito** — use sempre antes de criar para estimar o volume e evitar surpresas.
## Como o `cost` é calculado
Cada processo materializado em uma busca tem um preço unitário definido por **faixa de valor** (`amount_tier`). O `cost` final é a soma do preço por faixa multiplicado pelo número de processos retornados em cada uma.
```
cost = Σ (preço_da_faixa_i × quantidade_de_processos_na_faixa_i)
```
Exemplo: você dispara um `find` para `judgement-bond` em TJSP/TJRJ sem `amount_tier` (busca aberta) e o Miner retorna:
| Faixa | Processos retornados | Preço por processo (créditos) | Subtotal |
| ----------- | -------------------- | ----------------------------- | --------- |
| `0-100k` | 320 | 5 | 1.600 |
| `100k-250k` | 180 | 10 | 1.800 |
| `250k-500k` | 95 | 20 | 1.900 |
| `500k-750k` | 40 | 30 | 1.200 |
| `750k-1.5M` | 25 | 50 | 1.250 |
| `1.5M+` | 12 | 100 | 1.200 |
| **Total** | **672** | | **8.950** |
A resposta do `/requests/create` traria:
```json theme={null}
{
"request_id": 47,
"status": "pending",
"cost": 8950
}
```
Os 8.950 créditos já foram **debitados** do saldo da empresa nesse momento. Se a busca falhar depois (`status: failed`), procuramos seu time para reembolsar caso a falha seja do nosso lado.
## Estratégias para controlar custo
### 1. Use `/requests/count` antes (sempre)
Saber o `total_lawsuits` antes de comprar evita 90% das surpresas. O count é gratuito e síncrono.
### 2. Estreite com `amount_tier` ou `amount_min`/`amount_max`
Se você só quer ativos acima de R\$ 250k, filtrar antes evita pagar por processos que você descartaria depois.
```json theme={null}
{
"kind": "judgement-bond",
"tribunals": [10, 18],
"amount_tier": "500k-750k"
}
```
### 3. Limite o volume com `responses_limit`
Para experimentação ou amostragem, defina um teto:
```json theme={null}
{
"kind": "sentence-execution",
"tags": ["possible_precatory"],
"responses_limit": 100
}
```
A cobrança é proporcional — você paga apenas pelos 100 processos efetivamente retornados.
### 4. Evite re-rodar buscas idênticas
O `count` **já desconta** processos que sua empresa consultou anteriormente. Se você rodar a mesma busca duas vezes, o segundo `count` vai retornar zero (ou só o que entrou na base nesse meio tempo). Isso protege seu saldo.
## Erros de billing (HTTP 403)
O Miner usa `403` com códigos legíveis na payload de erro:
| Código | O que significa | Como resolver |
| ------------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------- |
| `MISSING_CONFIGURATIONS` | Sua conta não tem o plano Miner configurado (sem tabela de preços). | Solicite a configuração ao comercial. |
| `MISSING_CREDITS` | A empresa não tem nenhum crédito provisionado. | Recarregue o saldo no dashboard. |
| `INSUFFICIENT_CREDITS` | Há saldo, mas não o suficiente para o `cost` calculado desta busca. | Reduza `responses_limit`, estreite os filtros, ou recarregue. |
Exemplo de resposta:
```json theme={null}
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"errors": [
"INSUFFICIENT_CREDITS"
]
}
```
A combinação `count` gratuito + `create` pago pressupõe que você verificou o saldo antes. Se quiser, expomos consulta de saldo na sua conta — fale com o comercial para integrar essa rota ao seu fluxo de pré-flight.
## Reembolsos
* **Falha do servidor** (`status: failed` por erro nosso): reembolso integral, manual via suporte.
* **Falha pós-débito por motivo de plano** (raro): reembolso integral.
* **Cancelamento de busca em `pending`**: não há reembolso — o trabalho já foi enfileirado.
Para abrir um pedido de reembolso, mande o `request_id` para o suporte.
## Como acompanhar consumo
Cada criação de `find` aparece no histórico da sua conta com:
* `request_id` (ID Miner)
* `created_at`
* `cost` (créditos debitados)
* `status` final (`completed` / `failed`)
Use `GET /requests/{request_id}` para inspecionar individualmente. Para uma visão consolidada, [Consumo](/resource/consumption) traz o agregado mensal de todos os produtos Judit, incluindo o Miner.
## Próximos passos
Veja a sequência count → create → poll → paginate em ação.
Entenda quais filtros combinar para estreitar custo.
Lista completa de IDs para o filtro `tribunals`.
Visão consolidada do consumo de créditos por produto.
# Judit Miner — Visão Geral
Source: https://docs.judit.io/miner/introduction
Identifique e recupere ativos judiciais (precatórios, execuções de sentença) em escala. O Miner combina filtros estruturais com a base completa da Judit para encontrar oportunidades em milhões de processos.
**Beta público.** O Miner é um produto novo da Judit, em beta aberto. Os endpoints e o modelo de cobrança documentados aqui são estáveis, mas pequenos ajustes podem acontecer durante esta fase. Recomendamos travar a versão do contrato (via `If-Match` ou changelog) e nos seguir em [docs.judit.io/resource/changelog](/resource/changelog).
**Os preços de uso da API Miner não estão inclusos na licença da Plataforma JUDIT Miner.** O acesso à API é cobrado **separadamente em créditos**, conforme a tabela de [Créditos & cobrança](/miner/credits). Confirme com o time comercial as faixas vigentes para sua conta antes de disparar buscas em produção.
O **Judit Miner** é um produto dedicado a **garimpar ativos judiciais em escala**: precatórios pagos ou em fase de pagamento (`judgement-bond`) e execuções de sentença com potencial de recuperação (`sentence-execution`). Em vez de ir processo por processo, você define um conjunto de filtros (tribunais, faixa de valor, naturezas, tags) e a Judit identifica para você todos os processos que se encaixam — descontando os que sua empresa já consultou anteriormente.
> 🤖 Host base: `https://miner.production.judit.io`. Autenticação por header `api-key` (mesma chave usada nos demais produtos Judit, com a permissão `miner_enabled` habilitada). O modelo de cobrança é por **créditos** — cada `find` é precificado por faixa antes de ser processado.
## O que o Miner faz
Identifique precatórios federais, estaduais e municipais por ano orçamentário, natureza (alimentar/comum) e tribunal. Ideal para fundos de investimento e advocacia de recuperação.
Detecte execuções com sinais de cálculo aprovado, possível precatório ou precatório já expedido. Ideal para originação de carteira de direitos creditórios.
Recorte por valor mínimo/máximo livre ou por faixas pré-definidas (`0-100k`, `100k-250k`, `250k-500k`, `500k-750k`, `750k-1.5M`, `1.5M+`).
O `count` exclui automaticamente processos que sua empresa já consultou — você só paga pelo que ainda não viu.
## Como funciona
O Miner segue um fluxo de 3 etapas: **estimar** → **comprar** → **paginar**.
```mermaid theme={null}
sequenceDiagram
participant Cliente
participant Miner as Miner API
participant Datalake as Base Judit
Cliente->>Miner: POST /requests/count (filtros)
Miner->>Datalake: Conta processos compatíveis
Miner-->>Cliente: total_lawsuits + request_id (count)
Note over Cliente: Avalia se vale a pena
(volume × custo estimado)
Cliente->>Miner: POST /requests/create (filtros + responses_limit)
Miner-->>Cliente: request_id + status: pending + cost (créditos)
Note over Miner,Datalake: Processamento assíncrono
Miner->>Datalake: Materializa lawsuits
Cliente->>Miner: GET /requests/{request_id} (poll)
Miner-->>Cliente: status: completed
Cliente->>Miner: GET /responses?request_id=...
Miner-->>Cliente: Lista paginada de processos
```
| Etapa | Endpoint | Para que serve |
| ------------------ | ------------------------------- | --------------------------------------------------------------------------------------------- |
| **1. Contar** | `POST /requests/count` | Saber quantos processos batem com seus filtros, **sem custo** de créditos. Resposta síncrona. |
| **2. Criar busca** | `POST /requests/create` | Disparar a busca real. Retorna `cost` (créditos cobrados) e `status: pending`. |
| **3. Acompanhar** | `GET /requests/{request_id}` | Polar até `status: completed`. |
| **4. Coletar** | `GET /responses?request_id=...` | Listar processos retornados, paginado (até 100 por página). |
## Para quem é
Originação em massa de precatórios e créditos judiciais — com filtro fino por valor e tribunal.
Identifique execuções com sinais de aprovação de cálculo ou precatório iminente para abordagem proativa.
Cesta de ativos judiciais para análise de portfólio e securitização.
Alimente listagens de precatórios à venda com inventário sempre fresco.
## O que não está no Miner
* **Consulta processual por CNJ específico** → use [Consulta Processual](/requests/requests) (Requests assíncrono) ou [Hot Storage](/cache-judit/hotstorage) (síncrono).
* **Monitoramento contínuo de movimentações** → use [Tracking](/tracking/tracking).
* **Dados cadastrais (Pessoa Física/Jurídica)** → use [`/entities`](/registration-data/registration-data).
O Miner foca em **descoberta de ativos** com base em atributos do processo. Para qualquer outro caso, os produtos correspondentes seguem disponíveis e cobram normalmente.
## Próximos passos
Crie sua primeira busca em menos de 10 minutos.
Entenda `kind`, `natures`, `tags`, faixas de valor e regras de combinação.
Como funciona o `cost`, faixas de preço e tratamento de erros de billing.
Lista completa de IDs e acrônimos para usar no filtro `tribunals`.
# Quickstart — Sua primeira busca no Miner em 10 minutos
Source: https://docs.judit.io/miner/quickstart
Receita prática para sair do zero ao primeiro lote de processos retornados pelo Miner: contar, criar busca, polar status e paginar resultados.
**Beta público.** Antes de começar, confirme com o comercial Judit que sua API key tem `miner_enabled` habilitado — sem essa flag, todas as chamadas retornam `403`.
Esta é a receita mínima para sair do zero ao primeiro lote de processos. Ao final, você terá: contado quantos processos batem com seus filtros, gastado créditos numa busca real, esperado o processamento e paginado os resultados.
## Pré-requisitos
1. **API key Judit** com `miner_enabled: true` (peça ao comercial).
2. **Saldo de créditos** suficiente — confira no dashboard.
3. Um cliente HTTP (cURL, Postman, ou linguagem da sua preferência).
## Passo 1: Liste os tribunais disponíveis
Antes de filtrar, você precisa dos IDs internos dos tribunais. Eles **não são os acrônimos**: cada tribunal tem um identificador numérico próprio do Miner.
```bash theme={null}
curl --request GET \
--url 'https://miner.production.judit.io/tribunals' \
--header 'api-key: '"$JUDIT_API_KEY"
```
Trecho de resposta:
```json theme={null}
[
{ "tribunal_id": 10, "name": "TJSP" },
{ "tribunal_id": 18, "name": "TJRJ" },
{ "tribunal_id": 1, "name": "TRF3" },
{ "tribunal_id": 193, "name": "TRF1" }
]
```
> Anote os IDs dos tribunais que você quer cobrir. Lista completa em [Tribunais aceitos](/miner/tribunals).
## Passo 2: Conte sem gastar créditos (`/requests/count`)
A rota `/requests/count` **é gratuita** — use-a para descobrir o volume antes de comprar a busca.
```bash theme={null}
curl --request POST \
--url 'https://miner.production.judit.io/requests/count' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"kind": "judgement-bond",
"tribunals": [10, 18],
"budget_years": [2024],
"natures": ["common"]
}'
```
Resposta:
```json theme={null}
{
"request_id": 20,
"filter": {
"kind": "judgement-bond",
"tribunals": [10, 18],
"budget_years": [2024],
"natures": ["common"]
},
"total_lawsuits": 7326,
"status": "completed"
}
```
| Campo | Significado |
| ---------------- | ------------------------------------------------------------------------------------------------------- |
| `total_lawsuits` | Quantos processos novos para sua empresa batem com os filtros (já desconta o que você consultou antes). |
| `request_id` | ID do registro de count — guardado no histórico, mas não usado nos próximos passos. |
| `status` | Sempre `completed` no count (é síncrono). |
## Passo 3: Crie a busca (cobra créditos)
Quando o `total_lawsuits` faz sentido para o seu caso, dispare a busca real com `/requests/create`. Aqui é onde os créditos são debitados.
```bash theme={null}
curl --request POST \
--url 'https://miner.production.judit.io/requests/create' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"kind": "judgement-bond",
"tribunals": [10, 18],
"budget_years": [2024],
"natures": ["common"],
"responses_limit": 1000
}'
```
> 💡 **`responses_limit`** é um teto opcional para o número de processos materializados nesta busca. Se omitido, traz tudo que bater. Use para controlar o custo quando o `count` retorna um volume muito grande.
Resposta (`201 Created`):
```json theme={null}
{
"request_id": 47,
"status": "pending",
"cost": 12500
}
```
| Campo | Significado |
| ------------ | -------------------------------------------------------------------------------------------------------------- |
| `request_id` | ID que você usa nos próximos passos. **Guarde**. |
| `status` | Sempre `pending` aqui. |
| `cost` | Total de créditos debitados (soma das faixas × quantidades). Detalhe em [Créditos & cobrança](/miner/credits). |
Se a resposta vier com `403` e código `INSUFFICIENT_CREDITS` ou `MISSING_CONFIGURATIONS`, sua conta não tem saldo ou plano. Veja [Erros comuns](#erros-comuns).
## Passo 4: Polar até concluir
A busca é processada de forma assíncrona. Use `GET /requests/{request_id}` para acompanhar:
```bash theme={null}
curl --request GET \
--url 'https://miner.production.judit.io/requests/47' \
--header 'api-key: '"$JUDIT_API_KEY"
```
Resposta enquanto processa:
```json theme={null}
{
"request_id": 47,
"status": "pending",
"type": "find",
"total_lawsuits": 1000,
"processed_lawsuits": 312,
"filter": { "kind": "judgement-bond", "tribunals": [10, 18], "budget_years": [2024], "natures": ["common"] },
"created_at": "2026-05-06T18:00:00.000Z",
"updated_at": "2026-05-06T18:01:30.000Z"
}
```
Repita a cada 30 s até que `status` vire **`completed`**. Tempo típico: 2–10 minutos para até 1000 processos.
```python Python (poll exemplo) theme={null}
import os, time, requests
API = "https://miner.production.judit.io"
HEADERS = {"api-key": os.environ["JUDIT_API_KEY"]}
REQ_ID = 47
while True:
r = requests.get(f"{API}/requests/{REQ_ID}", headers=HEADERS, timeout=15)
r.raise_for_status()
data = r.json()
print(f"{data['processed_lawsuits']}/{data['total_lawsuits']} — {data['status']}")
if data["status"] in ("completed", "failed"):
break
time.sleep(30)
```
## Passo 5: Pagine os processos retornados
Com `status: completed`, busque os processos via `/responses`:
```bash theme={null}
curl --request GET \
--url 'https://miner.production.judit.io/responses?request_id=47&page=1&page_size=50' \
--header 'api-key: '"$JUDIT_API_KEY"
```
Resposta:
```json theme={null}
{
"data": [
{
"lawsuit_id": 10293847,
"tribunal_id": 10,
"kind": "judgement-bond",
"code": "9999999-99.9999.9.99.9999",
"instance": 1,
"name": "Autor X Réu",
"amount": 152800.45,
"is_enriched": true,
"favorites": {},
"created_at": "2026-05-06T18:05:21.000Z",
"updated_at": "2026-05-06T18:05:21.000Z"
}
],
"page": 1,
"page_size": 50,
"total": 1000,
"total_pages": 20
}
```
Itere por `page=2..20` até esgotar `total_pages`. Cada item segue o `LawsuitRepositoryOutput` — capa do processo + partes, advogados, andamentos e metadados.
## Erros comuns
| HTTP | Código | Quando acontece | Como tratar |
| ----- | ------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------- |
| `400` | (validação) | Combinação inválida de filtros (ex.: `tags` com `kind: judgement-bond`). | Reveja regras em [Conceitos](/miner/concepts#regras-de-combinação). |
| `403` | `MISSING_CREDITS` | Conta sem saldo de créditos. | Recarregue ou contate o comercial. |
| `403` | `MISSING_CONFIGURATIONS` | Plano sem precificação Miner. | Solicitar configuração. |
| `403` | `INSUFFICIENT_CREDITS` | Saldo abaixo do `cost` calculado. | Reduza `responses_limit` ou recarregue. |
| `404` | `REQUEST_NOT_FOUND` | `request_id` não existe na sua empresa. | Confira o ID; `request_id` é por empresa, não global. |
| `422` | `REQUEST_NOT_COMPLETED` | Tentando ler `/responses` com status ainda `pending`. | Pole `/requests/{id}` até `completed`. |
| `422` | `INVALID_REQUEST_TYPE` | Tentando ler `/responses` de um `request_id` do tipo `count`. | Use o `request_id` retornado pelo `/requests/create`. |
## Próximos passos
Todas as combinações válidas de `kind`, `natures`, `tags`, `amount_tier`.
Como o `cost` é calculado e como tratar erros de billing.
Spec interativa com todos os endpoints e schemas.
IDs e acrônimos dos 60+ tribunais cobertos.
# Tribunais aceitos no Miner
Source: https://docs.judit.io/miner/tribunals
Lista completa dos 60+ tribunais cobertos pelo Miner: IDs numéricos para usar no filtro `tribunals` e seus acrônimos. STJ, todos os TJs estaduais, TRFs federais, TRTs trabalhistas e TRE-SP.
**Beta público.** A cobertura por tribunal pode crescer durante a fase beta. Para obter sempre a lista atual em runtime, use `GET /tribunals` (rota gratuita).
Cada tribunal coberto pelo Miner tem um identificador numérico interno (`tribunal_id`) — esse é o valor que você passa no campo `tribunals` ao filtrar uma busca. **Os IDs não são os acrônimos** e tampouco são o `tribunal_acronym` da consulta processual padrão da Judit.
Para filtrar por tribunal:
```json theme={null}
{
"kind": "judgement-bond",
"tribunals": [10, 18, 1, 193]
}
```
Ou, em runtime, busque a lista atualizada:
```bash theme={null}
curl --request GET \
--url 'https://miner.production.judit.io/tribunals' \
--header 'api-key: '"$JUDIT_API_KEY"
```
## Lista completa (ordenada por acrônimo)
A lista abaixo reflete os tribunais retornados por `GET /tribunals`. Use o **`tribunal_id`** no campo `tribunals` da requisição.
### Justiça Superior
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | -------- | ---------------------------- |
| `927126` | **STJ** | Superior Tribunal de Justiça |
### Justiça Estadual (TJ)
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | -------- | ------------------------------------------ |
| `538384` | **TJAC** | Tribunal de Justiça do Acre |
| `477825` | **TJAL** | Tribunal de Justiça de Alagoas |
| `511165` | **TJAM** | Tribunal de Justiça do Amazonas |
| `586715` | **TJAP** | Tribunal de Justiça do Amapá |
| `511221` | **TJBA** | Tribunal de Justiça da Bahia |
| `5028` | **TJCE** | Tribunal de Justiça do Ceará |
| `510788` | **TJDF** | Tribunal de Justiça do Distrito Federal |
| `5468` | **TJES** | Tribunal de Justiça do Espírito Santo |
| `581028` | **TJGO** | Tribunal de Justiça de Goiás |
| `510756` | **TJMA** | Tribunal de Justiça do Maranhão |
| `23480` | **TJMG** | Tribunal de Justiça de Minas Gerais |
| `173` | **TJMS** | Tribunal de Justiça de Mato Grosso do Sul |
| `510571` | **TJMT** | Tribunal de Justiça de Mato Grosso |
| `512372` | **TJPA** | Tribunal de Justiça do Pará |
| `477557` | **TJPB** | Tribunal de Justiça da Paraíba |
| `477564` | **TJPE** | Tribunal de Justiça de Pernambuco |
| `815112` | **TJPI** | Tribunal de Justiça do Piauí |
| `456559` | **TJPR** | Tribunal de Justiça do Paraná |
| `18` | **TJRJ** | Tribunal de Justiça do Rio de Janeiro |
| `477866` | **TJRN** | Tribunal de Justiça do Rio Grande do Norte |
| `510866` | **TJRO** | Tribunal de Justiça de Rondônia |
| `1045760` | **TJRR** | Tribunal de Justiça de Roraima |
| `583514` | **TJRS** | Tribunal de Justiça do Rio Grande do Sul |
| `3768` | **TJSC** | Tribunal de Justiça de Santa Catarina |
| `477577` | **TJSE** | Tribunal de Justiça de Sergipe |
| `10` | **TJSP** | Tribunal de Justiça de São Paulo |
| `581271` | **TJTO** | Tribunal de Justiça do Tocantins |
### Justiça Militar Estadual (TJM)
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | --------- | ------------------------------------------------ |
| `1330350` | **TJMMG** | Tribunal de Justiça Militar de Minas Gerais |
| `4531239` | **TJMRS** | Tribunal de Justiça Militar do Rio Grande do Sul |
| `906456` | **TJMSP** | Tribunal de Justiça Militar de São Paulo |
### Justiça Federal (TRF)
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | -------- | -------------------------------------- |
| `193` | **TRF1** | Tribunal Regional Federal da 1ª Região |
| `37524` | **TRF2** | Tribunal Regional Federal da 2ª Região |
| `1` | **TRF3** | Tribunal Regional Federal da 3ª Região |
| `482427` | **TRF4** | Tribunal Regional Federal da 4ª Região |
| `64` | **TRF5** | Tribunal Regional Federal da 5ª Região |
| `633695` | **TRF6** | Tribunal Regional Federal da 6ª Região |
### Justiça do Trabalho (TRT)
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | --------- | ------------------------------- |
| `510443` | **TRT1** | TRT da 1ª Região (RJ) |
| `150610` | **TRT2** | TRT da 2ª Região (SP capital) |
| `510432` | **TRT3** | TRT da 3ª Região (MG) |
| `510516` | **TRT4** | TRT da 4ª Região (RS) |
| `510783` | **TRT5** | TRT da 5ª Região (BA) |
| `510900` | **TRT6** | TRT da 6ª Região (PE) |
| `511096` | **TRT7** | TRT da 7ª Região (CE) |
| `511317` | **TRT8** | TRT da 8ª Região (PA/AP) |
| `510720` | **TRT9** | TRT da 9ª Região (PR) |
| `510976` | **TRT10** | TRT da 10ª Região (DF/TO) |
| `511188` | **TRT11** | TRT da 11ª Região (AM/RR) |
| `511091` | **TRT12** | TRT da 12ª Região (SC) |
| `511153` | **TRT13** | TRT da 13ª Região (PB) |
| `511228` | **TRT14** | TRT da 14ª Região (RO/AC) |
| `510428` | **TRT15** | TRT da 15ª Região (SP interior) |
| `511213` | **TRT16** | TRT da 16ª Região (MA) |
| `511043` | **TRT17** | TRT da 17ª Região (ES) |
| `510950` | **TRT18** | TRT da 18ª Região (GO) |
| `511269` | **TRT19** | TRT da 19ª Região (AL) |
| `511245` | **TRT20** | TRT da 20ª Região (SE) |
| `511337` | **TRT21** | TRT da 21ª Região (RN) |
| `527067` | **TRT22** | TRT da 22ª Região (PI) |
| `511127` | **TRT23** | TRT da 23ª Região (MT) |
| `511211` | **TRT24** | TRT da 24ª Região (MS) |
### Justiça Eleitoral (TRE)
| `tribunal_id` | Acrônimo | Tribunal |
| ------------- | ---------- | ---------------------------------------- |
| `1151652` | **TRE-SP** | Tribunal Regional Eleitoral de São Paulo |
## Padrões úteis
### Cobrir todo o eixo Sudeste estadual
```json theme={null}
{
"tribunals": [10, 18, 23480, 5468]
}
```
(TJSP, TJRJ, TJMG, TJES)
### Cobrir todos os TRFs federais
```json theme={null}
{
"tribunals": [193, 37524, 1, 482427, 64, 633695]
}
```
### Cobrir grandes capitais trabalhistas (TRT2 + TRT15)
```json theme={null}
{
"tribunals": [150610, 510428]
}
```
(TRT2 — São Paulo capital; TRT15 — interior de SP)
## Próximos passos
Como combinar `tribunals` com `kind`, `natures`, `tags` e faixas de valor.
Veja `tribunals` em ação dentro de um fluxo completo.
Spec interativa do endpoint que retorna esta lista em runtime.
Cobertura de tribunais nos demais produtos Judit (Tracking, Lawsuits, Requests).
# Dados Cadastrais por CPF, CNPJ ou Nome
Source: https://docs.judit.io/registration-data/registration-data
Obtenha dados cadastrais (Pessoa Física ou Jurídica) de forma síncrona pelo endpoint /entities da Judit API. Suporta consulta no datalake ou em tempo real na Receita Federal (on-demand).
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
A **Consulta por Dados Cadastrais** retorna informações de identificação de uma Pessoa Física ou Jurídica: nome/razão social, situação cadastral, endereços, contatos, sócios e relacionamentos. Toda a chamada é síncrona e pode ler do datalake da Judit (rápido e barato) ou direto da Receita Federal em tempo real (`on_demand: true`).
> 🤖 Endpoint: `POST https://lawsuits.production.judit.io/entities`. `search_type` aceita `cpf`, `cnpj` ou `name`. `response_type` é sempre `entity`. Para resposta em tempo real (Receita), envie `on_demand: true` no payload.
## Quando usar
Valide nome, situação cadastral e endereço durante o cadastro do cliente sem fricção adicional.
Atualize seu CRM/ERP com dados consolidados por CPF/CNPJ.
Confronte dados informados pelo usuário com a versão oficial em segundos.
Use a resposta para descobrir filiais e relacionamentos societários ligados a um CNPJ.
## Datalake vs. On-Demand (Receita Federal)
| Característica | Datalake (padrão) | On-Demand (`on_demand: true`) |
| :------------- | :----------------------------------------- | :----------------------------------------- |
| **Latência** | ms | segundos |
| **Fonte** | Cache JUDIT | Receita Federal em tempo real |
| **Atualidade** | Última coleta JUDIT | Estado atual da Receita |
| **Custo** | Mais barato | Mais caro |
| **Caso ideal** | Onboarding rápido, enriquecimento em massa | Compliance crítico, decisões de alto risco |
## Passo 1: Criar a Consulta (POST)
`POST https://lawsuits.production.judit.io/entities`
### Exemplos por tipo de documento
```json Por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Por CNPJ theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99"
}
}
```
```json Por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "Nome teste"
}
}
```
```json On-Demand (Receita Federal) theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"on_demand": true
}
}
```
```json CNPJ com sócios não mascarados theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99",
"reveal_partners_documents": true
}
}
```
Ao realizar consultas por **nome**, é possível que existam homônimos (pessoas ou empresas com o mesmo nome). Sempre que possível, prefira CPF ou CNPJ para garantir maior precisão.
### Parâmetros do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :--------------------------------- | :------ | :---------- | :--------------------------------------------------------- |
| `search.search_type` | string | **Sim** | `"cpf"`, `"cnpj"` ou `"name"`. |
| `search.search_key` | string | **Sim** | Documento ou nome a buscar. |
| `search.response_type` | string | **Sim** | Sempre `"entity"`. |
| `search.on_demand` | boolean | Não | Se `true`, força leitura em tempo real na Receita Federal. |
| `search.reveal_partners_documents` | boolean | Não | (CNPJ) Retorna documentos não mascarados dos sócios. |
### Exemplo de Requisição (POST)
```bash cURL (CPF) theme={null}
curl --location 'https://lawsuits.production.judit.io/entities' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}'
```
```bash cURL (CNPJ on-demand) theme={null}
curl --location 'https://lawsuits.production.judit.io/entities' \
--header 'api-key: '"$JUDIT_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99",
"on_demand": true
}
}'
```
```python Python theme={null}
import os, requests
resp = requests.post(
"https://lawsuits.production.judit.io/entities",
headers={
"api-key": os.environ["JUDIT_API_KEY"],
"Content-Type": "application/json",
},
json={
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",,
}
},
timeout=30,
)
resp.raise_for_status()
print(resp.json())
```
```javascript Node.js theme={null}
const res = await fetch("https://lawsuits.production.judit.io/entities", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: {
search_type: "cpf",
search_key: "999.999.999-99",
response_type: "entity",
},
}),
});
console.log(await res.json());
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"search": map[string]string{
"search_type": "cpf",
"search_key": "999.999.999-99",,
},
})
req, _ := http.NewRequest("POST",
"https://lawsuits.production.judit.io/entities",
bytes.NewReader(body))
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
println(string(out))
}
```
## Passo 2: Ler a Resposta
A resposta vem no corpo do mesmo POST. Os campos principais:
| Campo | Tipo | Descrição |
| :------------------------------ | :----- | :------------------------------------------------------------------------- |
| `request_id` | string | Identificador único da consulta. |
| `response_data` | array | Lista de entidades encontradas (segue o [Schema Entity](/schemas/entity)). |
| `response_data[].entity_type` | string | `"person"` (PF) ou `"company"` (PJ). |
| `response_data[].main_document` | string | CPF ou CNPJ. |
| `response_data[].addresses` | array | Endereços associados. |
| `response_data[].contacts` | array | Telefones e e-mails. |
| `response_data[].partners` | array | (PJ) Sócios e administradores. |
### Exemplos de Resposta
```json Resposta por CPF theme={null}
{
"has_lawsuits": false,
"request_id": "5c618521-2ecc-4176-a573-431d2e0edeb2",
"response_data": [
{
"entity_id": "",
"entity_type": "person",
"main_document": "999.999.999-99",
"name": "JOÃO TESTE",
"addresses": [
{
"street": "RUA RAMOS DE CARVALHO",
"number": "999",
"neighborhood": "CENTRO",
"city": "RIO DE JANEIRO",
"state": "RJ",
"country": "Brasil",
"zip_code": "99999999"
}
],
"contacts": [
{ "description": "21999999999", "contact_type": "phone" }
],
"parents": [
{ "name": "JANAINA DA SILVA", "kinship": "mother" }
],
"tags": { "revenue_update_date": "2022-05-30T00:00:00.000Z" },
"nationality": "BRASILEIRA",
"birth_date": "1981-08-07T00:00:00.000Z",
"gender": "male",
"revenue_service_active": true,
"created_at": "2024-10-12T13:28:59.051Z",
"updated_at": "2024-10-12T13:28:59.051Z"
}
]
}
```
```json Resposta por CNPJ theme={null}
{
"has_lawsuits": false,
"request_id": "6e5a24f7-f874-4234-8acc-419142e2b066",
"response_data": [
{
"entity_id": "",
"entity_type": "company",
"main_document": "99.999.999/0009-99",
"name": "FINGI - EM RECUPERACAO JUDICIAL",
"social_name": "FING",
"addresses": [
{
"street": "RUA DO JOÃO CIRILO",
"number": "99",
"complement": "ANDAR 9",
"neighborhood": "CENTRO",
"city": "RIO DE JANEIRO",
"state": "RJ",
"country": "BRASIL",
"zip_code": "99999999"
}
],
"contacts": [
{ "description": "999999999", "contact_type": "phone" },
{ "description": "ouvidoria@fing.com.br", "contact_type": "email" }
],
"partners": [
{
"entity_type": "company",
"main_document": "***999999**",
"name": "JOÃO DE OLIVEIRA SOUZA",
"position": "CONSELHEIRO DE ADMINISTRAÇÃO",
"tags": {
"age_group": "Entre 61 a 70 anos",
"start_date": "2018-09-25T00:00:00.000Z"
}
}
],
"branch_activities": [
{
"code": "9999999",
"name": "SERVIÇOS DE ATENDIMENTO AO CLIENTE - SAC",
"active": true,
"main_activity": true
}
],
"tags": { "revenue_update_date": "2005-11-03T00:00:00.000Z" },
"nationality": "BRASILEIRA",
"birth_date": "1966-09-26T00:00:00.000Z",
"size": "DEMAIS",
"legal_nature": {
"code": "2046",
"name": "SOCIEDADE ANÔNIMA ABERTA",
"active": true
},
"head_office": true,
"revenue_service_active": true,
"special_status": "RECUPERACAO JUDICIAL",
"special_status_date": "2016-06-29T00:00:00.000Z",
"share_capital": 99999999999
}
]
}
```
```json Resposta por Nome theme={null}
{
"request_id": "223458ec-f3a1-4851-8d2b-19672066565c",
"response_data": [
{
"entity_id": "999.999.999-99",
"entity_type": "person",
"main_document": "999.999.999-99",
"name": "Usuário Teste",
"parents": [
{ "name": "Usuário teste 1", "kinship": "mother" }
],
"tags": {},
"nationality": "BRASILEIRA",
"birth_date": "1989-12-25T00:00:00.000Z",
"gender": "male",
"created_at": "2025-04-19T00:14:56.561Z",
"updated_at": "2025-04-19T00:14:56.561Z"
}
]
}
```
> Estrutura completa de cada item: veja [Schema Entity](/schemas/entity). Glossário de campos: [Glossário](/resource/glossary).
Ao consultar por CNPJ com `reveal_partners_documents: true`, retornamos os CPFs/CNPJs dos sócios sem mascaramento. Use somente quando há base legal/contratual (LGPD).
## Erros comuns
| HTTP | Quando acontece | Como tratar |
| :---- | :------------------------------------------------------- | :---------- |
| `400` | Documento em formato inválido / `response_type` ausente. | V |
# Consulta Customizada por Filtros
Source: https://docs.judit.io/requests/custom-search
Crie buscas avançadas combinando múltiplos filtros (tribunal, valor da causa, data de distribuição, partes, classes processuais) na Judit API.
A **Consulta Customizada** permite varrer todos os tribunais cobertos pela Judit aplicando filtros estruturais — sem precisar partir de um CPF, CNPJ, OAB ou Nome específico. É a ferramenta certa quando o universo de busca é definido por critérios objetivos (ex.: "todos os processos trabalhistas no TRT-2 distribuídos em 2024 com valor de causa acima de R\$ 100 mil").
A Consulta Customizada é entregue via **relatório sob demanda** (não em fluxo automático). Acione nosso time [comercial](https://api.whatsapp.com/send/?phone=5521985284143) para habilitar o serviço e receber o resultado por arquivo (CSV/JSON) ou via [File Transfer API](/file-transfer/file-transfer).
## Quando usar
Identifique o universo de processos de uma classe específica em um tribunal ou estado para análise de tendências.
Valide o passivo judicial de uma carteira inteira de empresas/pessoas combinando filtros de valor, tribunal e classe.
Mapeie processos em que escritórios concorrentes atuam para análise estratégica.
Detecte processos em assuntos específicos (ex.: ANS, ANATEL, Defesa do Consumidor) ao longo do tempo.
## Filtros disponíveis
| Filtro | Tipo | Descrição |
| ------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------- |
| `side` | string | Lado da parte: `Active` (Autor), `Passive` (Réu), `Interested` (Interessado), ou indefinido. |
| `amount_gte` / `amount_lte` | number | Valor da causa **mínimo** / **máximo**. |
| `distribution_date_gte` / `distribution_date_lte` | ISO 8601 | Janela de distribuição do processo. |
| `last_step_date_gte` / `last_step_date_lte` | ISO 8601 | Janela da última movimentação. |
| `tribunals.keys` + \` | | |
# Consulta Histórica por Documento (CPF/CNPJ/OAB/Nome)
Source: https://docs.judit.io/requests/request-document
Recupere todo o histórico de processos vinculado a um CPF, CNPJ, OAB ou Nome via fluxo assíncrono da Judit API, com filtros avançados, paginação e suporte a CNPJ alfanumérico.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
**Resposta em cache (`cached_response`)**
Quando você cria uma consulta processual ou histórica, a Judit primeiro verifica se o dado já está em nossa base. Se estiver, devolvemos imediatamente o resultado — tanto na resposta da API quanto via webhook (se você tiver cadastrado) — com o campo `cached_response: true`.
Em paralelo, a Judit dispara uma atualização nos tribunais. Se houver alguma mudança, você recebe **uma segunda resposta** com `cached_response: false`. Esse é o resultado mais atual.
Por isso, é normal receber dois webhooks aparentemente iguais para o mesmo `request_id`:
* O primeiro vem do cache (`cached_response: true`)
* O último é o atualizado (`cached_response: false`)
Use esse campo para identificar com precisão qual retorno representa o estado mais recente do processo.
A **Consulta Histórica por Documento** retorna **toda a carteira processual** vinculada a um CPF, CNPJ, OAB ou Nome. É o caminho ideal para due diligence, KYC, mapeamento de exposição judicial e qualquer cenário em que você precise saber *quais processos existem* (capa + partes), sem necessariamente entrar em cada um.
> Esta página documenta exclusivamente o fluxo **Assíncrono** de consulta histórica. O cliente deve fazer um `POST /requests`, aguardar o processamento (`GET /requests/{id}`) e resgatar os dados no `GET /responses`. A resposta da Consulta Histórica retorna um array paginado contendo exclusivamente a Capa e as Partes do processo (omitindo andamentos, anexos, fase e status). É possível filtrar os resultados tanto no payload do POST inicial quanto nas *query strings* do GET final.
## Quando usar
Antes de fechar contrato, descubra todo o passivo judicial da contraparte por CPF/CNPJ.
Combine com filtros (`amount_gte`, `side: "Passive"`) para priorizar abordagens com base no valor de causa.
Cruze com [Monitoramento por documento](/tracking/tracking-document) para detectar **novos processos** após a consulta inicial.
Consulte por OAB para listar todos os processos em que um advogado atua.
## Síncrono vs. Assíncrono
Antes de integrar, é fundamental entender a diferença de arquitetura que a Judit oferece para este endpoint:
* **Consulta Síncrona (Datalake Hotstorage):** A resposta com todos os processos é devolvida instantaneamente no corpo (`body`) do próprio `POST`. Não exige checagem de status. Ideal para fluxos sensíveis à latência da resposta como onboardings. *[Veja a documentação Síncrona aqui](/cache-judit/hotstorage).*
* **Consulta Assíncrona (Datalake / On-Demand):** É o fluxo que abordaremos nesta página. Busca em múltiplas fontes externas ou diretamente nos tribunais (On-Demand) em tempo real. Exige um fluxo de 3 etapas (Criar -> Checar -> Consumir).
***
## Passo 1: Criar a Requisição de Busca (POST)
Para iniciar o fluxo assíncrono, faça uma requisição `POST` informando o documento desejado.
`POST https://requests.production.judit.io/requests`
### Exemplos de consultas históricas
```json Consulta por CPF theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}
```
```json Consulta por CNPJ theme={null}
{
"search": {
"search_type": "cnpj",
"search_key": "99.999.999/9999-99"
}
}
```
```json Consulta por OAB theme={null}
{
"search": {
"search_type": "oab",
"search_key": "99999RJ"
}
}
```
```json Consulta por Nome theme={null}
{
"search": {
"search_type": "name",
"search_key": "João Silva"
}
}
```
Ao realizar consultas por nome, é possível que existam homônimos (pessoas ou empresas com o mesmo nome). Recomendamos que, sempre que possível, utilize identificadores únicos, como CPF ou CNPJ, para garantir maior precisão nos resultados.
### Parâmetros Base do Payload
| Parâmetro | Tipo | Obrigatório | Descrição |
| :------------------- | :------ | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | tipo de entidade que será buscada: `"cpf"`, `"cnpj"`, `"oab"` ou `"name"`. |
| `search.search_key` | string | **Sim** | O valor a ser buscado (ex: `"999.999.999-99"`, `João Silva`). |
| `search.on_demand` | boolean | Não | Se `true`, força a busca em tempo real nos tribunais em vez do Datalake. |
| `cache_ttl_in_days` | integer | Não | Considera o cache válido se a última extração ocorreu nos últimos X dias. |
| `customer_key` | string | Não | Chave do usuário no Cofre de Credenciais (usado para acessar os tribunais com credenciais cadastrada no [cofre de credenciais](/essentials/cofre-de-credenciais)). |
**Sobre o uso da `customer_key`:** Esta credencial só terá efeito se o parâmetro `on_demand` for igual a `true`. Ao informá-la, a Judit acessará os tribunais de forma autenticada, permitindo a captura de **processos em segredo de justiça** aos quais o dono da credencial (advogado) esteja previamente vinculado ao respectivo processo.
```json request assíncrona theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"cache_ttl_in_days": 7
}
}
```
```json request on-demand theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"on_demand": true
}
}
```
```json request on-demand com customer_key theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"on_demand": true,
"customer_key: "ADV01"
}
}
```
### Filtros Prévios da Requisição (`search_params.filter`)
Você pode restringir a busca inicial enviando o objeto `filter` dentro de `search_params` no corpo (body) do seu POST. Isso é altamente recomendado, pois evita que o robô perca tempo processando varas ou tribunais de estados ou anos que não importam para o seu negócio.
Abaixo, detalhamos como construir cada filtro passo a passo.
#### 1. Filtros de Polo e Valor da Causa
Permite buscar processos onde a pessoa processou alguém, foi processada, ou filtrar por valores em reais.
* `side` (string): De qual lado do processo o documento buscado está?
* `"Active"` (Autor da ação)
* `"Passive"` (Réu na ação)
* `"Interested"` (Terceiro interessado)
* `"Unknown"` (Polo não identificado)
* `amount_gte` (number): Valor da causa **Maior ou Igual a** (GTE = *Greater Than or Equal*).
* `amount_lte` (number): Valor da causa **Menor ou Igual a** (LTE = *Less Than or Equal*).
```json theme={null}
// Quero achar processos onde o cliente é o Réu ("Passive")
// E o valor da causa é entre R$ 10.000 e R$ 50.000
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"side": "Passive",
"amount_gte": 10000.00,
"amount_lte": 50000.00
}
}
}
}
```
#### 2. Filtros de Tribunal (A Regra de Inclusão e Exclusão)
Para filtrar por estados ou tribunais específicos, usamos o objeto `tribunals`. Ele exige duas informações: a lista de siglas (`keys`) e uma regra de negação (`not_equal`).
## Lista de Tribunais Aceitos (Filtros)
Utilize as siglas exatas da coluna **Sigla (Key)** abaixo quando for realizar filtros por tribunais (ex: no parâmetro `tribunals.keys`).
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :--------------------------------------- |
| `STF` | SUPREMO TRIBUNAL FEDERAL |
| `STJ` | SUPERIOR TRIBUNAL DE JUSTIÇA |
| `TST` | TRIBUNAL SUPERIOR DO TRABALHO |
| `TSE` | TRIBUNAL SUPERIOR ELEITORAL |
| `STM` | SUPERIOR TRIBUNAL MILITAR |
| `CNJ` | CONSELHO NACIONAL DE JUSTIÇA |
| `CJF` | CONSELHO DA JUSTIÇA FEDERAL |
| `CSJT` | CONSELHO SUPERIOR DA JUSTIÇA DO TRABALHO |
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :------------------------------------- |
| `TRF1` | TRIBUNAL REGIONAL FEDERAL DA 1ª REGIÃO |
| `TRF2` | TRIBUNAL REGIONAL FEDERAL DA 2ª REGIÃO |
| `TRF3` | TRIBUNAL REGIONAL FEDERAL DA 3ª REGIÃO |
| `TRF4` | TRIBUNAL REGIONAL FEDERAL DA 4ª REGIÃO |
| `TRF5` | TRIBUNAL REGIONAL FEDERAL DA 5ª REGIÃO |
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :-------------------------------- |
| `TRT1` | TRT DA 1ª REGIÃO (RJ) |
| `TRT2` | TRT DA 2ª REGIÃO (SP - Capital) |
| `TRT3` | TRT DA 3ª REGIÃO (MG) |
| `TRT4` | TRT DA 4ª REGIÃO (RS) |
| `TRT5` | TRT DA 5ª REGIÃO (BA) |
| `TRT6` | TRT DA 6ª REGIÃO (PE) |
| `TRT7` | TRT DA 7ª REGIÃO (CE) |
| `TRT8` | TRT DA 8ª REGIÃO (PA/AP) |
| `TRT9` | TRT DA 9ª REGIÃO (PR) |
| `TRT10` | TRT DA 10ª REGIÃO (DF/TO) |
| `TRT11` | TRT DA 11ª REGIÃO (AM/RR) |
| `TRT12` | TRT DA 12ª REGIÃO (SC) |
| `TRT13` | TRT DA 13ª REGIÃO (PB) |
| `TRT14` | TRT DA 14ª REGIÃO (RO/AC) |
| `TRT15` | TRT DA 15ª REGIÃO (SP - Campinas) |
| `TRT16` | TRT DA 16ª REGIÃO (MA) |
| `TRT17` | TRT DA 17ª REGIÃO (ES) |
| `TRT18` | TRT DA 18ª REGIÃO (GO) |
| `TRT19` | TRT DA 19ª REGIÃO (AL) |
| `TRT20` | TRT DA 20ª REGIÃO (SE) |
| `TRT21` | TRT DA 21ª REGIÃO (RN) |
| `TRT22` | TRT DA 22ª REGIÃO (PI) |
| `TRT23` | TRT DA 23ª REGIÃO (MT) |
| `TRT24` | TRT DA 24ª REGIÃO (MS) |
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :---------------------------------------------------- |
| `TJAC` | TRIBUNAL DE JUSTIÇA DO ACRE |
| `TJAL` | TRIBUNAL DE JUSTIÇA DO ALAGOAS |
| `TJAP` | TRIBUNAL DE JUSTIÇA DO AMAPÁ |
| `TJAM` | TRIBUNAL DE JUSTIÇA DO AMAZONAS |
| `TJBA` | TRIBUNAL DE JUSTIÇA DA BAHIA |
| `TJCE` | TRIBUNAL DE JUSTIÇA DO CEARÁ |
| `TJDF` | TRIBUNAL DE JUSTIÇA DO DISTRITO FEDERAL E TERRITÓRIOS |
| `TJES` | TRIBUNAL DE JUSTIÇA DO ESPÍRITO SANTO |
| `TJGO` | TRIBUNAL DE JUSTIÇA DE GOIÁS |
| `TJMA` | TRIBUNAL DE JUSTIÇA DO MARANHÃO |
| `TJMT` | TRIBUNAL DE JUSTIÇA DO MATO GROSSO |
| `TJMS` | TRIBUNAL DE JUSTIÇA DO MATO GROSSO DO SUL |
| `TJMG` | TRIBUNAL DE JUSTIÇA DE MINAS GERAIS |
| `TJPA` | TRIBUNAL DE JUSTIÇA DO PARÁ |
| `TJPB` | TRIBUNAL DE JUSTIÇA DA PARAÍBA |
| `TJPR` | TRIBUNAL DE JUSTIÇA DO PARANÁ |
| `TJPE` | TRIBUNAL DE JUSTIÇA DE PERNAMBUCO |
| `TJPI` | TRIBUNAL DE JUSTIÇA DO PIAUÍ |
| `TJRJ` | TRIBUNAL DE JUSTIÇA DO RIO DE JANEIRO |
| `TJSP` | TRIBUNAL DE JUSTIÇA DE SÃO PAULO |
| `TJRN` | TRIBUNAL DE JUSTIÇA DO RIO GRANDE DO NORTE |
| `TJRS` | TRIBUNAL DE JUSTIÇA DO RIO GRANDE DO SUL |
| `TJRO` | TRIBUNAL DE JUSTIÇA DE RONDÔNIA |
| `TJRR` | TRIBUNAL DE JUSTIÇA DE RORAIMA |
| `TJSC` | TRIBUNAL DE JUSTIÇA DE SANTA CATARINA |
| `TJSE` | TRIBUNAL DE JUSTIÇA DE SERGIPE |
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :------------------------------------------------- |
| `TRE-AC` | TRIBUNAL REGIONAL ELEITORAL DO ACRE |
| `TRE-AL` | TRIBUNAL REGIONAL ELEITORAL DO ALAGOAS |
| `TRE-AP` | TRIBUNAL REGIONAL ELEITORAL DO AMAPÁ |
| `TRE-AM` | TRIBUNAL REGIONAL ELEITORAL DO AMAZONAS |
| `TRE-BA` | TRIBUNAL REGIONAL ELEITORAL DA BAHIA |
| `TRE-CE` | TRIBUNAL REGIONAL ELEITORAL DO CEARÁ |
| `TRE-DF` | TRIBUNAL REGIONAL ELEITORAL DO DISTRITO FEDERAL |
| `TRE-ES` | TRIBUNAL REGIONAL ELEITORAL DO ESPÍRITO SANTO |
| `TRE-GO` | TRIBUNAL REGIONAL ELEITORAL DE GOIÁS |
| `TRE-MA` | TRIBUNAL REGIONAL ELEITORAL DO MARANHÃO |
| `TRE-MT` | TRIBUNAL REGIONAL ELEITORAL DO MATO GROSSO |
| `TRE-MS` | TRIBUNAL REGIONAL ELEITORAL DO MATO GROSSO DO SUL |
| `TRE-MG` | TRIBUNAL REGIONAL ELEITORAL DE MINAS GERAIS |
| `TRE-PA` | TRIBUNAL REGIONAL ELEITORAL DO PARÁ |
| `TRE-PB` | TRIBUNAL REGIONAL ELEITORAL DA PARAÍBA |
| `TRE-PR` | TRIBUNAL REGIONAL ELEITORAL DO PARANÁ |
| `TRE-PE` | TRIBUNAL REGIONAL ELEITORAL DE PERNAMBUCO |
| `TRE-PI` | TRIBUNAL REGIONAL ELEITORAL DO PIAUÍ |
| `TRE-RJ` | TRIBUNAL REGIONAL ELEITORAL DO RIO DE JANEIRO |
| `TRE-RN` | TRIBUNAL REGIONAL ELEITORAL DO RIO GRANDE DO NORTE |
| `TRE-RS` | TRIBUNAL REGIONAL ELEITORAL DO RIO GRANDE DO SUL |
| `TRE-RO` | TRIBUNAL REGIONAL ELEITORAL DE RONDÔNIA |
| `TRE-RR` | TRIBUNAL REGIONAL ELEITORAL DE RORAIMA |
| `TRE-SC` | TRIBUNAL REGIONAL ELEITORAL DE SANTA CATARINA |
| `TRE-SE` | TRIBUNAL REGIONAL ELEITORAL DE SERGIPE |
| `TRE-SP` | TRIBUNAL REGIONAL ELEITORAL DE SÃO PAULO |
| `TRE-TO` | TRIBUNAL REGIONAL ELEITORAL DO TOCANTINS |
| Sigla (Key) | Nome Oficial do Órgão |
| :---------- | :--------------------------------------------------------- |
| `CJM1` | PRIMEIRA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM2` | SEGUNDA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM3` | TERCEIRA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM4` | QUARTA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM5` | QUINTA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM6` | SEXTA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM7` | SÉTIMA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM8` | OITAVA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM9` | NONA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM10` | DÉCIMA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM11` | DÉCIMA PRIMEIRA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `CJM12` | DÉCIMA SEGUNDA CIRCUNSCRIÇÃO JUDICIÁRIA MILITAR |
| `TJM-MG` | TRIBUNAL DE JUSTIÇA MILITAR DO ESTADO DE MINAS GERAIS |
| `TJM-RS` | TRIBUNAL DE JUSTIÇA MILITAR DO ESTADO DO RIO GRANDE DO SUL |
| `TJM-SP` | TRIBUNAL DE JUSTIÇA MILITAR DO ESTADO DE SÃO PAULO |
* **Inclusão:** Se `not_equal` for `false`, a API vai buscar **APENAS** nos tribunais da lista.
* **Exclusão:** Se `not_equal` for `true`, a API vai buscar no Brasil inteiro, **EXCETO** nos tribunais da lista.
```json Buscar APENAS nestes theme={null}
// Traz apenas processos de São Paulo e Bahia
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"tribunals": {
"keys": [
"TJSP",
"TJBA"
],
"not_equal": false
}
}
}
}
}
```
```json Buscar em TODOS, MENOS nestes theme={null}
// Traz do Brasil inteiro, mas ignora a Justiça Federal (TRFs)
{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"search_params": {
"filter": {
"tribunals": {
"keys": [
"TRF1",
"TRF2",
"TRF3",
"TRF4",
"TRF5",
"TRF6"
],
"not_equal": true
}
}
}
}
}
```
#### 3. Filtros de Assunto e Classe (Padrão CNJ)
A Judit API utiliza as **Tabelas Processuais Unificadas (TPU)** oficiais do Conselho Nacional de Justiça (CNJ). Você pode filtrar processos inserindo os códigos numéricos exatos dessas tabelas.
👉 *Para descobrir os códigos oficiais de Classes e Assuntos, acesse a [Consulta Pública do SGT/CNJ](https://www.cnj.jus.br/sgt/consulta_publica_classes.php).*
A mecânica de filtro funciona da seguinte forma:
* **Assuntos (`subject_codes`):** Usa as listas `contains` (Quero processos que contenham estes códigos) e `not_contains` (Não quero processos que contenham estes códigos).
* **Classes (`classification_codes`):** Usa a lista `keys` e a regra `not_equal` (a mesma lógica de inclusão/exclusão dos tribunais).
```json theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "99999999999",
"search_params": {
"filter": {
// Quero processos que tenham o assunto 10433, mas rejeito se tiver o 1120
"subject_codes": {
"contains": [
"10433"
],
"not_contains": [
"1120"
]
},
// Quero EXATAMENTE a classe processual 985 (ex: Ação Trabalhista)
"classification_codes": {
"keys": [
"985"
],
"not_equal": false
}
}
}
}
}
```
#### 4. Filtros de Datas e Prazos
Otimize a busca por recortes de tempo usando o formato universal de datas (ISO 8601: `AAAA-MM-DDTHH:mm:ss.sssZ`).
* `distribution_date_gte` (string): Traz processos distribuídos (iniciados) **a partir de** uma data.
* `last_step_date_gte` (string): Traz processos cuja **última movimentação** ocorreu **a partir de** uma data.
* `last_step_date_lte` (string): Traz processos cuja **última movimentação** ocorreu **antes de** uma data.
```json theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "99999999999",
"search_params": {
// Quero processos que tiveram alguma movimentação a partir de 10 de Outubro de 2024
"filter": {
"last_step_date_gte": "2024-10-10T00:00:00.000Z"
}
}
}
}
```
#### 5. Filtros Restritivos de Outras Partes
Quer saber se o João processou a Empresa X? Você pode usar os filtros de Nomes e Documentos de outras partes envolvidas no processo.
* `party_names` (array de strings): Lista de nomes exatos que devem constar no processo.
* `party_documents` (array de strings): Lista de CPFs/CNPJs que devem constar no processo.
**Atenção ao usar junto com o filtro `side`:** Se você usar o filtro `party_names` ou `party_documents` junto com o filtro `side`, a regra de "Polo" (Autor/Réu) será aplicada apenas ao documento principal que você está pesquisando, e **não** aos nomes/documentos extras listados aqui.
```json theme={null}
{
"search": {
"search_type": "cpf",
"search_key": "99999999999",
"search_params": {
// Buscando o CPF principal (via search_key), mas exigindo que
// a "Empresa Exemplo" ou o CNPJ "99.999.999/0001-99" também estejam no processo.
"filter": {
"party_names": [
"EMPRESA EXEMPLO LTDA"
],
"party_documents": [
"99999999000199"
]
}
}
}
}
```
### Exemplo de Requisição (POST)
```bash cURL (Passo 1) theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"on_demand": true,
"search_params": {
"filter": {
"side": "Passive",
"tribunals": {
"keys": ["TJBA"],
"not_equal": false
}
}
}
}
}'
```
Guarde o `request_id` (ex: `05ee9825...`) gerado na resposta desta chamada. Ele é o seu passaporte para os próximos passos.
***
**🚀 Atalho: Automatize com Webhooks (Recomendado)**
Se você possui uma URL de Webhook configurada, **os Passos 2 e 3 abaixo são totalmente opcionais**.
Em vez de programar sua aplicação para ficar perguntando o status da requisição, a Judit API enviará os processos encontrados de forma **incremental** diretamente para o seu servidor assim que eles forem capturados, finalizando o fluxo com um evento de `request_completed`.
👉 *[Aprenda a configurar e receber Webhooks aqui](/webhook/callbacks)*
***
## Passo 2: Consultar o Status da Requisição
Como um documento pode estar atrelado a centenas de processos no Brasil, a coleta leva tempo. Você deve consultar o status macro da requisição usando o ID do Passo 1.
`GET https://requests.production.judit.io/requests/`
```bash cURL (Passo 2) theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data ''
```
Você deve realizar *polling* (consultas periódicas) nesta rota até que a propriedade `"status"` mude de `"pending"` para **`"completed"`**.
*(Nota: O uso de Webhooks elimina a necessidade deste passo).*
### Verificação Granular (Apenas para On-Demand)
Como a busca On-Demand consulta dezenas de sistemas simultaneamente, você pode acompanhar o status individual de cada tribunal acessado usando a rota de *Crawls*:
```bash cURL theme={null}
curl --location 'https://crawler.production.judit.io/crawls/request/?page=1&page_size=10' \
--header 'api-key: '
```
```json theme={null}
{
"page": 1,
"page_data": [
{
"source_name": "JPje - RO - Lawsuit - Auth - 2 instance",
"tribunal_acronym": "TJRO",
"status": "done",
"updated_at": "2025-10-28T00:04:40.651Z"
},
{
"source_name": "JTJRJ - RJ - Lawsuit - Auth - 1 instance",
"tribunal_acronym": "TJRJ",
"status": "pending",
"updated_at": "2025-10-28T00:04:53.157Z"
}
]
}
```
***
## Passo 3: Consumir e Filtrar os Resultados (GET)
Assim que o status no Passo 2 retornar `"completed"`, os dados estão prontos!
É aqui, na rota `GET /responses`, que você puxa o JSON final. A grande sacada deste endpoint é que **ele permite aplicar filtros dinâmicos via URL (Query Params)**, permitindo que você fatie, ordene e pagine a resposta final do jeito que quiser, sem precisar gerar uma nova requisição (POST).
`GET https://requests.production.judit.io/responses/`
### Filtros Dinâmicos na URL (Query Params)
Estes são os parâmetros que você pode concatenar na sua requisição final:
| Query Param | Tipo / Formato | Descrição |
| :----------------------- | :------------- | :----------------------------------------------------------------------------------------------- |
| `request_id` | string (UUID) | **Obrigatório.** O ID gerado no Passo 1. |
| `page` | integer | Número da página atual para navegação (Padrão: `1`). |
| `page_size` | integer | Quantidade de resultados retornados por página. **Máximo permitido: 1000** (Recomendado: `100`). |
| `response_type` | array JSON | Tipo de resposta desejada. Ex: `["lawsuit"]`. |
| `code` | array JSON | Filtra por números de processo específicos. Ex: `["0601708-42..."]`. |
| `instance` | array JSON | Filtra pelos graus de jurisdição. Ex: `[1, 2]`. |
| `cached` | boolean | Retorna apenas processos cacheados (`true`) ou de captura nova (`false`). |
| `classifications_code` | array JSON | Códigos de classe processual exatos (Ex: `["437"]`). |
| `subjects_code` | array JSON | Códigos de assunto do CNJ exatos (Ex: `["6226"]`). |
| `created_at_gte` / `lte` | string (Data) | Filtra pela data em que o processo entrou na base da Judit. |
| `order` | objeto JSON | Ordena a listagem. Ex: `{"created_at": "desc"}`. |
| `tags.criminal` | boolean | Retorna `true` apenas para processos da esfera criminal. |
```bash cURL (Busca Básica) theme={null}
# Retorna os processos usando apenas o parâmetro obrigatório
curl -X GET "[https://requests.production.judit.io/responses?request_id=](https://requests.production.judit.io/responses?request_id=)" \
-H "api-key: SUA_API_KEY" \
-H "Content-Type: application/json"
```
```bash cURL (Busca Avançada com Filtros) theme={null}
# O parâmetro -g (--globoff) permite o uso de colchetes [] na URL sem quebrar o terminal.
# Nota: Na sua aplicação, lembre-se de aplicar URL Encoding nesses parâmetros.
curl -g -X GET "[https://requests.production.judit.io/responses](https://requests.production.judit.io/responses)\
?request_id=\
&response_type=[\"lawsuit\"]\
&code=[\"0601708-42.2025.8.04.4700\"]\
&instance=[1,2]\
&cached=false\
&classifications_code=[\"437\"]\
&classifications_name=[\"PROCEDIMENTO DO JUIZADO ESPECIAL CÍVEL\"]\
&subjects_code=[\"6226\"]\
&subjects_name=\"INCLUSÃO INDEVIDA EM CADASTRO DE INADIMPLENTES\"\
&created_at_gte=2026-03-01T00:00:00.000Z\
&created_at_lte=2026-03-05T00:00:00.000Z\
&request_created_at_gte=2026-03-02T00:00:00.000Z\
&request_created_at_lte=2026-03-05T00:00:00.000Z\
&page=1\
&page_size=1000\
&order={\"created_at\":\"desc\"}\
&tags.criminal=true" \
-H "api-key: SUA_API_KEY" \
-H "Content-Type: application/json"
```
### O formato da Resposta
O retorno traz as chaves de paginação e o array `page_data`, onde cada objeto contém a `response_data` (A Capa do Processo).
Status final da resposta (Deve ser `completed`).
Página atual da busca.
Total de processos renderizados nesta página.
Total absoluto de processos encontrados e vinculados ao documento.
Quantidade total de páginas disponíveis.
Array de objetos. Cada objeto contém a chave `response_data` que abriga a [Capa do Processo](/schemas/lawsuit-object).
```json theme={null}
{
"page": 1,
"page_count": 1,
"all_count": 1,
"all_pages_count": 1,
"request_status": "completed",
"page_data": [
{
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"response_id": "e49d2e2c-92ed-4dad-8701-c53a569d675b",
"response_type": "lawsuit",
"response_data": {
"code": "0000000-00.0000.0.00.0000",
"tribunal_acronym": "TJSP",
"instance": 1,
"parties": [
{ "name": "Usuário teste", "side": "Active", "person_type": "Autor" }
]
}
}
]
}
```
# Busca Processual Assíncrona por CNJ
Source: https://docs.judit.io/requests/requests
Fluxo assíncrono para consultar um processo específico pelo número CNJ na Judit API: criação da requisição, acompanhamento de status e leitura do resultado completo, incluindo IA opcional.
**Resposta em cache (`cached_response`)**
Quando você cria uma consulta processual ou histórica, a Judit primeiro verifica se o dado já está em nossa base. Se estiver, devolvemos imediatamente o resultado — tanto na resposta da API quanto via webhook (se você tiver cadastrado) — com o campo `cached_response: true`.
Em paralelo, a Judit dispara uma atualização nos tribunais. Se houver alguma mudança, você recebe **uma segunda resposta** com `cached_response: false`. Esse é o resultado mais atual.
Por isso, é normal receber dois webhooks aparentemente iguais para o mesmo `request_id`:
* O primeiro vem do cache (`cached_response: true`)
* O último é o atualizado (`cached_response: false`)
Use esse campo para identificar com precisão qual retorno representa o estado mais recente do processo.
A **Busca Processual Assíncrona** é a forma mais completa e atualizada de consultar um processo: a Judit vai até o tribunal em tempo real, baixa toda a árvore de dados (capa, partes, advogados, andamentos, classes, anexos) e devolve para você por webhook ou polling.
> 🤖 A rota de busca processual opera de forma **assíncrona**. A aplicação cliente deve fazer um `POST /requests` para iniciar a busca, aguardar o processamento (via Webhook ou consultando via `GET /requests/{id}`) e, quando o status for `completed`, capturar os dados via `GET /responses`.
## Quando usar
O processo precisa estar com a fotografia mais recente do tribunal — não vale o cache do datalake.
Você quer todos os campos da capa, todas as movimentações, anexos e relacionamentos.
Acionar `judit_ia: ["summary"]` para receber um resumo humanizado pronto para sua UI.
Combine com o [Cofre de Credenciais](/essentials/cofre-de-credenciais) para acessar processos que exigem login no tribunal.
> Se a velocidade é mais importante que a frescor (ex.: validação em tela, dashboard interativo), prefira a [Consulta Síncrona Hot Storage](/cache-judit/hotstorage) — a resposta vem em milissegundos do datalake JUDIT.
## Fluxo assíncrono (visão geral)
```mermaid theme={null}
sequenceDiagram
autonumber
participant App as Sua aplicação
participant Judit as Judit API
participant Court as Tribunal
App->>Judit: POST /requests {search_type, search_key}
Judit-->>App: 200 {request_id, status: "pending"}
Judit->>Court: extração no tribunal
Court-->>Judit: dados do processo
alt webhook configurado
Judit-->>App: POST callback_url (response com cached_response)
else polling
App->>Judit: GET /requests/{id}
Judit-->>App: status: "completed"
App->>Judit: GET /responses?request_id=...
Judit-->>App: response_data com lawsuit
end
```
## Entendendo o Fluxo Assíncrono
Como a extração de dados diretamente dos tribunais pode levar alguns segundos ou minutos (dependendo da instabilidade do tribunal), a Judit API utiliza um padrão assíncrono de requisições.
O fluxo consiste em 3 passos simples:
1. **Criar a requisição:** Você envia o número do processo.
2. **Acompanhar o status:** Você verifica se o robô terminou a extração.
3. **Capturar o resultado:** Você consome o JSON com os dados do processo.
***
## Passo 1: Criando a Requisição de Busca
Para iniciar uma busca processual, faça uma requisição `POST` para a rota base de requisições enviando os parâmetros desejados no corpo (body) da chamada.
### Parâmetros do Payload (Body)
Consulte a tabela abaixo para configurar sua busca, habilitar anexos ou acionar a **Judit IA**:
| Parâmetro | Tipo | Obrigatório | Descrição |
| :------------------------------- | :------ | :---------- | :---------------------------------------------------------------------------------------------------------------------------- |
| `search.search_type` | string | **Sim** | Define a entidade buscada. Para processos, use sempre `"lawsuit_cnj"`. |
| `search.search_key` | string | **Sim** | O número do processo no padrão CNJ (ex: `"0009999-99.9999.8.26.9999"`). |
| `cache_ttl_in_days` | integer | Não | Otimiza a busca retornando dados cacheados caso o processo já tenha sido consultado nos últimos X dias. |
| `with_attachments` | boolean | Não | Se `true`, a Judit fará o download dos arquivos do processo. |
| `judit_ia` | array | Não | Lista de *features* de IA aplicadas ao resultado. Envie `["summary"]` para receber um resumo humanizado da capa e andamentos. |
| `search_params.lawsuit_instance` | integer | Não | Força a busca em uma instância específica (ex: `1` ou `2`). |
**Judit IA (Beta):** A funcionalidade de inteligência artificial (`judit_ia`) está em versão Beta. O tempo de resposta pode variar e a estrutura do resumo está sujeita a melhorias.
### Exemplo de Requisição (POST)
```bash cURL (Sem Anexos) theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0009999-99.9999.8.26.9999"
},
"with_attachments": false
}'
```
```bash cURL (Com Anexos) theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0009999-99.9999.8.26.9999"
},
"with_attachments": true
}'
```
```bash cURL (Com Anexos e IA) theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0009999-99.9999.8.26.9999"
},
"with_attachments": true,
"judit_ia": ["summary"]
}'
```
```bash cURL (Com customer_key) theme={null}
curl --location 'https://requests.prod.judit.io/requests/' \
--header 'Content-Type: application/json' \
--header 'api-key: ' \
--data '{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0000000-00.0000.0.00.0000",
"search_params": {
"credential": {
"customer_key": "CUSTOMER-KEY"
}
}
}
}'
```
```json Exemplo de Resposta (Status 201) theme={null}
{
"request_id": "84b4d8f5-50f8-4c14-818f-912c722a6908",
"search": {
"search_type": "lawsuit_cnj",
"search_key": "0009999-99.9999.8.26.9999",
"response_type": "lawsuit"
},
"with_attachments": true,
"status": "pending",
"created_at": "2024-06-18T22:03:35.560Z"
}
```
Guarde o valor de `request_id`, pois você precisará dele para os próximos passos.
***
**🚀 Atalho: Automatize com Webhooks (Recomendado)**
Se você possui uma URL de Webhook configurada, **os Passos 2 e 3 abaixo são totalmente opcionais**.
Em vez de programar sua aplicação para ficar perguntando o status da requisição, a Judit API enviará os processos encontrados de forma **incremental** diretamente para o seu servidor assim que eles forem capturados, finalizando o fluxo com um evento de `request_completed`.
👉 *[Aprenda a configurar e receber Webhooks aqui](/webhook/callbacks)*
***
## Passo 2: Consultar o Status da Requisição
Esta etapa é crucial caso você não esteja utilizando **Webhooks**. As respostas são inseridas no banco de dados de forma incremental à medida que os robôs interagem com o tribunal.
Para saber se a extração finalizou, consulte o endpoint de histórico de requisições passando o ID gerado no Passo 1:
```bash cURL theme={null}
curl --location 'https://requests.production.judit.io/requests/' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data ''
```
```json Exemplo de resposta (200 OK) theme={null}
{
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"origin": "api",
"origin_id": "46fac09a-b34f-4dfd-a24f-b358bf04dfd4",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "completed",
"created_at": "2024-02-21T17:33:22.876Z",
"updated_at": "2024-02-21T17:33:26.316Z",
"tags": {
"dashboard_id": null
}
}
```
Aguarde até que a propriedade **`status`** mude para **`"completed"`**.
***
## Passo 3: Capturar o Resultado (O Processo)
Assim que o status estiver `completed`, você pode resgatar os dados completos do processo judicial (e o resumo da IA, se solicitado).
### Exemplo de requisição (GET)
```bash cURL theme={null}
curl --location 'https://requests.production.judit.io/responses?page_size=100&request_id=' \
--header 'api-key: '"$JUDIT_API_KEY"
```
```javascript Node.js theme={null}
const res = await fetch(
`https://requests.production.judit.io/responses?page_size=100&request_id=${requestId}`,
{ headers: { "api-key": process.env.JUDIT_API_KEY } }
);
const data = await res.json();
console.log(data.page_data);
```
```php PHP theme={null}
true,
CURLOPT_HTTPHEADER => ['api-key: ' . getenv('JUDIT_API_KEY')],
]);
echo curl_exec($ch);
```
```python Python theme={null}
import os, requests
resp = requests.get(
"https://requests.production.judit.io/responses",
params={"request_id": request_id, "page_size": 100},
headers={"api-key": os.environ["JUDIT_API_KEY"]},
timeout=15,
)
print(resp.json())
```
```go Go theme={null}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
)
func main() {
requestID := ""
base, _ := url.Parse("https://requests.production.judit.io/responses")
q := base.Query(); q.Set("request_id", requestID); q.Set("page_size", "100")
base.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", base.String(), nil)
req.Header.Set("api-key", os.Getenv("JUDIT_API_KEY"))
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body); fmt.Println(string(out))
}
```
### Exemplos de resposta
```json Exemplo de resposta simples (200 OK) theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 1,
"all_pages_count": 1,
"all_count": 1,
"page_data": [
{
"request_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_id": "061c60b2-7fa9-4d20-87bb-1bedd31d5572",
"origin": "api",
"origin_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"justice": "8",
"tribunal": "26",
"instance": 1,
"distribution_date": "2019-02-15T16:00:00.000Z",
"judge": "Usuário teste",
"tribunal_acronym": "TJSP",
"secrecy_level": 0,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"dictionary_updated_at": "2025-08-13T18:43:48.143Z"
},
"subjects": [
{
"code": "",
"name": "PAGAMENTO"
}
],
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"courts": [
{
"name": "1ª Vara Cível"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"name": "Usuário 5",
"side": "Active",
"person_type": "Advogado",
"documents": []
},
{
"name": "Usuário 3",
"side": "Passive",
"person_type": "Advogado",
"documents": []
}
],
"steps": [
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32,
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "939794b9",
"content": "Arquivado Definitivamente",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "423978eb",
"content": "Trânsito em Julgado às partes\nCertidão de trânsito em julgado e remessa ao arquivo geral",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
}
],
"attachments": [
{
"attachment_id": "60153051-1-1",
"attachment_date": "2019-02-15T16:00:41.000Z",
"attachment_name": "Petição (Outras)",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153057-5-1",
"attachment_date": "2019-02-15T16:00:42.000Z",
"attachment_name": "Instrumento de Procuração",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153061-6-1",
"attachment_date": "2019-02-15T16:00:43.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153064-7-1",
"attachment_date": "2019-02-15T16:00:44.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
}
],
"related_lawsuits": [],
"crawler": {
"source_name": "JSaj - TJ - SP - Lawsuit - Auth - 1 instance",
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"weight": 10,
"updated_at": "2025-08-13T18:43:47.770Z"
},
"metadata": {},
"county": "VARA JUIZADO ESP. CIVEL CRIM. DE FERNANDOPOLIS",
"amount": 5798,
"state": "SP",
"city": "FERNANDOPOLIS",
"justice_description": "JUSTIÇA ESTADUAL",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32
},
"phase": "Execução ou cumprimento",
"status": "Ativo",
"name": "Usuário 4 X Usuário 2",
"created_at": "2025-08-13T18:43:51.016Z",
"updated_at": "2025-08-13T18:43:51.016Z",
"free_justice": false
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-08-13T18:40:54.982Z",
"request_created_at": "2025-08-13T18:40:54.037Z",
"tags": {
"debug": true,
"dashboard_id": null,
"cached_response": false,
"cached": false
}
}
]
}
```
```json Exemplo de resposta com anexo (200 OK) theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 1,
"all_pages_count": 1,
"all_count": 1,
"page_data": [
{
"request_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_id": "061c60b2-7fa9-4d20-87bb-1bedd31d5572",
"origin": "api",
"origin_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"justice": "8",
"tribunal": "26",
"instance": 1,
"distribution_date": "2019-02-15T16:00:00.000Z",
"judge": "Usuário teste",
"tribunal_acronym": "TJSP",
"secrecy_level": 0,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"dictionary_updated_at": "2025-08-13T18:43:48.143Z"
},
"subjects": [
{
"code": "",
"name": "PAGAMENTO"
}
],
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"courts": [
{
"name": "1ª Vara Cível"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"name": "Usuário 5",
"side": "Active",
"person_type": "Advogado",
"documents": []
},
{
"name": "Usuário 3",
"side": "Passive",
"person_type": "Advogado",
"documents": []
}
],
"steps": [
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32,
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "939794b9",
"content": "Arquivado Definitivamente",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "423978eb",
"content": "Trânsito em Julgado às partes\nCertidão de trânsito em julgado e remessa ao arquivo geral",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
}
],
"attachments": [
{
"attachment_id": "60153051-1-1",
"attachment_date": "2019-02-15T16:00:41.000Z",
"attachment_name": "Petição (Outras)",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153057-5-1",
"attachment_date": "2019-02-15T16:00:42.000Z",
"attachment_name": "Instrumento de Procuração",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153061-6-1",
"attachment_date": "2019-02-15T16:00:43.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153064-7-1",
"attachment_date": "2019-02-15T16:00:44.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
}
],
"related_lawsuits": [],
"crawler": {
"source_name": "JSaj - TJ - SP - Lawsuit - Auth - 1 instance",
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"weight": 10,
"updated_at": "2025-08-13T18:43:47.770Z"
},
"metadata": {},
"county": "VARA JUIZADO ESP. CIVEL CRIM. DE FERNANDOPOLIS",
"amount": 5798,
"state": "SP",
"city": "FERNANDOPOLIS",
"justice_description": "JUSTIÇA ESTADUAL",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32
},
"phase": "Execução ou cumprimento",
"status": "Ativo",
"name": "Usuário 4 X Usuário 2",
"created_at": "2025-08-13T18:43:51.016Z",
"updated_at": "2025-08-13T18:43:51.016Z",
"free_justice": false
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-08-13T18:40:54.982Z",
"request_created_at": "2025-08-13T18:40:54.037Z",
"tags": {
"debug": true,
"dashboard_id": null,
"cached_response": false,
"cached": false
}
}
]
}
```
```json Exemplo de resposta com judit ia (200 OK) theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 1,
"all_pages_count": 1,
"all_count": 1,
"page_data": [
{
"request_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_id": "061c60b2-7fa9-4d20-87bb-1bedd31d5572",
"origin": "api",
"origin_id": "03abbf28-822e-45a0-a22c-098fbe157aa4",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"justice": "8",
"tribunal": "26",
"instance": 1,
"distribution_date": "2019-02-15T16:00:00.000Z",
"judge": "Usuário teste",
"tribunal_acronym": "TJSP",
"secrecy_level": 0,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"dictionary_updated_at": "2025-08-13T18:43:48.143Z"
},
"subjects": [
{
"code": "",
"name": "PAGAMENTO"
}
],
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"courts": [
{
"name": "1ª Vara Cível"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 4",
"side": "Active",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 5",
"documents": []
}
]
},
{
"name": "Usuário 2",
"side": "Passive",
"person_type": "Desconhecido",
"documents": [],
"lawyers": [
{
"name": "Usuário 3",
"documents": []
}
]
},
{
"name": "Usuário 5",
"side": "Active",
"person_type": "Advogado",
"documents": []
},
{
"name": "Usuário 3",
"side": "Passive",
"person_type": "Advogado",
"documents": []
}
],
"steps": [
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32,
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "939794b9",
"content": "Arquivado Definitivamente",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-06-06T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "36fc0ffd-98fa-4990-bd6f-6a82e5565119"
},
"step_id": "423978eb",
"content": "Trânsito em Julgado às partes\nCertidão de trânsito em julgado e remessa ao arquivo geral",
"created_at": "2025-07-09T13:48:33.114Z",
"updated_at": "2025-08-11T18:57:39.041Z"
}
],
"attachments": [
{
"attachment_id": "60153051-1-1",
"attachment_date": "2019-02-15T16:00:41.000Z",
"attachment_name": "Petição (Outras)",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153057-5-1",
"attachment_date": "2019-02-15T16:00:42.000Z",
"attachment_name": "Instrumento de Procuração",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153061-6-1",
"attachment_date": "2019-02-15T16:00:43.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
},
{
"attachment_id": "60153064-7-1",
"attachment_date": "2019-02-15T16:00:44.000Z",
"attachment_name": "Guia",
"extension": "pdf",
"status": "pending",
"tags": {
"crawl_id": "424cd251-3d1f-407e-9d17-cb61219545aa"
},
"user_data": null
}
],
"related_lawsuits": [],
"crawler": {
"source_name": "JSaj - TJ - SP - Lawsuit - Auth - 1 instance",
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805",
"weight": 10,
"updated_at": "2025-08-13T18:43:47.770Z"
},
"metadata": {},
"county": "VARA JUIZADO ESP. CIVEL CRIM. DE FERNANDOPOLIS",
"amount": 5798,
"state": "SP",
"city": "FERNANDOPOLIS",
"justice_description": "JUSTIÇA ESTADUAL",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_date": "2019-07-16T00:00:00.000Z",
"private": false,
"tags": {
"crawl_id": "a9b6820a-6c84-4db5-b4f4-2f1909aa3805"
},
"step_id": "56174b2e",
"content": "Início da Execução Juntado\n0003695-16.2019.8.26.0189 - Cumprimento de sentença",
"steps_count": 32
},
"phase": "Execução ou cumprimento",
"status": "Ativo",
"name": "Usuário 4 X Usuário 2",
"created_at": "2025-08-13T18:43:51.016Z",
"updated_at": "2025-08-13T18:43:51.016Z",
"free_justice": false
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-08-13T18:40:54.982Z",
"request_created_at": "2025-08-13T18:40:54.037Z",
"tags": {
"debug": true,
"dashboard_id": null,
"cached_response": false,
"cached": false
}
}
]
},
{
"request_id": "3c6614e3-25f1-4df4-9675-694c3ea01499",
"response_id": "2dc884c1-e57b-47be-ba6c-568b3f066799",
"origin": "api",
"origin_id": "3c6614e3-25f1-4df4-9675-694c3ea014d9",
"response_type": "summary",
"response_data": {
"data": [
"## Resumo\n\nO processo de número 0000000-00.0000.0.00.0000 trata-se de uma disputa judicial envolvendo direitos autorais,
onde o requerente, Usuário 1, alega ter seus direitos violados pelo requerido, Usuário 2. A distribuição do processo ocorreu no dia 7 de agosto de 2015 e, após trâmites
legais e recursos, o processo foi arquivado definitivamente em 22 de novembro de 2024. Durante todo esse tempo, houve várias movimentações, incluindo cumprimento e execução
de sentença.\n\n## Partes\n\n\n - \n
\n Usuário 1\n
CPF: 000.000.000-00\n
\n
\n Requerente
da ação, buscando a proteção de seus direitos autorais que alega terem sido violados.\n
\n
\n
\n \n \n
\n Usuário 2\n
CNPJ: 00.000.000/0000-00\n
\n
\n Requerido na ação, acusado de violar direitos autorais do
requerente.\n
\n
\n \n \n\n\n## Classe\n\n\n - \n
\n Procedimento Comum Cível\n
\n
\n É uma classe
processual genérica para ações que vão a julgamento com base no direito civil, não enquadrando-se em procedimentos especiais.\n
\n \n \n
\n\n##
Assuntos\n\n\n\n## Movimentações\n\nEm termos gerais, o processo foi marcado por uma longa tramitação. Inicialmente,
o requerente Usuário 1 buscou judicialmente a defesa de seus direitos autorais, alegando violações por parte do requerido,
Usuário 2. Durante o caso, houve apelação (tentativa de modificar uma decisão desfavorável) pelo requerente, além de embargos de declaração (pedidos de esclarecimento sobre a decisão), ambos não
acolhidos, mantendo-se inalterada a decisão contestada. Em 23 de julho de 2023, houve o recebimento dos autos do Tribunal de Justiça com trânsito
em julgado (quando não há mais possibilidade de recurso) da decisão que negou provimento ao recurso do requerente. Seguiu-se a execução da sentença, na qual se busca o cumprimento do
que foi determinado pela Justiça, e finalmente, o processo foi arquivado definitivamente em 22 de novembro de 2024, sinalizando a conclusão do litígio."
],
"origin_id": "0f5baa30-f681-47cd-a381-01d489f4d079",
"origin": "response"
},
"user_id": "7f8065a3-4891-9999-9456-dedfc12ff899",
"created_at": "2026-03-18T17:18:18.156Z",
"request_created_at": "2026-03-18T17:16:15.810Z"
}
```
### O que você recebe de volta?
O retorno é paginado e contém o [Objeto Lawsuit](/schemas/lawsuit-object) dentro do array `page_data`. Se você solicitou a \*\*Judi
esa de seus direitos perante o Usuário 2.}
# Consumo da Judit API
Source: https://docs.judit.io/resource/consumption
Como acompanhar e estimar o consumo da Judit API por requisições, com exemplos práticos para extrair relatórios de uso por período.
# 📘 Como consultar meu histórico de requisições realizadas pela API JUDIT
Este passo a passo irá te mostrar como consultar o histórico de requisições realizadas por meio da API JUDIT. Com isso, você poderá visualizar detalhes como:
* Tipo de busca realizada
* Período
* Presença de anexos
* Origem da requisição (monitoramento ou API)
* E inclusive inferir o custo de cada operação.
***
## 1. Como consultar o histórico via Postman (usando cURL)
Para realizar a requisição:
Copie o seguinte comando `cURL` e cole no **Postman** (modo *Raw* no Body e tipo `POST`):
```bash theme={null}
curl --location 'https://requests.production.judit.io/requests?page_size=1000&created_at_gte=&created_at_lte=' \
--header 'api-key: INSIRA_SUA_API_KEY_AQUI' \
--header 'Content-Type: application/json' \
--data ''
```
Substitua `` e `` no formato `YYYY-MM-DD`, por exemplo:
```
created_at_gte=2024-09-12&created_at_lte=2050-09-12
```
***
## 2. Como consultar o histórico via JavaScript (fetch)
Exemplo de código:
```js theme={null}
const url = 'https://requests.production.judit.io/requests?page_size=1000&created_at_gte=2024-09-12&created_at_lte=2050-09-12';
const options = {
method: 'GET',
headers: {
'api-key': ''
}
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
```
***
## 3. Exemplo de resposta da API
Trecho de exemplo:
```json theme={null}
{
"page": 1,
"page_data": [
{
"request_id": "0dcd4c1f-c9bf-4327-899e-0550a627feca",
"search": {
"on_demand": false,
"search_type": "lawsuit_cnj",
"search_key": "0000999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"public_search": false,
"filter": {
"party_names": [],
"party_documents": []
},
"pagination": {}
}
},
"with_attachments": true,
"origin": "tracking",
"status": "completed",
"created_at": "2025-07-25T21:10:03.334Z",
"updated_at": "2025-07-25T21:10:25.352Z"
}
]
}
```
***
## 4. Explicação dos principais campos
| Campo | Significado |
| -------------------- | ---------------------------------------------------------------------------- |
| `origin` | Pode ser `api` (requisição direta) ou `tracking` (monitoramento automático). |
| `response_type` | Tipo de retorno: `lawsuit`, `entity`, `warrant`, `lawsuits`. |
| `search.search_type` | Tipo de busca: `cpf`, `cnpj`, `oab`, `name`, `lawsuit_cnj`. |
| `on_demand` | Se `true`, indica consulta em tempo real no tribunal. |
| `with_attachments` | Se `true`, foram incluídos autos processuais (impacta no custo). |
***
## 🔍 Interpretação dos campos
### `origin`
Esse campo indica a **origem** da requisição, podendo assumir os seguintes valores:
* `api`: consulta realizada diretamente por meio da API.
* `tracking`: consulta realizada via monitoramento (recorrente).
### `response_type`
Define o tipo de documento que será retornado na busca. As possibilidades incluem:
* `lawsuit`: utilizado em consultas por NUP (Número Único do Processo).
* `lawsuits`: utilizado em buscas por CPF, CNPJ, OAB ou NAME, retornando uma lista de processos.
* `entity`: utilizado em busca cadastral (por CPF, CNPJ, etc).
* `warrant`: utilizado em busca por mandado de prisão.
***
## 🧪 Exemplo real e análise de precificação
```json theme={null}
{
"request_id": "c2af614a-8296-4060-bf9a-3b087679c472",
"search": {
"on_demand": true,
"search_type": "lawsuit_cnj",
"search_key": "0000999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"public_search": false,
"filter": {
"party_names": [],
"party_documents": []
},
"pagination": {}
}
},
"with_attachments": true,
"callback_url": "https://webhook.site/...",
"origin": "tracking",
"status": "completed",
"created_at": "2025-07-25T21:10:03.334Z"
}
```
### 💰 Análise da precificação com base nos campos:
* `origin: tracking` → é uma consulta através de monitoramento, portanto cobrança **mensal**.
* `search_type: lawsuit_cnj` → o monitoramento é processual por número CNJ.
* `on_demand: true` → como se trata de monitoramento, esse valor sempre será true já que todo monitoramento é on-demand.
* `with_attachments: true` → autos processuais foram coletados, o que implica cobrança adicional.
***
## 🔸 Total estimado da requisição:
Os valores apresentados são meramente ilustrativos. Para informações comerciais reais, consulte nossa tabela oficial.
* **Monitoramento processual**: R\$ 0,69/mês
* **Autos processuais**: R\$ 3,50 (cobrança única)
### ➡️ **Custo total estimado**: R\$ 4,19
***
## ℹ️ Pontos importantes
* A cobrança pode variar conforme o tipo de busca, tempo real (`on_demand`) e presença de anexos.
* Requisições via `tracking` são renovadas mensalmente enquanto o monitoramento estiver ativo.
* Requisições do tipo histórica (`cpf`, `cnpj`, etc.) têm cobrança única por consulta.
***
# Cobertura de Tribunais
Source: https://docs.judit.io/resource/courtCoverage
Lista completa dos tribunais brasileiros cobertos pela Judit API — Justiça Estadual, Federal, Trabalhista, Eleitoral, Militar, Superior e BNMP. Use como referência para o filtro tribunals.keys nas suas consultas.
A Judit cobre **todos os principais tribunais do Brasil** — Justiça Estadual (TJ), Federal (TRF), Trabalhista (TRT), Eleitoral (TRE), Militar, Superior (STF/STJ/TST/TSE) e o Banco Nacional de Mandados de Prisão (BNMP). Esta página é a referência canônica das **siglas (keys)** que você usa nos filtros `tribunals.keys` das consultas e monitoramentos.
> 🤖 As siglas abaixo são exatamente as que devem ser passadas em filtros como `search_params.filter.tribunals.keys`. Cobertura nacional vai sendo expandida — se faltar algum tribunal, [fale com nosso suporte](https://api.whatsapp.com/send/?phone=5511920501949).
## Cobertura por categoria
Todos os 27 TJs (TJSP, TJRJ, TJMG, TJRS, ...).
TRF1, TRF2, TRF3, TRF4, TRF5, TRF6 e Justiça Federal de 1º grau.
TST + TRT1 ao TRT24.
TSE + TREs estaduais.
STM + Justiça Militar Estadual (SP, MG, RS).
STF, STJ, TST, TSE, STM, CNJ, CNMP.
## Como usar nos filtros
```json Incluir apenas tribunais específicos theme={null}
{
"search_params": {
"filter": {
"tribunals": {
"keys": ["TJSP", "TJRJ", "TRT2"],
"not_equal": false
}
}
}
}
```
```json Excluir tribunais específicos theme={null}
{
"search_params": {
"filter": {
"tribunals": {
"keys": ["TJSP"],
"not_equal": true
}
}
}
}
```
## Lista completa de tribunais
| Sigla (`key`) | Nome oficial |
| :------------ | :-------------------------------------- |
| `STF` | Supremo Tribunal Federal |
| `STJ` | Superior Tribunal de Justiça |
| `TST` | Tribunal Superior do Trabalho |
| `TSE` | Tribunal Superior Eleitoral |
| `STM` | Superior Tribunal Militar |
| `CNJ` | Conselho Nacional de Justiça |
| `CNMP` | Conselho Nacional do Ministério Público |
| Sigla | UF | Nome oficial |
| :------ | :- | :---------------------------------------------------- |
| `TJAC` | AC | Tribunal de Justiça do Acre |
| `TJAL` | AL | Tribunal de Justiça de Alagoas |
| `TJAM` | AM | Tribunal de Justiça do Amazonas |
| `TJAP` | AP | Tribunal de Justiça do Amapá |
| `TJBA` | BA | Tribunal de Justiça da Bahia |
| `TJCE` | CE | Tribunal de Justiça do Ceará |
| `TJDFT` | DF | Tribunal de Justiça do Distrito Federal e Territórios |
| `TJES` | ES | Tribunal de Justiça do Espírito Santo |
| `TJGO` | GO | Tribunal de Justiça de Goiás |
| `TJMA` | MA | Tribunal de Justiça do Maranhão |
| `TJMG` | MG | Tribunal de Justiça de Minas Gerais |
| `TJMS` | MS | Tribunal de Justiça do Mato Grosso do Sul |
| `TJMT` | MT | Tribunal de Justiça do Mato Grosso |
| `TJPA` | PA | Tribunal de Justiça do Pará |
| `TJPB` | PB | Tribunal de Justiça da Paraíba |
| `TJPE` | PE | Tribunal de Justiça de Pernambuco |
| `TJPI` | PI | Tribunal de Justiça do Piauí |
| `TJPR` | PR | Tribunal de Justiça do Paraná |
| `TJRJ` | RJ | Tribunal de Justiça do Rio de Janeiro |
| `TJRN` | RN | Tribunal de Justiça do Rio Grande do Norte |
| `TJRO` | RO | Tribunal de Justiça de Rondônia |
| `TJRR` | RR | Tribunal de Justiça de Roraima |
| `TJRS` | RS | Tribunal de Justiça do Rio Grande do Sul |
| `TJSC` | SC | Tribunal de Justiça de Santa Catarina |
| `TJSE` | SE | Tribunal de Justiça de Sergipe |
| `TJSP` | SP | Tribunal de Justiça de São Paulo |
| `TJTO` | TO | Tribunal de Justiça do Tocantins |
| Sigla | Estados cobertos | Sede |
| :----- | :------------------------------------------------- | :--------------------------------------------------- |
| `TRF1` | AC, AM, AP, BA, DF, GO, MA, MG, PA, PI, RO, RR, TO | Brasília/DF |
| `TRF2` | RJ, ES | Rio de Janeiro/RJ |
| `TRF3` | SP, MS | São Paulo/SP |
| `TRF4` | RS, SC, PR | Porto Alegre/RS |
| `TRF5` | AL, CE, PB, PE, RN, SE | Recife/PE |
| `TRF6` | MG | Belo Horizonte/MG (criado em 2022, separado do TRF1) |
| Sigla | Região | UF principal |
| :------ | :--------- | :----------------------- |
| `TRT1` | 1ª Região | RJ |
| `TRT2` | 2ª Região | SP (capital + grande SP) |
| `TRT3` | 3ª Região | MG |
| `TRT4` | 4ª Região | RS |
| `TRT5` | 5ª Região | BA |
| `TRT6` | 6ª Região | PE |
| `TRT7` | 7ª Região | CE |
| `TRT8` | 8ª Região | PA, AP |
| `TRT9` | 9ª Região | PR |
| `TRT10` | 10ª Região | DF, TO |
| `TRT11` | 11ª Região | AM, RR |
| `TRT12` | 12ª Região | SC |
| `TRT13` | 13ª Região | PB |
| `TRT14` | 14ª Região | RO, AC |
| `TRT15` | 15ª Região | SP (interior) |
| `TRT16` | 16ª Região | MA |
| `TRT17` | 17ª Região | ES |
| `TRT18` | 18ª Região | GO |
| `TRT19` | 19ª Região | AL |
| `TRT20` | 20ª Região | SE |
| `TRT21` | 21ª Região | RN |
| `TRT22` | 22ª Região | PI |
| `TRT23` | 23ª Região | MT |
| `TRT24` | 24ª Região | MS |
Os TREs cobrem cada UF. Padrão de sigla: `TRE` + UF.
Exemplos: `TRESP`, `TRERJ`, `TREMG`, `TRERS`, `TREDF`, `TREBA`, `TREPE`, `TREGO`, `TREPR`, `TREES`, `TRECE`, `TREMA`, `TREPB`, `TREAM`, `TREPI`, `TRERN`, `TRESE`, `TREMS`, `TREMT`, `TRESC`, `TREPA`, `TREAL`, `TRERO`, `TREAC`, `TRETO`, `TREAP`, `TRERR`.
| Sigla | UF |
| :------ | :---------------- |
| `TJMSP` | São Paulo |
| `TJMMG` | Minas Gerais |
| `TJMRS` | Rio Grande do Sul |
> Nas demais UFs a competência militar estadual é exercida pelos próprios TJs.
| Sigla / Fonte | Descrição |
| :------------ | :----------------------------------------------------------------- |
| `BNMP` | Banco Nacional de Mandados de Prisão (CNJ) |
| `RECEITA` | Receita Federal do Brasil (rota `/entities` com `on_demand: true`) |
| `JTJ` | Coletor unificado de Justiça Estadual (interno Judit) |
## Falta algum tribunal?
Se o tribunal que você precisa não está nesta lista, fale com nossa equipe. Estamos sempre expandindo a cobertura e priorizamos demandas de clientes ativos.
Mande a sigla do tribunal e seu volume estimado.
Erro de cobertura, dados ausentes ou desatualizados.
# Códigos de Erro — Judit API
Source: https://docs.judit.io/resource/errors
Lista consolidada dos códigos HTTP, application_error, exceções internas e troubleshooting da Judit API. Erros de autenticação, validação, sigilo, falhas de tribunal, rate limit e como resolver cada um.
> 🤖 Esta página é a referência única de erros da Judit API: HTTP 2xx/4xx/5xx, exceções internas (`name`), `application_error` retornados no payload (mesmo quando o HTTP é 200), e troubleshooting prático.
## Anatomia de um erro
A Judit API distingue dois tipos de erro:
A requisição falhou em validação básica, autenticação, autorização ou no servidor. O payload tem o formato `{ error: { name, message, data } }`.
O HTTP é `200`, mas a consulta não trouxe o objeto esperado. Pode ser "processo não encontrado", "homônimo", sigilo, etc. Vem dentro de `responses[].response_type = application_error`.
## Códigos HTTP de Status
A API utiliza as convenções padrão do protocolo HTTP.
### Sucesso (2xx)
| HTTP | Significado | Quando ocorre |
| :---- | :----------- | :------------------------------------------------------------------- |
| `200` | **OK** | Requisição processada e dados retornados com sucesso. |
| `201` | **Created** | Recurso (ex.: novo monitoramento, nova request) criado com sucesso. |
| `202` | **Accepted** | Requisição aceita e enviada para a fila de processamento assíncrono. |
### Erros do Cliente (4xx)
| HTTP | `error.message` típico | Quando ocorre | Como resolver |
| :---- | :--------------------- | :--------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |
| `400` | `BAD_REQUEST` | Payload mal formado, campos obrigatórios ausentes, enum inválido. | Veja `error.data` — traz a lista de validações falhas. Confira o [Schema do Lawsuit](/schemas/lawsuit-object). |
| `401` | `UNAUTHORIZED` | `api-key` ausente ou inválida. | Confira o header `api-key` (sem espaço, sem `Bearer`). Ver [Autenticação](/introduction/authentication). |
| `403` | `FORBIDDEN` | A `api-key` é válida, mas não tem permissão para o recurso (ex.: feature não contratada, sigilo sem credencial). | Verifique se a feature está habilitada no seu plano e se há credencial do tribunal no [Cofre](/essentials/cofre-de-credenciais). |
| `404` | `NOT_FOUND` | Recurso inexistente — `request_id`/`tracking_id` inválido, CNJ não está no datalake. | Confirme o ID. Para CNJs novos, dispare antes uma consulta assíncrona via [`POST /requests`](/requests/requests). |
| `409` | `CONFLICT` | Tracking já existente para o mesmo CNJ + chave; tentativa de criar recurso duplicado. | Liste os trackings existentes via `GET /tracking`. Atualize o existente em vez de recriar. |
| `422` | `UNPROCESSABLE_ENTITY` | Estrutura válida mas semanticamente inválida (ex.: `search_type` incompatível com `response_type`). | Veja a tabela em [Tipos de Busca](/requests/requests#tipos-de-busca-suportados). |
| `429` | `TOO_MANY_REQUESTS` | Rate limit do plano excedido. | Implemente backoff exponencial. Cheque os headers `X-RateLimit-*` no response. |
### Erros do Servidor (5xx)
| HTTP | `error.message` típico | Quando ocorre | Como resolver |
| :------------ | :-------------------------------- | :---------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
| `500` | `INTERNAL_SERVER_ERROR` | Falha inesperada do lado da Judit. | Tente novamente com backoff. Se persistir, abra um chamado em `support@judit.io` referenciando o `request_id`. |
| `502` / `504` | `BAD_GATEWAY` / `GATEWAY_TIMEOUT` | Tribunal de origem fora do ar ou timeout. Comum em consultas síncronas. | Tente novamente — se a falha persistir, fluxo assíncrono via [`POST /requests`](/requests/requests) é mais resiliente. |
| `503` | `SERVICE_UNAVAILABLE` | Manutenção. | Aguarde alguns minutos. Acompanhe em status.judit.io (se habilitado). |
## Estrutura do payload de erro HTTP
Independentemente do status (400 ou 500), o corpo da resposta sempre seguirá este contrato:
```json theme={null}
{
"error": {
"name": "HttpBadRequestError",
"message": "BAD_REQUEST",
"data": [
{
"field": "search.search_key",
"rule": "required",
"message": "search_key is required"
}
]
}
}
```
| Campo | Descrição |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `error.name` | Código interno da exceção (ex.: `HttpBadRequestError`, `HttpNotFoundError`, `HttpUnauthorizedError`, `USER_NOT_FOUND`). Use no seu `switch`/`case` para automação. |
| `error.message` | Categoria amigável (`BAD_REQUEST`, `UNAUTHORIZED`, etc.). |
| `error.data` | Detalhes — array de validações ou string com mensagem específica. Útil para exibir validações de formulário ao usuário final. |
## Códigos internos (`error.name`)
Use estes valores para automação programática:
### Autenticação e permissões
| Código (`name`) | HTTP | Causa comum |
| :------------------------- | :--- | :----------------------------------------------- |
| `USER_NOT_FOUND` | 401 | API key não enviada no header ou chave revogada. |
| `INSUFFICIENT_PERMISSIONS` | 403 | Tentativa de uso de módulo bloqueado no plano. |
| `HttpUnauthorizedError` | 401 | Genérico — chave inválida. |
### Validação e processamento
| Código (`name`) | HTTP | Causa comum |
| :-------------------- | :--- | :------------------------------------ |
| `HttpBadRequestError` | 400 | JSON malformado ou campos faltando. |
| `RESOURCE_NOT_FOUND` | 404 | CNJ ainda não capturado. |
| `REQUEST_NOT_FOUND` | 404 | `request_id` consultado não existe. |
| `PROCESSING_ERROR` | 422 | Robô falhou ao ler dados no tribunal. |
## Erros de aplicação (`application_error`)
Quando você recebe `response_type: application_error` em vez do payload esperado, a consulta foi processada com sucesso mas o resultado é uma exceção lógica.
| `response_data.code` | Significado | Quando ocorre | Como resolver |
| :-------------------- | :------------------------------------------- | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- |
| `LAWSUIT_NOT_FOUND` | Processo não encontrado. | CNJ inexistente ou não acessível. | Verifique o número e tribunal. Pode ser sigiloso — adicione `customer_key` (Cofre). |
| `ENTITY_NOT_FOUND` | Pessoa/empresa não localizada. | CPF/CNPJ não consta no datalake nem no tribunal. | Tente `on_demand: true` para forçar coleta no tribunal. |
| `WARRANT_NOT_FOUND` | Mandado não encontrado no BNMP. | Sem mandados para o documento informado. | Tente busca por `name` ou `rji` se aplicável. |
| `EXECUTION_NOT_FOUND` | Execução penal não encontrada. | Sem registros para o documento. | Confira o tribunal de origem (Justiça da Execução Penal). |
| `INVALID_CREDENTIAL` | Credencial do Cofre inválida ou expirada. | Token/login do tribunal expirou. | Atualize a credencial no [Cofre](/essentials/cofre-de-credenciais). |
| `CRAWLER_ERROR` | Falha na coleta do tribunal. | Tribunal fora do ar, captcha mal resolvido, mudança de layout. | Tente novamente. Se persistir, fluxo de fallback automático é acionado. |
| `RATE_LIMIT_TRIBUNAL` | Tribunal limitou a coleta. | Limite imposto pelo próprio tribunal. | A Judit retoma automaticamente no próximo ciclo. Use `cache_ttl_in_days` maior. |
| `SECRECY_RESTRICTED` | Processo em sigilo sem credencial associada. | `secrecy_level > 0` e a `api-key` não tem credencial do tribunal. | Cadastre uma credencial no [Cofre](/essentials/cofre-de-credenciais) e referencie via `customer_key`. |
| `HOMONYM_AMBIGUOUS` | Busca por nome resultou em homônimos. | Nome muito comum, sem critério adicional. | Refine via CPF/CNPJ ou aplique filtros (`tribunals`, `state`). |
### Exemplo de application\_error
```json theme={null}
{
"request_id": "87d9f7bf-0071-41ee-a721-e6e1b4082bc9",
"responses": [
{
"response_id": "b6c1a4f0-1234-5678-9abc-def012345678",
"response_type": "application_error",
"response_data": {
"code": "LAWSUIT_NOT_FOUND",
"message": "Lawsuit 0000000-00.0000.0.00.0000 not found in datalake or court."
}
}
]
}
```
## Handler centralizado (código pronto)
Crie um interceptador único para logar e tratar os erros da Judit API.
```python Python theme={null}
import requests, os
def handle_judit_error(response: requests.Response) -> None:
"""Decodifica e trata erros da Judit API."""
if response.status_code < 400:
return
try:
payload = response.json()
error_block = payload.get('error', {})
error_name = error_block.get('name', 'UNKNOWN_ERROR')
error_details = error_block.get('data', [])
print(f"❌ HTTP {response.status_code}: {error_name}")
if error_details:
print("Detalhes:")
for detail in error_details:
print(f" - {detail}")
if error_name == 'USER_NOT_FOUND':
raise PermissionError("API key inválida. Verifique JUDIT_API_KEY.")
if response.status_code == 429:
print("⚠️ Rate limit excedido. Acione backoff.")
except ValueError:
print(f"Erro crítico {response.status_code}: resposta não é JSON válido.")
print(response.text)
```
```javascript Node.js theme={null}
async function handleJuditError(response) {
if (response.ok) return;
try {
const payload = await response.json();
const errorBlock = payload.error || {};
const errorName = errorBlock.name || 'UNKNOWN_ERROR';
const errorDetails = errorBlock.data || [];
console.error(`❌ HTTP ${response.status}: ${errorName}`);
if (errorDetails.length > 0) {
console.error("Detalhes:");
errorDetails.forEach(detail => console.error(` - ${JSON.stringify(detail)}`));
}
if (errorName === 'USER_NOT_FOUND') {
throw new Error("API key inválida. Verifique JUDIT_API_KEY.");
}
if (response.status === 429) {
console.warn("⚠️ Rate limit excedido. Acione backoff.");
}
} catch (e) {
if (e.name !== 'SyntaxError') throw e;
console.error(`Erro crítico ${response.status}: resposta não é JSON válido.`);
}
}
```
## Padrões de tratamento
Implemente retry com jitter:
```python theme={null}
import time, random
for attempt in range(5):
resp = requests.post(url, headers=h, json=body)
if resp.status_code < 500 and resp.status_code != 429:
break
sleep = (2 ** attempt) + random.random()
time.sleep(sleep)
```
O header `Retry-After` (quando presente) deve ser respeitado.
O webhook reentrega em caso de falha. Sempre cheque `callback_id` antes de processar — guarde em uma tabela (id, recebido\_em). Se já existe, ignore.
Trate `application_error` como **resultado válido** da consulta (a integração está OK), enquanto HTTP 4xx indica que **a chamada** está errada. Logue separadamente no monitoramento.
Quando o processo é sigiloso e a `api-key` não tem credencial registrada para o tribunal, a Judit retorna `application_error: SECRECY_RESTRICTED`. Para acessar, cadastre a credencial do advogado no [Cofre](/essentials/cofre-de-credenciais) e referencie via `customer_key` na própria consulta.
Ao receber 429, leia `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset` para ajustar o disparo. Para fluxos em massa, adote janela deslizante.
## Tabela de troubleshooting rápida
| Sintoma | Hipótese mais provável | Próximo passo |
| :----------------------------------- | :--------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |
| HTTP 401 sempre | Header `api-key` ausente / valor errado / espaço/quebra de linha. | `echo $JUDIT_API_KEY \| wc -c` — confira o tamanho. |
| HTTP 403 em rota específica | Feature não habilitada no plano. | Falar com a Judit no `support@judit.io`. |
| `LAWSUIT_NOT_FOUND` em CNJ existente | CNJ está em sigilo. | Ver [Cofre de Credenciais](/essentials/cofre-de-credenciais). |
| Webhook não chega | URL não pública/HTTPS, ou retornando ≠ 2xx. | Confira em [Webhook](/webhook/callbacks#requisitos-do-endpoint). |
| 2 webhooks com mesmo `request_id` | Comportamento esperado — primeiro vem do cache (`cached_response: true`), segundo do tribunal. | Veja [cached\_response](/webhook/callbacks#duas-respostas). |
| Tracking sem novos eventos | `recurrence` muito alta ou `notification_filters.step_terms` muito restrito. | Reduza recurrence; relaxe filtros. |
| Resposta vazia em `name` | Homônimo ou nome com acentos. | Buscar por CPF/CNPJ; remover acentos para teste. |
## Próximos passos
* 👉 **[Rate Limits](/essentialConcepts/rate-limits)** — função de Retry com Exponential Backoff para tratar `429`.
* 👉 **[Autenticação](/introduction/authentication)** — como enviar credenciais corretamente para evitar `401`.
* 👉 **[Webhook & Callbacks](/webhook/callbacks)** — comportamento de reentregas e idempotência.
* 👉 **[Glossário](/resource/glossary)** — termos técnicos referenciados
# Perguntas Frequentes (FAQ) — Judit API
Source: https://docs.judit.io/resource/faq
Respostas para as dúvidas mais comuns sobre integração, autenticação, limites e comportamento da Judit API.
## Geral
### O que é a Judit API?
A Judit API é uma solução completa para automação de consultas judiciais no Brasil. Permite consultar processos por CPF, CNPJ, OAB, NOME ou CNJ, monitorar atualizações automaticamente, baixar anexos (públicos e privados) e gerenciar credenciais de tribunais com segurança.
***
### Quais tribunais são suportados?
A Judit API suporta os principais tribunais brasileiros:
* **Estaduais**: TJSP, TJRJ, TJMG, TJRS, TJPR, TJSC, entre outros
* **Federais**: TRF1, TRF2, TRF3, TRF4, TRF5, TRF6
* **Superiores**: STF, STJ, TST
* **Especializados**: Trabalhistas, Eleitorais, Militares
[Veja a lista completa aqui.](https://judit.io/cobertura-dos-tribunais/)
***
### Como obter uma API Key?
Solicite sua chave por meio do [WhatsApp comercial](https://api.whatsapp.com/send/?phone=5521985284143) ou envie e-mail para `atendimento@judit.io`. Você receberá:
* API Key de desenvolvimento (gratuita e limitada)
* Documentação de integração
* Acesso ao painel e suporte técnico
***
## Autenticação
### Minha API Key não está funcionando
Verifique os seguintes pontos:
1. Header `api-key` está presente
2. A chave está válida (não expirou)
3. A chave tem permissão para os endpoints usados
***
## Consultas (Requests)
### Como funciona a cobrança de anexos?
* Requests de anexos usam `search_type = lawsuit_attachment`
* Apenas requests com `search_type = lawsuit_cnj` são cobradas
* PDFs individuais não geram cobrança separada
***
### A consulta histórica cobra por documento consultado ou por processo processo retornado?
É cobrado por cada **1.000 processos retornados** a cada documento consultado.
***
### Processos em segredo de justiça são retornados?
Depende. Para acessar, é necessário fornecer credenciais do advogado via [cofre de credenciais](/essentials/cofre-de-credenciais).
***
### Um processo pode ter duas instâncias?
Sim. Um mesmo processo pode tramitar em mais de uma instância e, dependendo do tribunal, isso pode ocorrer de duas formas:
* Mantendo o mesmo número de processo, quando o processo segue para outra instância sem alteração da numeração original.
* Gerando um novo número de processo, quando o tribunal cria uma nova numeração para representar a tramitação em outra instância ou algum desdobramento processual.
Por esse motivo, a Judit estrutura a resposta separando cada instância de forma individual.
Quando uma consulta processual identifica que o mesmo número de processo existe em mais de uma instância, a API retorna um objeto para cada instância dentro do array de resultados. Cada objeto representa os dados daquele processo naquela instância específica.
O primeiro objeto do array, na posição zero, representa a instância mais recente identificada.
Além disso, quando houver uma nova numeração vinculada ao processo consultado e essa relação estiver disponível no tribunal como processo relacionado, essa informação será retornada no campo `related_lawsuits`.
Dessa forma, é possível diferenciar os dados de cada instância e, quando disponível, também identificar novas numerações relacionadas ao mesmo processo.
***
### Posso cancelar uma consulta?
Não, após iniciado o processamento não é possível cancelar a execução.
***
### Busquei um processo e ele não foi encontrado
Nossa plataforma entrega exatamente as informações disponíveis nos tribunais. Caso um número de processo válido não seja encontrado, isso pode ocorrer por três motivos principais:
* Número incorreto
* Processo sob segredo de justiça
* Processo baixado e indisponível no tribunal
***
### Busquei um processo e ele está desatualizado
A atualização pode não ser instantânea, mas deve ocorrer em seguida. Se persistir, entre em contato com o suporte.
***
### Por quanto tempo posso acessar os dados da consulta?
As respostas ficam armazenadas por **6 meses** a partir da data da request.
***
### Qual a diferença entre os campos `private` e `secrecy_level`?
* `secrecy_level`: indica o nível de sigilo (0 a 5) do processo
* `private`: indica se um andamento é restrito a partes/advogados
***
## Tracking (Monitoramento)
### Como funciona o monitoramento?
Notifica automaticamente por webhook quando:
#### Processual:
* Novos andamentos
* Alterações nas partes
* Inclusão de anexos (quando cadastrado com with\_attachments: true)
* Mudança de status
#### Novas ações:
* Novo processo é distribuido para o documento monitorado
***
### O que é o monitoramento de novas ações?
Verifica se **novos processos** foram abertos contra o CPF/CNPJ/OAB/Nome.
***
### O monitoramento de novas ações retorna fase e status?
Não. Para isso, use a consulta CNJ (`search_type = lawsuit_cnj`).
***
## Performance e Custos
### Como otimizar as consultas?
* Use filtros por data e tribunal
* Desative anexos se não forem necessários
* Implemente cache local para evitar duplicidade
***
### Como reduzir custos?
* Evite reconsultas desnecessárias
* Use filtros e cache
* Acompanhe consumo pela rota `/requests`
***
### Qual o limite de requisições (rate limit) e timeout?
* Rate limit: 3 req/s
* Timeout criação: 15 segundos
* Timeout de finalização: até 1 hora (com retry automático)
***
## Integração
### Como integrar com meu sistema?
1. Use webhooks para receber os dados
2. Automatize requisições com base em eventos (ex: cadastro de cliente)
3. Implemente logging e alertas de erro
***
## Outras Funcionalidades
### Quais tipos de busca estão disponíveis?
* CNJ (número do processo)
* CPF/CNPJ/OAB/Nome
* Consulta de histórico processual
* Consulta de mandados de prisão
* Contagem de processos
* Verificação se existe processo (True/False)
* Consulta de processos com resultado mascarado
* Consulta quantidade de processos atrelados a um documento.
* Consulta por dados agrupados de um documento.
* Judit IA
***
### A API cobre processos extrajudiciais?
Ainda não atuamos em processos administrativos.
***
## Suporte
### Como obter suporte técnico?
* Documentação: [docs.judit.io](https://docs.judit.io)
* E-mail: `atendimento@judit.io`
* Status de serviço: [status.judit.io](https://status.judit.io)
* [Whatsapp](https://api.whatsapp.com/send/?phone=55219852841438865)
***
### Como reportar um bug?
Inclua:
* `request_id`
* Data/Hora do erro
* Código de erro
* Descrição do erro
* Ambiente (prod/dev)
***
### A Judit possui SLA?
| Plano | Uptime | Resposta | Suporte |
| --------------- | ------ | -------------- | ------------- |
| Desenvolvimento | 95% | Melhor esforço | Email |
| Básico | 99% | \< 2s | Email |
| Profissional | 99.5% | \< 1s | Email + Chat |
| Enterprise | 99.9% | \< 500ms | Dedicado 24/7 |
## Próximos Passos
* [Glossário de termos](/resource/glossary)
* [Mapeamento de Váriaveis](/resource/glossary)
> **Ficou com dúvidas?** Envie um e-mail para `atendimento@judit.io` ou entre em contato pelo nosso [suporte](https://api.whatsapp.com/send/?phone=5511920501949).
# Glossário Jurídico e Técnico — Judit API
Source: https://docs.judit.io/resource/glossary
Termos jurídicos e técnicos usados pela Judit API: CNJ, OAB, CNPJ, BNMP, Hot Storage, datalake, webhook, response_type e muito mais.
Glossário organizado em três camadas: **conceitos jurídicos** (sistema brasileiro), **propriedades de payload** (campos dos requests/responses) e **arquitetura interna** (datalake, hot storage, crawler).
> 🤖 Use este glossário como referência rápida. Para a estrutura completa de cada objeto (Lawsuit, Entity, Warrant, Penal Execution), consulte os [Schemas](/schemas/lawsuit-object).
## Conceitos jurídicos brasileiros
| Termo | Significado |
| :------- | :--------------------------------------------------------------------------------------------------------- |
| **CNJ** | Código Nacional de Justiça — número único do processo no padrão `NNNNNNN-DD.AAAA.J.TR.OOOO` (20 dígitos). |
| **CPF** | Cadastro de Pessoas Físicas (Receita Federal). 11 dígitos. |
| **CNPJ** | Cadastro Nacional da Pessoa Jurídica. 14 dígitos. Aceita o novo formato **alfanumérico** (IN RFB 2229/24). |
| **OAB** | Ordem dos Advogados do Brasil. Identificador do advogado, formato `` (ex.: `123456SP`). |
| **RJI** | Registro Judiciário Individual atribuído pelo BNMP 2.0 a cada pessoa procurada. |
| Termo | Significado |
| :---------------------- | :----------------------------------------------------------------------------------------------------------------- |
| **Capa do processo** | Conjunto de dados-cabeçalho: número, classe, assunto, valor da causa, partes, data de distribuição, comarca, juiz. |
| **Andamento (step)** | Cada movimentação/lançamento registrado nos autos. Exibido em ordem cronológica. |
| **Parte (party)** | Pessoa física, jurídica ou autoridade envolvida (Autor, Réu, Interessado, Advogado). |
| **Polo** | Lado do processo: `Active` (Autor), `Passive` (Réu), `Interested` (Terceiro). |
| **Comarca (county)** | Divisão territorial do sistema judiciário — jurisdição de um juiz de 1ª instância. |
| **Vara (court)** | Unidade jurisdicional dentro de uma comarca (Cível, Criminal, Trabalhista, etc.). |
| **Instância** | Grau do processo: 1 (originário) ou 2 (recurso/apelação). |
| **Classe processual** | Tipo do procedimento (ex.: Procedimento Comum Cível, Mandado de Segurança). |
| **Assunto** | Tema/matéria do processo segundo a tabela CNJ (ex.: Acidente de Trânsito). |
| **Distribuição** | Data em que o processo foi oficialmente atribuído a uma vara. |
| **Trânsito em julgado** | Decisão final, sem possibilidade de recurso. |
| Termo | Significado |
| :----------------------- | :---------------------------------------------------------------------- |
| **Justiça Estadual** | TJ de cada UF — competência geral civil/criminal estadual. |
| **Justiça Federal** | TRFs (1 a 6) — União, autarquias, conflitos federais. |
| **Justiça do Trabalho** | TST + TRTs (1 a 24) — relações trabalhistas. |
| **Justiça Eleitoral** | TSE + TREs — eleições e crimes eleitorais. |
| **Justiça Militar** | STM + Justiça Militar Estadual — crimes militares. |
| **Tribunais Superiores** | STF, STJ, TST, TSE, STM. |
| **BNMP** | Banco Nacional de Mandados de Prisão — base do CNJ com mandados ativos. |
Lista completa: [Cobertura de Tribunais](/resource/courtCoverage).
| Termo | Significado |
| :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| **Segredo de justiça** | Processo restrito a partes vinculadas. Exige credencial do advogado (ver [Cofre de Credenciais](/essentials/cofre-de-credenciais)). |
| **`secrecy_level` 0–5** | Escala de sigilo. `0` = público; `5` = sigilo absoluto. |
| **Mandado de prisão** | Ordem judicial de prisão (preventiva, temporária, definitiva, recaptura). Coletado do BNMP. |
| **Execução penal** | Processo de cumprimento de pena, com fases como progressão e livramento. |
## Propriedades do payload (request/response)
| Campo | O que é |
| :------------ | :------------------------------------------------------------------ |
| `request_id` | UUID gerado quando você cria uma requisição (`POST /requests`). |
| `response_id` | UUID de cada resposta gerada para uma requisição (pode ter várias). |
| `tracking_id` | UUID de um monitoramento (`POST /tracking`). |
| `callback_id` | UUID único de cada entrega de webhook (use para idempotência). |
| `origin_id` | UUID que liga várias requisições filhas a uma requisição-pai. |
| Campo | O que é |
| :---------------------- | :---------------------------------------------------------------------------------------------------------- |
| `cache_ttl_in_days` | Quantos dias o resultado em cache continua válido antes de forçar coleta nova. |
| `cached_response` | `true` = resposta veio do datalake; `false` = coleta atual no tribunal. Veja [Webhook](/webhook/callbacks). |
| `is_fallback_source` | Indica que o dado veio de fonte secundária (ex.: tribunal estava fora do ar). |
| `dictionary_updated_at` | Data da última atualização dos dicionários (assuntos, classes). |
| Campo | O que é |
| :-------------------------- | :---------------------------------------------------------------------------------------------------- |
| `search_type` | `cpf`, `cnpj`, `oab`, `name`, `lawsuit_cnj`, `lawsuit_id`, `rji` ou `custom`. |
| `search_key` | Valor concreto a buscar (CPF, CNPJ, número CNJ, etc.). |
| `response_type` | Formato esperado de resposta: `lawsuit`, `entity`, `warrant`, `execution`. |
| `on_demand` | Se `true`, força leitura em tempo real (custo maior). Vale para `/entities` e consultas históricas. |
| `with_attachments` | Se `true`, baixa anexos (apenas para `search_type: lawsuit_cnj` ou warrant). |
| `reveal_partners_documents` | (CNPJ) Retorna CPFs/CNPJs dos sócios sem mascaramento. |
| `customer_key` | Chave do [Cofre de Credenciais](/essentials/cofre-de-credenciais) para acessar processos sob segredo. |
| Campo | O que é |
| :---------------------------------------- | :------------------------------------------------------------------------------------ |
| `side` | Lado da parte: `Active`, `Passive`, `Interested`, `Unknown`. |
| `amount_gte` / `amount_lte` | Valor da causa mínimo/máximo. |
| `distribution_date_gte` / `_lte` | Janela de distribuição. |
| `last_step_date_gte` / `_lte` | Janela da última movimentação. |
| `tribunals.keys` + `not_equal` | Inclui (false) ou exclui (true) tribunais — ver [Cobertura](/resource/courtCoverage). |
| `subject_codes.keys` + `not_equal` | Códigos oficiais CNJ de assunto. |
| `classification_codes.keys` + `not_equal` | Códigos oficiais CNJ de classe. |
| `party_names` | Filtro por nome de parte. |
| `party_documents` | Filtro por CPF/CNPJ de parte. |
| Campo | O que é |
| :---------------- | :----------------------------------------------- |
| `page` | Página atual (1-based). |
| `page_size` | Itens por página (máx. 1000). |
| `page_count` | Total de itens nesta página. |
| `all_count` | Total absoluto de itens encontrados pelo filtro. |
| `all_pages_count` | Total de páginas considerando `page_size`. |
| `page_data` | Array com os itens da página corrente. |
| Campo | O que é |
| :-------------------------------- | :----------------------------------------------------------- |
| `recurrence` | Intervalo (em dias) entre execuções do monitoramento. |
| `notification_emails` | Emails que recebem notificação a cada atualização. |
| `notification_filters.step_terms` | Termos que filtram quais movimentações disparam notificação. |
| `tracked_items_count` | Total de itens (processos) que o tracking está acompanhando. |
| `hour_range` | Hora do dia em que o tracking executa. |
| Campo | O que é |
| :----------------------- | :-------------------------------- |
| `entity_id` | UUID interno da entidade. |
| `entity_type` | `person` (PF) ou `company` (PJ). |
| `main_document` | CPF (PF) ou CNPJ (PJ). |
| `aka_names` | Outros nomes/apelidos associados. |
| `addresses` | Lista de endereços. |
| `contacts` | Telefones e emails. |
| `parents` | (PF) Filiação (mãe/pai). |
| `partners` | (PJ) Sócios e administradores. |
| `branch_activities` | (PJ) Atividades CNAE. |
| `legal_nature` | (PJ) Natureza jurídica. |
| `revenue_service_active` | Status na Receita Federal. |
| Campo | O que é |
| :------------------------------------- | :------------------------------------------------------- |
| `warrant_type` | `warrant_of_arrest` (prisão) ou `recapture` (recaptura). |
| `arrest_type` | `preventive`, `temporary`, `definitive`. |
| `law_type.number` / `description` | Lei/artigos infringidos. |
| `issue_date` / `expiration_date` | Datas de emissão e validade. |
| `duration_years` / `_months` / `_days` | Pena calculada. |
| `regime` | `Aberto`, `Semiaberto`, `Fechado`. |
| `judgementSummary` | Texto da sentença/despacho. |
| Campo | O que é |
| :------------------ | :-------------------------------------------------------------------- |
| `error.name` | Nome do erro (ex.: `HttpBadRequestError`, `HttpNotFoundError`). |
| `error.message` | Grupo do erro (ex.: `BAD_REQUEST`). |
| `error.data` | Detalhes/mensagens de validação. |
| `LAWSUIT_NOT_FOUND` | `application_error` retornado quando a busca não encontra o processo. |
## Arquitetura interna da Judit
| Termo | O que é |
| :-------------- | :------------------------------------------------------------------------------------------ |
| **Datalake** | Repositório central de processos coletados pela Judit (≈ centenas de milhões de processos). |
| **Hot Storage** | Camada de cache de alta performance — fonte das consultas síncronas. |
| **Crawler** | Robô que coleta dados nos tribunais. Cada coleta gera um `crawl_id`. |
| **On-Demand** | Modo de busca em tempo real, ignorando o datalake. |
| Serviço | URL | Função |
| :----------- | :----------------------------- | :-------------------------------------------- |
| **Requests** | `requests.production.judit.io` | Criação e leitura de requisições assíncronas. |
| **Tracking** | `tracking.production.judit.io` | Monitoramento contínuo. |
| **Lawsuits** | `lawsuits.production.judit.io` | Datalake síncrono, dados cadastrais, anexos. |
| **Crawler** | `crawler.production.judit.io` | Cofre de Credenciais. |
| **User** | (interno) | Autenticação e gestão de callbacks. |
| Evento | Quando dispara |
| :------------------ | :--------------------------------------------- |
| `response_created` | Cada nova resposta gerada (cache ou tribunal). |
| `request_completed` | Fim do fluxo de uma requisição. |
| `tracking_response` | Cada nova movimentação detectada por tracking. |
Ver detalhes em [Webhooks](/webhook/callbacks).
| Termo | O que é |
| :--------------------------------------- | :----------------------------------------------------- |
| `crawl_id` | UUID da execução do robô que coletou aquele dado. |
| `dashboard_id` | (Opcional) Vinculação com painéis específicos. |
| `criminal` | `true` quando o processo é da esfera criminal. |
| `is_fallback_source` | Dado coletado de fonte secundária. |
| `revenue_update_date` | Última atualização da Receita Federal para a entidade. |
| `datalake_id` / `datalake_segment` | Identificadores internos do datalake. |
| `possible_homonym` / `potential_homonym` | Indica suspeita de homônimo no resultado. |
## Próximos passos
* **[Cobertura de Tribunais](/resource/courtCoverage)** — siglas para usar em filtros.
* **[Schema Lawsuit](/schemas/lawsuit-object)** — estrutura completa do objeto principal.
* **[Enums](/schemas/lawsuit-enums)** — valores literais aceitos por cada propriedade.
* **[FAQ](/resource/faq)** — perguntas frequentes.
# MCP — Model Context Protocol da Judit
Source: https://docs.judit.io/resource/mcp
Conecte assistentes de IA (Claude, GPT, etc.) diretamente à Judit API via MCP (Model Context Protocol). Acesse consultas processuais, monitoramentos e dados cadastrais a partir de qualquer agente.
A documentação da Judit já vem com um servidor Model Context Protocol (MCP). Conecte qualquer cliente de IA e pergunte sobre a API em linguagem natural — o assistente pesquisa a doc, cita a página exata e te ajuda a integrar com a Judit mais rápido, sem precisar copiar e colar do navegador.
## Conversar agora (sem instalar)
Clique abaixo para abrir o Claude ou o ChatGPT já com a documentação completa da Judit pré-carregada como contexto. Ideal para perguntas pontuais ou exploração rápida.
Abre o Claude.ai com a doc inteira pré-carregada. Sem instalação.
Abre o ChatGPT com a doc inteira pré-carregada. Sem instalação.
Os dois botões referenciam [`https://docs.judit.io/llms-full.txt`](https://docs.judit.io/llms-full.txt), um arquivo único autogerado com toda a documentação concatenada, otimizado para que IAs ingiram tudo em uma única chamada.
## Instalar o servidor MCP
Para uso recorrente no Claude Desktop, Cursor, Claude Code, ChatGPT ou qualquer outro cliente compatível com MCP, instale o servidor uma vez e as tools ficam disponíveis nativamente no seu chat:
`https://docs.judit.io/mcp`
Abra o Claude Desktop, vá em **Settings → Developer → Edit Config** e adicione:
```json theme={null}
{
"mcpServers": {
"judit": {
"url": "https://docs.judit.io/mcp"
}
}
}
```
Reinicie o Claude Desktop. As tools **judit** aparecem no input de chat.
Abra **Settings → MCP** na IDE (ou edite `~/.cursor/mcp.json`) e adicione:
```json theme={null}
{
"mcpServers": {
"judit": {
"url": "https://docs.judit.io/mcp"
}
}
}
```
No terminal:
```bash theme={null}
claude mcp add --transport http judit https://docs.judit.io/mcp
```
No ChatGPT, abra **Settings → Connectors → Add custom connector** e cole:
```
https://docs.judit.io/mcp
```
Disponível nos planos que suportam conectores MCP (Plus, Pro, Team, Enterprise).
Qualquer cliente MCP que fale transporte HTTP funciona — aponte para `https://docs.judit.io/mcp`.
Para clientes que só falam stdio (configs antigas), encapsule a URL com `mcp-remote`:
```json theme={null}
{
"mcpServers": {
"judit": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://docs.judit.io/mcp"]
}
}
}
```
## O que faz
Uma vez conectado (por qualquer um dos caminhos acima), a IA ganha duas tools que usa automaticamente sempre que você pergunta algo relacionado à Judit:
| Tool | Função |
| :--------------------------------- | :------------------------------------------------------------------------------------------------------- |
| `search_judit_docs` | Busca textual em toda a documentação, retornando os trechos mais relevantes com os caminhos das páginas. |
| `query_docs_filesystem_judit_docs` | Lê uma página específica por path (`cat`, `head`, `rg`, etc.) quando a IA precisa do contexto completo. |
Você não precisa chamar essas tools manualmente — basta conversar normalmente, e o modelo decide quando usá-las.
## Exemplos de prompts
* *"Como crio um monitoramento por CNJ? Me mostra o body exato da requisição."*
* *"Qual a diferença entre Hot Storage e uma requisição comum?"*
* *"Escreve um snippet Python que cria uma requisição, faz polling até concluir e imprime os processos."*
* *"Quais filtros posso passar em `subject_codes`? Cita a página."*
* *"Me explica o fluxo de execução penal de ponta a ponta."*
O modelo cita a página exata da doc que usou, então dá pra conferir a resposta.
## O que ele não faz
Este MCP **lê apenas a documentação**. Ele não chama a Judit API por você — nenhum processo real é consultado, nenhuma requisição é criada, nenhum custo é gerado.
Para realmente chamar a API, use um destes:
Execute requisições reais com bodies pré-preenchidos e captura automática do `request_id`.
Chame os endpoints direto do seu código usando sua `api-key`.
O servidor MCP é hospedado pela nossa plataforma de documentação e fica em sincronia com este site automaticamente. Cada atualização da doc reflete nas respostas do MCP na próxima chamada — sem version pinning, sem redeploy do seu lado.
# Postman Collection da Judit API
Source: https://docs.judit.io/resource/postman-collection
Importe a Postman Collection oficial da Judit API com todos os endpoints, exemplos de payload e variáveis de ambiente prontos para uso.
A coleção completa da Judit API está no nosso workspace público no Postman. Clique abaixo para abrir: você pode navegar pelas requisições com descrições e exemplos, rodar tudo direto no Postman web ou fazer um fork para o seu próprio workspace com um clique.
Abre o workspace público. Use **Fork** para copiar a coleção para o seu workspace, ou **Run in Postman** para importar no app desktop.
## Início rápido
Clique no card acima. A coleção **Judit API** aparece na sidebar, com todos os endpoints organizados por pasta.
No header da coleção, clique em **Fork** para copiar para o seu workspace pessoal, ou em **Run in Postman** para enviar ao app desktop. As duas opções preservam a estrutura, variáveis e scripts de teste.
Abra a coleção que você fez fork, clique no nome dela na sidebar e vá na aba **Variables**. Cole sua chave de API na coluna *Current value* da variável `api_key` e clique em **Save**. A coleção envia automaticamente como header `api-key` em todas as requisições.
Abra **Consulta processual e por documento › 1 - Criar requisição por CNJ**, preencha a variável `cnj_code` com um CNJ real e clique em **Send**. Você deve receber um `request_id` — ele é capturado automaticamente na variável `request_id`, então o próximo passo (**2 - Consultar status da requisição**) funciona sem copiar e colar.
## O que tem dentro
Fluxo ponta a ponta: cria uma requisição por CNJ ou por documento (CPF, CNPJ, OAB, nome), consulta o status, lista as respostas e baixa anexos do processo. O primeiro passo já captura o `request_id` em uma variável da coleção, então as chamadas encadeadas funcionam sem copiar e colar.
Cria, lista, pausa, retoma, atualiza e deleta monitoramentos de processos. Inclui o conjunto completo de filtros (tribunais, assuntos, classificações, nomes e documentos de parte) e o endpoint de histórico de respostas.
Consulta de mandados de prisão por CPF, nome ou RJI, incluindo o download do anexo do mandado.
Consulta de execução penal por CPF, CNPJ, nome ou CNJ.
Consultas síncronas no datalake da Judit: Hot Storage (lista completa de processos), Contagem (total de processos), True / false e Histórica agrupada (contagens agregadas por classificação, assunto, área, tribunal, etc.).
Consulta do objeto `entity` (dados cadastrais de CPF ou CNPJ), com opção de consultar a Receita Federal em tempo real.
Lista as requisições criadas em um determinado período, útil para cobrança e análise de consumo.
Cadastrar, listar e deletar credenciais para tribunais que exigem autenticação para crawl.
A coleção usa variáveis do Postman para as URLs base e sua chave de API, então você só configura uma vez. Se precisar de uma chave de sandbox, fale com a gente em [contato@judit.io](mailto:contato@judit.io).
## Download offline (Postman v2.1 / Insomnia)
Prefere importar localmente em vez de usar o workspace público? Baixe o arquivo JSON e importe no Postman ou Insomnia:
Compatível com Postman e Insomnia. Após importar, edite a coleção em **Variables** e cole sua `api_key`.
# Schema Communication (Diário Oficial de Justiça)
Source: https://docs.judit.io/schemas/communication
Estrutura do objeto Communication retornado pelo monitoramento do Diário de Justiça Eletrônico Nacional (DJEN) na Judit API. Inclui dados da publicação, destinatários, advogados vinculados e texto integral.
> 🤖 O monitoramento do Diário de Justiça Eletrônico Nacional (DJEN) retorna o objeto `communication`. Cada objeto representa uma publicação do DJEN em que houve correspondência com o termo monitorado. A raiz contém os metadados da publicação (datas, tribunal, tipo). Os destinatários ficam no array `recipients` e os advogados vinculados a eles em `recipient_lawyers`.
## Estrutura Geral
O JSON de uma comunicação é organizado em 4 blocos principais:
* **Metadados da Publicação (raiz):** Identificação, datas, status, tribunal e tipo da comunicação.
* **Destinatários (`recipients`):** Partes do processo diretamente citadas na publicação — podem ser advogados ou não-advogados.
* **Destinatários Advogados (`recipient_lawyers`):** Advogados vinculados às partes, com dados de OAB.
* **Texto Integral (`text`):** Conteúdo completo da publicação conforme extraído do DJEN.
***
## Dicionário de Dados
### 1. Metadados da Publicação (Raiz do Objeto)
Estas propriedades vêm diretamente na raiz do objeto `response_data`.
#### Campos obrigatórios
| Propriedade | Tipo | Descrição |
| :------------------ | :---------------- | :--------------------------------------------------------------------------------------- |
| `communication_id` | string | Identificador único da comunicação no sistema da Judit. |
| `active` | boolean | Indica se a comunicação está ativa (`true`) ou foi cancelada (`false`). |
| `date_availability` | string (ISO 8601) | Data em que a publicação ficou disponível no DJEN para consulta. |
| `date_shipping` | string (ISO 8601) | Data de expedição/envio da comunicação pelo tribunal. |
| `hash` | string | Hash único da publicação, identificador do DJEN. |
| `lawsuit_code` | string | Número do processo vinculado no formato CNJ (ex: `"0000000-00.0000.8.00.0000"`). |
| `tribunal_acronym` | string | Sigla oficial do tribunal emissor (ex: `"TJSP"`, `"TJRJ"`, `"TRT2"`). |
| `status` | string | Status da publicação no DJEN (ex: `"P"` para publicado). |
| `text` | string | Texto integral da publicação conforme extraído do Diário de Justiça Eletrônico Nacional. |
| `source` | string | Sistema de origem da publicação (ex: `"pje"`, `"esaj"`). |
#### Campos opcionais
| Propriedade | Tipo | Descrição |
| :--------------------- | :---------------- | :-------------------------------------------------------------------------------------- |
| `classification_code` | string | Código da classe processual associada à comunicação. |
| `classification_name` | string | Nome da classe processual (ex: `"EXECUÇÃO DE TÍTULO EXTRAJUDICIAL"`). |
| `date_cancellation` | string (ISO 8601) | Data de cancelamento da comunicação, quando aplicável. |
| `reason_cancellation` | string | Motivo do cancelamento da comunicação, quando aplicável. |
| `api_id` | number | ID interno da comunicação no sistema de origem. |
| `middle` | string | Código abreviado do veículo de publicação (ex: `"D"` para DJEN). |
| `full_middle` | string | Nome completo do veículo de publicação (ex: `"DIÁRIO DE JUSTIÇA ELETRÔNICO NACIONAL"`). |
| `name_organ` | string | Nome do órgão responsável pela publicação (ex: `"1ª VARA CÍVEL"`). |
| `communication_number` | number | Número sequencial da comunicação dentro da edição do DJEN. |
| `communication_type` | string | Tipo da comunicação (ex: `"INTIMAÇÃO"`, `"CITAÇÃO"`). |
| `document_type` | string | Tipo do documento publicado (ex: `"DECISÃO"`, `"DESPACHO"`, `"SENTENÇA"`). |
| `integrate_api` | boolean | Indica se a comunicação foi integrada via API externa. |
***
### 2. Destinatários (`recipients`)
Array com as pessoas diretamente citadas na publicação — podem ser advogados ou não-advogados (partes do processo). Todos os campos são obrigatórios.
| Propriedade | Tipo | Descrição |
| :----------------- | :----- | :-------------------------------------------------------------------------------- |
| `communication_id` | number | ID interno da comunicação à qual o destinatário está vinculado. |
| `name` | string | Nome completo do destinatário conforme consta na publicação. |
| `side` | string | Polo da parte no processo: `"Active"` (polo ativo) ou `"Passive"` (polo passivo). |
***
### 3. Advogados dos Destinatários (`recipient_lawyers`)
Array com os advogados vinculados aos destinatários da comunicação. Todos os campos são obrigatórios.
#### Objeto raiz do vínculo
| Propriedade | Tipo | Descrição |
| :----------------- | :----- | :---------------------------------------------------------- |
| `id` | number | Identificador único do vínculo advogado-comunicação. |
| `lawyer_id` | number | ID do advogado (referência ao objeto `lawyer`). |
| `communication_id` | number | ID interno da comunicação à qual o advogado está vinculado. |
| `created_at` | string | Data de criação do registro do vínculo. |
| `updated_at` | string | Data da última atualização do registro do vínculo. |
#### Objeto `lawyer` (aninhado)
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :------------------------------------------- |
| `id` | number | Identificador único do advogado no sistema. |
| `name` | string | Nome completo do advogado. |
| `license_code` | string | Número de registro na OAB. |
| `license_state` | string | UF da seccional da OAB (ex: `"SP"`, `"RJ"`). |
***
## Exemplo de Payload (Communication)
```json Resposta theme={null}
{
"page": 1,
"page_count": 1,
"all_count": 1,
"all_pages_count": 1,
"page_data": [
{
"request_id": "186e0ed5-4656-4fd8-8e07-76f755c44a9d",
"response_id": "dd47b9fc-8f66-46b8-a31a-50a4718c9774",
"origin": "tracking",
"origin_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"response_type": "communication",
"response_data": {
"communication_id": "0E6hgZvG",
"active": true,
"classification_code": "12154",
"classification_name": "EXECUÇÃO DE TÍTULO EXTRAJUDICIAL",
"date_availability": "2026-05-20T00:00:00.000Z",
"date_shipping": "2026-05-19T03:00:00.000Z",
"recipient_lawyers": [
{
"lawyer": {
"id": 10001,
"name": "ADVOGADO EXEMPLO 1",
"license_code": "0001",
"license_state": "SP"
},
"lawyer_id": 10001,
"communication_id": 600000001,
"id": 1100000001,
"created_at": "2026-05-19 11:44:08",
"updated_at": "2026-05-19 11:44:08"
}
],
"recipients": [
{
"communication_id": 600000001,
"name": "PARTE ATIVA EXEMPLO",
"side": "Active"
},
{
"communication_id": 600000001,
"name": "PARTE PASSIVA EXEMPLO 1",
"side": "Passive"
}
],
"hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"api_id": 600000001,
"middle": "D",
"full_middle": "DIÁRIO DE JUSTIÇA ELETRÔNICO NACIONAL",
"name_organ": "COMARCA - 1ª VARA CÍVEL",
"communication_number": 2674,
"lawsuit_code": "0000000-00.0000.8.00.0000",
"tribunal_acronym": "TJXX",
"status": "P",
"text": "Texto completo da publicação conforme extraído do DJEN...",
"communication_type": "INTIMAÇÃO",
"document_type": "DECISÃO",
"integrate_api": false,
"source": "pje"
},
"user_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-05-20T20:12:47.839Z",
"updated_at": "2026-05-20T20:12:47.839Z"
}
]
}
```
***
## Próximos Passos
* 👉 **[Monitoramento do Diário Oficial](/tracking/tracking-communication):** Veja como configurar o monitoramento do DJEN e receber publicações via webhook.
# Schema Entity (Dados Cadastrais)
Source: https://docs.judit.io/schemas/entity
Estrutura do objeto Entity retornado pela consulta de dados cadastrais por CPF (Pessoa Física) ou CNPJ (Pessoa Jurídica). Inclui contatos, endereços, sócios e vínculos.
> 🤖 As consultas de Dados Cadastrais retornam um objeto base comum chamado `entity`. Dependendo se a consulta foi feita por um CPF ou CNPJ, a propriedade `entity_type` retornará `"person"` ou `"company"`, respectivamente. Alguns campos, como `parents` (filiação) ou `share_capital` (capital social), são exclusivos do seu respectivo tipo de entidade.
## Estrutura Base (Comum a CPF e CNPJ)
Sempre que você consultar um documento válido, a Judit API retornará o bloco `entity` contendo as seguintes propriedades universais:
### Identificação Principal
| Propriedade | Tipo | Descrição |
| :-------------------------- | :------ | :---------------------------------------------------------------------------- |
| `entity_id` | string | Identificador único interno da entidade no sistema da Judit. |
| `entity_type` | string | Tipo da entidade: `"person"` (Pessoa Física) ou `"company"` (Empresa). |
| `main_document` | string | Documento principal (CPF ou CNPJ). *Retornado apenas com números.* |
| `name` | string | Nome civil completo da pessoa ou Razão Social oficial da empresa. |
| `aka_names` | array | Lista de nomes alternativos (apelidos, nomes de solteiro ou Nomes Fantasia). |
| `nationality` | string | Nacionalidade da pessoa ou país de registro da empresa. |
| `revenue_service_active` | boolean | Indica se o documento está regular e ativo na base da Receita Federal. |
| `created_at` / `updated_at` | string | Datas (ISO 8601) de criação e última atualização do registro no sistema. |
| `tags` | object | Metadados extras ou de controle do Crawler (ex: data da extração na Receita). |
***
### Arrays de Contato e Localização
Todas as entidades (Pessoas ou Empresas) possuem arrays padronizados para contato e endereços.
#### Endereços (`addresses`)
Lista de endereços residenciais ou comerciais vinculados ao documento.
| Propriedade | Tipo | Descrição |
| :------------- | :----- | :-------------------------------------------------------- |
| `street` | string | Logradouro principal (Rua, Avenida, etc.). |
| `number` | string | Número do imóvel predial. |
| `complement` | string | Complemento (apto, bloco, sala, andar). |
| `neighborhood` | string | Bairro de localização. |
| `city` | string | Cidade do endereço. |
| `state` | string | Unidade Federativa (UF) do endereço (ex: `"SP"`, `"RJ"`). |
| `country` | string | País de localização. |
| `zip_code` | string | Código Postal / CEP. *Retornado apenas com números.* |
| `ibge_code` | number | Código oficial do município na tabela do IBGE. |
#### Contatos (`contacts`)
Lista de meios de comunicação extraídos das bases de dados.
| Propriedade | Tipo | Descrição |
| :------------- | :----- | :----------------------------------------------------------------------- |
| `contact_type` | string | Categoria do contato (ex: `"phone"`, `"email"`). |
| `description` | string | O valor do contato em si (o número de telefone ou o endereço de e-mail). |
#### Outros Documentos (`documents`)
Lista de documentos de identificação secundários (como RG, CNH, Inscrição Estadual).
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :------------------------------------------------- |
| `document_type` | string | Tipo do documento secundário (ex: `"RG"`, `"IE"`). |
| `document` | string | O número do documento sem formatação. |
***
## 👤 Propriedades Exclusivas: Pessoa Física (`person`)
Se a consulta for de um **CPF** (`entity_type: "person"`), o objeto poderá conter as seguintes propriedades e arrays adicionais:
| Propriedade | Tipo | Descrição |
| :------------------ | :----- | :----------------------------------------------------------------------------------------------------------------------- |
| `birth_date` | string | Data de nascimento. Formato ISO 8601. |
| `gender` | string | Gênero/sexo cadastrado (ex: `"M"`, `"F"`). |
| `parents` | array | Array de filiação. Cada item contém `name` (nome completo) e `kinship` (grau de parentesco, ex: `"mother"`, `"father"`). |
| `partners` | array | Lista de cônjuges ou companheiros identificados. |
| `associated_people` | array | Lista de outras pessoas físicas com vínculos identificáveis (sociedade, residência conjunta). |
***
## 🏢 Propriedades Exclusivas: Empresa (`company`)
Se a consulta for de um **CNPJ** (`entity_type: "company"`), o objeto poderá conter os seguintes campos societários e de operação adicionais:
### Dados Operacionais
| Propriedade | Tipo | Descrição |
| :--------------- | :------ | :------------------------------------------------------------------------------------ |
| `social_name` | string | Nome Fantasia (nome de mercado da empresa). |
| `birth_date` | string | Data oficial de abertura/fundação da empresa na Receita Federal. |
| `size` | string | Porte cadastral oficial (ex: `"ME"`, `"EPP"`, `"DEMAIS"`). |
| `head_office` | boolean | Indica se o CNPJ em questão é a Matriz (`true`) ou uma Filial (`false`). |
| `special_status` | string | Situação especial perante o fisco (ex: Recuperação Judicial, Concordata). |
| `share_capital` | number | Valor do capital social declarado em formato numérico. |
| `parents` | array | Lista de empresas que atuam como matriz, controladoras ou holdings (Grupo Econômico). |
### Estrutura Societária e Econômica
#### Natureza Jurídica (`legal_nature`)
| Propriedade | Tipo | Descrição |
| :---------- | :------ | :------------------------------------------------------------- |
| `code` | string | Código numérico oficial da natureza (ex: `"206-2"`). |
| `name` | string | Descrição por extenso (ex: `"Sociedade Empresária Limitada"`). |
| `active` | boolean | Indica se este é o enquadramento atual vigente. |
#### Quadro de Sócios e Administradores - QSA (`partners`)
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :--------------------------------------------------------------------- |
| `name` | string | Nome do sócio ou administrador. |
| `main_document` | string | CPF ou CNPJ do participante societário. |
| `position` | string | Qualificação/Cargo ocupado (ex: `"SÓCIO-ADMINISTRADOR"`, `"DIRETOR"`). |
| `entity_type` | string | Tipo da entidade sócia (`"person"` ou `"company"`). |
#### Atividades Econômicas - CNAE (`branch_activities`)
| Propriedade | Tipo | Descrição |
| :-------------- | :------ | :------------------------------------------------------------------ |
| `code` | string | Código CNAE da atividade. |
| `name` | string | Título ou descrição por extenso da atividade. |
| `main_activity` | boolean | Indica se é o CNAE Principal (`true`) ou CNAE Secundário (`false`). |
***
## Exemplo de Payload (Pessoa Jurídica)
```json Resposta (CNPJ) theme={null}
{
"has_lawsuits": false,
"request_id": "5c618521-2ecc-4176-a573-431d2e0edeb2",
"response_data": [
{
"entity_id": "",
"entity_type": "person",
"main_document": "999.999.999-99",
"name": "JOÃO TESTE",
"addresses": [
{
"street": "RUA RAMOS DE CARVALHO",
"number": "999",
"complement": "",
"neighborhood": "CENTRO",
"city": "RIO DE JANEIRO",
"state": "RJ",
"country": "Brasil",
"zip_code": "99999999",
"ibge_code": 9999999
}
],
"aka_names": [],
"contacts": [
{
"description": "21999999999",
"contact_type": "phone"
}
],
"documents": [],
"parents": [
{
"name": "JANAINA DA SILVA",
"kinship": "mother"
}
],
"partners": [],
"associated_people": [],
"tags": {
"revenue_update_date": "2022-05-30T00:00:00.000Z"
},
"created_at": "2024-10-12T13:28:59.051Z",
"updated_at": "2024-10-12T13:28:59.051Z",
"nationality": "BRASILEIRA",
"birth_date": "1981-08-07T00:00:00.000Z",
"gender": "male",
"revenue_service_active": true
}
]
}
```
***
## Próximos Passos
Agora que você entende o dicionário de dados cadastrais, veja como consultar essas informações:
* 👉 **[Consultas Cadastrais](/registration-data/registration-data):** Veja a documentação da rota de requisição para buscar e enriquecer CPFs e CNPJs em tempo real.
# Enums e Domínios da Judit API
Source: https://docs.judit.io/schemas/lawsuit-enums
Lista completa de valores literais aceitos e retornados pelas propriedades de Lawsuit, Warrant, Penal Execution e Entity (área, status, side, person_type, secrecy_level e mais).
> 🤖 Este documento lista os valores literais aceitos e retornados pelas propriedades da Judit API em seus diversos Schemas. Lembre-se que no objeto `lawsuit`, as propriedades de capa (como `area`, `status`, `situation`, `secrecy_level`) ficam aninhadas dentro do objeto raiz `response_data`, enquanto `side` e `person_type` ficam dentro dos objetos do array `parties`.
## Áreas do Processo (`area`)
Lista das áreas jurídicas (Ramos do Direito) que um processo ou execução pode ter:
* `DIREITO À EDUCAÇÃO`
* `DIREITO DA CRIANÇA E DO ADOLESCENTE`
* `DIREITO DA SAÚDE`
* `DIREITO DO CONSUMIDOR`
* `DIREITO DO TRABALHO`
* `DIREITO ASSISTENCIAL`
* `DIREITO ADMINISTRATIVO E OUTRAS MATÉRIAS DE DIREITO PÚBLICO`
* `DIREITO AMBIENTAL`
* `DIREITO ELEITORAL`
* `DIREITO INTERNACIONAL`
* `DIREITO MARÍTIMO`
* `DIREITO TRIBUTÁRIO`
* `DIREITO PENAL`
* `DIREITO PENAL MILITAR`
* `DIREITO PREVIDENCIÁRIO`
* `DIREITO PROCESSUAL CIVIL E DO TRABALHO`
* `QUESTÕES DE ALTA COMPLEXIDADE, GRANDE IMPACTO E REPERCUSSÃO`
* `REGISTROS PÚBLICOS`
***
## Níveis de Sigilo (`secrecy_level`)
Sistema de classificação de sigilo processual (inteiro de 0 a 5):
| Nível | Descrição | Acesso Permitido |
| :---- | :---------------------------------- | :--------------------------------------------- |
| `0` | **Público** | Acesso público geral. |
| `1` | **Segredo de justiça** | Partes e advogados vinculados. |
| `2` | **Restrito (Servidores)** | Servidores da unidade judicial e partes. |
| `3` | **Sigiloso (Gabinete)** | Magistrados, chefes de cartórios e assessores. |
| `4` | **Sigiloso (Magistrados e Chefes)** | Apenas magistrados e chefes de cartório. |
| `5` | **Sigilo absoluto** | Exclusivo do magistrado do processo. |
Processos com nível de sigilo `> 0` podem retornar *payloads* limitados ou com dados ofuscados, dependendo do tribunal de origem e das credenciais (Cofre) utilizadas na busca.
***
## Tipos de Justiça (`justice_description`)
Classificação dos órgãos do Poder Judiciário brasileiro:
* `SUPREMO TRIBUNAL FEDERAL`
* `CONSELHO NACIONAL DE JUSTIÇA`
* `SUPERIOR TRIBUNAL DE JUSTIÇA`
* `TRIBUNAL REGIONAL FEDERAL`
* `JUSTIÇA DO TRABALHO`
* `JUSTIÇA ELEITORAL`
* `JUSTIÇA MILITAR DA UNIÃO`
* `JUSTIÇA MILITAR ESTADUAL`
* `JUSTIÇA ESTADUAL`
***
## Ciclo de Vida: Status vs. Situação
A API retorna dois campos semelhantes, mas com propósitos distintos para indicar a saúde do processo.
### 1. Status Global (`status`)
Visão macro e padronizada do processo, ideal para filtros e dashboards:
| Valor | Descrição | Comportamento na Judit |
| :----------- | :----------------------------- | :------------------------------------------------------------------------------------ |
| `ATIVO` | Processo em andamento normal. | O robô continua coletando andamentos a cada execução de tracking. |
| `FINALIZADO` | Processo concluído ou baixado. | O robô ainda monitora caso o tribunal reabra o processo, mas movimentações são raras. |
### 2. Situação Granular (`situation`)
Status mais específico e variável, capturado diretamente da capa do tribunal:
| Valor | Descrição | Comportamento na Judit |
| :------------------------------ | :------------------------------------------- | :----------------------------------------------------------------------------------------- |
| `INICIAL` | Processo recém-distribuído. | Costuma gerar muitas atualizações nos primeiros dias — vale recorrência baixa no tracking. |
| `SENTENÇA` | Processo com sentença proferida. | Ponto crítico — frequente alvo de `notification_filters.step_terms`. |
| `EXECUÇÃO OU CUMPRIMENTO` | Processo em fase de execução/cobrança. | Movimentações financeiras (penhoras, bloqueios) ficam visíveis nos `steps`. |
| `TRÂNSITO JULGADO OU EM ACORDO` | Decisão definitiva sem cabimento de recurso. | Pouca atividade subsequente; recorrência alta (ex.: 30 dias) é suficiente. |
| `RECURSO` | Processo aguardando julgamento de recurso. | Muitas vezes gera novos `lawsuit_cnj` na 2ª instância. |
| `ARQUIVADO` | Processo guardado definitivamente. | O robô continua coletando, mas raramente retorna novidade. |
| `SUSPENSO` | Tramitação paralisada temporariamente. | Pode voltar a `ATIVO` — manter o monitoramento ativo. |
| `SOBRESTADO` | Aguardando decisão de tribunal superior. | Em geral movimenta junto com a decisão da causa-piloto no STF/STJ. |
| `CANCELADO` | Distribuição cancelada. | Tribunal removeu o processo — Judit marca como inválido em coletas seguintes. |
***
## Polos e Tipos de Pessoa (`side` e `person_type`)
Ao iterar sobre os arrays de partes (seja em Processos, Mandados ou Execuções), você encontrará estas classificações:
### Polo Processual (`side`)
De qual lado da disputa a pessoa está.
* `ACTIVE`: Polo Ativo (quem move a ação).
* `PASSIVE`: Polo Passivo (contra quem a ação é movida).
* `INTERESTED`: Terceiros ou interessados.
* `UNKNOWN`: Não especificado pelo tribunal.
### Papel Específico (`person_type`)
A qualificação jurídica exata da parte. Exemplos comuns:
* `AUTOR` / `REQUERENTE` / `EXEQUENTE`
* `RÉU` / `REQUERIDO` / `EXECUTADO` / `REEDUCANDO`
* `ADVOGADO` / `DEFENSOR PÚBLICO`
* `TESTEMUNHA` / `PERITO`
***
## Fases e Andamentos
### Fases do Processo (`phase`)
* `CONHECIMENTO`
* `EXECUÇÃO`
* `RECURSO`
* `FASE` *(Valor genérico usado quando o tribunal não especifica a fase exata)*
### Códigos de Andamento (`step_type`)
Os códigos mapeiam a **Tabela Processual Unificada (TPU) do CNJ**. Exemplos:
* `DISTRIBUIÇÃO`
* `CITAÇÃO`
* `CONTESTAÇÃO`
* `SENTENÇA`
* `RECURSO`
* `ARQUIVAMENTO`
***
## Outras Enumerações Úteis
### Estados Brasileiros (`state`)
A API utiliza o padrão de siglas (UF) com 2 letras maiúsculas:
`AC`, `AL`, `AP`, `AM`, `BA`, `CE`, `DF`, `ES`, `GO`, `MA`, `MT`, `MS`, `MG`, `PA`, `PB`, `PR`, `PE`, `PI`, `RJ`, `RN`, `RS`, `RO`, `RR`, `SC`, `SP`, `SE`, `TO`.
### Tipos de Documento (`documents`)
Tipos de identificadores presentes nos arrays de documentos das partes ou entidades:
* `CPF`: Pessoa Física.
* `CNPJ`: Pessoa Jurídica.
* `RG`: Registro Geral.
* `OAB`: Inscrição na Ordem dos Advogados (geralmente acompanhada da UF, ex: OAB/SP).
***
## Exemplos Práticos de Uso
Abaixo, veja a forma correta de validar dados acessando o objeto `response_data` de um processo.
### 1. Validação de Tipos
```javascript JavaScript theme={null}
// Exemplo: Validando o status recebido da API
const lawsuit = response.json(); // Objeto raiz
const validStatuses = ['ATIVO', 'FINALIZADO'];
const currentStatus = lawsuit.response_data.status; // ✅ Acesso correto
if (validStatuses.includes(currentStatus)) {
console.log("Status reconhecido:", currentStatus);
}
```
```python Python theme={null}
# Exemplo: Validando o nível de sigilo
valid_secrecy_levels = [0, 1, 2, 3, 4, 5]
# ✅ Acesso correto através do dict response_data
current_level = lawsuit.get('response_data', {}).get('secrecy_level')
is_valid = current_level in valid_secrecy_levels
print(f"Sigilo válido? {is_valid}")
```
### 2. Filtragem de Arrays
```javascript JavaScript theme={null}
// Exemplo: Filtrar processos de uma lista que sejam apenas Públicos
const publicLawsuits = lawsuitsArray.filter(
lawsuit => lawsuit.response_data.secrecy_level === 0
);
// Exemplo: Filtrar apenas processos do Estado de SP
const spLawsuits = lawsuitsArray.filter(
lawsuit => lawsuit.response_data.state === 'SP'
);
```
```python Python theme={null}
# Exemplo: Filtrar processos de uma lista que sejam apenas Públicos
public_lawsuits = [
lawsuit for lawsuit in lawsuits_array
if lawsuit.get('response_data', {}).get('secrecy_level') == 0
]
# Exemplo: Filtrar apenas processos do Estado de SP
sp_lawsuits = [
lawsuit for lawsuit in lawsuits_array
if lawsuit.get('response_data', {}).get('state') == 'SP'
]
```
***
## Próximos Passos
* 👉 **[Buscar Processos](/requests/requests):** Utilize estas enumerações como parâmetros de filtro em suas buscas.
* 👉 **[Mandado de Prisão](/schemas/warrant):** Veja o schema de mandados de prisão.
* 👉 **[Execução Penal](/schemas/penal-execution):** Veja o schema de execuções penais e enums relacionados.
* 👉 **[Glossário](/resource/glossary):** Termos jurídicos e técnicos da Judit API.
# Schema Lawsuit (Processo Judicial)
Source: https://docs.judit.io/schemas/lawsuit-object
Estrutura completa do objeto Lawsuit retornado pela Judit API: capa do processo, partes, advogados, classificações, andamentos (steps), anexos e metadados de origem.
> 🤖 O objeto `lawsuit` é retornado no formato JSON. A propriedade raiz que contém os metadados do processo chama-se `response_data`. O histórico é retornado no array `steps` e os envolvidos no array `parties`. Lembre-se que a autenticação para consultar este objeto é feita via header `api-key`, e não Bearer Token.
**⚠️ Atenção: Consulta por Documento (Consulta Histórica)**
Se você obteve este objeto através do endpoint de Consulta Histórica (Busca por Documento), as propriedades **`phase`** (Fase) e **`status`** da Capa não serão preenchidas. Além disso, os arrays **`steps`** (Movimentações) e **`attachments`** (Anexos) não são retornados.
## Estrutura Geral
O JSON do processo judicial é organizado em 5 blocos principais:
* **Capa (response\_data):** Metadados, juiz, comarca, valor da causa e status.
* **Partes (parties):** Array contendo os pólos (ativo/passivo), documentos e advogados.
* **Andamentos (steps):** Array com o histórico cronológico de movimentações.
* **Anexos (attachments):** Array de documentos (PDFs, HTML) vinculados aos andamentos.
* **Relacionados (related\_lawsuits):** Array de processos apensos ou vinculados.
***
## Dicionário de Dados
### 1. Capa Processual (`response_data`)
| Propriedade | Tipo | Descrição |
| :--------------------- | :------ | :------------------------------------------------------------------------------------------------------ |
| `code` | string | Número único do processo no padrão CNJ. |
| `name` | string | Descrição/Nome do processo (ex: "PARTE ATIVA X PARTE PASSIVA"). |
| `area` | string | Área do direito (ex: "DIREITO CIVIL", "DIREITO ADMINISTRATIVO"). |
| `subject` / `subjects` | array | Assuntos da causa, baseados na tabela unificada do CNJ. |
| `classifications` | array | Classes processuais (ex: "PROCEDIMENTO COMUM"), baseadas no CNJ. |
| `distribution_date` | string | Data em que o processo foi distribuído/iniciado no tribunal. |
| `instance` | string | Grau de jurisdição (ex: "1ª INSTÂNCIA", "2ª INSTÂNCIA"). |
| `judge` | string | Nome do magistrado ou relator responsável. |
| `justice_description` | string | Tipo do órgão (ex: "JUSTIÇA ESTADUAL", "JUSTIÇA FEDERAL", "STJ"). |
| `tribunal_acronym` | string | Sigla oficial do tribunal de origem (ex: "TJSP", "TRF4"). |
| `county` | string | Comarca onde a ação está correndo. |
| `city` / `state` | string | Cidade e UF (Unidade Federativa) da comarca. |
| `amount` | number | Valor atribuído à causa. |
| `phase` | string | Fase processual (ex: "CONHECIMENTO").
**(Não retornado na Consulta por Documento)** |
| `status` | string | Macro-status do processo ("ATIVO" ou "FINALIZADO").
**(Não retornado na Consulta por Documento)** |
| `situation` | string | Status granular capturado direto no sistema do tribunal. |
| `secrecy_level` | integer | Nível de sigilo (0 = Público. Níveis 1 a 5 indicam graus de restrição). |
### 2. Envolvidos (`parties`)
Array de objetos representando as partes.
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :-------------------------------------------------------------------------------- |
| `name` | string | Nome completo ou Razão Social da parte. |
| `main_document` | string | CPF ou CNPJ principal vinculado à parte. |
| `side` | string | Pólo no processo: `ACTIVE` (Autor), `PASSIVE` (Réu), `INTERESTED` ou `UNKNOWN`. |
| `person_type` | string | Papel processual (ex: "AUTOR", "RÉU", "TESTEMUNHA", "TERCEIRO"). |
| `documents` | array | Lista de objetos com `document_type` (ex: "CPF", "CNPJ") e `document` (o número). |
| `lawyers` | array | Lista de advogados associados à parte (contém `name` e `oab`). |
**Atenção aos Advogados:** Se o tribunal não especificar claramente a qual parte o advogado pertence, o objeto do advogado será listado diretamente no array principal de `parties`, com um papel/side genérico.
### 3. Histórico de Movimentações (`steps`)
**(Array ausente nas respostas de Consulta por Documento)**
| Propriedade | Tipo | Descrição |
| :---------- | :------ | :--------------------------------------------------------------------------- |
| `step_id` | string | Identificador único interno do andamento. |
| `step_date` | string | Data da movimentação processual. |
| `step_type` | string | Código/Tipo do andamento mapeado na tabela do CNJ. |
| `content` | string | Texto descritivo integral do andamento (ex: "Ato ordinatório praticado..."). |
| `private` | boolean | Indica `true` se este andamento específico corre sob sigilo. |
### 4. Documentos Anexos (`attachments`)
**(Array ausente nas respostas de Consulta por Documento)**
| Propriedade | Tipo | Descrição |
| :---------------- | :----- | :---------------------------------------------------------------- |
| `step_id` | string | ID do andamento (step) que gerou este anexo. |
| `attachment_date` | string | Data da inserção do documento. |
| `attachment_name` | string | Título ou nome do arquivo (ex: "Petição Inicial", "Contestação"). |
| `extension` | string | Formato do arquivo extraído (ex: "PDF", "HTML"). |
***
## Exemplo Completo do JSON (Consulta Padrão)
Abaixo está a representação estrutural típica retornada pela Judit API ao consultar um processo judicial completo:
```json theme={null}
{
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"name": "Ação de Cobrança Cível",
"area": "DIREITO CIVIL",
"distribution_date": "2024-01-15",
"instance": "1ª INSTÂNCIA",
"courts": "1ª VARA CÍVEL",
"secrecy_level": 0,
"subjects": ["COBRANÇA"],
"classifications": ["PROCEDIMENTO COMUM CÍVEL"],
"judge": "João Silva Santos",
"justice_description": "JUSTIÇA ESTADUAL",
"county": "SÃO PAULO",
"tribunal_acronym": "TJSP",
"city": "SÃO PAULO",
"state": "SP",
"situation": "ATIVA",
"phase": "CONHECIMENTO",
"status": "ATIVO",
"amount": 50000.00
},
"parties": [
{
"name": "EMPRESA XYZ LTDA",
"main_document": "12345678000190",
"side": "ACTIVE",
"person_type": "AUTOR",
"documents": [
{ "document_type": "CNPJ", "document": "12345678000190" }
],
"lawyers": [
{ "name": "Maria Advogada", "oab": "OAB/SP 123456" }
]
}
],
"steps": [
{
"step_id": "step_001_abc",
"step_date": "2024-01-15",
"step_type": "DISTRIBUIÇÃO",
"content": "Processo distribuído por sorteio para a 1ª Vara Cível",
"private": false
}
],
"attachments": [
{
"step_id": "step_001_abc",
"attachment_date": "2024-01-15",
"attachment_name": "Petição Inicial Cópia Autenticada",
"extension": "PDF"
}
],
"related_lawsuits": []
}
```
***
## Exemplos de Integração (Buscando um Processo)
> **Importante:** Nos exemplos abaixo, estamos utilizando a URL Base de Consultas Síncronas do nosso Datalake para recuperar o objeto `lawsuit` instantaneamente. Lembre-se de passar o header `api-key`.
```bash cURL theme={null}
# Buscar processo específico por CNJ
export JUDIT_API_KEY="sua_chave_aqui"
curl -X GET "https://lawsuits.production.judit.io/lawsuits/9999999-99.9999.9.99.9999" \
-H "api-key: $JUDIT_API_KEY" \
-H "Content-Type: application/json"
```
```python Python theme={null}
import os
import requests
api_key = os.getenv('JUDIT_API_KEY')
cnj = "9999999-99.9999.9.99.9999"
url = f"https://lawsuits.production.judit.io/lawsuits/{cnj}"
headers = {
"api-key": api_key,
"Content-Type": "application/json"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # Dispara erro se não for 200 OK
lawsuit = response.json()
print(f"Processo: {lawsuit['response_data']['code']}")
# Tratando de forma segura (usando o método .get) propriedades que podem não existir na Consulta por Documento
status = lawsuit['response_data'].get('status', 'Status não retornado (Consulta Histórica)')
print(f"Status: {status}")
qtd_andamentos = len(lawsuit.get('steps', []))
print(f"Qtd de Andamentos: {qtd_andamentos}")
except requests.exceptions.RequestException as e:
print(f"Erro ao buscar processo: {e}")
```
```javascript Node.js theme={null}
const apiKey = process.env.JUDIT_API_KEY;
const cnj = "9999999-99.9999.9.99.9999";
const url = `https://lawsuits.production.judit.io/lawsuits/${cnj}`;
const headers = {
"api-key": apiKey,
"Content-Type": "application/json"
};
async function getLawsuit() {
try {
const response = await fetch(url, { headers });
if (!response.ok) {
throw new Error(`HTTP Error: ${response.status}`);
}
const lawsuit = await response.json();
console.log(`Processo: ${lawsuit.response_data.code}`);
// Tratamento seguro para propriedades que podem estar undefined
const status = lawsuit.response_data.status || 'Status não retornado';
console.log(`Status: ${status}`);
} catch (error) {
console.error("Erro na integração:", error);
}
}
getLawsuit();
```
***
## Próximos Passos
Agora que você conhece a anatomia de um processo, veja como capturá-los:
* 👉 **[Enumerações e Domínios](/schemas/lawsuit-enums):** Veja a lista completa de status, instâncias e níveis de sigilo.
* 👉 **[Busca Assíncrona](/requests/requests):** Aprenda a solicitar que nossos robôs busquem processos novos nos tribunais.
# Schema Penal Execution (Execução Penal)
Source: https://docs.judit.io/schemas/penal-execution
Estrutura do objeto Penal Execution retornado pela consulta de execução penal: cumprimento de pena, last_step e papéis específicos como EXECUTADO/REEDUCANDO.
> **🤖 Contexto para IAs e Assistentes de Código:** A estrutura do objeto de Execução Penal é semelhante à do [Objeto Lawsuit](/schemas/lawsuit-object), mas contém campos específicos como `free_justice` e um objeto dedicado para a `last_step` (última movimentação). Os papéis das partes (`person_type`) também diferem, assumindo valores como `EXECUTADO` ou `REEDUCANDO`.
## Estrutura Geral
O JSON de Execução Penal é organizado nos seguintes blocos:
* **Capa (Metadados):** Dados do juízo de execução, comarca, datas e status.
* **Partes (parties):** Array contendo o Estado (Autoridade) e o Reeducando.
* **Última Movimentação (last\_step):** Objeto com o andamento mais recente em destaque.
* **Andamentos (steps):** Array completo com o histórico de movimentações.
* **Anexos (attachments):** Array de documentos vinculados.
* **Relacionados (related\_lawsuits):** Array de processos de origem (ação penal que gerou a condenação).
***
## Dicionário de Dados
### 1. Capa Processual (Raiz do Objeto)
| Propriedade | Tipo | Descrição |
| :-------------------------- | :------ | :-------------------------------------------------------------------- |
| `code` | string | Número único do processo de execução no padrão CNJ. |
| `name` | string | Descrição do processo (ex: "JUSTIÇA PÚBLICA X NOME DO EXECUTADO"). |
| `area` | string | Área do direito (geralmente `"DIREITO PENAL"` ou `"EXECUÇÃO PENAL"`). |
| `subject` / `subjects` | array | Assuntos do processo (ex: `"Pena Privativa de Liberdade"`). |
| `classifications` | array | Classes processuais (ex: `"Execução da Pena"`). |
| `distribution_date` | string | Data em que o processo de execução foi autuado. |
| `instance` | number | Grau de jurisdição (ex: `1` para Vara de Execuções Penais). |
| `judge` | string | Nome do juiz ou magistrado responsável pela execução. |
| `justice_description` | string | Tipo do órgão (ex: `"Justiça Estadual"`, `"Justiça Federal"`). |
| `tribunal_acronym` | string | Sigla oficial do tribunal de execução (ex: `"TJSP"`). |
| `courts` | string | Órgão julgador exato (ex: `"Vara de Execuções Criminais"`). |
| `county` / `city` / `state` | string | Localização da comarca responsável pela execução. |
| `free_justice` | boolean | Indica `true` se o reeducando é beneficiário da justiça gratuita. |
| `secrecy_level` | integer | Nível de sigilo (0 = Público. Níveis > 0 indicam restrição). |
**Metadados Internos:** O objeto também pode retornar as chaves `created_at`, `updated_at` e `crawler` (contendo `source_name` e `crawl_id`), que são metadados técnicos sobre quando a Judit realizou a extração dos dados.
### 2. Envolvidos (`parties`)
Array de objetos representando as partes da execução.
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :----------------------------------------------------------------------------------------------------------- |
| `name` | string | Nome do executado ou do órgão público. |
| `main_document` | string | CPF ou CNPJ vinculado à parte. |
| `side` | string | Pólo no processo: `ACTIVE` (Estado/MP), `PASSIVE` (Condenado), ou `INTERESTED`. |
| `person_type` | string | Papel na execução penal (ex: `"EXECUTADO"`, `"REEDUCANDO"`, `"MINISTÉRIO PÚBLICO"`, `"DEFENSORIA PÚBLICA"`). |
| `entity_type` | string | Categoria da entidade (`"person"` ou `"company"`). |
| `documents` | array | Lista de documentos secundários da parte (RG, OAB, etc.). |
| `lawyers` | array | Lista de advogados ou defensores públicos associados à parte. |
### 3. Histórico de Movimentações (`last_step` e `steps`)
A API de Execução Penal facilita o acompanhamento retornando o andamento mais recente em destaque (`last_step`), além do histórico completo (`steps`).
#### Objeto Destaque: `last_step`
| Propriedade | Tipo | Descrição |
| :------------ | :------ | :----------------------------------------------------------------------------------------- |
| `step_id` | string | Identificador único da movimentação mais recente. |
| `step_date` | string | Data e horário da última movimentação (ISO 8601). |
| `content` | string | Texto descritivo da movimentação (ex: `"Ato ordinatório: Remessa ao Ministério Público"`). |
| `private` | boolean | Indica se a movimentação corre sob sigilo. |
| `steps_count` | number | Quantidade total de movimentações registradas no processo. |
#### Array Completo: `steps`
Array de objetos idênticos à estrutura de `last_step`, ordenados cronologicamente, contendo todo o histórico da pena.
### 4. Documentos Anexos (`attachments`)
| Propriedade | Tipo | Descrição |
| :---------------- | :----- | :---------------------------------------------------------- |
| `attachment_id` | string | Identificador único interno do anexo. |
| `attachment_name` | string | Título do arquivo (ex: `"Cálculo de Liquidação de Penas"`). |
| `attachment_date` | string | Data da inserção do documento no processo. |
| `step_id` | string | ID da movimentação (`steps`) à qual o anexo pertence. |
| `extension` | string | Formato do arquivo (ex: `"PDF"`). |
***
## Exemplo de Payload (Execução Penal)
```json Resposta theme={null}
Exemplo de retorno da resposta:
{
"page": 1,
"page_data": [
{
"request_id": "1d3d84d9-2edb-4952-83dc-70a7d81487hj",
"response_id": "9a4c8dee-e0d1-4cc5-8abb-bd5616265yu6",
"origin": "api",
"origin_id": "1d3d84d9-2edb-4952-83dc-70a7d81485ol",
"response_type": "lawsuit",
"response_data": {
"amount": 0,
"attachments": [],
"classifications": [
{
"code": "386",
"name": "EXECUÇÃO DA PENA"
}
],
"code": "99999999-99.9999.9.99.9999",
"county": "MARINGÁ - 2ª VARA DA FAZENDA PÚBLICA",
"courts": [
{
"name": "TJPR - Vara de Execução em Meio Aberto de Curitiba"
}
],
"crawler": {
"source_name": "JSeeu - BR - Lawsuit - Auth - 1 instance",
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a",
"weight": 10,
"updated_at": "2024-11-13T12:55:43.488Z"
},
"distribution_date": "2020-07-09T04:00:48.207Z",
"free_justice": true,
"instance": 1,
"judge": "Usuário teste",
"justice": "8",
"last_step": {
"lawsuit_cnj": "99999999-99.9999.8.16.9999",
"lawsuit_instance": 1,
"content": "EXPEDIÇÃO DE CERTIDÃO GERAL Referente ao evento (seq. 417) RECEBIDOS OS AUTOS(13/08/2024 16:02:19). Identificador do Cumprimento: 9999.",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"private": false,
"step_date": "2024-08-15T00:00:00.000Z",
"step_id": "2b837df6",
"steps_count": 418
},
"name": "ESTADO DO PARANÁ X USUÁRIO TESTE",
"parties": [
{
"side": "Active",
"person_type": "AUTORIDADE",
"name": "ESTADO DO PARANÁ",
"main_document": "99999999999",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"entity_type": "company",
"documents": [],
"lawyers": []
},
{
"side": "Passive",
"person_type": "EXECUTADO",
"name": "USUÁRIO TESTE",
"main_document": "99999999999",
"tags": {
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a"
},
"entity_type": "person",
"documents": [],
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"steps": [],
"subjects": [
{
"code": "7791",
"name": "PENA PRIVATIVA DE LIBERDADE"
}
],
"tags": {
"datalake_id": "99999999999999999999",
"datalake_segment": "JUSTICA_ESTADUAL",
"crawl_id": "a7fe1da7-6d2e-452f-9d36-115d80e9601a",
"criminal": true,
"dictionary_updated_at": "2024-11-13T12:55:47.284Z"
},
"tribunal": "16",
"tribunal_acronym": "TJPR"
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2024-11-13T12:55:47.885Z",
"tags": {
"dashboard_id": null
}
}
],
"page_count": 1,
"all_count": 1,
"all_pages_count": 1
}
```
***
## Próximos Passos
Agora que você entende o dicionário de dados da Execução Penal, avance para a integração:
* 👉 **[Consultas Penais](/criminal-consultation/criminal-execution):** Veja a documentação do endpoint para iniciar uma extração em varas criminais e de execução.
* 👉 **[Objeto Dados Cadastrais](/schemas/entity):** Veja como interpretar o modelo de dados de dados cadastrais.
# Schema Warrant (Mandado de Prisão)
Source: https://docs.judit.io/schemas/warrant
Estrutura do objeto Warrant retornado pela consulta de mandados de prisão na Judit API. Inclui dados da ordem, pena, leis infringidas e do indivíduo procurado.
> 🤖 As consultas por mandados de prisão retornam o objeto `warrant`. A raiz contém os dados da ordem judicial e da pena. As informações sobre as leis infringidas ficam no array `law_type`, e os dados detalhados do indivíduo procurado ficam aninhados no objeto `entity` (que segue a estrutura padrão de Pessoa Física da Judit API).
## Estrutura Geral
O JSON do mandado é organizado em 4 blocos principais:
* **Capa do Mandado:** Dados da ordem, tribunal emissor, status e cálculo da pena.
* **Enquadramento Legal (law\_type):** Array com as leis e artigos infringidos.
* **Indivíduo (entity):** Objeto detalhado da pessoa procurada (CPF, nome, filiação).
* **Anexos (attachments):** Array de documentos do mandado (PDFs oficiais).
***
## Dicionário de Dados
### 1. Capa do Mandado (Raiz do Objeto)
Estas propriedades vêm diretamente na raiz do objeto retornado.
| Propriedade | Tipo | Descrição |
| :----------------- | :------ | :-------------------------------------------------------------------------------------------- |
| `number` | string | Número interno do mandado no sistema emissor (geralmente contém o CNJ do processo de origem). |
| `code` | string | Número único do processo judicial (padrão CNJ) vinculado ao mandado. |
| `warrant_type` | string | Tipo do mandado emitido (ex: `"Mandado de Prisão"`, `"Mandado de Recaptura"`). |
| `arrest_type` | string | Natureza da prisão (ex: `"definitive"`, `"temporary"`, `"preventive"`). |
| `status` | string | Situação atual do mandado (ex: `"Aguardando Cumprimento"`, `"Cumprido"`, `"Revogado"`). |
| `issue_date` | string | Data (ISO 8601) em que o mandado foi oficialmente expedido. |
| `expiration_date` | string | Data (ISO 8601) em que o mandado perde sua validade prescricional. |
| `recapture` | boolean | Indica `true` se o mandado é para recaptura de indivíduo evadido do sistema prisional. |
| `judgementSummary` | string | Resumo textual da decisão judicial que embasou o mandado. |
| `individual_id` | string | Identificador único interno da pessoa relacionada. |
#### Órgão Emissor
| Propriedade | Tipo | Descrição |
| :----------------- | :----- | :----------------------------------------------------------- |
| `tribunal_id` | string | Identificador numérico do tribunal responsável (ID do BNMP). |
| `tribunal` | string | Código numérico oficial do tribunal no padrão CNJ. |
| `tribunal_acronym` | string | Sigla oficial do tribunal (ex: `"TJSP"`, `"TJRJ"`). |
| `justice` | string | Código identificador do ramo da justiça. |
| `instance` | number | Grau/Instância judicial emissora (ex: `1`). |
| `court` | string | Órgão julgador exato (Nome da vara ou juízo de origem). |
#### Cálculo da Pena
| Propriedade | Tipo | Descrição |
| :---------------- | :----- | :------------------------------------------------------------------------------------------ |
| `duration` | string | Representação textual da duração total da pena (ex: `"5 anos, 2 meses e 10 dias"`). |
| `duration_years` | number | Quantidade exata de anos da pena. |
| `duration_months` | number | Quantidade exata de meses da pena. |
| `duration_days` | number | Quantidade exata de dias da pena. |
| `regime` | string | Regime inicial estipulado para o cumprimento (ex: `"FECHADO"`, `"SEMIABERTO"`, `"ABERTO"`). |
### 2. Enquadramento Legal (`law_type`)
Array de objetos detalhando os crimes cometidos que motivaram o mandado.
| Propriedade | Tipo | Descrição |
| :------------ | :----- | :--------------------------------------------------------------------------------- |
| `number` | string | Título ou código identificador da lei (ex: `"Código Penal"`, `"Lei de Drogas"`). |
| `description` | string | Texto com o artigo, parágrafo ou inciso exato infringido (ex: `"Art. 157, § 2º"`). |
### 3. Indivíduo Procurado (`entity`)
Objeto que contém a qualificação completa da pessoa. Segue a estrutura do [Objeto Entity](/schemas/entity) para Pessoas Físicas.
| Propriedade Principal | Tipo | Descrição |
| :---------------------------- | :----- | :-------------------------------------------------------------------------------------------------- |
| `name` | string | Nome completo da pessoa procurada. |
| `main_document` | string | CPF da pessoa (apenas números). |
| `aka_names` | array | Nomes falsos, apelidos conhecidos ou alcunhas utilizadas pelo indivíduo. |
| `parents` | array | Filiação (nome da mãe e do pai). Muito usado por autoridades para desambiguação de homônimos. |
| `birth_date` | string | Data de nascimento. |
| `gender` | string | Gênero ou sexo registrado. |
| `addresses` | array | Lista de últimos endereços conhecidos ou registrados da pessoa. |
| `warnings_and_determinations` | string | Alertas críticos para autoridades (ex: `"Indivíduo de alta periculosidade"`, `"Membro de facção"`). |
| `observations` | string | Notas extras ou características físicas cadastradas. |
### 4. Anexos (`attachments`)
Documentos oficiais da ordem judicial.
| Propriedade | Tipo | Descrição |
| :-------------- | :----- | :--------------------------------------------------------------------------- |
| `attachment_id` | string | Identificador único interno do anexo. |
| `extension` | string | Formato do arquivo extraído (geralmente `"PDF"` da ordem original assinada). |
| `status` | string | Status do download do arquivo do tribunal (`"done"` ou `"pending"`). |
***
## Exemplo de Payload (Mandado de Prisão)
```json Resposta theme={null}
Exemplo de retorno da resposta:
{
"page": 1,
"page_data": [
{
"request_id": "87d9f7bf-0071-41ee-a721-e6e1b4082bc9",
"response_id": "c7ae682c-3d7c-4634-a0b1-e414ae38fdeb",
"origin": "api",
"origin_id": "33fad316-cd98-40b9-bcd4-70e3c74ff947",
"response_type": "warrant",
"response_data": {
"_id": "65f29d5c48f9210b7040b5a3",
"warrant_id": "eb532bb3-2f0e-41c9-a80d-50f17258126f",
"entity_id": "09c91d1b-fba7-4b0e-bfc3-e87a8b092802",
"tribunal_id": "33123363_1",
"individual_id": "18155647970",
"warrant_type": "warrant_of_arrest",
"arrest_type": "definitive",
"law_type": {
"number": "2848",
"description": "2848, 157, § 2º, I;II;"
},
"number": "0007826652016810000101000112",
"previous_number": "",
"issue_date": "2018-05-28T11:52:37.716Z",
"create_date": "2018-05-28T12:05:09.040Z",
"expiration_date": "2028-11-27T00:00:00.000Z",
"status": "Pendente de Cumprimento",
"code": "99999999-99.9999.9.99.9999",
"instance": 1,
"tribunal": "10",
"justice": "8",
"tribunal_acronym": "TJMA",
"court": "Tribunal de Justiça do Estado do Maranhão",
"judge": "USUÁRIO TESTE",
"judgementSummary": "O MINISTÉRIO PÚBLICO ESTADUAL, através da douta Promotora de Justiça com exercício nesta Unidade Jurisdicional, lastreada em Inquérito Policial ofereceu denúncia contra LUÍS SOUZA, brasileiro, solteiro, natural de Cedral/MA, nascido em 17/07/1995, RG n.º 999999999999-9 SSPMA, filho de Eduardo Silva Trindade e Maria da Conceição Silva, residente na Rua centro, n.º 99, bairro Centro, São Luís/MA, incursando-o no crime tipificado no art. 157, § 2º, I e II, do Código Penal.Ante o exposto, julgo procedente a denúncia e CONDENO o acusado LUÍS SOUZA, supraqualificado, nas penas do artigo 157, § 2º, I e II, do Código Penal. Não ocorre causa de diminuição de pena. Por outro lado, presente a causa de aumento de pena pelo emprego de arma e concurso de pessoas, pelo que elevo a reprimenda no patamar mínimo de 1/3 (um terço), ou seja, 01 ano e 04 (quatro) meses de reclusão e 03 (três) dias multa, resultando na reprimenda definitiva de 05 (CINCO) ANOS E 04 (QUATRO) MESES DE RECLUSÃO E 13 (TREZE) DIAS MULTA, a qual deverá ser cumprida em regime inicialmente semiaberto, na Penitenciária Agrícola de Pedrinhas. Com o trânsito em julgado desta, o nome do condenado deverá ser inscrito no Livro Rol dos Culpados, calculada a pena de multa e intimado para pagamento, oficiando-se ao TRE para as providências quanto a sua situação eleitoral, bem como expedida carta de guia definitiva e mandado de prisão.",
"duration": "5 ano(s) 4 mês(es) 0 dia(s).",
"duration_years": 5,
"duration_months": 4,
"duration_days": 0,
"observations": "DEFINITIVA",
"regime": "Semiaberto",
"recapture": false,
"crawler": {
"source_name": "JBnmp - BR - Warrant - No Auth",
"crawl_id": "eb9c2c3a-1893-4ace-a98f-6210f8e78f72",
"updated_at": "2024-03-14T06:46:24.996Z",
"weight": 10,
"_id": "65f29d5c48f9210b7040b5a4"
},
"created_at": "2024-03-14T06:46:24.996Z",
"updated_at": "2024-03-14T06:46:24.996Z",
"entity": {
"_id": "65f29d5c48f9210b7040b59b",
"entity_id": "09c91d1b-fba7-4b0e-bfc3-e87a8b092802",
"entity_type": "person",
"name": "JOÃO SILVA",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf",
"_id": "65f29d5c48f9210b7040b59c"
},
{
"document": "99999999999-9",
"document_type": "rg",
"_id": "65f29d5c48f9210b7040b59d"
},
{
"document": "99999999999-9",
"document_type": "rji",
"_id": "65f29d5c48f9210b7040b59e"
}
],
"addresses": [
{
"street": "RUA CENTRO",
"number": "99",
"neighborhood": "CENTRO",
"city": "Sao Luis",
"state": "MA",
"ibge_code": 9999999,
"country": "Brasil",
"_id": "65f29d5c48f9210b7040b59f"
}
],
"contacts": [],
"aka_names": [
"LOURO"
],
"parents": [
{
"name": "USUÁRIO TESTE",
"kinship": "father",
"_id": "65f29d5c48f9210b7040b5a0"
},
{
"name": "MARIA SILVA",
"kinship": "mother",
"_id": "65f29d5c48f9210b7040b5a1"
}
],
"partners": [],
"birth_date": "1995-07-17T03:00:00.000Z",
"place_of_birth": "Cedral",
"gender": "male",
"created_at": "2024-03-14T06:46:24.996Z",
"updated_at": "2024-03-14T07:03:00.407Z"
}
},
"user_id": "6dc91e78-400e-489c-b30c-61789e323d7c",
"created_at": "2024-03-14T07:35:35.911Z",
"request_created_at": "2024-03-14T07:35:14.272Z",
"tags": {
"dashboard_id": null
}
}
],
"page_count": 1,
"all_count": 1,
"all_pages_count": 1
}
```
***
## Próximos Passos
* 👉 **[Consultas Penais](/criminal-consultation/criminal-execution):** Veja a documentação do endpoint específico para disparar buscas por mandados de prisão.
* 👉 **[Objeto Entity](/schemas/entity):** Revise todas as propriedades possíveis do objeto `entity` retornado dentro do mandado.
# Monitoramento Processual
Source: https://docs.judit.io/tracking/tracking
Acompanhe automaticamente as movimentações de um processo específico pelo seu número CNJ. A Judit consulta o tribunal com a recorrência configurada e envia atualizações via webhook.
O **Monitoramento Processual** acompanha automaticamente um processo específico pelo seu número CNJ. Você cadastra o CNJ, define a recorrência (em dias) e a Judit consulta o tribunal para você. Sempre que houver novidade — nova movimentação, anexo ou decisão — você recebe a atualização via **webhook** ou e-mail.
> 🤖 Endpoint base: `POST https://tracking.production.judit.io/tracking` com `search.search_type: "lawsuit_cnj"`. O monitoramento roda em background, dentro da janela de melhor concorrência da Judit no tribunal. A primeira execução acontece nas 24 horas seguintes ao cadastro; as próximas seguem a recorrência definida em `recurrence` (em dias).
## Quando usar
Mantenha cada processo do escritório monitorado por CNJ, com webhooks chegando assim que houver andamento.
Receba alertas em tempo hábil sobre intimações, sentenças e despachos para nunca perder um prazo.
Mantenha a base interna do escritório sempre sincronizada com o estado mais atual do processo no tribunal.
Use `notification_filters.step_terms` para receber alertas só quando movimentações específicas (ex.: "sentença", "intimação") aparecerem.
## Rota de Monitoramento
Para começar a monitorar um processo, você deve realizar uma solicitação POST para a rota `/tracking`.
## Payload da Solicitação
A solicitação POST deve incluir um payload com as seguintes propriedades:
* `fixed_time` (**obrigatório**): boolean. Define se o tracker roda sempre no mesmo horário do dia. Quando `true`, combine com `hour_range` (0-23) para fixar o horário. Quando `false`, a Judit escolhe a melhor janela de concorrência.
* `recurrence`: A recorrência em dias de atualização dos processos.
* `search` (**obrigatório**): Objeto que vai para a busca.
* `search_type` (**obrigatório**): No contexto de monitoramento processual, o valor desse campo sempre será `lawsuit_cnj`.
* `search_key`: O número do processo (Código CNJ) que você deseja buscar;
* `with_attachments` (opcional): Esse campo define se você quer trazer anexos referente ao processo buscado podendo ser **true** ou **false**
* `Obs:` Os anexos só serão retornados caso o search\_type for **lawsuit\_cnj**.
* `search_params`: Um objeto que contém alguns parâmetros da busca como:
* `lawsuit_instance` (opcional): Este parâmetro permite definir a instância em que deseja buscar o processo;
`*Obs`: Caso o parâmetro lawsuit\_instance não seja especificado, a busca retornará automaticamente todas as instância encontradas para aquela mesma numeração de processo. Por exemplo, se o processo estiver tramitando tanto na primeira quanto na segunda instância, a busca cretornará as duas instâncias.
* `credential` (opcional): Objeto para o uso do cofre de credenciais.
* `customer_key` (opcional): Permite passar a chave do usuário que você cadastrou no cofre de credenciais,caso não seja informado, a API tentará encontrar uma credencial cadastrada para a `customer_key` vazia.
* `notification_emails` (opcional): Array de strings fora do `search` que podem ser adicionados emails para os quais deseja receber notificação a cada atualização do monitoramento cadastrado.
* `step_terms`: Esta propriedade é um array de strings que permite filtrar as movimentações processuais com base em termos específicos. Quando utilizada em conjunto com o monitoramento via webhook, o usuário receberá notificações apenas se algum dos termos especificados for encontrado em uma nova movimentação processual.
Este parâmetro deve ser incluído dentro do objeto chamado notification\_filters.
Exemplo de payload com alguns filtros opcionais:
```json theme={null}
{
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111"
},
"notification_emails": ["teste@teste.com"]
"notification_filters": {
"step_terms": [
'petição',
'acordo'
]
}
}
```
Exemplo de payload sem filtros:
```json theme={null}
{
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111"
}
}
```
Aqui está um exemplo de retorno esperado ao criar um monitoramento:
```json theme={null}
{
"tracking_id": "d923253e-45c1-46e5-ac70-164839d9851c",
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"status": "created",
"recurrence": 1,
"notification_emails": [
"teste@teste.com"
],
"notification_filters": {
"step_terms": [],
"_id": "67ffb7a1062277871357743f"
},
"with_attachments": false,
"plan_config_type": "simple_lawsuit_tracking",
"fixed_time": false,
"hour_range": 21,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tags": {},
"created_at": "2025-04-16T13:58:56.352Z",
"updated_at": "2025-04-16T13:58:56.352Z"
}
```
Na resposta da criação do monitoramento, é retornado o campo `hour_range`, que indica o horário em que a consulta ao tribunal será realizada pela primeira vez. No exemplo acima, a primeira consulta está programada para ocorrer às 21 horas.
Aqui está um exemplo de como usar esses parâmetros de consulta com curl:
```bash theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: >' \
--header 'Content-Type: application/json' \
--data '{
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111"
}
}'
```
O monitoramento irá ser iniciado a primeira vez, na melhor janela de
concorrência de requisição ao tribunal, dentro das próximas 24 horas
da data de criação.
## Atualizando um Monitoramento
Para atualizar um monitoramento, você pode fazer uma solicitação PATCH para a rota `/tracking/{monitoramento}`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja atualizar.
Esta rota campos opcionais para atualização do tracking: `recurrence`, `tags` e o objeto de `search` para a busca com exceção de alguns campos.
Aqui está um exemplo de como fazer isso usando curl:
```bash theme={null}
curl -X PATCH "https://tracking.production.judit.io/tracking/{monitoramento}" \
-H "api-key: YOUR_API_KEY"
-d '{
"recurrence": 5,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111"
}
}'
```
## Consultando Seus Monitoramentos
Para consultar todos os seus monitoramentos, você pode fazer uma solicitação GET para a rota `/tracking`. Esta rota aceita alguns parâmetros de consulta opcionais para paginar e filtrar os resultados:
`page`: Define a página dos resultados que você deseja consultar.
`page_size`: Define o número máximo de resultados que você deseja receber por página;
`search_type`: retorna monitoramentos do tipo de referência especificado **"cpf"**, **"cnpj"**, **"oab"**, **"lawsuit\_cnj"**, **name** ou **rji**;
`search_key`: retorna monitoramentos com a buscar relacionadas ao número do CPF, CNPJ, OAB ou processo informado;
`status`: retorna monitoramentos cujo status podem ser 'created', 'updating', 'updated', 'paused' ou 'deleted' ou mais de um de status \['updating', 'paused'];
Aqui está um exemplo de como consultar seus monitoramentos usando curl:
```bash theme={null}
curl -X GET "https://tracking.production.judit.io/tracking?page=1&page_size=10" \
-H "api-key: YOUR_API_KEY"
```
## Exemplo de notificação de webhook para monitoramento
**Obs**: Toda movimentação serão notificadas via webhook contendo o processo por completo, incrementando as últimas movimentações.
```json theme={null}
{
"_id": {
"$oid": "65f0efe046ad3bda5b27be2d"
},
"callback_id": "be1406d9-d62d-402d-8e0e-8684044645de",
"event_type": "response_created",
"reference_type": "tracking",
"reference_id": "8744cfea-f9d4-4e83-801e-bc05003ebf6b",
"user_id": "ac98336e-c493-4609-a058-cf7114f7a2ed",
"webhook_id": "2f82201d-1439-436d-8c6a-2e6b3e36a54f",
"payload": {
"request_id": "7d50b66c-3e86-4d0b-95af-5ff7561d18ff",
"response_id": "12576767-d3ea-4ea2-8805-6f2a73ef3439",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"justice": "8",
"tribunal": "05",
"instance": 1,
"distribution_date": "2024-01-17T15:43:39.000Z",
"judge": "AUGUSTO YUZO JOUTI",
"tribunal_acronym": "TJBA",
"secrecy_level": 0,
"tags": {
"crawl_id": "f9b29daf-4cd4-48e9-97cd-0cee91400765"
},
"subjects": [
{
"code": "7779",
"name": "INDENIZAÇÃO POR DANO MORAL"
},
{
"code": "6220",
"name": "RESPONSABILIDADE DO FORNECEDOR"
},
{
"code": "1156",
"name": "DIREITO DO CONSUMIDOR"
}
],
}
```
Para cadastrar seu webhook, entre em contato com a equipe de [suporte](https://api.whatsapp.com/send/?phone=5521976748865) e solicite a criação. Alternativamente, o webhook também pode ser especificado adicionando o parâmetro callback\_url no payload da requisição, conforme o exemplo abaixo:
```json theme={null}
{
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "1111111-04.1111.1.11.1111"
},
"callback_url": "https://webhook.site/b0ac6522-5bfc-42fa-bebf-a8c2b5ec0999",
"notification_emails": ["teste@teste.com"],
"with_attachments": true
}
```
## Consultando Informações de um Monitoramento
Para consultar todas as informações sobre um monitoramento específico, você pode fazer uma solicitação GET para a rota `/tracking/{monitoramento}`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja consultar.
Aqui está um exemplo de como fazer isso usando curl:
```bash theme={null}
curl -X GET "https://tracking.production.judit.io/tracking?tracking_id=15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9" \
-H "api-key: YOUR_API_KEY"
```
Aqui está o retorno esperado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "updated",
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
## Consultando histórico de um monitoramento
Para consultar o histórico de respostas geradas por um monitoramento específico, faça uma solicitação GET para a rota /tracking/, substituindo pelo ID do monitoramento desejado.
Você pode filtrar os resultados usando os parâmetros `created_at_gte` e `created_at_lte`, onde:
`created_at_gte`: define a data inicial da consulta.
`created_at_lte`: define a data final da consulta.
Aqui está um exemplo de como fazer isso usando curl:
```bash theme={null}
curl --location 'https://requests.production.judit.io/responses/tracking/?order=asc&page=1&page_size=50&created_at_gte=2024-03-05T00%3A00%3A00&created_at_lte=2025-03-11T00%3A00%3A00' \
--header 'api-key: '
```
Aqui está o retorno esperado:
```json theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 2,
"all_pages_count": 1,
"all_count": 2,
"page_data": [
{
"request_id": "644a4759-1ae2-48a4-8b09-76afffc75849393",
"response_id": "a37ca823-e1d2-4de4-a973-ec9e859d21ed",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 13687.36,
"attachments": [
{
"attachment_id": "f2f14dca-5b3f-aba2-a9bd95bd367f",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_3",
"content": "CÁLCULOS",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "e26be17f-06ba-9f0c-7fc840e092b1",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_2",
"content": "CERTIDÃO DE DÍVIDA ATIVA",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "54e833a9-58a3-9484-0e6e1cb6c457",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_1",
"content": "PETIÇÃO INICIAL",
"step_id": "ac8ea79b",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
}
],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000133-12.2025.8.19.0001",
"county": "TESTE TRIBUNAL",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-23T16:09:20.134Z",
"updated_at": "2025-01-24T16:10:56.948Z",
"metadata": {},
"courts": [
{
"code": "7798",
"name": "TESTE RETORNO TRIUNAL"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"weight": 0,
"updated_at": "2025-01-24T16:10:50.024Z"
},
"distribution_date": "2025-01-22T15:19:46.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "91dc5544",
"step_date": "2025-01-22T18:40:18.000Z",
"content": "Conclusos para decisão/despacho",
"step_type": "51",
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"steps_count": 1
},
"name": "USUÁRIO EXEMPLO 1 X USUÁRIO EXEMPLO 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO EXEMPLO 1",
"main_document": "99999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO EXEMPLO 3",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
}
},
{
"side": "Passive",
"name": "USUÁRIO EXEMPLO 2",
"main_document": "99999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"dictionary_updated_at": "2025-01-24T16:10:50.384Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-24T16:10:53.278Z",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "32e0cbb6-71ed-4165-81d5-08ef4dcf80c6",
"response_id": "a6690acb-0856-4e4d-ae69-c8d808ce7d9e",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 17456.15,
"attachments": [],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000233-64.2025.8.19.0001",
"county": "CAPITAL 12 VARA FAZ PUBLICA",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-27T16:09:19.112Z",
"updated_at": "2025-01-27T16:09:19.112Z",
"metadata": {},
"courts": [
{
"code": "79705",
"name": " CAPITAL 17 FAZ PUBLICA"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"weight": 0,
"updated_at": "2025-01-27T16:09:18.570Z"
},
"distribution_date": "2025-01-24T17:08:03.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "5d93c333",
"step_date": "2025-01-27T10:30:20.000Z",
"content": "Expedição de Carta pelo Correio - 1 carta",
"step_type": "60",
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"steps_count": 1
},
"name": "usuário teste 1 X usuário teste 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO 1",
"main_document": "99999999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO 2",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
}
},
{
"side": "Passive",
"name": "USUÁRIO 2",
"main_document": "99999999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"dictionary_updated_at": "2025-01-27T16:09:19.635Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-27T16:09:18.752Z",
"tags": {
"dashboard_id": null
}
}
]
}
```
## Pausando um Monitoramento
Para pausar um monitoramento, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/pause`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja pausar.
Aqui está um exemplo de como pausar o monitoramento usando o curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/pause" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo de retorno do monitoramento pausado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "paused",
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
## Reativando um Monitoramento
Para reativar um monitoramento pausado, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/resume`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja reativar.
Aqui está um exemplo de como reativar um monitoramento usando curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/resume" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo de retorno do monitoramento **ativo**
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "updated",
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
## Deletando um Monitoramento
Para deletar um monitoramento, você pode fazer uma solicitação DELETE para a rota `/tracking/{monitoramento}`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja excluir.
A exclusão é **definitiva**: o tracker para de rodar imediatamente, suas execuções futuras são canceladas e o histórico de respostas vinculadas a ele permanece consultável apenas via [`GET /responses`](/api-reference/endpoint/responses/find-many) com o `origin_id` antigo. Se você só quer suspender temporariamente, use [Pausar](#pausando-um-monitoramento) e depois [Reativar](#reativando-um-monitoramento).
Aqui está um exemplo de como deletar um monitoramento usando curl:
```bash theme={null}
curl -X DELETE "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo de retorno do monitoramento deletado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "deleted",
"recurrence": 1,
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
## Próximos passos
* **[Monitoramento por Documento](/tracking/tracking-document)** — detecte novos processos vinculados a CPF, CNPJ ou OAB.
* **[Monitoramento Customizado](/tracking/tracking-custom)** — filtros avançados (tribunal, valor, classe, fase) sobre tracking por documento.
* **[Webhook & Callbacks](/webhook/callbacks)** — comportamento de entrega, idempotência e reentregas.
* **[Monitoramento em Massa](/guides/monitoramento-massa)** — receita prática para portfólios de 10k+ processos.
# Monitoramento do Diário Oficial de Justiça
Source: https://docs.judit.io/tracking/tracking-communication
Monitore automaticamente o Diário de Justiça Eletrônico Nacional (DJEN) por CPF, CNPJ, OAB ou qualquer termo. Receba via webhook cada publicação que contenha o termo monitorado.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
O **Monitoramento do Diário Oficial de Justiça** varre diariamente o Diário de Justiça Eletrônico Nacional (DJEN) em busca de publicações que contenham o termo cadastrado. A busca é feita em **todos os campos de texto** da publicação — partes, advogados, órgão, texto completo — independentemente do tipo de `search_type` escolhido.
> 🤖 Endpoint: `POST https://tracking.production.judit.io/tracking` com `response_type: "communication"`. Diariamente, a Judit processa as publicações do DJENN e envia via webhook aquelas em que houver correspondência com o seu termo.
## Quando usar
Saiba imediatamente quando um CPF, CNPJ ou OAB for citado em uma intimação ou publicação no DJEN.
Monitore qualquer palavra ou expressão — nome de empresa, vara, juiz — e receba todas as publicações que o contenham.
Garanta que nenhuma publicação relevante sobre um cliente, fornecedor ou contraparte passe despercebida.
Centralize o acompanhamento de publicações de todos os clientes da carteira em um único fluxo de webhooks.
## Payload da Solicitação
A solicitação POST deve incluir um payload com as seguintes propriedades:
* `search_type`: Define o tipo de busca. Os valores aceitos são: `cpf`, `cnpj`, `oab` ou `name`. **Independentemente do tipo escolhido, a busca é realizada em todos os campos de texto da publicação**;
* `search_key`: O termo que será buscado — CPF, CNPJ, número OAB ou qualquer nome/expressão livre;
* `response_type`: Deve ser obrigatoriamente `"communication"` para ativar o monitoramento do DJEN;
* `notification_emails` (opcional): Array de e-mails que receberão notificação a cada atualização do monitoramento.
Este monitoramento **não aceita filtros** adicionais (`filter`, `side`, `tribunals` etc.). A correspondência é feita por busca textual em toda a publicação.
```bash cURL (Nome / Qualquer Termo) theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "name",
"search_key": "NOME EXEMPLO",
"response_type": "communication"
}
}'
```
```bash cURL (CPF) theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "communication"
}
}'
```
```bash cURL (CNPJ) theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"response_type": "communication"
}
}'
```
```bash cURL (OAB) theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"search": {
"search_type": "oab",
"search_key": "SP123456",
"response_type": "communication"
}
}'
```
A partir da criação do monitoramento, ele será executado automaticamente todas as madrugadas, capturando as publicações referentes ao dia anterior.
Retorno da criação:
```json theme={null}
{
"tracking_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"user_id": "00000000-0000-0000-0000-000000000000",
"status": "created",
"search": {
"search_type": "name",
"search_key": "NOME EXEMPLO",
"response_type": "communication"
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2026-05-20T04:52:50.223Z",
"updated_at": "2026-05-20T04:52:50.223Z"
}
```
Na URL vai o **tracking\_id** retornado na primeira requisição:
```bash theme={null}
curl --request GET \
--url "https://tracking.production.judit.io/tracking/a94db796-9e35-4d0c-8e05-2a6b60f32a74" \
--header "api-key: SUA-API-KEY" \
--header "Content-Type: application/json"
```
Retorno:
```json theme={null}
{
"tracking_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"user_id": "00000000-0000-0000-0000-000000000000",
"status": "updated",
"search": {
"search_type": "name",
"search_key": "NOME EXEMPLO",
"response_type": "communication"
},
"tracked_items_count": 3,
"tracked_items_steps_count": 0,
"tags": {
"dashboard_id": null
},
"request_id": "186e0ed5-4656-4fd8-8e07-76f755c44a9d",
"created_at": "2026-05-20T04:52:50.223Z",
"updated_at": "2026-05-20T20:12:47.839Z"
}
```
A propriedade `status` informa a situação atual do monitoramento, podendo ser:
- created: Monitoramento criado, porém nunca executado.
- updating: Está com uma requisição em processamento.
- updated: Monitoramento atualizado com alguma resposta disponível. O campo updated\_at informa a data da última atualização e request\_id o id da última execução.
- paused: Monitoramento pausado, podendo ainda ser reativado.
- deleted: Monitoramento cancelado e não pode mais ser reativado.
A propriedade **request\_id** só é preenchida após o monitoramento ter executado ao menos uma vez (status `updated`).
Na URL vai o **request\_id** retornado na consulta de status:
```bash theme={null}
curl --request GET \
--url "https://requests.production.judit.io/responses/?request_id=186e0ed5-4656-4fd8-8e07-76f755c44a9d" \
--header "api-key: SUA-API-KEY" \
--header "Content-Type: application/json"
```
```json theme={null}
{
"page": 1,
"page_count": 1,
"all_count": 1,
"all_pages_count": 1,
"page_data": [
{
"request_id": "186e0ed5-4656-4fd8-8e07-76f755c44a9d",
"response_id": "dd47b9fc-8f66-46b8-a31a-50a4718c9774",
"origin": "tracking",
"origin_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"response_type": "communication",
"response_data": {
"communication_id": "0E6hgZvG",
"active": true,
"classification_code": "12154",
"classification_name": "EXECUÇÃO DE TÍTULO EXTRAJUDICIAL",
"date_availability": "2026-05-20T00:00:00.000Z",
"date_shipping": "2026-05-19T03:00:00.000Z",
"recipient_lawyers": [
{
"lawyer": {
"id": 10001,
"name": "ADVOGADO EXEMPLO 1",
"license_code": "0001",
"license_state": "SP"
},
"lawyer_id": 10001,
"communication_id": 600000001,
"id": 1100000001,
"created_at": "2026-05-19 11:44:08",
"updated_at": "2026-05-19 11:44:08"
}
],
"recipients": [
{
"communication_id": 600000001,
"name": "PARTE ATIVA EXEMPLO",
"side": "Active"
},
{
"communication_id": 600000001,
"name": "PARTE PASSIVA EXEMPLO 1",
"side": "Passive"
}
],
"hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"api_id": 600000001,
"middle": "D",
"full_middle": "DIÁRIO DE JUSTIÇA ELETRÔNICO NACIONAL",
"name_organ": "COMARCA - 1ª VARA CÍVEL",
"communication_number": 2674,
"lawsuit_code": "0000000-00.0000.8.00.0000",
"tribunal_acronym": "TJXX",
"status": "P",
"text": "Texto completo da publicação conforme extraído do DJEN...",
"communication_type": "INTIMAÇÃO",
"document_type": "DECISÃO",
"integrate_api": false,
"source": "pje"
},
"user_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-05-20T20:12:47.839Z",
"updated_at": "2026-05-20T20:12:47.839Z"
}
]
}
```
O significado de cada campo do objeto `response_data` pode ser encontrado no **[Schema Communication](/schemas/communication)**.
O monitoramento do DJEN só gera respostas quando há publicações novas que correspondam ao termo cadastrado. Dias sem correspondência não geram `response_data`.
Para consultar o histórico de publicações encontradas por um monitoramento específico, faça uma solicitação GET para a rota `/responses/tracking/{tracking_id}`:
Você pode filtrar os resultados usando os parâmetros `created_at_gte` e `created_at_lte`:
* `created_at_gte`: define a data inicial da consulta;
* `created_at_lte`: define a data final da consulta.
```bash theme={null}
curl --location 'https://requests.production.judit.io/responses/tracking/?order=asc&page=1&page_size=50&created_at_gte=2026-01-01T00%3A00%3A00&created_at_lte=2026-05-21T00%3A00%3A00' \
--header 'api-key: '
```
Retorno esperado:
```json theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 2,
"all_pages_count": 1,
"all_count": 2,
"page_data": [
{
"request_id": "186e0ed5-4656-4fd8-8e07-76f755c44a9d",
"response_id": "dd47b9fc-8f66-46b8-a31a-50a4718c9774",
"origin": "tracking",
"origin_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"response_type": "communication",
"response_data": {
"communication_id": "0E6hgZvG",
"active": true,
"lawsuit_code": "0000000-00.0000.8.00.0000",
"tribunal_acronym": "TJXX",
"communication_type": "INTIMAÇÃO",
"document_type": "DECISÃO",
"date_availability": "2026-05-20T00:00:00.000Z",
"text": "Texto integral da publicação..."
},
"created_at": "2026-05-20T20:12:47.839Z"
}
]
}
```
Para pausar um monitoramento, faça uma solicitação POST para a rota `/tracking/{tracking_id}/pause`:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/a94db796-9e35-4d0c-8e05-2a6b60f32a74/pause" \
-H "api-key: SUA-API-KEY"
```
Retorno:
```json theme={null}
{
"tracking_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"user_id": "00000000-0000-0000-0000-000000000000",
"status": "paused",
"search": {
"search_type": "name",
"search_key": "NOME EXEMPLO",
"response_type": "communication"
},
"tracked_items_count": 3,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2026-05-20T04:52:50.223Z",
"updated_at": "2026-05-20T20:12:47.839Z"
}
```
Para reativar um monitoramento pausado, faça uma solicitação POST para a rota `/tracking/{tracking_id}/resume`:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/a94db796-9e35-4d0c-8e05-2a6b60f32a74/resume" \
-H "api-key: SUA-API-KEY"
```
Retorno:
```json theme={null}
{
"tracking_id": "a94db796-9e35-4d0c-8e05-2a6b60f32a74",
"user_id": "00000000-0000-0000-0000-000000000000",
"status": "updated",
"search": {
"search_type": "name",
"search_key": "NOME EXEMPLO",
"response_type": "communication"
},
"tracked_items_count": 3,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2026-05-20T04:52:50.223Z",
"updated_at": "2026-05-20T20:12:47.839Z"
}
```
# Monitoramento Customizado por Filtros
Source: https://docs.judit.io/tracking/tracking-custom
Configure monitoramentos com filtros avançados (tribunal, valor da causa, data de distribuição, partes) para acompanhar apenas o que importa na Judit API.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
O **Monitoramento Customizado** vigia o nascimento de novos processos com base em **filtros estruturais** (tribunal, classe, área, valor da causa, partes, datas) — sem precisar de um documento específico. Use quando você quer ser avisado de novidades em um **universo definido por critérios**, não por uma parte.
> 🤖 Endpoint: `POST https://tracking.production.judit.io/tracking` com `search_type: "custom"` e `search_params.filter` definido. A precificação é diferente do monitoramento por documento — confirme com o time comercial.
## Quando usar
Detecte novos processos de uma classe específica em um tribunal/estado para análise de tendência.
Empresas em setores muito litigiosos (telecom, varejo, seguros) podem rastrear novos processos com filtro por valor mínimo.
Vigie novos processos envolvendo determinada agência reguladora ou fundamento legal.
Monitore um nicho (ex.: ações coletivas em um tribunal específico) sem precisar partir de um CPF/CNPJ.
O monitoramento customizado permite monitorar processos utilizando filtros específicos, retornando processos de todos os tribunais que correspondem aos critérios definidos. Essa consulta é ideal para identificar processos com características específicas em um amplo espectro de jurisdições. Para utilizá-la, é necessário enviar uma requisição ao endpoint correspondente.
Para este tipo de consulta, certifique-se sobre a precificação, pois não é a mesma da consulta histórica.
## Payload da Solicitação
A solicitação POST deve incluir um payload com as seguintes propriedades:
search\_type: Este campo define o tipo de entidade que será buscada, para monitoramento customizado, terá sempre o valor `custom`;
* `search_key`: Este campo define o valor da entidade que será buscada, para monitoramento customizado, terá sempre o valor `custom`;
* `cache_ttl_in_days` (opcional): Número inteiro que define até quantos dias o resultado da busca pode considerar um cache válido;
* `search_params`: Um objeto que contém alguns parâmetros da busca como: - `lawsuit_instance` (opcional): Este parâmetro permite definir a instância em que deseja buscar o processo; - `masked_response` Define se a resposta virá minificada. Este parâmetro é aplicável apenas a consultas (simples ou completas) no contexto de busca processual. - masked\_response = `true`: retornará uma consulta completa - masked\_response = `false`: retornará uma consulta simples
`*Obs` Consulte as condições comerciais desses diferentes tipos de monitoramento customizado.
Filtros poderão ser adicionados à requisição, permitindo um retorno mais assertivo com base nos valores desejados. Para isso, o parâmetro `filter` deve ser incluído dentro de `search_params`, com os seguintes filtros disponíveis:
* `filter` (opcional): Um objeto que contém os filtros para a busca, como:
* `side` (opcional): Permite buscar por tipos de participantes do processo, podendo ser: 'Passive', 'Active', 'Interested', 'Unknown';
* `amount_gte` (opcional): Filtra processos com valor da causa maior ou igual ao especificado em `amount_gte`;
* `amount_lte` (opcional): Filtra processos com valor da causa menor ou igual ao especificado em `amount_lte`;
* `tribunals` (opcional): Um objeto que contém os filtros de tribunais:
* `keys` (opcional): Lista de códigos de tribunais disponíveis na [lista de tribunais](/resource/glossary#lista-de-tribunais). Este filtro permite restringir a busca a processos que tenham ou não esses códigos específicos;
* `not_equal` (opcional): Valor booleano que define se o filtro incluirá ou excluirá os valores especificados em `keys`.
* `subject_codes` (opcional): Um objeto que contém os filtros de assuntos:
* `contains` (opcional): Lista de códigos de assuntos. Restringe a busca a processos que incluam os códigos especificados.
* `not_contains` (opcional): Lista de códigos de assuntos. Exclui processos que contenham os códigos especificados.
* `classification_codes` (opcional): Um objeto que contém os filtros de classes processuais:
* `keys` (opcional): Lista de códigos de classes processuais. Este filtro permite restringir a busca a processos que tenham ou não esses códigos específicos;
* `not_equal` (opcional): Valor booleano que define se o filtro incluirá ou excluirá os valores especificados em `keys`.
* `credential` (opcional): Objeto para o uso do cofre de credenciais:
* `customer_key` (opcional): Permite passar a chave do usuário cadastrada no cofre de credenciais. Caso não seja informada, a API tentará encontrar uma credencial cadastrada para uma `customer_key` vazia.
* `last_step_date_gte` (opcional): Restringe a busca a processos cuja data da última movimentação seja maior que à data fornecida.
* `last_step_date_lte` (opcional): Restringe a busca a processos cuja data da última movimentação seja menor que à data fornecida.
* `party_names` (opcional): Lista de nomes que restringe a busca a processos que os contenham em alguma das partes.
`Obs` Ao utilizar esse filtro em conjunto com o filtro de `Side`, o filtro de `Side` não será considerado para a restrição dessas partes, já que o filtro de `Side` é utilizado para filtrar processos onde a parte principal buscada esteja no lado especificado.
* `party_documents` (opcional): Lista de documentos que restringe a busca a processos que os contenham em alguma das partes.
`Obs` Ao utilizar esse filtro em conjunto com o filtro de `Side`, o filtro de `Side` não será considerado para a restrição desses documentos, já que o filtro de `Side` é utilizado para filtrar processos onde a parte principal buscada esteja no lado especificado.
Todos os monitoramentos customizados cadastradas são realizadas ***on-demand***. Recomendamos verificar as condições de custo associadas a este serviço antes de sua utilização.
```bash theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"recurrence": 2,
"search": {
"search_type": "custom",
"search_key": "",
"search_params": {
"filter": {
"subject_codes": {
"contains": [
"5953",
"6017",
"10394",
"12989",
"5953",
"5951",
"5971",
"14",
"030213"
]
},
"classification_codes": {
"keys": [
"1116",
"12785"
],
"not_equal": false
},
"party_documents": [
"99.999.999/0009-99",
"88.888.888/0008-88"
]
}
}
}
}'
```
Na resposta da criação do monitoramento, é retornado o campo `hour_range`, que indica o horário em que a consulta ao tribunal será realizada pela primeira vez. No exemplo acima, a primeira consulta está programada para ocorrer às 21 horas.
Retorno:
```json theme={null}
{
"tracking_id": "72084866-499f-4aff-b28a-14d43b8b7d70",
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"status": "created",
"recurrence": 2,
"search": {
"search_type": "custom",
"search_key": "custom",
"response_type": "lawsuit",
"search_params": {
"filter": {
"distribution_date_gte": "2025-02-04T16:56:39.158Z",
"subject_codes": {
"contains": [
"5953",
"6017",
"10394",
"12989",
"5953",
"5951",
"5971",
"14",
"030213"
],
"not_contains": [],
"_id": "67a246c76efb879208114303"
},
"classification_codes": {
"keys": [
"1116",
"12785"
],
"not_equal": false,
"_id": "67a246c76efb879208114302"
},
"party_names": [],
"party_documents": [
"99.999.999/0009-99",
"88.888.888/0008-88"
]
},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2025-02-04T16:56:39.158Z",
"updated_at": "2025-02-04T16:56:39.158Z"
}
```
O monitoramento irá ser iniciado a primeira vez, na melhor janela de
concorrência de requisição ao tribunal, dentro das próximas 24 horas
da data de criação.
Depois ocorrerá de acordo com a frequeência cadastrada no campo ***recurrence***.
Na URL vai o tracking\_id retornado na primeira requisição:
```bash theme={null}
curl --request GET
--url "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9"
--header "api-key: SUA-API-KEY"
--header "Content-Type: application/json"
```
Retorno:
```json theme={null}
{
"tracking_id": "72866-499f-4aff-b28a-14d43b8b7d70",
"user_id": "7999999995a3-4891-428d-9456-dedfc12ff850",
"status": "created",
"recurrence": 2,
"search": {
"search_type": "custom",
"search_key": "custom",
"response_type": "lawsuit",
"search_params": {
"filter": {
"distribution_date_gte": "2025-02-04T16:56:39.158Z",
"subject_codes": {
"contains": [
"5953",
"6017",
"10394",
"12989",
"5953",
"5951",
"5971",
"14",
"030213"
],
"not_contains": [],
"_id": "67a246c76efb879208114303"
},
"classification_codes": {
"keys": [
"1116",
"12785"
],
"not_equal": false,
"_id": "67a246c76efb879208114302"
},
"party_names": [],
"party_documents": [
"99.999.999/0009-99",
"88.888.888/0008-88"
]
},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {
"dashboard_id": null
},
"created_at": "2025-02-04T16:56:39.158Z",
"updated_at": "2025-02-04T16:56:39.158Z"
}
```
A propriedade status informa a situação atual do monitoramento,
podendo ser:
-
created: Monitoramento criado, porém nunca executado.
-
updating: Está com uma requisição em processamento.
-
updated: Monitoramento atualizado já com alguma resposta
disponível. O campo updated\_at pode informar a data de última
atualização do monitoramento e a propriedade request\_id o id
da última request feita pelo monitoramento.
-
paused: Monitoramento pausado, podendo ainda ser reativado.
-
deleted: Monitoramento cancelado e não pode mais ser
reativado.
A propriedade request\_id só é criada a partir da primeira vez que o
monitoramento executou, ou seja, chegou ao status updated.
Na URL vai o request\_id retornado na primeira requisição:
```bash theme={null}
curl --request GET
--url "https://requests.production.judit.io/responses/?request_id=15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9"
--header "api-key: SUA-API-KEY"
--header "Content-Type: application/json"
```
```json theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 1,
"all_pages_count": 1,
"all_count": 2,
"page_data": [
{
"request_id": "8534hyt6ujk-71d5-48a7-a8f1-ad61b02ff461",
"response_id": "26098ui81f-e0ed-4d41-8f43-4c548d8799bb",
"origin": "api",
"origin_id": "8534oiklj89-71d5-48a7-a8f1-ad61b02ff461",
"response_type": "lawsuit",
"response_data": {
"amount": 17456.15,
"attachments": [],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "6666666-66.2025.6.66.6666",
"county": "CAPITAL 12 VARA FAZ PUBLICA",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-27T16:09:19.112Z",
"updated_at": "2025-02-04T13:41:08.013Z",
"metadata": {},
"courts": [
{
"code": "79705",
"name": " CAPITAL 17 FAZ PUBLICA"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "e602ad2b-ce2a-4c70-804d-df2febbb935a",
"weight": 0,
"updated_at": "2025-02-04T13:40:48.782Z"
},
"distribution_date": "2025-01-24T17:08:03.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "6666666-66.2025.8.19.66666",
"lawsuit_instance": 1,
"private": false,
"step_id": "5d93c333",
"step_date": "2025-01-27T10:30:20.000Z",
"content": "Expedição de Carta pelo Correio - 1 carta",
"step_type": "60",
"tags": {
"crawl_id": "e602ad2b-ce2a-4c70-804d-df2febbb935a"
},
"steps_count": 1
},
"name": "ESTADO DO RIO DE JANEIRO X BANCO BV S A",
"parties": [
{
"side": "Active",
"name": "USUARIO TESTE",
"main_document": "99999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USER ONE",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "e602ad2b-ce2a-4c70-804d-df2febbb935a"
}
},
{
"side": "Passive",
"name": "BANCO TESTE S A",
"main_document": "99999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "e602ad2b-ce2a-4c70-804d-df2febbb935a"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "e602ad2b-ce2a-4c70-804d-df2febbb935a",
"dictionary_updated_at": "2025-02-04T13:41:02.586Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-02-04T13:41:01.175Z",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "85347a1e-71d5-48a7-a8f1-ad61b02ff461",
"response_id": "2ddaf881-d0be-42bb-9ae9-74d76447e1b2",
"origin": "api",
"origin_id": "85347a1e-71d5-48a7-a8f1-ad61b02ff461",
"response_type": "lawsuit",
"response_data": {
"amount": 13687.36,
"attachments": [
{
"attachment_id": "191737998765785327022384570650",
"attachment_date": "2025-01-27T14:26:56.000Z",
"attachment_name": "DESPACHO/DECISÃO 1 - Sem Sigilo (Nível 0) - 62.30KB",
"step_id": "a1369a99",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "69a142ed-12ea-42bd-b467-5bdbfc43cc7d"
},
"user_data": null
}
],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000133-12.2025.8.19.0001",
"county": "CAPITAL 12 VARA FAZ PUBLICA",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-23T16:09:20.134Z",
"updated_at": "2025-02-04T13:41:06.691Z",
"metadata": {},
"courts": [
{
"code": "7798",
"name": "CAPITAL 11 VARA FAZ PUBLICA"
},
{
"name": "Juízo da 11ª Vara da Fazenda Pública da Comarca da Capital"
}
],
"crawler": {
"source_name": "JEproc - TJRJ - RJ - Lawsuit - Auth - 1 instance",
"crawl_id": "69a142ed-12ea-42bd-b467-5bdbfc43cc7d",
"updated_at": "2025-01-31T19:53:08.995Z",
"weight": 10
},
"distribution_date": "2025-01-22T15:19:46.000Z",
"free_justice": false,
"instance": 1,
"judge": "Alexandre Oliveira Camacho de Franca",
"justice": "8",
"last_step": {
"step_id": "7db05f9a",
"step_date": "2025-01-29T03:48:25.000Z",
"content": "7 - Confirmada a intimação eletrônica - Refer. ao Evento: 6",
"steps_count": 7
},
"name": "ESTADO DO RIO DE JANEIRO X BANCO BV S A",
"parties": [
{
"name": "Estado do Rio de Janeiro",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "CNPJ"
}
],
"person_type": "Exequente",
"side": "Active",
"lawyers": [
{
"name": "Gustavo Areal Pires",
"documents": []
}
]
},
{
"name": "Banco Bv S a",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "CNPJ"
}
],
"person_type": "Executado",
"side": "Passive",
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
}
],
"tags": {
"crawl_id": "69a142ed-12ea-42bd-b467-5bdbfc43cc7d",
"dictionary_updated_at": "2025-01-31T19:53:09.783Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-02-04T13:41:01.175Z",
"tags": {
"dashboard_id": null
}
}
]
}
```
O parâmetro page e page\_size são opcionais, porém necessários para
percorrer as páginas com os processos, caso venham mais de uma, o
que é comum no caso de consulta por documento.
Define a página atual da busca.
Total de processos na página.
Total de processos encontrados
Quantidade de páginas de processos
Array com as respostas e dentro da propriedade response\_data o conteúdo do processo.
No caso de monitoramento customizadoo, ele sempre será de novas
ações, ou seja, as requisições só gerarão respostas caso um novo
processo seja distribuído a partir da data em que foi cadastrado.
O significado de cada campo pode ser encontrado no **[glossário](/resource/glossary)**
Para consultar o histórico de respostas geradas por um monitoramento específico, faça uma solicitação GET para a rota /tracking/, substituindo pelo ID do monitoramento desejado.
Você pode filtrar os resultados usando os parâmetros `created_at_gte` e `created_at_lte`, onde:
`created_at_gte`: define a data inicial da consulta.
`created_at_lte`: define a data final da consulta.
Aqui está um exemplo de como fazer isso usando curl:
```bash theme={null}
curl --location 'https://requests.production.judit.io/responses/tracking/?order=asc&page=1&page_size=50&created_at_gte=2024-03-05T00%3A00%3A00&created_at_lte=2025-03-11T00%3A00%3A00' \
--header 'api-key: '
```
Aqui está o retorno esperado:
```json theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 2,
"all_pages_count": 1,
"all_count": 2,
"page_data": [
{
"request_id": "644a4759-1ae2-48a4-8b09-76afffc75849393",
"response_id": "a37ca823-e1d2-4de4-a973-ec9e859d21ed",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 13687.36,
"attachments": [
{
"attachment_id": "f2f14dca-5b3f-aba2-a9bd95bd367f",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_3",
"content": "CÁLCULOS",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "e26be17f-06ba-9f0c-7fc840e092b1",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_2",
"content": "CERTIDÃO DE DÍVIDA ATIVA",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "54e833a9-58a3-9484-0e6e1cb6c457",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_1",
"content": "PETIÇÃO INICIAL",
"step_id": "ac8ea79b",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
}
],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000133-12.2025.8.19.0001",
"county": "TESTE TRIBUNAL",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-23T16:09:20.134Z",
"updated_at": "2025-01-24T16:10:56.948Z",
"metadata": {},
"courts": [
{
"code": "7798",
"name": "TESTE RETORNO TRIUNAL"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"weight": 0,
"updated_at": "2025-01-24T16:10:50.024Z"
},
"distribution_date": "2025-01-22T15:19:46.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "91dc5544",
"step_date": "2025-01-22T18:40:18.000Z",
"content": "Conclusos para decisão/despacho",
"step_type": "51",
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"steps_count": 1
},
"name": "USUÁRIO EXEMPLO 1 X USUÁRIO EXEMPLO 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO EXEMPLO 1",
"main_document": "99999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO EXEMPLO 3",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
}
},
{
"side": "Passive",
"name": "USUÁRIO EXEMPLO 2",
"main_document": "99999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"dictionary_updated_at": "2025-01-24T16:10:50.384Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-24T16:10:53.278Z",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "32e0cbb6-71ed-4165-81d5-08ef4dcf80c6",
"response_id": "a6690acb-0856-4e4d-ae69-c8d808ce7d9e",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 17456.15,
"attachments": [],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000233-64.2025.8.19.0001",
"county": "CAPITAL 12 VARA FAZ PUBLICA",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-27T16:09:19.112Z",
"updated_at": "2025-01-27T16:09:19.112Z",
"metadata": {},
"courts": [
{
"code": "79705",
"name": " CAPITAL 17 FAZ PUBLICA"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"weight": 0,
"updated_at": "2025-01-27T16:09:18.570Z"
},
"distribution_date": "2025-01-24T17:08:03.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "5d93c333",
"step_date": "2025-01-27T10:30:20.000Z",
"content": "Expedição de Carta pelo Correio - 1 carta",
"step_type": "60",
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"steps_count": 1
},
"name": "usuário teste 1 X usuário teste 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO 1",
"main_document": "99999999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO 2",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
}
},
{
"side": "Passive",
"name": "USUÁRIO 2",
"main_document": "99999999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"dictionary_updated_at": "2025-01-27T16:09:19.635Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-27T16:09:18.752Z",
"tags": {
"dashboard_id": null
}
}
]
}
```
Para pausar um monitoramento, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/pause`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja pausar.
Aqui está um exemplo de como pausar o monitoramento usando o curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/pause" \
-H "api-key: YOUR-API_KEY"
```
Aqui está um exemplo de retorno do monitoramento pausado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "paused",
"recurrence": 1,
"search": {
"search_type": "custom",
"search_key": "custom",
"response_type": "lawsuit",
"search_params": {
"filter": {
"distribution_date_gte": "2025-02-04T16:56:39.158Z",
"subject_codes": {
"contains": [
"5953",
"6017",
"10394",
"12989",
"5953",
"5951",
"5971",
"14",
"030213"
],
"not_contains": [],
"_id": "67a246c76efb879208114303"
},
"classification_codes": {
"keys": [
"1116",
"12785"
],
"not_equal": false,
"_id": "67a246c76efb879208114302"
},
"party_names": [],
"party_documents": [
"99.999.999/0009-99",
"88.888.888/0008-88"
]
},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
Para reativar um monitoramento pausado, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/resume`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja reativar.
Aqui está um exemplo de como reativar um monitoramento usando curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/resume" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo de retorno do monitoramento **ativo**
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "updated",
"recurrence": 1,
"search": {
"search_type": "custom",
"search_key": "custom",
"response_type": "lawsuit",
"search_params": {
"filter": {
"distribution_date_gte": "2025-02-04T16:56:39.158Z",
"subject_codes": {
"contains": [
"5953",
"6017",
"10394",
"12989",
"5953",
"5951",
"5971",
"14",
"030213"
],
"not_contains": [],
"_id": "67a246c76efb879208114303"
},
"classification_codes": {
"keys": [
"1116",
"12785"
],
"not_equal": false,
"_id": "67a246c76efb879208114302"
},
"party_names": [],
"party_documents": [
"99.999.999/0009-99",
"88.888.888/0008-88"
]
},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
Para deletar um monitoramento, você pode fazer uma solicitação DELETE para a rota `/tracking/{monitoramento}`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja deletar.
Aqui está um exemplo de como deletar um monitoramento usando curl:
```bash theme={null}
curl -X DELETE "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo do retorno do monitoramento deletado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "deleted",
"recurrence": 1,
"search": {
"search_type": "custom",
"search_key": "custom",
"response_type": "lawsuit",
"search_params": {
"filter": {
"distribution_date_gte": "2025-02-04T16:56:39.158Z",
"subject_codes": {
"
contains": [
"5953"
]
}
}
}
}
}
```
# Monitoramento de Novas Ações por Documento
Source: https://docs.judit.io/tracking/tracking-document
Detecte automaticamente o nascimento de novos processos vinculados a um CPF, CNPJ ou OAB. Receba o novo processo via webhook na Judit API.
**Novo CNPJ (IN 2229/24)**
A Judit já aceita o novo formato de **CNPJ alfanumérico** em conformidade com a [Instrução Normativa RFB nº 2229/2024](https://normasinternet2.receita.fazenda.gov.br/#/consulta/externa/141102).
* **Zero esforço:** nenhuma alteração é necessária na sua integração.
* **Ambiente de teste:** utilize o documento `A1B2C3D4/E5F6-68` para validar o fluxo e receber um processo fictício de resposta.
O **Monitoramento por Documento** detecta o **nascimento** de novos processos vinculados a um CPF, CNPJ ou OAB. Diferente do monitoramento por CNJ (que vigia atualizações em um processo conhecido), aqui você descobre processos que **ainda não existiam** quando você começou a monitorar.
> 🤖 Endpoint: `POST https://tracking.production.judit.io/tracking` com `search_type` em `cpf`, `cnpj` ou `oab`. Sempre que um novo processo for ajuizado e a Judit detectar, você recebe a notificação por webhook.
## Quando usar
Acompanhe um cliente ou contraparte e seja avisado no momento em que houver novo litígio.
Mantenha o KYC vivo: novos processos relevantes contra um fornecedor disparam alerta automático.
Para grandes carteiras, descubra rapidamente quando o devedor passa a figurar como autor/réu em outras ações.
Saiba quando um advogado começa a atuar em um novo processo (útil para análise estratégica).
## Payload da Solicitação
A solicitação POST deve incluir um payload com as seguintes propriedades:
search\_type: Este campo define o tipo de entidade que será buscada. Os valores possíveis são: `cpf`, `cnpj`, `oab`, `name`, `lawsuit_cnj` ou `lawsuit_id`. Para buscas processuais, utilizaremos especificamente `cpf`, `cnpj` ou `oab`, que correspondem ao número do processo.
* `search_key`: O número do processo (Código CNJ), CPF, CNPJ, OAB ou Name que você deseja buscar;
* `cache_ttl_in_days` (opcional): Número inteiro que define até quantos dias o resultado da busca pode considerar um cache válido;
* `search_params`: Um objeto que contém alguns parâmetros da busca como: - `lawsuit_instance` (opcional): Este parâmetro permite definir a instância em que deseja buscar o processo; - `masked_response` Define se a resposta virá minificada. Este parâmetro é aplicável apenas a consultas (simples ou completas) por documento no contexto de busca processual. - masked\_response = `true`: retornará uma consulta completa - masked\_response = `false`: retornará uma consulta simples
`*Obs` Consulte as condições comerciais desses diferentes tipos de consultas por documento.
Filtros poderão ser adicionados à requisição, permitindo um retorno mais assertivo com base nos valores desejados. Para isso, o parâmetro `filter` deve ser incluído dentro de `search_params`, com os seguintes filtros disponíveis:
* `filter` (opcional): Um objeto que contém os filtros para a busca, como:
* `side` (opcional): Permite buscar por tipos de participantes do processo, podendo ser: 'Passive', 'Active', 'Interested', 'Unknown';
* `amount_gte` (opcional): Filtra processos com valor da causa maior ou igual ao especificado em `amount_gte`;
* `amount_lte` (opcional): Filtra processos com valor da causa menor ou igual ao especificado em `amount_lte`;
* `tribunals` (opcional): Um objeto que contém os filtros de tribunais:
* `keys` (opcional): Lista de códigos de tribunais disponíveis na [lista de tribunais](/resource/glossary#lista-de-tribunais). Este filtro permite restringir a busca a processos que tenham ou não esses códigos específicos;
* `not_equal` (opcional): Valor booleano que define se o filtro incluirá ou excluirá os valores especificados em `keys`.
* `subject_codes` (opcional): Um objeto que contém os filtros de assuntos:
* `contains` (opcional): Lista de códigos de assuntos. Restringe a busca a processos que incluam os códigos especificados.
* `not_contains` (opcional): Lista de códigos de assuntos. Exclui processos que contenham os códigos especificados.
* `classification_codes` (opcional): Um objeto que contém os filtros de classes processuais:
* `keys` (opcional): Lista de códigos de classes processuais. Este filtro permite restringir a busca a processos que tenham ou não esses códigos específicos;
* `not_equal` (opcional): Valor booleano que define se o filtro incluirá ou excluirá os valores especificados em `keys`.
* `credential` (opcional): Objeto para o uso do cofre de credenciais:
* `customer_key` (opcional): Permite passar a chave do usuário cadastrada no cofre de credenciais. Caso não seja informada, a API tentará encontrar uma credencial cadastrada para uma `customer_key` vazia.
* `last_step_date_gte` (opcional): Restringe a busca a processos cuja data da última movimentação seja maior que à data fornecida.
* `last_step_date_lte` (opcional): Restringe a busca a processos cuja data da última movimentação seja menor que à data fornecida.
* `party_names` (opcional): Lista de nomes que restringe a busca a processos que os contenham em alguma das partes.
`Obs` Ao utilizar esse filtro em conjunto com o filtro de `Side`, o filtro de `Side` não será considerado para a restrição dessas partes, já que o filtro de `Side` é utilizado para filtrar processos onde a parte principal buscada esteja no lado especificado.
* `party_documents` (opcional): Lista de documentos que restringe a busca a processos que os contenham em alguma das partes.
`Obs` Ao utilizar esse filtro em conjunto com o filtro de `Side`, o filtro de `Side` não será considerado para a restrição desses documentos, já que o filtro de `Side` é utilizado para filtrar processos onde a parte principal buscada esteja no lado especificado.
* `notification_emails` (opcional): Array de strings fora do `search` que podem ser adicionados emails para os quais deseja receber notificação a cada atualização do monitoramento cadastrado.
Exemplo de payload sem filtros:
```bash theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: ' \
--header 'Content-Type: application/json' \
--data '{
"recurrence": 1,
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99"
}
}'
```
O monitoramento irá ser iniciado a primeira vez, na melhor janela de
concorrência de requisição ao tribunal, dentro das próximas 24 horas
da data de criação.
Depois ocorrerá de acordo com a frequeência cadastrada no campo ***recurrence***.
Exemplo de payload com alguns filtros opcionais:
```bash theme={null}
curl --location 'https://tracking.production.judit.io/tracking' \
--header 'api-key: e8f62c5c-7465-426c-abc5-9735c67f25b1' \
--header 'Content-Type: application/json' \
--data '{
"recurrence": 1,
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"search_params": {
"filter": {
"subject_codes": {
"keys": ["10433"],
"not_equal": false
},
"classification_codes": {
"keys": ["985"],
"not_equal": false
}
}
}
}
}'
```
Todas os monitoramentos de novas ações processuais cadastradas são realizadas ***on-demand***. Recomendamos verificar as condições de custo associadas a este serviço antes de sua utilização.
Retorno:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "created",
"recurrence": 1,
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"hour_range": 21,
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
Na resposta da criação do monitoramento, é retornado o campo `hour_range`, que indica o horário em que a consulta aos tribunais serão realizada pela primeira vez. No exemplo acima, a primeira consulta está programada para ocorrer às 21 horas.
Na URL vai o tracking\_id retornado na primeira requisição:
```bash theme={null}
curl --request GET
--url "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9"
--header "api-key: SUA-API-KEY"
--header "Content-Type: application/json"
```
Retorno:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "created",
"recurrence": 1,
"search": {
"search_type": "cnpj",
"search_key": "00.000.000/0001-00",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {
"dashboard_id": null
},
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
A propriedade status informa a situação atual do monitoramento,
podendo ser:
-
created: Monitoramento criado, porém nunca executado.
-
updating: Está com uma requisição em processamento.
-
updated: Monitoramento atualizado já com alguma resposta
disponível. O campo updated\_at pode informar a data de última
atualização do monitoramento e a propriedade request\_id o id
da última request feita pelo monitoramento.
-
paused: Monitoramento pausado, podendo ainda ser reativado.
-
deleted: Monitoramento cancelado e não pode mais ser
reativado.
A propriedade request\_id só é criada a partir da primeira vez que o
monitoramento executou, ou seja, chegou ao status updated.
Na URL vai o request\_id retornado na primeira requisição:
```bash theme={null}
curl --request GET
--url "https://requests.production.judit.io/responses/?request_id=15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9"
--header "api-key: SUA-API-KEY"
--header "Content-Type: application/json"
```
```json theme={null}
{
"page": 1,
"page_data": [
{
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"response_id": "e49d2e2c-92ed-4dad-8701-c53a569d675b",
"response_type": "lawsuit",
"response_data": {
"code": "0817064-37.2023.8.19.0209",
"justice": "8",
"tribunal": "19",
"tribunal_acronym": "TJRJ",
"secrecy_level": 0,
"tags": {
"is_fallback_source": true,
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e"
},
"instance": 1,
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e",
"weight": 10,
"updated_at": "2024-02-21T17:33:24.063Z"
},
"classifications": [
{
"code": "436",
"name": "PROCEDIMENTO DO JUIZADO ESPECIAL CÍVEL"
}
],
"subjects": [
{
"code": "7769",
"name": "ABATIMENTO PROPORCIONAL DO PREÇO"
},
{
"code": "7748",
"name": "ACIDENTE AÉREO"
},
{
"code": "10435",
"name": "ACIDENTE DE TRÂNSITO"
}
],
"courts": [
{
"code": "13805",
"name": "BARRA DA TIJUCA REGIONAL II JUI ESP CIV"
}
],
"amount": 28790,
"parties": [
{
"name": "DAVID WILLIAM CONCEICAO DE OLIVEIRA",
"side": "Active",
"person_type": "Autor",
"document": "14224726718",
"document_type": "CPF",
"lawyers": []
},
{
"name": "GABRIELLA OLIVEIRA DA MATA",
"side": "Active",
"person_type": "Autor",
"document": "16663398733",
"document_type": "CPF",
"lawyers": []
},
{
"name": "JULIANA OLIVEIRA CARVALHO",
"side": "Active",
"person_type": "Autor",
"document": "18250433700",
"document_type": "CPF",
"lawyers": []
},
{
"name": "LEONARDO MENDES LIMA",
"side": "Active",
"person_type": "Autor",
"document": "14904631781",
"document_type": "CPF",
"lawyers": []
},
{
"name": "LEONARDO OLIVEIRA DE LIMA",
"side": "Active",
"person_type": "Autor",
"document": "13726926739",
"document_type": "CPF",
"lawyers": []
},
{
"name": "LIVIA BEATRIZ LIMA DA COSTA DA SILVA",
"side": "Active",
"person_type": "Autor",
"document": "13482560790",
"document_type": "CPF",
"lawyers": []
},
{
"name": "LUCAS OLIVEIRA DE LIMA",
"side": "Active",
"person_type": "Autor",
"document": "13726925767",
"document_type": "CPF",
"lawyers": []
},
{
"name": "MARCO ANTONIO DE OLIVEIRA RODRIGUES",
"side": "Active",
"person_type": "Autor",
"document": "09206529722",
"document_type": "CPF",
"lawyers": []
},
{
"name": "MARIA DE FATIMA GABRIELA PIVA",
"side": "Active",
"person_type": "Autor",
"document": "50559689829",
"document_type": "CPF",
"lawyers": []
},
{
"name": "SUELEN CLARINDO DOS SANTOS",
"side": "Active",
"person_type": "Autor",
"document": "13565811706",
"document_type": "CPF",
"lawyers": []
},
{
"name": "GRUPO HURB VIAGENS E TURISMO S/A",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
},
{
"name": "HOTEL URBANO VIAGENS E TURISMO S.A.",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
},
{
"name": "HURB TECHNOLIGIES S.A.",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
},
{
"name": "HURB TECHNOLOGIES S.A.",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
}
],
"attachments": [],
"steps": [],
"related_lawsuits": [],
"last_step": {
"lawsuit_cnj": "0817064-37.2023.8.19.0209",
"lawsuit_instance": 1,
"step_id": "nU9IcVb9NLoHrJeUXt+Hay139dqHAVbfxk7f0D77aRQ=",
"step_date": "2024-02-21T17:33:24.064Z",
"private": false,
"steps_count": 1
},
"name": "DAVID WILLIAM CONCEICAO DE OLIVEIRA X GRUPO HURB VIAGENS E TURISMO S/A",
"distribution_date": "2023-06-06T17:35:50.000Z",
"phase": "Inicial",
"status": "Ativo"
},
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"created_at": "2024-02-21T17:33:24.490Z",
"request_status": "completed",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"response_id": "66da2fca-6f5d-4664-9e46-0d34f80746c2",
"response_type": "lawsuit",
"response_data": {
"code": "1111111-04.1111.1.11.1111",
"justice": "5",
"tribunal": "01",
"tribunal_acronym": "TRT1",
"secrecy_level": 0,
"tags": {
"is_fallback_source": true,
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e"
},
"instance": 1,
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e",
"weight": 10,
"updated_at": "2024-02-21T17:33:24.063Z"
},
"classifications": [
{
"code": "985",
"name": "AÇÃO TRABALHISTA - RITO ORDINÁRIO"
}
],
"subjects": [
{
"code": "13656",
"name": "DOMÉSTICOS"
}
],
"courts": [
{
"code": "33782",
"name": "RIO DE JANEIRO - 37ª VARA DO TRABALHO"
}
],
"amount": 7685.82,
"parties": [
{
"name": "USUÁRIO 1",
"side": "Active",
"person_type": "Autor",
"document": "000.000.000-00",
"document_type": "CPF",
"lawyers": [
{
"name": "USUÁRIO 2",
"side": "Active",
"person_type": "Advogado"
}
]
},
{
"name": "USUÁRIO 3",
"side": "Passive",
"person_type": "Réu",
"document": "000.000.000-00",
"document_type": "CPF",
"lawyers": [
{
"name": "ADVOGADO 2",
"side": "Passive",
"person_type": "Advogado"
}
]
},
{
"person_type": "Advogado",
"side": "Active",
"name": "ADVOGADO 1"
},
{
"person_type": "Advogado",
"side": "Passive",
"name": "ADVOGADO 2"
}
],
"attachments": [],
"steps": [],
"related_lawsuits": [],
"last_step": {
"lawsuit_cnj": "0100248-39.2022.5.01.0037",
"lawsuit_instance": 1,
"step_id": "u2r/3iZieAWrkFjxBZC/r4bMlFAvRO1IWvaOD8xdGl8=",
"step_date": "2024-02-21T17:33:24.063Z",
"private": false,
"steps_count": 1
},
"name": "USUÁRIO 4",
"distribution_date": "2022-03-30T16:41:24.000Z",
"phase": "Inicial",
"status": "Ativo"
},
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"created_at": "2024-02-21T17:33:24.490Z",
"request_status": "completed",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "05ee9825-b2b4-480b-b29e-f071ca7d9c72",
"response_id": "5f83741e-97f4-4c3b-84fb-6c49e4cfe494",
"response_type": "lawsuit",
"response_data": {
"code": "1111111-04.1111.1.11.1111",
"justice": "8",
"tribunal": "19",
"tribunal_acronym": "TJRJ",
"secrecy_level": 0,
"tags": {
"is_fallback_source": true,
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e"
},
"instance": 1,
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "bd5ca800-9351-4d6e-a238-4690face8a5e",
"weight": 10,
"updated_at": "2024-02-21T17:33:24.063Z"
},
"classifications": [
{
"code": "436",
"name": "PROCEDIMENTO DO JUIZADO ESPECIAL CÍVEL"
}
],
"subjects": [
{
"code": "7780",
"name": "INDENIZAÇÃO POR DANO MATERIAL"
},
{
"code": "7779",
"name": "INDENIZAÇÃO POR DANO MORAL"
}
],
"courts": [
{
"code": "7869",
"name": "BANGU REGIONAL XVII JUI ESP CIV"
}
],
"amount": 46831,
"parties": [
{
"name": "USUÁRIO 1",
"side": "Active",
"person_type": "Autor",
"document": "000.000.000-00",
"document_type": "CPF",
"lawyers": []
},
{
"name": "USUÁRIO 2",
"side": "Active",
"person_type": "Autor",
"document": "000.000.000-00",
"document_type": "CPF",
"lawyers": []
},
{
"name": "USUÁRIO 4",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
},
{
"name": "USUÁRIO 5",
"side": "Passive",
"person_type": "Réu",
"lawyers": []
}
],
"attachments": [],
"steps": [],
"related_lawsuits": [],
"last_step": {
"lawsuit_cnj": "1111111-04.1111.1.11.1111",
"lawsuit_instance": 1,
"step_id": "YpIR5rAfSprFSseqRe9oVUPtkKcgQI0Na8RIv1djKZI=",
"step_date": "2024-02-21T17:33:24.063Z",
"private": false,
"steps_count": 1
},
"name": "USUÁRIO 1",
"phase": "Inicial",
"status": "Ativo"
},
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"created_at": "2024-02-21T17:33:24.490Z",
"request_status": "completed",
"tags": {
"dashboard_id": null
}
}
],
"page_count": 3,
"all_count": 3,
"all_pages_count": 1
}
```
O parâmetro page e page\_size são opcionais, porém necessários para
percorrer as páginas com os processos, caso venham mais de uma, o
que é comum no caso de consulta por documento.
Define a página atual da busca.
Total de processos na página.
Total de processos encontrados
Quantidade de páginas de processos
Array com as respostas e dentro da propriedade response\_data o conteúdo do processo.
No caso de monitoramento de documento, ele sempre será de novas
ações, ou seja, as requisições só gerarão respostas caso um novo
processo seja distribuído.
O significado de cada campo pode ser encontrado no **[glossário](/resource/glossary)**
Para consultar o histórico de respostas geradas por um monitoramento específico, faça uma solicitação GET para a rota /tracking/, substituindo pelo ID do monitoramento desejado.
Você pode filtrar os resultados usando os parâmetros `created_at_gte` e `created_at_lte`, onde:
`created_at_gte`: define a data inicial da consulta.
`created_at_lte`: define a data final da consulta.
Aqui está um exemplo de como fazer isso usando curl:
```bash theme={null}
curl --location 'https://requests.production.judit.io/responses/tracking/?order=asc&page=1&page_size=50&created_at_gte=2024-03-05T00%3A00%3A00&created_at_lte=2025-03-11T00%3A00%3A00' \
--header 'api-key: '
```
Aqui está o retorno esperado:
```json theme={null}
{
"request_status": "completed",
"page": 1,
"page_count": 2,
"all_pages_count": 1,
"all_count": 2,
"page_data": [
{
"request_id": "644a4759-1ae2-48a4-8b09-76afffc75849393",
"response_id": "a37ca823-e1d2-4de4-a973-ec9e859d21ed",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 13687.36,
"attachments": [
{
"attachment_id": "f2f14dca-5b3f-aba2-a9bd95bd367f",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_3",
"content": "CÁLCULOS",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "e26be17f-06ba-9f0c-7fc840e092b1",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_2",
"content": "CERTIDÃO DE DÍVIDA ATIVA",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
},
{
"attachment_id": "54e833a9-58a3-9484-0e6e1cb6c457",
"attachment_date": "2025-01-22T15:19:46.000Z",
"attachment_name": "id_externo_1",
"content": "PETIÇÃO INICIAL",
"step_id": "ac8ea79b",
"extension": "octet-stream",
"status": "done",
"tags": {
"crawl_id": "bf565435-68c6-4b6b-8004-6533cbd0fb8e"
},
"user_data": null
}
],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000133-12.2025.8.19.0001",
"county": "TESTE TRIBUNAL",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-23T16:09:20.134Z",
"updated_at": "2025-01-24T16:10:56.948Z",
"metadata": {},
"courts": [
{
"code": "7798",
"name": "TESTE RETORNO TRIUNAL"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"weight": 0,
"updated_at": "2025-01-24T16:10:50.024Z"
},
"distribution_date": "2025-01-22T15:19:46.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "91dc5544",
"step_date": "2025-01-22T18:40:18.000Z",
"content": "Conclusos para decisão/despacho",
"step_type": "51",
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"steps_count": 1
},
"name": "USUÁRIO EXEMPLO 1 X USUÁRIO EXEMPLO 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO EXEMPLO 1",
"main_document": "99999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO EXEMPLO 3",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
}
},
{
"side": "Passive",
"name": "USUÁRIO EXEMPLO 2",
"main_document": "99999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "8b485368-4315-4247-8314-a6169aa46e0b",
"dictionary_updated_at": "2025-01-24T16:10:50.384Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-24T16:10:53.278Z",
"tags": {
"dashboard_id": null
}
},
{
"request_id": "32e0cbb6-71ed-4165-81d5-08ef4dcf80c6",
"response_id": "a6690acb-0856-4e4d-ae69-c8d808ce7d9e",
"origin": "tracking",
"origin_id": "cfb61e6e-f2bd-4375-8c87-373405cac6db",
"response_type": "lawsuit",
"response_data": {
"amount": 17456.15,
"attachments": [],
"classifications": [
{
"code": "1116",
"name": "EXECUÇÃO FISCAL"
}
],
"code": "3000233-64.2025.8.19.0001",
"county": "CAPITAL 12 VARA FAZ PUBLICA",
"city": "RIO DE JANEIRO",
"state": "RJ",
"area": "NÃO INFORMADO",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2025-01-27T16:09:19.112Z",
"updated_at": "2025-01-27T16:09:19.112Z",
"metadata": {},
"courts": [
{
"code": "79705",
"name": " CAPITAL 17 FAZ PUBLICA"
}
],
"crawler": {
"source_name": "JTJ - BR - Document / Lawsuit - Auth",
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"weight": 0,
"updated_at": "2025-01-27T16:09:18.570Z"
},
"distribution_date": "2025-01-24T17:08:03.000Z",
"free_justice": false,
"instance": 1,
"justice": "8",
"last_step": {
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"private": false,
"step_id": "5d93c333",
"step_date": "2025-01-27T10:30:20.000Z",
"content": "Expedição de Carta pelo Correio - 1 carta",
"step_type": "60",
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"steps_count": 1
},
"name": "usuário teste 1 X usuário teste 2",
"parties": [
{
"side": "Active",
"name": "USUÁRIO 1",
"main_document": "99999999999999",
"person_type": "EXEQUENTE",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"lawyers": [
{
"name": "USUÁRIO 2",
"main_document": "99999999999",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
]
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
}
},
{
"side": "Passive",
"name": "USUÁRIO 2",
"main_document": "99999999999999",
"person_type": "EXECUTADO",
"entity_type": "company",
"documents": [
{
"document": "99999999999999",
"document_type": "CNPJ"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1"
},
"lawyers": []
}
],
"related_lawsuits": [],
"secrecy_level": 0,
"status": "Ativo",
"phase": "Inicial",
"steps": [],
"subjects": [
{
"code": "6017",
"name": "DÍVIDA ATIVA (EXECUÇÃO FISCAL)"
},
{
"code": "5953",
"name": "IPVA - IMPOSTO SOBRE PROPRIEDADE DE VEÍCULOS AUTOMOTORES"
}
],
"tags": {
"crawl_id": "f9efa845-8501-4804-9595-f01c25fd7ba1",
"dictionary_updated_at": "2025-01-27T16:09:19.635Z"
},
"tribunal": "19",
"tribunal_acronym": "TJRJ"
},
"user_id": "98c1d8e0-94bf-43ab-b298-a7158a9efbc9",
"created_at": "2025-01-27T16:09:18.752Z",
"tags": {
"dashboard_id": null
}
}
]
}
```
Para pausar um monitoramento, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/pause`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja pausar.
Aqui está um exemplo de como pausar o monitoramento usando o curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/pause" \
-H "api-key: YOUR-API_KEY"
```
Aqui está um exemplo de retorno do monitoramento pausado:
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "paused",
"recurrence": 1,
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.499Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
Para reativar um monitoramento pausado, você pode fazer uma solicitação POST para a rota `/tracking/{monitoramento}/resume`, substituindo `{monitoramento}` pelo ID do monitoramento que você deseja reativar.
Aqui está um exemplo de como reativar um monitoramento usando curl:
```bash theme={null}
curl -X POST "https://tracking.production.judit.io/tracking/15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9/resume" \
-H "api-key: YOUR_API_KEY"
```
Aqui está um exemplo de retorno do monitoramento **ativo**
```json theme={null}
{
"tracking_id": "15d632c6-a2ab-40c1-bfc5-d8f7bf8d8dd9",
"user_id": "82082593-c664-4d7b-b174-2f0dc4791daf",
"status": "updated",
"recurrence": 1,
"search": {
"search_type": "cpf",
"search_key": "999.999.999-99",
"response_type": "lawsuit",
"search_params": {
"filter": {},
"pagination": {}
}
},
"tracked_items_count": 0,
"tracked_items_steps_count": 0,
"tags": {},
"created_at": "2024-02-21T18:26:38.49
3Z"
}
```
```
9Z",
"updated_at": "2024-02-21T18:26:38.499Z"
}
```
# Webhooks (Callbacks) da Judit API
Source: https://docs.judit.io/webhook/callbacks
Configure URLs de callback para receber em tempo real os resultados de consultas e monitoramentos da Judit API. Identifique respostas em cache via cached_response.
**Resposta em cache (`cached_response`)**
Quando você cria uma consulta processual ou histórica, a Judit primeiro verifica se o dado já está em nossa base. Se estiver, devolvemos imediatamente o resultado — tanto na resposta da API quanto via webhook (se você tiver cadastrado) — com o campo `cached_response: true`.
Em paralelo, a Judit dispara uma atualização nos tribunais. Se houver alguma mudança, você recebe **uma segunda resposta** com `cached_response: false`. Esse é o resultado mais atual.
Por isso, é normal receber dois webhooks aparentemente iguais para o mesmo `request_id`:
* O primeiro vem do cache (`cached_response: true`)
* O último é o atualizado (`cached_response: false`)
Use esse campo para identificar com precisão qual retorno representa o estado mais recente do processo.
Os **Webhooks** entregam push em tempo real os resultados das suas consultas e monitoramentos: você não precisa fazer polling. Assim que a Judit termina de processar a requisição, fazemos um `POST` para a URL configurada com o objeto resposta no corpo. É a forma mais eficiente e barata de integração para fluxos assíncronos.
> 🤖 Padrão de entrega: HTTP POST com Content-Type `application/json`. Use uma URL HTTPS pública. Implemente idempotência baseada em `request_id` + `cached_response`. Em caso de erro 5xx ou timeout, fazemos retry com backoff.
## Quando usar
Em cargas grandes (centenas/milhares de requisições), webhook elimina o polling e reduz drasticamente o consumo da sua quota.
Receba imediatamente quando um monitoramento detectar nova movimentação ou nasceu um novo processo.
Fila → handler → ERP/CRM/BI: padrão event-driven sem precisar consultar a Judit constantemente.
Use `cached_response` para diferenciar a resposta inicial (cache) da posterior (atualizada do tribunal).
## Como funciona
```mermaid theme={null}
sequenceDiagram
autonumber
participant App as Sua aplicação
participant Judit as Judit API
participant Court as Tribunal
App->>Judit: POST /requests {callback_url, search...}
Judit-->>App: 200 OK {request_id, status: "pending"}
Judit->>Judit: Verifica datalake (cache)
alt cache encontrado
Judit-->>App: POST callback_url (cached_response: true)
end
Judit->>Court: Coleta direta no tribunal
Court-->>Judit: dados atualizados
Judit-->>App: POST callback_url (cached_response: false)
Judit-->>App: POST callback_url (event_type: "request_completed")
```
A cada evento, fazemos um `POST` HTTPS para sua URL com o payload em `application/json`. **A entrega é incremental** — você pode receber várias respostas para o mesmo `request_id` antes de chegar o evento `request_completed` que sinaliza fim do fluxo.
## Configurando seu webhook
Existem **duas formas** de receber retornos:
Cadastre uma URL única que recebe **todas** as respostas (consultas + monitoramentos). Solicite via [Suporte](https://api.whatsapp.com/send/?phone=5511920501949) — leva poucos minutos.
Adicione `callback_url` no payload da requisição. Útil para roteamento dinâmico (ex.: webhook por ambiente ou cliente final).
```json Requisição com callback_url theme={null}
{
"search": {
"search_type": "lawsuit_cnj",
"search_key": "9999999-99.9999.9.99.9999"
},
"callback_url": "https://api.seudominio.com/webhooks/judit",
"with_attachments": true
}
```
```bash cURL theme={null}
curl -X POST "https://requests.production.judit.io/requests" \
-H "api-key: $JUDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"search": { "search_type": "lawsuit_cnj", "search_key": "9999999-99.9999.9.99.9999" },
"callback_url": "https://api.seudominio.com/webhooks/judit",
"with_attachments": true
}'
```
```javascript Node.js theme={null}
await fetch("https://requests.production.judit.io/requests", {
method: "POST",
headers: {
"api-key": process.env.JUDIT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
search: { search_type: "lawsuit_cnj", search_key: "9999999-99.9999.9.99.9999" },
callback_url: "https://api.seudominio.com/webhooks/judit",
with_attachments: true,
}),
});
```
O parâmetro `with_attachments` aplica-se **apenas a consultas processuais** (`search_type: "lawsuit_cnj"`).
## Eventos enviados
| `event_type` | Quando dispara | Payload |
| ------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `response_created` | Cada vez que um novo `response_data` é gerado para a requisição (cache ou tribunal) | Objeto `lawsuit`, `entity`, `warrant` ou `execution` |
| `request_completed` | Fim do fluxo da requisição (todos os tribunais responderam) | Objeto `request` final com `status: "completed"` |
| `tracking_response` | Disparado por monitoramentos (cada nova movimentação detectada) | Mesmo formato de `response_created` mas via `tracking_id` |
Todo payload tem um envelope padrão:
```json theme={null}
{
"user_id": "ab829a35-894b-4fbd-9168-2398fd69cecc",
"callback_id": "d5dcbbd6-a9cc-4eef-b1d1-d58a59c4631b",
"event_type": "response_created",
"reference_type": "request",
"reference_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11",
"payload": { /* objeto específico do evento */ }
}
```
* `callback_id` — id único da entrega (use para idempotência).
* `reference_id` — `request_id` ou `tracking_id` que originou o evento.
* `payload` — conteúdo (resposta processual, dados cadastrais, etc.).
## `cached_response`: lendo as duas entregas
A maior parte das requisições gera **duas entregas** em sequência: a primeira do cache e a segunda atualizada. Use `cached_response` para identificar.
| Sequência | `event_type` | `cached_response` | Significado |
| --------- | ------------------- | ----------------- | ------------------------------------------------------------------------ |
| 1 | `response_created` | `true` | Veio do datalake JUDIT (resposta inicial rápida). |
| 2 | `response_created` | `false` | Coleta atual no tribunal. **Sempre que existir, é a versão definitiva.** |
| 3 | `request_completed` | — | Todos os tribunais responderam. Sua aplicação pode encerrar o ciclo. |
> ⚠️ Em consultas processuais recentemente refrescadas (dentro do `cache_ttl_in_days`), você pode receber **apenas** a entrega com `cached_response: true` — não há nova coleta no tribunal porque o cache ainda é válido.
## Boas práticas (essencial para produção)
Use `callback_id` como chave de idempotência: rejeite duplicatas baseado nele. Em retries, o mesmo `callback_id` é reentregue.
Responda `200 OK` em **menos de 10 segundos**. Processe assincronamente (fila/worker). Se demorar, contamos como falha e fazemos retry.
Padrão produção: gravar o evento bruto em fila/log e processar depois. Evita perda em caso de erro de aplicação.
Sempre considere a entrega com `cached_response: false` (quando existir) como a versão final. UI/relatórios devem refletir o último valor.
Aceite `POST` apenas de IPs Judit (consulte o suporte). Use HTTPS sempre. Em ambientes regulados, valide também o cabeçalho `User-Agent`.
Em caso de erro 5xx ou timeout, fazemos retries com backoff exponencial. Se sua URL ficar indisponível por muito tempo, perdemos eventos — mantenha o endpoint estável.
## Receptor de webhook (exemplo Node.js)
```javascript theme={null}
import express from "express";
const app = express();
app.use(express.json());
const seen = new Set();
const lastByRequest = new Map();
app.post("/webhooks/judit", async (req, res) => {
const { callback_id, event_type, reference_id, payload } = req.body;
// 1. Idempotência
if (seen.has(callback_id)) return res.sendStatus(200);
seen.add(callback_id);
// 2. Responde rápido — processa assíncrono
res.sendStatus(200);
// 3. Lógica
if (event_type === "response_created") {
const cached = !!payload?.tags?.cached_response || payload?.cached_response;
// Sempre prefira a versão mais recente (cached_response: false)
if (!cached || !lastByRequest.has(reference_id)) {
lastByRequest.set(reference_id, payload);
await persistResponse(payload);
}
}
if (event_type === "request_completed") {
await markRequestDone(reference_id);
}
});
app.listen(3000);
```
```python Python (FastAPI) theme={null}
from fastapi import FastAPI, Request
app = FastAPI()
seen = set()
@app.post("/webhooks/judit")
async def judit(req: Request):
body = await req.json()
cb_id = body.get("callback_id")
if cb_id in seen:
return {"ok": True}
seen.add(cb_id)
if body["event_type"] == "response_created":
# Persistir prefereindo cached_response: false
...
return {"ok": True}
```
## Envio da resposta
Realizamos uma solicitação POST para o webhook, enviando as respostas conforme os resultados da sua busca. O envio ocorre de forma incremental, à medida que as respostas são geradas, e é concluído quando o status da requisição é atualizado para **"completed"**.
### Resposta para consulta histórica:
Exemplo de reposta com `cached_response: true`:
```json theme={null}
{
"user_id": "ab829a35-894b-4fbd-9168-2398fd69cecc",
"callback_id": "d5dcbbd6-a9cc-4eef-b1d1-d58a59c4631b",
"event_type": "response_created",
"reference_type": "request",
"reference_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11",
"payload": {
"request_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11",
"response_id": "2db448e0-7b9d-4e6b-a2d7-9c0adcff9b77",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"instance": 1,
"name": "Usuário teste 1 X Usuário teste 2",
"free_justice": true,
"secrecy_level": 0,
"courts": [
{
"code": "7846",
"name": "BANGU REGIONAL 2 VARA CIVEL"
}
],
"tribunal_acronym": "TJRJ",
"county": "CAPITAL CENTRAL DE ARQUIVAMENTO DO NUR 1",
"state": "RJ",
"city": "RIO DE JANEIRO",
"distribution_date": "2022-01-13T13:06:46.799Z",
"last_step": {
"step_id": "27572cb5",
"step_date": "2025-06-29T20:07:53.000Z",
"content": "Remetidos os Autos (cumpridos) para 2ª Vara Cível da Regional de Bangu",
"steps_count": 19
},
"tags": {
"crawl_id": "eb2d2f65-69c0-43bd-b75a-ad9d9a787447",
"dictionary_updated_at": "2025-08-06T13:48:47.823Z",
"possible_homonym": true,
"datalake_id": "08004925520228190204",
"datalake_segment": "JUSTICA_ESTADUAL"
},
"justice": "8",
"tribunal": "19",
"crawler": {
"source_name": "JPje - RJ - Lawsuit - Auth - 1 instance",
"crawl_id": "eb2d2f65-69c0-43bd-b75a-ad9d9a787447",
"updated_at": "2025-07-01T15:42:55.700Z",
"weight": 10
},
"area": "DIREITO CIVIL",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2024-09-25T04:13:06.923Z",
"updated_at": "2025-08-04T15:27:19.032Z",
"amount": 11617.01,
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"subjects": [
{
"code": "10671",
"name": "OBRIGAÇÃO DE FAZER / NÃO FAZER"
},
{
"code": "6007",
"name": "REPETIÇÃO DE INDÉBITO"
},
{
"code": "10441",
"name": "ACIDENTE DE TRÂNSITO"
},
{
"code": "14",
"name": "DIREITO TRIBUTÁRIO"
},
{
"code": "5986",
"name": "CRÉDITO TRIBUTÁRIO"
},
{
"code": "899",
"name": "DIREITO CIVIL"
},
{
"code": "10431",
"name": "RESPONSABILIDADE CIVIL"
},
{
"code": "10439",
"name": "INDENIZAÇÃO POR DANO MATERIAL"
},
{
"code": "8826",
"name": "DIREITO PROCESSUAL CIVIL E DO TRABALHO"
},
{
"code": "9148",
"name": "LIQUIDAÇÃO / CUMPRIMENTO / EXECUÇÃO"
},
{
"code": "",
"name": "INDENIZAÇÃO POR DANO MORAL"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário teste 1",
"side": "Active",
"person_type": "Autor",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário teste 2",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário teste 2",
"side": "Passive",
"person_type": "RÉU",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário teste 3 - (99999999999)",
"documents": []
}
]
},
{
"name": "Usuário teste 2",
"side": "Active",
"person_type": "Advogado",
"documents": [],
"lawyers": []
},
{
"name": "Usuário teste 3 - (99999999999)",
"side": "Passive",
"person_type": "Advogado",
"documents": [],
"lawyers": []
}
],
"attachments": [],
"related_lawsuits": [],
"steps": []
},
"user_id": "ab829a35-894b-4fbd-9168-2398fd69cecc",
"created_at": "2025-08-06T13:48:47.824Z",
"request_created_at": "2025-08-06T13:48:46.910Z",
"is_scrapper_info": false,
"tags": {
"dashboard_id": null,
"cached_response": true
},
"origin": "api",
"origin_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11"
}
}
```
Exemplo de reposta com `cached_response: false`:
```json theme={null}
{
"user_id": "ab829a35-894b-4fbd-9168-2398fd69cecc",
"callback_id": "3be957e0-876f-4d36-b98b-d60ad63a0e1c",
"event_type": "response_created",
"reference_type": "request",
"reference_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11",
"payload": {
"request_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11",
"response_id": "aab3ba92-da01-461b-9d88-b3fc610b8b99",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99",
"instance": 1,
"name": "Uusuário teste 1 X Usuário teste 2",
"free_justice": false,
"secrecy_level": 0,
"courts": [
{
"code": "7838",
"name": "BANGU REGIONAL 1 VARA CIVEL"
},
{
"name": "1ª Vara Cível da Regional de Bangu",
"date": "2022-11-14T00:00:00.000Z"
}
],
"tribunal_acronym": "TJRJ",
"county": "CAPITAL CENTRAL DE ARQUIVAMENTO DO NUR 1",
"state": "RJ",
"city": "RIO DE JANEIRO",
"judge": "Juiz de Direito",
"distribution_date": "2022-11-14T20:58:19.530Z",
"last_step": {
"step_id": "5d89299a",
"step_date": "2023-07-04T09:44:00.000Z",
"content": "Baixa Definitiva",
"steps_count": 26
},
"tags": {
"crawl_id": "f8639963-31af-4d0c-be0d-502db2d222cc",
"dictionary_updated_at": "2025-08-06T13:48:47.822Z",
"possible_homonym": true,
"datalake_id": "08246793020228190204",
"datalake_segment": "JUSTICA_ESTADUAL"
},
"justice": "8",
"tribunal": "19",
"crawler": {
"source_name": "JPje - RJ - Lawsuit - Auth - 1 instance",
"crawl_id": "f8639963-31af-4d0c-be0d-502db2d222cc",
"updated_at": "2025-07-29T18:36:21.461Z",
"weight": 10
},
"area": "DIREITO DO CONSUMIDOR",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2024-09-25T05:29:22.270Z",
"updated_at": "2025-08-04T15:27:19.298Z",
"amount": 9614.9,
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"subjects": [
{
"code": "7760",
"name": "FORNECIMENTO DE ENERGIA ELÉTRICA"
},
{
"code": "7780",
"name": "INDENIZAÇÃO POR DANO MATERIAL"
},
{
"code": "6226",
"name": "INCLUSÃO INDEVIDA EM CADASTRO DE INADIMPLENTES"
},
{
"code": "1156",
"name": "DIREITO DO CONSUMIDOR"
},
{
"code": "6220",
"name": "RESPONSABILIDADE DO FORNECEDOR"
},
{
"code": "7779",
"name": "INDENIZAÇÃO POR DANO MORAL"
},
{
"code": "7771",
"name": "CONTRATOS DE CONSUMO"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário teste 2",
"side": "Passive",
"person_type": "RÉU",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"main_document": "99999999999",
"name": "Usuário teste 2",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "999999",
"document_type": "oab"
}
]
},
{
"main_document": "99999999999",
"name": "Usuário teste 3",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "9999999",
"document_type": "oab"
}
]
},
{
"main_document": "99999999999",
"name": "usuário teste 4",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "9999999",
"document_type": "oab"
}
]
}
]
},
{
"main_document": "99999999999",
"name": "Usuário teste 2",
"side": "Passive",
"person_type": "Advogado",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "99999999",
"document_type": "oab"
},
{
"document": "9999999",
"document_type": "oab"
}
],
"lawyers": []
},
{
"main_document": "99999999999",
"name": "Usuário teste 3",
"side": "Passive",
"person_type": "Advogado",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "RJ0145264",
"document_type": "oab"
},
{
"document": "99999999",
"document_type": "oab"
}
],
"lawyers": []
},
{
"main_document": "99999999999",
"name": "usuário teste 4",
"side": "Passive",
"person_type": "Advogado",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "RJ000000",
"document_type": "oab"
},
{
"document": "99999999",
"document_type": "oab"
}
],
"lawyers": []
},
{
"main_document": "99999999999",
"name": "Uusuário teste 1",
"side": "Active",
"person_type": "Autor",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"main_document": "99999999999",
"name": "Usuário teste5",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
},
{
"document": "999999RJ",
"document_type": "oab"
}
]
}
]
}
],
"attachments": [],
"related_lawsuits": [],
"steps": []
},
"user_id": "ab829a35-894b-4fbd-9168-2398fd69cecc",
"created_at": "2025-08-06T13:48:47.824Z",
"request_created_at": "2025-08-06T13:48:46.910Z",
"is_scrapper_info": false,
"tags": {
"dashboard_id": null,
"cached_response": false
},
"origin": "api",
"origin_id": "ec545a1e-c0ac-47cf-a3df-3668f1bdde11"
}
}
```
### Resposta para consulta processual:
Exemplo de reposta com `cached_response: true`:
```json theme={null}
{
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"callback_id": "1a1700da-531b-4b50-ab38-2855a2525929",
"event_type": "response_created",
"reference_type": "request",
"reference_id": "949f0d48-022b-496c-a9a9-97a80c3f8044",
"payload": {
"request_id": "949f0d48-022b-496c-a9a9-97a80c3f8044",
"response_id": "752c4e7d-b0b0-435f-a27f-56bed8e559c7",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"instance": 1,
"name": "Usuário teste 1 X Usuário teste 2",
"free_justice": true,
"secrecy_level": 0,
"courts": [
{
"code": "7846",
"name": "BANGU REGIONAL 2 VARA CIVEL"
}
],
"tribunal_acronym": "TJRJ",
"county": "CAPITAL CENTRAL DE ARQUIVAMENTO DO NUR 1",
"state": "RJ",
"city": "RIO DE JANEIRO",
"distribution_date": "2022-01-13T00:00:00.000Z",
"last_step": {
"step_id": "27572cb5",
"step_date": "2025-06-29T20:07:53.000Z",
"content": "Remetidos os Autos (cumpridos) para 2ª Vara Cível da Regional de Bangu",
"steps_count": 19
},
"tags": {
"crawl_id": "5bfc2f70-3142-4b79-b306-f4d9a70cc88e",
"dictionary_updated_at": "2025-08-13T13:27:19.460Z",
"possible_homonym": true,
"datalake_id": "08004925520228190204",
"datalake_segment": "JUSTICA_ESTADUAL"
},
"justice": "8",
"tribunal": "19",
"crawler": {
"source_name": "JPje - RJ - Lawsuit - Auth - 1 instance",
"crawl_id": "5bfc2f70-3142-4b79-b306-f4d9a70cc88e",
"updated_at": "2025-08-13T13:26:20.073Z",
"weight": 10
},
"status": "Finalizado",
"phase": "Arquivado",
"area": "DIREITO CIVIL",
"justice_description": "JUSTIÇA ESTADUAL",
"created_at": "2024-09-25T04:13:06.923Z",
"updated_at": "2025-08-13T13:26:23.583Z",
"amount": 11617.01,
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL"
}
],
"subjects": [
{
"code": "14",
"name": "DIREITO TRIBUTÁRIO"
},
{
"code": "5986",
"name": "CRÉDITO TRIBUTÁRIO"
},
{
"code": "899",
"name": "DIREITO CIVIL"
},
{
"code": "10431",
"name": "RESPONSABILIDADE CIVIL"
},
{
"code": "10439",
"name": "INDENIZAÇÃO POR DANO MATERIAL"
},
{
"code": "8826",
"name": "DIREITO PROCESSUAL CIVIL E DO TRABALHO"
},
{
"code": "9148",
"name": "LIQUIDAÇÃO / CUMPRIMENTO / EXECUÇÃO"
},
{
"code": "10671",
"name": "OBRIGAÇÃO DE FAZER / NÃO FAZER"
},
{
"code": "6007",
"name": "REPETIÇÃO DE INDÉBITO"
},
{
"code": "10441",
"name": "ACIDENTE DE TRÂNSITO"
},
{
"code": "",
"name": "INDENIZAÇÃO POR DANO MORAL"
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário teste 1",
"side": "Active",
"person_type": "Autor",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário teste 3",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário teste 2",
"side": "Passive",
"person_type": "RÉU",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário teste 2 - (99999999999)",
"documents": []
}
]
},
{
"name": "Usuário teste 3",
"side": "Active",
"person_type": "Advogado",
"documents": [],
"lawyers": []
},
{
"name": "Usuário teste 2 - (99999999999)",
"side": "Passive",
"person_type": "Advogado",
"documents": [],
"lawyers": []
}
],
"attachments": [
{
"attachment_id": "201273181",
"attachment_name": "Certidão de Débito (Certidão de Débito)",
"extension": "html",
"tags": {
"crawl_id": "7ce9007d-98d2-4ea6-b729-ca1f3bc77d2f"
},
"status": "done",
"attachment_date": null
},
{
"attachment_id": "16345831",
"attachment_name": "Sentença (Sentença)",
"extension": "html",
"tags": {
"crawl_id": "c53921e7-7c6e-4bbc-b816-64aee561cf8c"
},
"status": "done",
"attachment_date": "2022-04-08T14:04:57.000Z"
},
{
"attachment_id": "13084368",
"attachment_name": "Contestação (Contestação)",
"extension": "html",
"tags": {
"crawl_id": "c53921e7-7c6e-4bbc-b816-64aee561cf8c"
},
"status": "done",
"attachment_date": "2022-02-15T15:52:41.000Z"
},
{
"attachment_id": "11529202",
"attachment_name": "Decisão (Decisão)",
"extension": "html",
"tags": {
"crawl_id": "c53921e7-7c6e-4bbc-b816-64aee561cf8c"
},
"status": "done",
"attachment_date": "2022-01-19T19:17:51.000Z"
}
],
"related_lawsuits": [],
"steps": [
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_id": "27572cb5",
"step_date": "2025-06-29T20:07:53.000Z",
"content": "Remetidos os Autos (cumpridos) para 2ª Vara Cível da Regional de Bangu",
"private": false,
"created_at": "2025-08-13T13:26:23.096Z",
"updated_at": "2025-08-13T13:26:23.096Z",
"tags": {
"crawl_id": "5bfc2f70-3142-4b79-b306-f4d9a70cc88e"
}
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_id": "a9d74d34",
"step_date": "2025-06-29T20:07:53.000Z",
"step_type": "123",
"private": false,
"created_at": "2025-08-11T18:00:08.187Z",
"updated_at": "2025-08-11T18:00:08.187Z",
"tags": {
"crawl_id": "b5fc9f65-f071-48a0-a760-5a3a69e6ae6d"
}
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_id": "7136b764",
"step_date": "2025-06-16T20:24:29.000Z",
"content": "Juntada de Petição de certidão de débito\n\t\t\t\t\t\n\t\t16/06/2025 20:24:28",
"private": false,
"created_at": "2025-08-13T13:26:23.096Z",
"updated_at": "2025-08-13T13:26:23.096Z",
"tags": {
"crawl_id": "5bfc2f70-3142-4b79-b306-f4d9a70cc88e"
}
},
{
"lawsuit_cnj": "9999999-99.9999.9.99.9999",
"lawsuit_instance": 1,
"step_id": "c92f8e31",
"step_date": "2025-06-15T13:42:16.000Z",
"content": "Expedição de Certidão.",
"private": false,
"created_at": "2025-08-13T13:26:23.096Z",
"updated_at": "2025-08-13T13:26:23.096Z",
"tags": {
"crawl_id": "5bfc2f70-3142-4b79-b306-f4d9a70cc88e"
}
}
]
},
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"created_at": "2025-08-13T13:27:19.462Z",
"request_created_at": "2025-08-13T13:27:18.416Z",
"is_scrapper_info": false,
"tags": {
"debug": true,
"dashboard_id": null,
"cached_response": true
},
"origin": "api",
"origin_id": "949f0d48-022b-496c-a9a9-97a80c3f8044"
}
}
```
Exemplo de reposta com `cached_response: false`:
```json theme={null}
{
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"callback_id": "10e9c234-4f10-4882-a296-53389060b32c",
"event_type": "response_created",
"reference_type": "request",
"reference_id": "949f0d48-022b-496c-a9a9-97a80c3f8044",
"payload": {
"_id": "689c92bae1249918bf8266cb",
"response_id": "752c4e7d-b0b0-435f-a27f-56bed8e559c7",
"origin": "api",
"origin_id": "949f0d48-022b-496c-a9a9-97a80c3f8044",
"request_id": "949f0d48-022b-496c-a9a9-97a80c3f8044",
"user_id": "7f8065a3-4891-428d-9456-dedfc12ff850",
"response_type": "lawsuit",
"response_data": {
"code": "9999999-99.9999.9.99.9999",
"instance": 1,
"name": "Usuário 1 X Usuário 2",
"free_justice": false,
"secrecy_level": 0,
"classifications": [
{
"code": "7",
"name": "PROCEDIMENTO COMUM CÍVEL",
"date": "2022-01-13T00:00:00.000Z"
}
],
"courts": [
{
"code": "7846",
"name": "BANGU REGIONAL 2 VARA CIVEL"
},
{
"name": "2ª Vara Cível da Regional de Bangu",
"date": "2022-01-13T00:00:00.000Z"
}
],
"tribunal_acronym": "TJRJ",
"county": "CAPITAL CENTRAL DE ARQUIVAMENTO DO NUR 1",
"state": "RJ",
"city": "RIO DE JANEIRO",
"distribution_date": "2022-01-13T00:00:00.000Z",
"amount": 11617.01,
"attachments": [
{
"attachment_id": "201273181",
"attachment_date": "2025-06-16T20:24:00.000Z",
"attachment_name": "Certidão de Débito (Certidão de Débito)",
"step_id": "50bb801c",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "7ce9007d-98d2-4ea6-b729-ca1f3bc77d2f"
},
"user_data": null
},
{
"attachment_id": "200884452",
"attachment_date": "2025-06-15T13:42:00.000Z",
"attachment_name": "Certidão",
"step_id": "3ff7cb6f",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "39678201",
"attachment_date": "2022-12-14T17:31:00.000Z",
"attachment_name": "Certidão",
"step_id": "a9e15505",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "25650248",
"attachment_date": "2022-08-04T14:10:00.000Z",
"attachment_name": "Certidão",
"step_id": "98b9142a",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "16345831",
"attachment_date": "2022-04-08T14:04:57.000Z",
"attachment_name": "Sentença (Sentença)",
"step_id": "1909bb45",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "c53921e7-7c6e-4bbc-b816-64aee561cf8c"
},
"user_data": null
},
{
"attachment_id": "16327314",
"attachment_date": "2022-04-07T17:33:00.000Z",
"attachment_name": "Ato Ordinatório",
"step_id": "739c98d1",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "15939964",
"attachment_date": "2022-04-01T18:29:00.000Z",
"attachment_name": "Petição",
"step_id": "c8ce483d",
"extension": "html",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "15939965",
"attachment_date": "2022-04-01T18:29:00.000Z",
"attachment_name": "Petição (COMPROVA DEPOSITO 0800492 55.2022.8.19.0204)",
"step_id": "c8ce483d",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
},
{
"attachment_id": "15939966",
"attachment_date": "2022-04-01T18:29:00.000Z",
"attachment_name": "Procuração (SUBSTABELECIMENTO GOES)",
"step_id": "c8ce483d",
"extension": "pdf",
"status": "done",
"tags": {
"crawl_id": "e3da89f2-8951-4061-98da-356e070301e1"
},
"user_data": null
}
],
"parties": [
{
"main_document": "99999999999",
"name": "Usuário 1",
"side": "Active",
"person_type": "Autor",
"documents": [
{
"document": "99999999999",
"document_type": "cpf"
}
],
"lawyers": [
{
"name": "Usuário teste 4",
"documents": []
}
]
},
{
"main_document": "99999999999",
"name": "Usuário 2",
"side": "Passive",
"person_type": "RÉU",
"documents": [
{
"document": "99999999999",
"document_type": "cnpj"
}
],
"lawyers": [
{
"name": "Usuário teste 2 - (99999999999)",
"documents": []
}
]
},
{
"name": "Usuário teste 4",
"side": "Active",
"person_type": "Advogado",
"documents": []
},
{
"name": "Usuário teste 2 - (99999999999)",
"side": "Passive",
"person_type": "Advogado",
"documents": []
}
],
"subjects": [
{
"code": "6007",
"name": "REPETIÇÃO DE INDÉBITO",
"date": "2022-01-13T00:00:00.000Z"
},
{
"code": "10441",
"name": "ACIDENTE DE TRÂNSITO",
"date": "2022-01-13T00:00:00.000Z"
},
{
"code": "10671",
"name": "OBRIGAÇÃO DE FAZER / NÃO FAZER",
"date": "2022-01-13T00:00:00.000Z"
},
{
"code": "14",
"name": "DIREITO TRIBUTÁRIO"
},
{
"code": "10671",
"name": "OBRIGAÇÃO DE FAZER / NÃO FAZER"
}
]
}
}
}
```