Pular para o conteúdo principal

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
EtapaMétodo e rotaFinalidadeCobrança
Ler resumoGET /v1/processos/cnj/{cnj}/resumo-iaRetorna o conteúdo quando existeConforme conta
Ler resumo ainda em preparoGET /v1/processos/cnj/{cnj}/resumo-iaResponde 202 enquanto a geração não terminouSem cobrança
Solicitar/atualizarPOST /v1/processos/cnj/{cnj}/resumo-ia/solicitar-atualizacaoInicia a geração assíncronaConforme conta
Consultar statusGET /v1/processos/cnj/{cnj}/resumo-ia/statusAcompanha uma solicitaçãoSem 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​

statusstateSignificadoAção recomendada
PENDENTEpendingA geração ainda está em processamentoAguarde pollAfterMs quando presente; sem esse campo, aguarde pelo menos 15 segundos antes da próxima consulta.
FINALIZADOsuccessO resumo foi geradoPare o polling e consulte GET /resumo-ia para obter conteudo.
ERROerrorA geração não foi concluídaPare 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.

CampoValoresObservação
tipo_processoCIVEL, CRIMINAL, TRABALHISTA, TRIBUTARIO, PREVIDENCIARIO, FAMILIA, ELEITORAL, MILITAR, INDETERMINADOConsidera a classe, o assunto e as partes.
fase_processualCONHECIMENTO, RECURSAL, EXECUCAO, AUXILIAR, INDETERMINADALê as movimentações: um processo cuja classe mudou para cumprimento de sentença aparece como EXECUCAO.
grauPRIMEIRO_GRAU, SEGUNDO_GRAU, INSTANCIA_SUPERIOR, null
dias_sem_movimentacaointeiro ou nullRecalculado 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:

valorSignificadoComo usar
trueHá registro que sustenta o indicadorPode acionar fluxo automático
falseHá registro que o afastaPode despriorizar
nullNão foi possível apurarNão é false. Trate como desconhecido

O motivo diz em que o indicador se baseou:

CampovalormotivoLeitura
decisao_pendentetrueCONCLUSO_SEM_DECISAO_POSTERIORAutos concluíram ao juiz e não há decisão depois disso
falseDECISAO_APOS_A_CONCLUSAOJá houve decisão posterior à conclusão
nullSEM_CONCLUSAO_REGISTRADANão há conclusão registrada
prazo_abertotrueINTIMACAO_RECENTE_SEM_MANIFESTACAOIntimação nos últimos 30 dias sem petição posterior
falseMANIFESTACAO_APOS_A_INTIMACAOA parte já se manifestou depois da intimação
nullINTIMACAO_ANTIGA_SEM_MANIFESTACAOA última intimação é antiga demais para sustentar conclusão
urgenciatrueMEDIDA_DE_URGENCIA_REGISTRADAHá liminar, tutela, penhora, bloqueio, prisão ou busca e apreensão
qualquernullNAO_DISPONIVELNão há registro suficiente para apurar

Limites que você precisa conhecer​

  • prazo_aberto nã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.
  • urgencia nunca retorna false. 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.
  • null nunca deve virar false no seu código. Um processo com prazo correndo pode aparecer como null se o ato não estiver publicado. Em fluxo automático, trate null como "revisar manualmente".

Polling seguro​

  1. Comece com o intervalo informado em pollAfterMs.
  2. Se ele não existir, use ao menos 15 segundos.
  3. Pare imediatamente em FINALIZADO ou ERRO.
  4. Não crie outra solicitação a cada tentativa de polling.
  5. Em HTTP 429, use o header Retry-After antes de uma nova chamada.
  6. 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​

HTTPCódigoQuando ocorreTratamento
401API_KEY_REQUIRED / INVALID_API_KEYChave ausente ou inválidaCorrija a autenticação.
403ACCOUNT_INACTIVE / EMAIL_VERIFICATION_REQUIREDConta ainda não está aptaRegularize a conta.
403INSUFFICIENT_CREDITSSem saldo para ler ou solicitar resumoRecarregue antes de uma nova solicitação.
422INVALID_CNJCNJ ou request_id inválidoNormalize o CNJ e envie inteiro positivo em request_id.
404SUMMARY_NOT_FOUNDProcesso não localizadoConfira o CNJ e tente novamente apenas se o erro for recuperável.
429—Limite de requisiçõesRespeite Retry-After.
502SUMMARY_UNAVAILABLEServiço temporariamente indisponível ou geração falhouUse backoff e preserve meta.requestId.
504SUMMARY_TIMEOUTTempo excedido ao consultar o status ou conteúdoTente novamente com backoff.

Os erros públicos usam apenas códigos e mensagens neutros; detalhes internos da infraestrutura não são expostos.

Referência​