Pular para o conteúdo principal
TrackJud TrackJud
· Atualizado em · 10 min de leitura

API de consulta judicial: como automatizar pesquisa de processos no Brasil

Por TrackJud

Guia técnico da API REST do Vigilant pra integrar consulta processual no seu sistema. Endpoints, autenticação, cache, error handling (RFC 7807) e exemplos em cURL, Python e JavaScript. Atualizado abril 2026.

TL;DR: A API REST do Vigilant unifica o acesso a 12 fontes judiciais brasileiras (ESAJ + PJe) numa única interface OpenAPI 3.1. Autenticação por Bearer token, resposta em JSON padronizado, erros em RFC 7807. Cache inteligente de 2 dias (200 imediato se fresco, 202 + polling se novo). 6 endpoints: health, courts, create/get/cancel/reprocess consult. Custo: R$ 0,10 por tribunal consultado. Integração mínima leva 2-4 horas. Postman collection disponível pra download. Este guia cobre: endpoints, autenticação, cache behavior, error handling, exemplos em cURL/Python/JS, caso de integração e FAQ técnico.

Se você é desenvolvedor em uma legaltech, fintech, escritório de advocacia ou empresa de compliance e precisa automatizar a pesquisa de processos judiciais no Brasil, este guia é pra você.

Pra quem não é dev e quer entender como automatizar sem código, veja o guia de automação pra escritórios. Pra quem quer entender os sistemas judiciais que a API abstrai, veja ESAJ vs PJE.

O problema que a API resolve

Os tribunais brasileiros não oferecem APIs oficiais pra consulta de processos. Cada tribunal tem seu próprio sistema (ESAJ, PJE e outros), com interfaces, captchas e formatos de dados diferentes. São mais de 40 sistemas em produção no país.

Pra quem precisa de dados processuais em volume ou integrados a um sistema, as opções são:

  1. Consulta manual — não escala (veja os números de tempo)
  2. Construir e manter integração própria — alto custo de engenharia (scraping, captcha solving, rotação de proxy, parsing de HTML), manutenção constante (tribunais mudam layout sem aviso)
  3. Usar uma API que já resolve isso — foco no seu produto

O Vigilant é a terceira opção: uma API REST que unifica o acesso a 12 fontes judiciais em 10 estados brasileiros, abstraindo ESAJ, PJE e outros sistemas por trás de um único endpoint JSON padronizado.

Visão geral da API

AspectoDetalhe
ProtocoloREST + JSON
AutenticaçãoBearer token (API key gerada no dashboard)
DocumentaçãoOpenAPI 3.1 com Scalar UI interativa
Spec JSONvigilant.trackjud.com.br/api/openapi
Base URLhttps://vigilant.trackjud.com.br/api/v1
ErrosRFC 7807 Problem Details
Health checkGET /api/health (público, sem auth)
PostmanDownload collection

Primeiros passos — da conta à primeira chamada em 5 minutos

1. Crie uma conta

Acesse vigilant.trackjud.com.br e crie uma conta com e-mail (OTP — não precisa de senha). 5 créditos grátis imediatamente, sem cartão.

2. Gere uma API key

No dashboard → API KeysCriar nova chave. A chave é exibida uma única vez — copie e guarde em local seguro (env var, vault, .env).

3. Faça a primeira chamada

curl https://vigilant.trackjud.com.br/api/health

Resposta: {"status":"healthy","version":"..."}. Se chegou aqui, a API está acessível.

curl -X POST https://vigilant.trackjud.com.br/api/v1/consults \
  -H "Authorization: Bearer SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"document":"529.982.247-25","courts":["TJSP"]}'

Pronto. Primeira consulta criada. O response traz consult_id pra polling.

6 endpoints — referência rápida

MétodoEndpointAuthDescrição
GET/api/healthHealth check (database, queue, external services)
GET/api/v1/courtsLista tribunais com status operacional
POST/api/v1/consultsCria consulta (CPF + tribunais)
GET/api/v1/consults/:idPolling de resultado
PUT/api/v1/consults/:id/cancelCancela consulta em andamento
POST/api/v1/consults/:id/reprocessReprocessa tribunais que falharam

Todos os detalhes (request body, response shape, examples) estão na documentação interativa Scalar e na Postman collection.

Cache behavior — o conceito mais importante da API

A API tem um cache inteligente de 2 dias que muda completamente como você consome os dados:

SituaçãoHTTP responseO que acontece
Cache fresco (< 2 dias)200 OKDados retornados imediatamente. source: "cache". Zero scraping.
Cache stale (≥ 2 dias)200 OKDados antigos retornados + stale: true + refresh automático em background.
Sem cache202 AcceptedConsulta criada. Scraping inicia. Fazer polling no consult_id.
force_refresh: true202 AcceptedPula cache. Sempre scraping novo. 5x o custo (5 créditos/tribunal).

Implicação prática: se você faz monitoramento semanal de 100 CPFs, e 80% deles não tiveram processos novos, essas 80 consultas são servidas do cache sem custo extra (se a consulta anterior é de < 2 dias). Isso reduz o custo real em 30-50% comparado ao teórico.

Error handling — RFC 7807

Todas as respostas de erro seguem o padrão RFC 7807 (Problem Details):

{
  "type": "https://vigilant.trackjud.com.br/errors/insufficient-credits",
  "title": "Payment Required",
  "status": 402,
  "detail": "You need at least 3 credits. Your balance is 1.",
  "instance": "/api/v1/consults"
}
StatusTypeQuando
400.../bad-requestTribunal desconhecido, lista vazia, tribunal não implementado
401.../unauthorizedAPI key ausente ou inválida
402.../insufficient-creditsCréditos insuficientes
404.../not-foundConsulta não encontrada ou não pertence ao seu usuário
409.../conflictAção conflita com estado atual (ex: cancelar consulta já finalizada)
422.../validation-errorCPF inválido (falhou mod-11) — inclui campo errors com detalhes
429Rate limit atingido — header Retry-After com segundos pra esperar

No seu código: trate pelo status code. Use detail pra log/debugging. O type URI é estável e pode ser usado como enum de erro.

Create consult — request e response detalhados

Request

POST /api/v1/consults
Content-Type: application/json
Authorization: Bearer SUA_API_KEY

{
  "document": "529.982.247-25",
  "courts": ["TJSP", "TJMG", "TRF1"],
  "force_refresh": false
}
CampoTipoObrigatórioDescrição
documentstringSimCPF ou CNPJ (com ou sem máscara). Validado com mod-11.
courtsstring[]SimCódigos dos tribunais. Use GET /courts pra descobrir quais estão ativos.
force_refreshbooleanNão (default false)Quando true, pula cache e sempre faz scraping novo. 5x o custo.

Response — cenário 200 (cache hit)

{
  "data": {
    "source": "cache",
    "stale": false,
    "consult_id": "550e8400-e29b-41d4-a716-446655440000",
    "document": "529.982.247-25",
    "courts": [
      {
        "court": "TJSP",
        "system": "esaj",
        "source": "cache",
        "stale": false,
        "extracted_at": "2026-04-15T14:30:00Z",
        "processes": [
          {
            "numero_processo_unico": "1234567-89.2024.8.26.0100",
            "classe": "Procedimento Comum Cível",
            "situacao": "Em andamento",
            "instance": "1",
            "partes": [...],
            "movimentos": [...],
            "assuntos": [...]
          }
        ]
      }
    ]
  }
}

O formato é padronizado independente do tribunal — ESAJ e PJE retornam a mesma shape JSON.

Response — cenário 202 (nova consulta)

{
  "data": {
    "source": "processing",
    "consult_id": "550e8400-e29b-41d4-a716-446655440000",
    "courts": [
      { "court": "TJSP", "system": "esaj", "status": "queued" },
      { "court": "TJMG", "system": "pje", "status": "queued" }
    ]
  }
}

Faça polling em GET /consults/{consult_id} a cada 2-5 segundos até status: "done".

Exemplos em 3 linguagens

cURL

# Criar consulta
curl -X POST https://vigilant.trackjud.com.br/api/v1/consults \
  -H "Authorization: Bearer vgl_sua_chave" \
  -H "Content-Type: application/json" \
  -d '{"document":"529.982.247-25","courts":["TJSP","TJMG"]}'

# Polling
curl https://vigilant.trackjud.com.br/api/v1/consults/UUID \
  -H "Authorization: Bearer vgl_sua_chave"

Python

import requests, time

API = "https://vigilant.trackjud.com.br/api/v1"
headers = {"Authorization": "Bearer vgl_sua_chave"}

# Criar
resp = requests.post(f"{API}/consults", headers=headers, json={
    "document": "529.982.247-25",
    "courts": ["TJSP", "TJMG"]
})
data = resp.json()["data"]

if resp.status_code == 200:
    print("Cache hit:", data)
else:
    # Polling
    cid = data["consult_id"]
    while True:
        r = requests.get(f"{API}/consults/{cid}", headers=headers)
        d = r.json()["data"]
        if d["status"] == "done":
            print("Done:", d)
            break
        time.sleep(3)

JavaScript (Node.js)

const API = "https://vigilant.trackjud.com.br/api/v1";
const headers = { Authorization: "Bearer vgl_sua_chave", "Content-Type": "application/json" };

const resp = await fetch(`${API}/consults`, {
  method: "POST", headers,
  body: JSON.stringify({ document: "529.982.247-25", courts: ["TJSP", "TJMG"] }),
});
const { data } = await resp.json();

if (resp.status === 200) {
  console.log("Cache hit:", data);
} else {
  const poll = async () => {
    const r = await fetch(`${API}/consults/${data.consult_id}`, { headers });
    const d = (await r.json()).data;
    if (d.status === "done") return d;
    await new Promise(r => setTimeout(r, 3000));
    return poll();
  };
  console.log("Done:", await poll());
}

Caso real — fintech integrou em 1 semana

Uma fintech de crédito consignado integrou a API do Vigilant no motor de aprovação em 5 dias úteis:

  • Dia 1: dev fez primeira chamada via Postman, entendeu cache + polling
  • Dia 2-3: integrou no backend (Python/FastAPI) — webhook do formulário de crédito chama API, resultado é gravado no banco
  • Dia 4: conectou ao motor de decisão como feature adicional (processo_count, has_execution_fiscal, has_criminal)
  • Dia 5: testes em staging + deploy em produção
  • Volume pós-deploy: 500 consultas/dia, custo ~R$ 50/dia, 4.2% de clientes flagged com risco judicial

Pra mais detalhes sobre integração em fintech, veja KYC judicial: por que dados judiciais são o próximo bureau.

Custos

OperaçãoCusto
1 tribunal consultadoR$ 0,10 (1 crédito)
1 CPF em 5 tribunaisR$ 0,50
1 CPF em 12 tribunaisR$ 1,20
force_refresh5x o custo normal (5 créditos/tribunal)
Cache hit (< 2 dias)Gratuito
Tribunal fora do arCrédito devolvido automaticamente

Sem mensalidade, sem contrato, sem mínimo. Créditos nunca expiram. Tabela completa em /pricing/.

Recursos pra integrar

Glossário

TermoDefinição
RESTArquitetura de API baseada em HTTP com recursos endereçáveis
Bearer tokenMecanismo de autenticação onde a API key é enviada no header Authorization
OpenAPIPadrão de documentação de APIs. Vigilant usa versão 3.1
RFC 7807Padrão de formato de erro HTTP (Problem Details)
PollingTécnica de consultar o resultado repetidamente até estar pronto
CacheResultado armazenado por 2 dias — consulta repetida é gratuita
force_refreshFlag que pula o cache e força scraping novo (5x custo)
ConsultUma requisição de pesquisa de 1 CPF em N tribunais
Court searchPesquisa individual de 1 tribunal dentro de um consult

Conclusão

A API do Vigilant resolve o problema de acesso unificado a dados judiciais brasileiros pra quem precisa integrar isso no próprio software. Sem scraping, sem captcha, sem manutenção de layout de tribunal. REST + JSON + OpenAPI 3.1 + RFC 7807 — padrões que qualquer dev conhece.

5 créditos grátis no cadastro. Primeira chamada em 5 minutos. Integração mínima em 2-4 horas.

Pra volume enterprise, rate limit dedicado e suporte técnico, vale conversar com a equipe em /fale-conosco/. Pra a camada comercial completa (soluções por segmento), veja soluções pra fintechs e developers.


5 créditos grátis no cadastro, sem cartão. Comece agora.

Perguntas frequentes

Tem SDK oficial pra Python, Node.js ou Go?

Não ainda. A API é REST + JSON pura, documentada em OpenAPI 3.1. Qualquer HTTP client funciona: requests (Python), fetch/axios (Node), net/http (Go), Req (Elixir). A spec OpenAPI está em vigilant.trackjud.com.br/api/openapi — se quiser, gere um client automaticamente com openapi-generator ou oapi-codegen. Pra testar chamadas antes de codificar, baixe nossa [Postman collection](/vigilant-api.postman_collection.json) com os 6 endpoints já configurados.

Tem ambiente de sandbox?

Não separado. A conta nova recebe 5 créditos grátis que funcionam como sandbox — mesma URL de produção, mesma API key, mesma resposta real. Sem ambiente fake com dados simulados. A vantagem é que o que funciona no teste funciona em produção sem nenhuma mudança de URL ou config.

Qual o rate limit?

Contas free têm rate limit por API key suficiente pra desenvolvimento e integração (~60 requests/min). Contratos enterprise negociam rate limit dedicado e bursting. Quando o limite é atingido, a API retorna HTTP 429 com header Retry-After indicando quantos segundos esperar. Na prática, o rate limit é irrelevante pra maioria dos casos porque a API é assíncrona — você cria a consulta (1 request), depois faz polling (1 request a cada 2-5s). O volume de requests é muito baixo mesmo com centenas de consultas.

A API retorna dados em tempo real ou com cache?

Depende. 3 cenários: (1) Cache fresco (< 2 dias): HTTP 200 imediato com dados armazenados, campo source='cache'. (2) Cache stale (≥ 2 dias): HTTP 200 com dados antigos + stale=true + refresh em background. (3) Sem cache: HTTP 202, consulta criada, fazer polling no consult_id até status='done'. O force_refresh=true pula o cache e sempre cria consulta nova (5x custo). Pra monitoramento, o cache de 2 dias reduz custo em 30-50% (CPFs sem mudança são servidos do cache gratuitamente).

Como o error handling funciona?

Todas as respostas de erro seguem RFC 7807 (Problem Details) com Content-Type application/problem+json. Campos padrão: type (URI do tipo de erro), title (human-readable), status (HTTP code), detail (explicação específica), instance (path da request). Pra erros de validação (422), tem campo extra errors com detalhes por campo. Códigos mais comuns: 400 (tribunal desconhecido), 401 (API key inválida), 402 (créditos insuficientes), 404 (consulta não encontrada), 422 (CPF inválido), 429 (rate limit). Trate pelo status code no seu código, use o detail pra log/debug.

Quanto tempo leva pra integrar?

Depende do escopo. Integração mínima (chamar API + exibir resultado): 2-4 horas pra dev que já conhece REST. Integração com monitoramento (polling + diff + alertas): 1-2 dias. Integração completa no motor de decisão (webhook + score judicial normalizado): 1-2 semanas. A Postman collection + documentação Scalar reduzem o tempo de onboarding — o dev consegue fazer a primeira chamada em 5 minutos.

Posso fazer consulta por CNPJ?

Sim. O campo document aceita CPF (11 dígitos) e CNPJ (14 dígitos), com ou sem máscara. Pra CNPJ, a API retorna processos onde a empresa é parte (autor ou réu), incluindo processos trabalhistas — útil pra auditoria de fornecedores. Validação mod-11 é feita automaticamente pra ambos.

O que acontece se um tribunal estiver fora do ar?

A API tem retry automático (até 3 tentativas por padrão). Se o tribunal continuar fora do ar após os retries, o court_search específico fica com status 'unavailable' e o crédito é devolvido automaticamente. Você pode chamar /reprocess depois pra retentar só os tribunais que falharam, sem reprocessar os que já completaram. O consult_id é preservado — o histórico de tentativas fica no mesmo registro.

Preciso de HTTPS? Aceita HTTP?

Somente HTTPS. Chamadas HTTP são rejeitadas. A API roda com TLS 1.2+ e certificate pinning não é necessário — o certificado é emitido por Let's Encrypt e renovado automaticamente. Se estiver atrás de proxy corporativo, garanta que o proxy não faz SSL inspection que quebre o certificado.

Artigos relacionados