projeto PHP para utilização da API do CNJ em consulta de processos judiciais

Seguindo o exemplo do João (https://www.tabnews.com.br/joaotextor/abstraindo-a-api-publica-do-cnj-datajud) eu fiz um projeto para utilização da API do CNJ para consulta processual. É bem simples, mas foi divertido. Quem puder contribuir, será muito bem vindo. Foi feito em PHP + jquery + bootstrap.

https://github.com/leonardomv1981/consulta-processo-judicial-apicnj

olá, alguem com disponibilidade e interesse em implementar esta API em um sistema proprietário em PHP/Laravel? estou em busca de um profissional para realizarmos esta implementação. obrigado

Oi Aroldo, me chama no email que conversamos. leonardo@leonardovilela.com

Olá, vi o repositório, ta em PHP puro, e usando arquivos procedurais.

O que você acha de tentar fazer isso usando o Laravel?

Boa ideia Rodrigo. Valeu pela colaboração. Vou tentar implementar com laravel no fim da semana.
Sabe se tem algum limite quanto ao uso? Chegou a fazer algum teste com diversos requests?
Na pagina da documentação da API no CNJ (https://datajud-wiki.cnj.jus.br/api-publica/), no item 3.13 do termos de usa fala em 120 requisições por minuto. So não sei se este número diz respeito a requisições totais ou do mesmo ip requisitante. O teste que fiz foi com 100 requisições e rodou limpo.

Oi amigo!

Esta API consegue trazer os andamentos dos processos pesquisados?

Tenho um cliente que quer trazer os andamentos dos processos do escritório, estou procurando uma API para trabalhar com PHP e fazer isso.

Obrigado!

Consegue sim. Andamentos, instâncias... tudo, exceto o nome das partes e documentos.
Obrigado pela resposta tão rápida! Sucesso!

essa API Key chumbada no código e publicada pra todo mundo no GitHub não vai dar problema não?

Vai não. Ela é publica mesmo e uma so para todo mundo. Mas valeu pelo alerta. https://datajud-wiki.cnj.jus.br/api-publica/acesso
caramba...ahahha...que loucura! é tipo guardar a chave embaixo do tapete...ahahaha
Cara... pois é. Estranho ne?! So lembrei disso aqui: https://g1.globo.com/politica/noticia/2023/08/17/hacker-afirma-a-cpi-que-uma-das-senhas-do-sistema-do-cnj-era-12345-deputada-diz-que-era-senha-simples.ghtml
se tem api publica, e tá no site, pra que precisa informar na request ? kkkk
se eles quiserem bloquear todo mundo é só invalidar a key. além do mais, eles podem ter outras chaves, essa é só a chave pública, então se vc usar essa chave vc tem certo acesso, se usar outras pode ter outo tipo de acesso etc. e por mais simples que seja, ter uma key já impede um bocado de gente com menos conhecimento de acessar. não muitas, mas com certeza algumas.

Dica, coloca uns prints no readme do seu projeto no github pra gente ver como ficou. Como não está hospedado, dificilmente alguém vai baixar o projeto e rodar na máquina só pra ver o que é.

Obrigado pela dica Tiago. Você tem toda razão Acabei de colocar lá. Valeu!

Talvez eu não tenha pesquisado o suficiente mas apenas a título de confirmação: por enquanto, apenas metadados dos processos? Conteúdo processual mesmo de retorno na API não achei.

Isso mesmo. Mas também os metadados de movimentação e ciclo de vida do processo.

Fala ae pessoal, tentei a url no postman com a APIkey e nao ta funcinando, alguem tem alguma dica? A documentacao da wiki datajud nao parece estar atualizada. Obrigado.

Oi Wallace, eu acho que a documentação está atualizada sim, até porque a API foi lançada ha 2 semanas. Acabei de testar aqui e funcionou normal no TJMG, TJSP, TRF4 e TRF6. Qual tribunal vc esta tentando acessar?
Bom, testei varios TJs, nenhum responde. Tentei no postman, app busca processos node.js, testei no exemplo python da documentacao. Todos mesmo resultado: cause: ConnectTimeoutError: Connect Timeout Error at onConnectTimeout (node:internal/deps/undici/undici:8522:28) at node:internal/deps/undici/undici:8480:50 at Immediate._onImmediate (node:internal/deps/undici/undici:8511:13) at process.processImmediate (node:internal/timers:476:21) { code: 'UND_ERR_CONNECT_TIMEOUT'
Cara, da uma revisada nos seus parametros. Teste de novo, agora no insomnia e rodou. ``` { "took": 766, "timed_out": false, "_shards": { "total": 20, "successful": 20, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 13.913626, "hits": [ { "_index": "api_publica_tjmg", "_type": "_doc", "_id": "TJMG_417_G2_45142_13668284120218130024", "_score": 13.913626, "_source": { "classe": { "codigo": 417, "nome": "Apelação Criminal" }, "numeroProcesso": "13668284120218130024", "sistema": { "codigo": -1, "nome": "Inválido" }, "formato": { "codigo": 1, "nome": "Eletrônico" }, "tribunal": "TJMG", "dataHoraUltimaAtualizacao": "2023-10-18T18:52:26.869Z", "grau": "G2", "@timestamp": "2023-10-19T06:25:38.427Z", "dataAjuizamento": "2023-02-15T08:46:28.000Z", "movimentos": [ { "complementosTabelados": [ { "codigo": 18, "valor": 40, "nome": "outros motivos", "descricao": "motivo_da_remessa" } ], "codigo": 123, "nome": "Remessa", "dataHora": "2023-02-06T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 18, "valor": 40, "nome": "outros motivos", "descricao": "motivo_da_remessa" } ], "codigo": 123, "nome": "Remessa", "dataHora": "2023-02-07T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 18, "valor": 40, "nome": "outros motivos", "descricao": "motivo_da_remessa" } ], "codigo": 123, "nome": "Remessa", "dataHora": "2023-02-10T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 3, "valor": 5, "nome": "para despacho", "descricao": "tipo_de_conclusao" } ], "codigo": 51, "nome": "Conclusão", "dataHora": "2023-02-15T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 4, "valor": 73, "nome": "Alvará", "descricao": "tipo_de_documento" } ], "codigo": 60, "nome": "Expedição de documento", "dataHora": "2023-02-16T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 112, "nome": "Procuração/substabelecimento com reserva de poderes", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-17T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 3, "valor": 5, "nome": "para despacho", "descricao": "tipo_de_conclusao" } ], "codigo": 51, "nome": "Conclusão", "dataHora": "2023-02-17T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-23T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-24T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-26T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-27T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-27T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-02-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-01T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-01T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-04T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-06T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-06T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-06T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-09T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-13T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-13T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 113, "nome": "Procuração/substabelecimento sem reserva de poderes", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-16T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 3, "valor": 5, "nome": "para despacho", "descricao": "tipo_de_conclusao" } ], "codigo": 51, "nome": "Conclusão", "dataHora": "2023-03-17T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-21T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 3, "valor": 5, "nome": "para despacho", "descricao": "tipo_de_conclusao" } ], "codigo": 51, "nome": "Conclusão", "dataHora": "2023-03-24T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ], "codigo": 85, "nome": "Petição", "dataHora": "2023-03-28T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 4, "valor": 80, "nome": "Outros documentos", "descricao": "tipo_de_documento" } ], "codigo": 60, "nome": "Expedição de documento", "dataHora": "2023-04-19T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 4, "valor": 80, "nome": "Outros documentos", "descricao": "tipo_de_documento" } ], "codigo": 60, "nome": "Expedição de documento", "dataHora": "2023-04-19T00:00:00.000Z" }, { "complementosTabelados": [ { "codigo": 19, "valor": 57, "nome": "Petição (outras)", "descricao": "tipo_de_peticao" } ```
Cara, eu to fora do Brasil, acha q faz alguma diferenca? Algum block pra ip internacional?
Pode ser viu. Se for possível faz um teste com o insomnia com os parametros abaixo (são os que estou usando e esta funcionando). Se não funcionar, possivelmente é block por região. POST: `https://api-publica.datajud.cnj.jus.br/api_publica_tjmg/_search` JSON REQUEST: ``` { "query": { "match": { "numeroProcesso": "13668284120218130024" } } } ``` HEADER: `Content-Type: application/json` `Authorization: APIKey cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==` (repara que antes da chave, tem o termo APIKey, que faz parte da chave)
Yes, confirmado, mesmo com o Insomnia nao rola, e fiz um script python com esses dados e nao rola aki tb... pode testar ai? Ainda falta eu tentar com VPN em outra maquina... ```python import requests def query_cnj_api(process_number): """ Queries the CNJ API with the given process number and returns the response. :param process_number: The process number to query. :return: The response from the API. """ url = "https://api-publica.datajud.cnj.jus.br/api_publica_tjmg/_search" headers = { "Content-Type": "application/json", "Authorization": "APIKey cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==" } json_data = { "query": { "match": { "numeroProcesso": process_number } } } response = requests.post(url, json=json_data, headers=headers) return response.json() # Example usage print("####### Chamando public API TJMG - Proc Num, resultados no console...") process_number = "13668284120218130024" response = query_cnj_api(process_number) print(response) ```
Aqui também deu conexão recusada no py. Estranho. Muito estranho. Logo após o erro rodei no PHP num xampp que está na mesma maquina e funcionou.
Fala ae, finalmente tudo funcinou, em qq linguagem, testei em java e python e no postman, tudo ok... era algum block temporario do governo, agora funciona redondo.

Estou a testar com diversos numeros de processos, todos retornam erro, uso os arquivos originais descarregados do GITHub. O erro de não encontrado ou numero mau formatado. Em ambos os casos, processos diferentes, estavam correctos.

Aconteu comigo que uma consulta TJRS e traz dados bem desatualizados, não servindo muito para quem quer consultar as movimentações de um processo, mais de meses desatualizado. Mais alguém está tendo este problema?
cara, eu testei com muitos processos do tjmg tjsp e o lag era de um dia. o lag maior era para distribuicao de processos, que no tjmg demorou uma semana pra entrar.
Sim. Consegui trazer os dados, usando Python, porém também notei que não vem todos (sou inexperiente na programação, porém trabalho no Judiciário - âmbito jurídico).
Sim, os tribunais não precisam enviar as informações processuais com uma frequência curta, acredito que demorem mais de mês para fazer isso, e depois disso o CNJ ainda tem que processar essa informação para depois ser disponibilizada pela API. Para quem quer utilizar para acompanhar processos atualizados, não dá para ser utilizando essa API