Skip to main content

escavador-api

A Python library for interacting with the Escavador API, providing access to Brazilian legal process data, documents, and monitoring services.

Objective and motivation

Python client for the Escavador HTTP API: Brazilian legal process data, documents, AI summaries and monitoring services.

Why this exists

Escavador exposes court and process endpoints over HTTP with auth tokens and credit billing. This library wraps those calls with CNJ validation, pagination, retries, and typed exceptions so Murabei (and other) services do not reimplement the same client logic.

How it is used

Import EscavadorAPI from escavador_api.data, pass an Escavador auth token, and call methods for process lookup, documents, updates, monitoring, related parties, and credits. Typical consumers are ETL workers and internal tools that need structured process data.

Scope

In scope: Escavador REST client behavior (requests, retries, error mapping). Out of scope: Escavador account management, credit purchase, and downstream storage or ETL orchestration.

Features

  • Process Information: Retrieve detailed information about legal processes using CNJ numbers
  • Process Updates: Get chronological update history of legal processes
  • Court Listing: List available courts for searches
  • Document Access: Download public and restricted process documents
  • AI Summaries: Generate and retrieve AI-powered process summaries
  • Process Monitoring: Set up monitoring for new processes or updates to existing processes
  • Related Processes: List processes linked to a person or a company by CPF, CNPJ, or name
  • Credit Management: Check API usage credits and limits
  • Court Data Refresh: Request fresh data updates from court sources
  • Retry Logic: GET and POST retry connection errors and timeouts (5 attempts, 3 seconds apart)

Installation

From Source

git clone https://github.com/Murabei-OpenSource-Codes/escavador-api.git
cd escavador-api
pip install .

Requirements

  • Python >= 3.12
  • requests >= 2.32.5
  • tenacity >= 9.1.4

Configuration

Read when the client is constructed:

  • ESCAVADOR_API__REQUEST_TIMEOUT: request timeout in seconds. Defaults to 60.
  • ESCAVADOR_API__PROXY_URL: proxy URL for HTTP and HTTPS. If unset, no proxy is used.

The auth token is an argument of EscavadorAPI. The library does not read it from the environment.

Quick Start

from escavador_api.data import EscavadorAPI

# Initialize with your API token
api = EscavadorAPI("your_auth_token_here")

# Check credit balance
balance = api.get_credit_balance()
print(balance)

# Get process information. The number must be a valid CNJ.
process_info = api.get_process_info("00000016620260000001")
print(process_info)

API Reference

Initialization

EscavadorAPI(escavador_auth_token: str)

Parameters:

  • escavador_auth_token (str): Your Escavador API authentication token

Core Methods

Methods marked (paid) consume Escavador API credits.

Credit Management

get_credit_balance() -> dict

Returns current credit balance and monthly limits.

Courts

get_courts() -> dict

List all available courts for searches in Escavador.

Process Information

get_process_info(process_number: str) -> dict

Retrieve basic process information. (paid)

Parameters:

  • process_number (str): CNJ process number (20 digits, punctuation optional)
get_process_updates(process_number: str)

Yields one dictionary per process update. (paid)

get_process_public_documents(process_number: str)

Yields one dictionary per public document. (paid)

get_process_all_documents(process_number: str)

Yields one dictionary per document, including restricted documents when the caller is authorized. (paid)

Process Updates

request_process_update_public(process_number: str) -> dict

Request update of public process information. (paid)

request_process_update_full(
    process_number: str,
    auth_username: str | None = None,
    auth_password: str | None = None,
    certificate_id: int | None = None,
    use_certificate: bool = False,
) -> dict

Request full update including restricted documents. (paid)

get_process_update_status(process_number: str) -> dict

Check the status of an update request. (paid)

Document Downloads

download_process_file(process_number: str, file_key: str) -> bytes

Download a specific document as PDF bytes. (paid)

AI Summaries

request_ai_summary(process_number: str) -> dict

Request generation of an AI summary. (paid)

get_ai_summary_status(process_number: str) -> dict

Check AI summary generation status.

get_ai_summary(process_number: str) -> dict

Retrieve the generated AI summary. (paid)

get_related_processes(
    cpf_cnpj: str | None = None,
    nome: str | None = None,
    ordena_por: str = "data_inicio",
    ordem: str = "desc",
    limit: Literal[20, 50, 100] = 100,
    tribunais: list[str] | None = None,
    incluir_homonimos: bool | None = None,
    incluir_mesma_raiz_cnpj: bool | None = None,
    polo: Literal["ATIVO", "PASSIVO", "ADVOGADO", "OUTROS"] | None = None,
    status: Literal["ATIVO", "INATIVO"] | None = None,
    data_minima: str | None = None,
    data_maxima: str | None = None,
    assuntos_codigos_cnj: list[int] | None = None,
    classes_codigos_cnj: list[int] | None = None,
    materias_codigos_cnj: list[int] | None = None,
    valor_causa_minimo: float | None = None,
    valor_causa_maximo: float | None = None,
    envolvidos_relacionados: list[str] | None = None,
) -> list[dict]

List processes for a person or a company. cpf_cnpj or nome is required. Other arguments are optional filters. Raises EscavadorAPIInvalidParametersException when both identifiers are missing.

Monitoring

New Process Monitoring

create_monitoring_new_process(
    keyword: str,
    keyword_variations: list[str] | None = None,
    aux_keywords: list[KeywordDict] | None = None,
    courts: list[str] | None = None,
) -> dict

Create monitoring for new processes matching criteria.

list_monitoring_new_process()

Yields one dictionary per new-process monitoring.

get_monitoring_new_process(monitoring_id: int) -> dict

Get details of a specific monitoring.

edit_monitoring_new_process(
    monitoring_id: int,
    keyword_variations: list[str] | None = None,
    aux_keywords: list[KeywordDict] | None = None,
    courts: list[str] | None = None,
) -> dict

Edit an existing monitoring.

delete_monitoring_new_process(monitoring_id: int) -> bool

Delete a monitoring.

get_results_monitoring_new_process(monitoring_id: int)

Yields one dictionary per process found by the monitoring.

Existing Process Monitoring

create_monitoring_existing_process(
    process_number: str,
    court: str | None = None,
    frequency: str | None = None,
) -> dict

Monitor updates to an existing process.

list_monitoring_existing_process()

Yields one dictionary per existing-process monitoring.

get_monitoring_existing_process(monitoring_id: int) -> dict

Get monitoring details.

delete_monitoring_existing_process(monitoring_id: int) -> bool

Delete monitoring.

Error Handling

The library provides specific exception types:

  • EscavadorAPIException: Base error. Carries message and payload.
  • EscavadorAPIAuthenticationError: The auth token is empty.
  • EscavadorAPIInvalidDocumentException: The process number is not a valid CNJ number.
  • EscavadorAPIInvalidParametersException: A call is missing a required argument, such as both cpf_cnpj and nome.
  • EscavadorAPIProblemAPIException: The Escavador API returned an HTTP error, or a monitoring call failed local checks.
  • EscavadorAPIUnmappedErrorException: An unexpected error during a request.

Retry Logic

get, get_binary, and post retry network failures. delete and patch do not.

  • Attempts: 5 (stop_after_attempt)
  • Delay: 3 seconds between attempts
  • Retried errors: requests.ConnectionError and requests.Timeout
  • Not retried: Validation errors and HTTP error responses

Process Number Format

Process numbers must follow the Brazilian CNJ (Conselho Nacional de Justiça) format:

  • 20 digits total
  • Format: NNNNNNN-DD.AAAA.J.TR.OOOO

The library automatically validates process numbers and accepts them with or without punctuation.

Authentication

To use the Escavador API, you need:

  1. An Escavador account
  2. An API authentication token
  3. Sufficient credits for API calls

For restricted documents, additional authentication may be required (username/password or digital certificate).

Development

Setup

# Install dependencies
pip install -e .

# Run tests
python -m unittest discover -s src/escavador_api/tests

# Build package
./build.sh

Testing

Tests use unittest and call the live Escavador API. Set:

  • ESCAVADOR_AUTH_TOKEN: API token passed into EscavadorAPI
  • TEST_PROCESS_NUMBER: A valid CNJ number for process tests
  • TEST_CPF_NUMBER: A CPF for related-process tests
export ESCAVADOR_AUTH_TOKEN="your_token"
export TEST_PROCESS_NUMBER="process_number"
export TEST_CPF_NUMBER="cpf"
python -m unittest discover -s src/escavador_api/tests

License

BSD 3-Clause License - see LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

Support

For issues and questions:

Metadata

Release files for escavador-api 0.1.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for escavador-api 0.1.11
File Size Uploaded Provenance
escavador_api-0.1.11.tar.gz 18.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for escavador-api 0.1.11
File Interpreter ABI Platform
escavador_api-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 38.6 kB

Release files / escavador_api-0.1.11.tar.gz

Download URL escavador_api-0.1.11.tar.gz
Size 18.5 kB
Tags Source
SHA-256 checksum
How to use checksums
28c718bc613572c59aef6d464c4fa40d3a65b15225c383f5d4358666935165a6
BLAKE2b-256 checksum
How to use checksums
9962bbfabc6cad1145bd82a2c3999ff5dc1c5f6545b91921885b3d3a1615e723
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.5.1 CPython/3.12.15 Linux/6.17.0-1022-azure

Release files / escavador_api-0.1.11-py3-none-any.whl

Download URL escavador_api-0.1.11-py3-none-any.whl
Size 20.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
11242b57c1136f760e40fc8468480a16137498477b0933cc996045f4464fcad4
BLAKE2b-256 checksum
How to use checksums
e6ae040dcc8440c1aa1869477dcaf397d0554909e607c4a7bc484bb49a9fe394
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.5.1 CPython/3.12.15 Linux/6.17.0-1022-azure

Security for escavador-api 0.1.11

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page