Resumo de processo por IA
O resumo por IA transforma os dados já disponíveis de um processo em uma visão textual de apoio à leitura inicial. Use-o para triagem, atendimento, relatórios e priorização; ele não substitui análise jurídica profissional ou decisão judicial.
Quando usar
- reduzir o tempo de entendimento inicial de um CNJ;
- apresentar uma visão clara em CRM, portal ou painel operacional;
- priorizar quais processos exigem a leitura de capa, movimentações ou documentos;
- complementar fluxos de atendimento e relatórios com linguagem mais acessível.
Fluxo técnico
O processamento é assíncrono. Não repita a solicitação de atualização enquanto uma execução estiver pendente.
POST /resumo-ia/solicitar-atualizacao
→ receber providerRequestId e status PENDENTE
GET /resumo-ia/status?request_id={providerRequestId}
→ repetir apenas enquanto PENDENTE
GET /resumo-ia
→ ler conteudo quando FINALIZADO
| Etapa | Método e rota | Finalidade | Cobrança |
|---|---|---|---|
| Ler resumo | GET /v1/processos/cnj/{cnj}/resumo-ia | Retorna o conteúdo quando existe | Conforme conta |
| Ler resumo ainda em preparo | GET /v1/processos/cnj/{cnj}/resumo-ia | Responde 202 enquanto a geração não terminou | Sem cobrança |
| Solicitar/atualizar | POST /v1/processos/cnj/{cnj}/resumo-ia/solicitar-atualizacao | Inicia a geração assíncrona | Conforme conta |
| Consultar status | GET /v1/processos/cnj/{cnj}/resumo-ia/status | Acompanha uma solicitação | Sem cobrança |
1. Solicitar geração ou atualização
curl --request POST \
--url 'https://api.buscaprocessos.app.br/v1/processos/cnj/0000000-00.2026.8.26.0000/resumo-ia/solicitar-atualizacao' \
--header 'x-api-key: bp_live_SUA_CHAVE' \
--header 'Accept: application/json'
Resposta HTTP 202:
{
"data": {
"numeroCnj": "0000000-00.2026.8.26.0000",
"state": "pending",
"status": "PENDENTE",
"providerRequestId": 2001596,
"criadoEm": "2026-07-15T14:00:00+00:00",
"concluidoEm": null,
"pollAfterMs": 2500,
"message": "A solicitação de geração/atualização do resumo inteligente foi registrada."
},
"meta": {
"creditsRemaining": 199.88,
"requestId": "req_exemplo",
"searchLogId": "uuid",
"servedAt": "11:00:00"
}
}
Guarde data.providerRequestId. Ele identifica a execução que será consultada no próximo passo. meta.requestId é um identificador de rastreio da chamada HTTP e não substitui esse valor.
2. Consultar status
Use request_id com o valor de providerRequestId. O alias id também é aceito para compatibilidade, mas novas integrações devem usar request_id.
curl --request GET \
--url 'https://api.buscaprocessos.app.br/v1/processos/cnj/0000000-00.2026.8.26.0000/resumo-ia/status?request_id=2001596' \
--header 'x-api-key: bp_live_SUA_CHAVE' \
--header 'Accept: application/json'
Resposta HTTP 200 em conclusão:
{
"data": {
"id": 2001596,
"providerRequestId": 2001596,
"numeroCnj": "0000000-00.2026.8.26.0000",
"numero_cnj": "0000000-00.2026.8.26.0000",
"status": "FINALIZADO",
"state": "success",
"criadoEm": "2026-07-15T14:00:00+00:00",
"criado_em": "2026-07-15T14:00:00+00:00",
"concluidoEm": "2026-07-15T14:00:08+00:00",
"concluido_em": "2026-07-15T14:00:08+00:00"
},
"meta": {
"creditsRemaining": 199.88,
"requestId": "summary-status-001",
"searchLogId": null,
"servedAt": "11:00:08"
}
}
Estados retornados
status | state | Significado | Ação recomendada |
|---|---|---|---|
PENDENTE | pending | A geração ainda está em processamento | Aguarde pollAfterMs quando presente; sem esse campo, aguarde pelo menos 15 segundos antes da próxima consulta. |
FINALIZADO | success | O resumo foi gerado | Pare o polling e consulte GET /resumo-ia para obter conteudo. |
ERRO | error | A geração não foi concluída | Pare o polling, registre meta.requestId e trate o erro como recuperável somente quando retryable indicar isso. |
pollAfterMs é retornado somente enquanto o estado é pending.
3. Ler o resumo pronto
Após FINALIZADO, faça a leitura do conteúdo:
curl --request GET \
--url 'https://api.buscaprocessos.app.br/v1/processos/cnj/0000000-00.2026.8.26.0000/resumo-ia' \
--header 'x-api-key: bp_live_SUA_CHAVE' \
--header 'Accept: application/json'
Resposta HTTP 200:
{
"data": {
"numeroCnj": "0000000-00.2026.8.26.0000",
"classificacao": {
"tipo_processo": "CIVEL",
"fase_processual": "CONHECIMENTO",
"grau": "PRIMEIRO_GRAU",
"dias_sem_movimentacao": 42
},
"sinais": {
"prazo_aberto": { "valor": true, "motivo": "INTIMACAO_RECENTE_SEM_MANIFESTACAO" },
"decisao_pendente": { "valor": false, "motivo": "DECISAO_APOS_A_CONCLUSAO" },
"urgencia": { "valor": true, "motivo": "MEDIDA_DE_URGENCIA_REGISTRADA" }
},
"conteudo": "Resumo inteligente do processo em linguagem clara.",
"atualizadoEm": "2026-07-15T14:00:08+00:00",
"cached": false,
"state": "success"
},
"meta": {
"creditsRemaining": 199.76,
"requestId": "req_resumo_exemplo",
"searchLogId": "uuid",
"servedAt": "11:00:09"
}
}
Campos estruturados
Além do texto em conteudo, a resposta traz campos prontos para filtro e triagem, sem precisar interpretar a narrativa.
classificacao
Derivada de forma determinística do número do processo, da capa e das movimentações. Não passa pelo modelo de linguagem.
| Campo | Valores | Observação |
|---|---|---|
tipo_processo | CIVEL, CRIMINAL, TRABALHISTA, TRIBUTARIO, PREVIDENCIARIO, FAMILIA, ELEITORAL, MILITAR, INDETERMINADO | Considera a classe, o assunto e as partes. |
fase_processual | CONHECIMENTO, RECURSAL, EXECUCAO, AUXILIAR, INDETERMINADA | Lê as movimentações: um processo cuja classe mudou para cumprimento de sentença aparece como EXECUCAO. |
grau | PRIMEIRO_GRAU, SEGUNDO_GRAU, INSTANCIA_SUPERIOR, null | |
dias_sem_movimentacao | inteiro ou null | Recalculado a cada resposta, nunca servido de cache. |
Processos sem dados suficientes retornam INDETERMINADO, INDETERMINADA ou null. O campo está sempre presente, com a mesma estrutura.
sinais
Indicadores de triagem derivados das movimentações do processo. Servem para ordenar uma carteira sem ler cada resumo: o que está esperando o juiz, o que tem janela de resposta correndo e o que tem medida constritiva.
Cada indicador tem valor e motivo. O valor tem três estados, e a diferença entre eles importa:
valor | Significado | Como usar |
|---|---|---|
true | Há registro que sustenta o indicador | Pode acionar fluxo automático |
false | Há registro que o afasta | Pode despriorizar |
null | Não foi possível apurar | Não é false. Trate como desconhecido |
O motivo diz em que o indicador se baseou:
| Campo | valor | motivo | Leitura |
|---|---|---|---|
decisao_pendente | true | CONCLUSO_SEM_DECISAO_POSTERIOR | Autos concluíram ao juiz e não há decisão depois disso |
false | DECISAO_APOS_A_CONCLUSAO | Já houve decisão posterior à conclusão | |
null | SEM_CONCLUSAO_REGISTRADA | Não há conclusão registrada | |
prazo_aberto | true | INTIMACAO_RECENTE_SEM_MANIFESTACAO | Intimação nos últimos 30 dias sem petição posterior |
false | MANIFESTACAO_APOS_A_INTIMACAO | A parte já se manifestou depois da intimação | |
null | INTIMACAO_ANTIGA_SEM_MANIFESTACAO | A última intimação é antiga demais para sustentar conclusão | |
urgencia | true | MEDIDA_DE_URGENCIA_REGISTRADA | Há liminar, tutela, penhora, bloqueio, prisão ou busca e apreensão |
| qualquer | null | NAO_DISPONIVEL | Não há registro suficiente para apurar |
Limites que você precisa conhecer
prazo_abertonão calcula vencimento. Os tribunais publicam o ato de intimação, não a duração do prazo. O indicador diz que existe intimação recente sem manifestação posterior, o que é um sinal de atenção, não uma data-limite. Não use para controle de prazo processual.urgencianunca retornafalse. Não encontrar medida de urgência não prova que o caso não é urgente, então o campo só afirma o que está registrado.nullnunca deve virarfalseno seu código. Um processo com prazo correndo pode aparecer comonullse o ato não estiver publicado. Em fluxo automático, tratenullcomo "revisar manualmente".
Polling seguro
- Comece com o intervalo informado em
pollAfterMs. - Se ele não existir, use ao menos 15 segundos.
- Pare imediatamente em
FINALIZADOouERRO. - Não crie outra solicitação a cada tentativa de polling.
- Em HTTP
429, use o headerRetry-Afterantes de uma nova chamada. - Limite o número de tentativas e exponha ao usuário um estado “em processamento” quando necessário.
Exemplo em TypeScript:
const requestId = created.data.providerRequestId;
for (let attempt = 0; attempt < 8; attempt += 1) {
const response = await fetch(
`https://api.buscaprocessos.app.br/v1/processos/cnj/${encodeURIComponent(cnj)}/resumo-ia/status?request_id=${requestId}`,
{ headers: { "x-api-key": apiKey, Accept: "application/json" } },
);
const payload = await response.json();
if (!response.ok) throw new Error(payload.error?.code || "summary_status_error");
if (payload.data.status === "FINALIZADO") break;
if (payload.data.status === "ERRO") throw new Error("summary_generation_failed");
await new Promise((resolve) => setTimeout(resolve, payload.data.pollAfterMs ?? 15_000));
}
Erros do fluxo
| HTTP | Código | Quando ocorre | Tratamento |
|---|---|---|---|
| 401 | API_KEY_REQUIRED / INVALID_API_KEY | Chave ausente ou inválida | Corrija a autenticação. |
| 403 | ACCOUNT_INACTIVE / EMAIL_VERIFICATION_REQUIRED | Conta ainda não está apta | Regularize a conta. |
| 403 | INSUFFICIENT_CREDITS | Sem saldo para ler ou solicitar resumo | Recarregue antes de uma nova solicitação. |
| 422 | INVALID_CNJ | CNJ ou request_id inválido | Normalize o CNJ e envie inteiro positivo em request_id. |
| 404 | SUMMARY_NOT_FOUND | Processo não localizado | Confira o CNJ e tente novamente apenas se o erro for recuperável. |
| 429 | — | Limite de requisições | Respeite Retry-After. |
| 502 | SUMMARY_UNAVAILABLE | Serviço temporariamente indisponível ou geração falhou | Use backoff e preserve meta.requestId. |
| 504 | SUMMARY_TIMEOUT | Tempo excedido ao consultar o status ou conteúdo | Tente novamente com backoff. |
Os erros públicos usam apenas códigos e mensagens neutros; detalhes internos da infraestrutura não são expostos.