Documentation Index
Fetch the complete documentation index at: https://docs.judit.io/llms.txt
Use this file to discover all available pages before exploring further.
New CNPJ format (IN 2229/24)Judit already accepts the new alphanumeric CNPJ format in compliance with the Brazilian Federal Revenue Normative Instruction No. 2229/2024.
- Zero effort: no changes are required in your integration.
- Test environment: use the document
A1B2C3D4/E5F6-68to validate the flow and receive a mock lawsuit in response.
🤖 Endpoint:POST https://lawsuits.production.judit.io/lawsuits. The response is synchronous (HTTP 200 with the full JSON). This route does not query the court — it reads Judit’s datalake, so there may be a small lag versus the most current state of the lawsuit. If you need real-time data, usePOST /requests(async).
Synchronous vs. asynchronous — which one?
| Trait | Synchronous (Hot Storage) | Asynchronous (Requests) |
|---|---|---|
| Latency | ms (immediate) | seconds to minutes |
| Source | Judit datalake (cache) | Live court |
| Freshness | Last Judit collection | Court state right now |
| Webhook | N/A | Yes, optional |
| Cost | Lower | Higher |
| Best for | Quick validation, dashboards, interactive search | Due diligence, forced refresh, on-demand fetch |
When to use
Real-time validation
Onboarding, KYC, autocomplete — whenever you need an immediate response for the UI.
Interactive dashboards
Dashboards and BI listing lawsuits linked to a customer without forcing a court refresh.
Risk pre-filtering
Before firing an expensive async query, find out quickly whether it’s worth it.
Counts and aggregates
Combine with
/lawsuits/count and /lawsuits/synthetic for analytics.Step 1: Create the synchronous query (POST)
To start the synchronous query, make aPOST request with the desired document.
POST https://lawsuits.production.judit.io/lawsuits
Synchronous query examples
Payload parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
search.search_type | string | Yes | Entity type: "cpf", "cnpj", "oab" or "name". |
search.search_key | string | Yes | Value to search (e.g. "999.999.999-99", "John Smith"). |
search.search_params.filter | object | No | Structural filters (court, amount, classes, parties, dates). Same shape as the historical query. |
Most common filters (search_params.filter)
The synchronous query accepts the same filters as the historical query. Practical examples:
Full list of accepted courts: see Historical-query filters.
Request example (POST)
Step 2: Read the response
The response comes in the body of the same POST (no polling). Main fields:| Field | Type | Description |
|---|---|---|
has_lawsuits | boolean | true when lawsuits were found in the datalake. |
request_id | string | Unique query identifier — useful for auditing. |
response_data | array | List of lawsuits. Each item follows the Lawsuit Schema. |
response_data[].phase | string | Current lawsuit phase — see table below. |
response_data[].status | string | Current lawsuit status — see table below. |
Full response example
See response example
See response example
The response will be a JSON object with the data:
Full structure of each response_data item: see Lawsuit Schema.
Common errors
| HTTP | When it happens | How to handle |
|---|---|---|
400 | Invalid search_type or search_key / wrong format. | Validate the document before sending (e.g. 11 digits for CPF, 14 for CNPJ). |
401 | API Key missing or invalid. | Check the api-key header. |
404 | No lawsuits found. The response still comes with has_lawsuits: false. | Treat as no judicial exposure — not necessarily an error. |
429 | Rate limit exceeded (500 req/min). | Implement exponential backoff reading X-RateLimit-Reset. |
500 | Transient internal error. | Retry with backoff. If it persists, open a ticket with support. |
Next steps
- For listing and filtering with depth (advanced filters, side, classes): Historical Query by document.
- For aggregation (counts by court/area/phase): Grouped Query.
- To force real-time read at the court: Asynchronous Query.