Company Litigation History Search API
API To Search A Company's Court-Case History Across Indian Courts
The Company Litigation History Search API returns the court cases a company has been involved in, without adding it to a watchlist. Send a company name, with an optional registration number and address to sharpen matching, and get the first page of 100 cases in the same call.
Built for due diligence, onboarding, credit decisions and vendor screening, it can look for the company as petitioner, respondent or both, can be filtered by year and case status, and pages through large histories with a token. Results are kept for 7 days.
Built on certified infrastructure
CasePrimus.ai is operated by Pegadroid IQ Solutions Private Limited, the legal entity behind Attestr's products, which holds ISO/IEC 27001:2022 certification. Data is hosted in India (AWS Mumbai, ap-south-1) and every connection is encrypted in transit. See Trust & Compliance.
Key capabilities
The first page in one call
The start call returns up to 100 cases straight away, with a searchId and a nextPageToken.
Page through the full history
Pass the nextPageToken to read the next 100. A case is never returned twice.
Petitioner, respondent or both
Use partyType to choose which side the company must be on. The default is both.
Filter by year and status
Limit the search to cases filed between two years, and to pending or disposed cases.
Name variations
AI generates further spellings of the company name, and you can add up to 25 of your own.
Sharper matching
Add a registration number, such as a CIN, and an address to reduce false matches.
Safe to retry
Repeating a page request with the same token returns the same page, and a clientReference makes a repeated start call safe.
How it works
- 1
Start a search
Post the company's name, with any filters, to
POST /historical-search. You get the first 100 cases, asearchIdand anextPageToken. - 2
Page through the rest
Send the
nextPageTokenaspageTokentoGET /historical-search/{searchId}/resultsfor the next 100. - 3
Stop at the end
The history is complete when
nextPageTokenisnulland the status isCOMPLETE.
API definition
Start a historical search
Searches a company's court-case history without adding it to a watchlist, and returns the first page in the same call: 100 cases (fewer only when that is all there is), a searchId and a nextPageToken (null when there is nothing more). Cases come newest filing date first, and a case is never returned twice. If the page cannot be assembled within 60 seconds the call returns 503 with Retry-After and nothing is delivered. Send the same clientReference with the same request within 24 hours to get the same search and first page again. Asynchronous mode: send "mode": "ASYNC" to have the whole result set collected in the background. The call returns 202 with status RUNNING, and the status becomes COMPLETE or FAILED when it finishes; subscribe a webhook to historical_search.finished to be told, then read the results page by page. Asynchronous mode is available on some plans. Results are kept for 7 days. Requires historicalSearch.write.
Request URL
https://api.caseprimus.ai/api/caseprimus/v1/historical-searchRequest headers
| Type | Name | Value / description | Optional |
|---|---|---|---|
| String | Content-Type | application/json | Required |
| String | X-CasePrimus-Api-Key | Your API key: {apiKey} | Required |
No API key yet? See Authentication.
Input parameters
| Field | Description |
|---|---|
namestring Required | The company's name. 2 to 255 characters |
entityTypeenum Optional | BUSINESS only. A person is refused with PERSON_SEARCH_NOT_SUPPORTED. BUSINESS |
registrationNumberstring or null Optional | Optional, e.g. CIN. Sharpens matching. up to 64 characters |
locationstring or null Optional | Optional address. Sharpens matching. |
nameVariationsarray of string Optional | Other spellings of the name. Added to any generated ones. |
autoNameVariationsboolean Optional | Generate further spellings of the name (adds a few seconds to the first call). |
partyTypeenum Optional | The side the company must be on. PETITIONERRESPONDENTBOTH |
filtersobject Optional | Fixed for the life of the search. Applied by the data sources, so a narrower search costs less. |
fromYearinteger or null Optional | Cases filed in this year or later. minimum 1950 |
toYearinteger or null Optional | Cases filed in this year or earlier. minimum 1950 |
caseStatusenum Optional | ALLPENDINGDISPOSED |
clientReferencestring Optional | Your own reference. Also makes a repeated start call safe to retry. up to 50 characters |
modeenum Optional | SYNC (default) returns the first page now and you page through the rest. ASYNC collects every result in the background: the call returns 202 with the searchId and you are told when it is COMPLETE (see the endpoint description). ASYNC needs a plan that has it (per-search plans do); otherwise 403. SYNCASYNC |
Sample request
BASE="https://api.caseprimus.ai/api/caseprimus/v1" curl -X POST "$BASE/historical-search" \ -H "X-CasePrimus-Api-Key: $CASEPRIMUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Logistics Private Limited", "entityType": "BUSINESS", "registrationNumber": "U63090MH2012PTC123456", "partyType": "BOTH", "filters": { "caseStatus": "ALL" }, "clientReference": "vendor-onboarding-4821" }'
const BASE = "https://api.caseprimus.ai/api/caseprimus/v1"; const res = await fetch(BASE + "/historical-search", { method: "POST", headers: { "Content-Type": "application/json", "X-CasePrimus-Api-Key": process.env.CASEPRIMUS_API_KEY, }, body: JSON.stringify({ "name": "Acme Logistics Private Limited", "entityType": "BUSINESS", "registrationNumber": "U63090MH2012PTC123456", "partyType": "BOTH", "filters": { "caseStatus": "ALL" }, "clientReference": "vendor-onboarding-4821" }), }); const data = await res.json();
import os import requests BASE = "https://api.caseprimus.ai/api/caseprimus/v1" res = requests.request( "POST", BASE + "/historical-search", headers={"X-CasePrimus-Api-Key": os.environ["CASEPRIMUS_API_KEY"]}, json={ "name": "Acme Logistics Private Limited", "entityType": "BUSINESS", "registrationNumber": "U63090MH2012PTC123456", "partyType": "BOTH", "filters": { "caseStatus": "ALL", }, "clientReference": "vendor-onboarding-4821", }, ) data = res.json()
Responses
| 200 | The first page (mode SYNC). |
| 202 | Accepted (mode ASYNC). The search is RUNNING; there are no results yet. |
| 400 | Invalid input, filters or party type, or a person search. |
| 402 | The plan's search allowance is used up. |
| 403 | Caller lacks historicalSearch.write, or (mode ASYNC) asynchronous collection is not available on the plan. |
| 429 | Too many requests for this account, or (mode ASYNC) too many asynchronous searches still collecting. See Retry-After. |
| 503 | The page could not be assembled in time. Retry; nothing was delivered or charged. |
Response fields (HTTP 200)
| Field | Description |
|---|---|
searchIdstring | The id of this search. Use it to read further pages. |
modeenum | ASYNC: collected in the background (see POST /historical-search). SYNCASYNC |
statusenum | SYNC searches are ACTIVE, COMPLETE or EXPIRED. ASYNC searches are RUNNING, COMPLETE, FAILED or EXPIRED. ACTIVECOMPLETEEXPIREDRUNNINGFAILED |
namestring | The company name that was searched for. |
partyTypeenum | PETITIONERRESPONDENTBOTH |
filtersobject | The filters the search was started with. |
clientReferencestring or null | Your own reference, if you sent one. |
deliveredinteger | Results delivered so far. For a COMPLETE asynchronous search: all of them (reading its pages is free and repeatable). |
collectedinteger | ASYNC only. Results stored so far; final once COMPLETE. |
completedAtinteger or null | ASYNC only. Epoch ms the search finished (COMPLETE or FAILED); null while RUNNING. |
failureReasonstring | ASYNC only, present when FAILED: why, in words for a person. Nothing was charged. |
warningsarray of object | |
codeenum | RESULT_CAP_REACHEDSOURCE_UNAVAILABLE |
messagestring | |
createdAtinteger | Epoch ms. |
expiresAtinteger | Epoch ms. Results are deleted at this time. |
pageSizeinteger | The number of cases on a full page: 100. |
resultsarray of object | The cases on this page. |
caseRefstring | Stable id of the case: the same case has the same caseRef in every search. |
caseIdentifierobject or null | What identifies the case for a live lookup. Null when it cannot be established without a live check. |
identifierStatusenum | CONFIRMEDNEEDS_CONFIRMATION |
courtTypestring | DC, HC, SC, CC, NCLT, NCLAT, CESTAT, DRT, DRAT, GSTAT, ITAT, APTEL, NGT, SAT or OTHER. |
courtstring or null | The court the case is in. |
statestring or null | The state the court is in. |
districtstring or null | The district, for courts that have one. |
benchstring or null | The bench, for courts that have benches. |
caseTypestring or null | The court's short code for the type of case, for example WP. |
caseTypeNamestring or null | The full name of the case type, for example Writ Petition. |
caseNaturestring or null | The nature of the case, for example Civil. |
caseNumberstring or null | The case number as the court writes it. |
cnrNumberstring or null | Null when the case has no customer-visible CNR. |
filingNumberstring or null | The number the case was filed under. |
registrationNumberstring or null | The number the case was registered under. |
filingDatestring or null | YYYY-MM-DD. |
filingYearinteger or null | The year the case was filed. |
registrationDatestring or null | The date the case was registered. |
caseStatusstring or null | The case's status, for example PENDING. |
nextHearingDatestring or null | The date of the next hearing, if one is set. |
decisionDatestring or null | The date of the decision, for a decided case. |
natureOfDisposalstring or null | How the case was disposed of, for a decided case. |
petitionerstring or null | The petitioner named for the case. |
respondentstring or null | The respondent named for the case. |
partyRoleenum or null | The side the searched company is on. PETITIONERRESPONDENTBOTH |
matchedPartystring or null | The party that made this case match: the first party, on the side(s) searched, that carries the company's name or one of its variations, as the court wrote it (for example 'Acme Logistics Pvt. Ltd' when it is respondent 6 of 8). `petitioner` and `respondent` above are only the parties on the case's title line, so they may not include it. |
petitionersarray of string | Every petitioner, each once, in the court's order (placeholder entries such as 'Respondent' are left out). At most 25 - see `partyCountTruncated`. |
respondentsarray of string | Every respondent, each once, in the court's order. At most 25 - see `partyCountTruncated`. |
partyCountTruncatedboolean | True when either list was cut at 25. `matchedParty` is still named. |
nextPageTokenstring or null | Pass it to get the next page. Null when there is nothing more. |
{
"searchId": "CPHS0exampledemo0001",
"mode": "SYNC",
"status": "ACTIVE",
"name": "Acme Logistics Private Limited",
"partyType": "BOTH",
"filters": {
"caseStatus": "ALL"
},
"clientReference": "vendor-onboarding-4821",
"delivered": 100,
"warnings": [],
"createdAt": 1791600000000,
"expiresAt": 1792204800000,
"pageSize": 100,
"results": [
{
"caseRef": "CR0hc7f3a91e",
"caseIdentifier": {
"courtType": "HC",
"cnr": "KAHC010123452024"
},
"identifierStatus": "CONFIRMED",
"courtType": "HC",
"court": "High Court of Karnataka",
"state": "Karnataka",
"district": null,
"bench": "Bengaluru",
"caseType": "WP",
"caseTypeName": "Writ Petition",
"caseNature": "Civil",
"caseNumber": "WP/12345/2024",
"cnrNumber": "KAHC010123452024",
"filingNumber": "WP/45120/2024",
"registrationNumber": "WP/12345/2024",
"filingDate": "2024-03-18",
"filingYear": 2024,
"registrationDate": "2024-03-21",
"caseStatus": "PENDING",
"nextHearingDate": "2026-11-04",
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "K. Ramesh Babu",
"respondent": "The State of Karnataka",
"partyRole": "RESPONDENT",
"matchedParty": "Acme Logistics Pvt. Ltd",
"petitioners": [
"K. Ramesh Babu"
],
"respondents": [
"The State of Karnataka",
"The Principal Secretary, Revenue Department",
"The Deputy Commissioner",
"Acme Logistics Pvt. Ltd",
"Indian Oil Corporation Ltd"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0dc21b5c07",
"caseIdentifier": {
"courtType": "DC",
"cnr": "DLST010012342023"
},
"identifierStatus": "CONFIRMED",
"courtType": "DC",
"court": "Saket District Court, Delhi",
"state": "Delhi",
"district": "South Delhi",
"bench": null,
"caseType": "CS",
"caseTypeName": "Civil Suit (Commercial)",
"caseNature": "Civil",
"caseNumber": "CS/1234/2023",
"cnrNumber": "DLST010012342023",
"filingNumber": "1234/2023",
"registrationNumber": "CS/1234/2023",
"filingDate": "2023-06-02",
"filingYear": 2023,
"registrationDate": "2023-06-05",
"caseStatus": "DISPOSED",
"nextHearingDate": null,
"decisionDate": "2025-01-29",
"natureOfDisposal": "Decreed",
"petitioner": "BLUELINE FREIGHT SERVICES",
"respondent": "ACME LOGISTICS PRIVATE LIMITED",
"partyRole": "RESPONDENT",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"BLUELINE FREIGHT SERVICES"
],
"respondents": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0it88e0d412",
"caseIdentifier": null,
"identifierStatus": "NEEDS_CONFIRMATION",
"courtType": "ITAT",
"court": "Income Tax Appellate Tribunal, Mumbai",
"state": "Maharashtra",
"district": null,
"bench": "Mumbai",
"caseType": "ITA",
"caseTypeName": "Income Tax Appeal",
"caseNature": "Tax",
"caseNumber": "ITA/2210/MUM/2022",
"cnrNumber": null,
"filingNumber": null,
"registrationNumber": null,
"filingDate": "2022-09-14",
"filingYear": 2022,
"registrationDate": null,
"caseStatus": "PENDING",
"nextHearingDate": null,
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "ACME LOGISTICS PRIVATE LIMITED",
"respondent": "DCIT CIRCLE 4(1)",
"partyRole": "PETITIONER",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"respondents": [
"DCIT CIRCLE 4(1)"
],
"partyCountTruncated": false
}
],
"nextPageToken": "eyJzIjoiQ1BIUzBzYW5kYm94ZGVtbzAwMDEiLCJwIjoxMDB9.Qk3x9Wf2mT8aYb1c"
}{
"searchId": "CPHS0exampledemo0001",
"mode": "SYNC",
"status": "COMPLETE",
"name": "Acme Logistics Private Limited",
"partyType": "RESPONDENT",
"filters": {
"fromYear": 2020,
"caseStatus": "PENDING"
},
"clientReference": null,
"delivered": 2,
"warnings": [],
"createdAt": 1791600000000,
"expiresAt": 1792204800000,
"pageSize": 100,
"results": [
{
"caseRef": "CR0dc21b5c07",
"caseIdentifier": {
"courtType": "DC",
"cnr": "DLST010012342023"
},
"identifierStatus": "CONFIRMED",
"courtType": "DC",
"court": "Saket District Court, Delhi",
"state": "Delhi",
"district": "South Delhi",
"bench": null,
"caseType": "CS",
"caseTypeName": "Civil Suit (Commercial)",
"caseNature": "Civil",
"caseNumber": "CS/1234/2023",
"cnrNumber": "DLST010012342023",
"filingNumber": "1234/2023",
"registrationNumber": "CS/1234/2023",
"filingDate": "2023-06-02",
"filingYear": 2023,
"registrationDate": "2023-06-05",
"caseStatus": "PENDING",
"nextHearingDate": null,
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "BLUELINE FREIGHT SERVICES",
"respondent": "ACME LOGISTICS PRIVATE LIMITED",
"partyRole": "RESPONDENT",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"BLUELINE FREIGHT SERVICES"
],
"respondents": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0hc7f3a91e",
"caseIdentifier": {
"courtType": "HC",
"cnr": "KAHC010123452024"
},
"identifierStatus": "CONFIRMED",
"courtType": "HC",
"court": "High Court of Karnataka",
"state": "Karnataka",
"district": null,
"bench": "Bengaluru",
"caseType": "WP",
"caseTypeName": "Writ Petition",
"caseNature": "Civil",
"caseNumber": "WP/12345/2024",
"cnrNumber": "KAHC010123452024",
"filingNumber": "WP/45120/2024",
"registrationNumber": "WP/12345/2024",
"filingDate": "2024-03-18",
"filingYear": 2024,
"registrationDate": "2024-03-21",
"caseStatus": "PENDING",
"nextHearingDate": "2026-11-04",
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "K. Ramesh Babu",
"respondent": "The State of Karnataka",
"partyRole": "RESPONDENT",
"matchedParty": "Acme Logistics Pvt. Ltd",
"petitioners": [
"K. Ramesh Babu"
],
"respondents": [
"The State of Karnataka",
"The Principal Secretary, Revenue Department",
"The Deputy Commissioner",
"Acme Logistics Pvt. Ltd",
"Indian Oil Corporation Ltd"
],
"partyCountTruncated": false
}
],
"nextPageToken": null
}Response fields (HTTP 202)
| Field | Description |
|---|---|
searchIdstring | The id of this search. Use it to read further pages. |
modeenum | ASYNC: collected in the background (see POST /historical-search). SYNCASYNC |
statusenum | SYNC searches are ACTIVE, COMPLETE or EXPIRED. ASYNC searches are RUNNING, COMPLETE, FAILED or EXPIRED. ACTIVECOMPLETEEXPIREDRUNNINGFAILED |
namestring | The company name that was searched for. |
partyTypeenum | PETITIONERRESPONDENTBOTH |
filtersobject | The filters the search was started with. |
clientReferencestring or null | Your own reference, if you sent one. |
deliveredinteger | Results delivered so far. For a COMPLETE asynchronous search: all of them (reading its pages is free and repeatable). |
collectedinteger | ASYNC only. Results stored so far; final once COMPLETE. |
completedAtinteger or null | ASYNC only. Epoch ms the search finished (COMPLETE or FAILED); null while RUNNING. |
failureReasonstring | ASYNC only, present when FAILED: why, in words for a person. Nothing was charged. |
warningsarray of object | |
codeenum | RESULT_CAP_REACHEDSOURCE_UNAVAILABLE |
messagestring | |
createdAtinteger | Epoch ms. |
expiresAtinteger | Epoch ms. Results are deleted at this time. |
{
"searchId": "CPHS0exampleasync01",
"mode": "ASYNC",
"status": "RUNNING",
"name": "Acme Logistics Private Limited",
"partyType": "BOTH",
"filters": {
"caseStatus": "ALL"
},
"clientReference": "vendor-onboarding-4821",
"delivered": 0,
"warnings": [],
"createdAt": 1791936000000,
"expiresAt": 1792566000000,
"collected": 0,
"completedAt": null
}Next page of a search
Returns the next 100 cases after pageToken. Without a pageToken it returns the first page again. Every page has exactly 100 cases except the last, and a case is never returned twice. Repeating a call with the same token returns the same page, so it is safe to retry. The end is nextPageToken null with status COMPLETE. If the page cannot be assembled within 60 seconds the call returns 503 with Retry-After; retry with the same token. Another request already running on the same search returns 409. An asynchronous search can be read once it is COMPLETE. Searches older than 7 days return 410. Requires historicalSearch.read.
Request URL
https://api.caseprimus.ai/api/caseprimus/v1/historical-search/{searchId}/resultsRequest headers
| Type | Name | Value / description | Optional |
|---|---|---|---|
| String | X-CasePrimus-Api-Key | Your API key: {apiKey} | Required |
No API key yet? See Authentication.
Path and query parameters
| Name | In | Required | Description |
|---|---|---|---|
searchId | path | Required | The searchId returned when the search was started. |
pageToken | query | Optional | The nextPageToken of the previous page. Leave it out to get the FIRST page again (the page the start call returned has no token of its own). |
Sample request
BASE="https://api.caseprimus.ai/api/caseprimus/v1" curl "$BASE/historical-search/SEARCH_ID/results" \ -H "X-CasePrimus-Api-Key: $CASEPRIMUS_API_KEY"
const BASE = "https://api.caseprimus.ai/api/caseprimus/v1"; const res = await fetch(BASE + "/historical-search/SEARCH_ID/results", { method: "GET", headers: { "X-CasePrimus-Api-Key": process.env.CASEPRIMUS_API_KEY, }, }); const data = await res.json();
import os import requests BASE = "https://api.caseprimus.ai/api/caseprimus/v1" res = requests.request( "GET", BASE + "/historical-search/SEARCH_ID/results", headers={"X-CasePrimus-Api-Key": os.environ["CASEPRIMUS_API_KEY"]}, ) data = res.json()
Responses
| 200 | The page. |
| 400 | Invalid page token (a token from another search, altered, or beyond what has been delivered). |
| 402 | The plan's search allowance is used up. |
| 404 | Unknown or deleted search. |
| 409 | Another request on this search is still running. |
| 410 | The search has expired and its results were deleted. |
| 429 | Too many requests for this account. See Retry-After. |
| 503 | The page could not be assembled in time. Retry with the same token. |
Response fields (HTTP 200)
| Field | Description |
|---|---|
searchIdstring | The id of this search. Use it to read further pages. |
modeenum | ASYNC: collected in the background (see POST /historical-search). SYNCASYNC |
statusenum | SYNC searches are ACTIVE, COMPLETE or EXPIRED. ASYNC searches are RUNNING, COMPLETE, FAILED or EXPIRED. ACTIVECOMPLETEEXPIREDRUNNINGFAILED |
namestring | The company name that was searched for. |
partyTypeenum | PETITIONERRESPONDENTBOTH |
filtersobject | The filters the search was started with. |
clientReferencestring or null | Your own reference, if you sent one. |
deliveredinteger | Results delivered so far. For a COMPLETE asynchronous search: all of them (reading its pages is free and repeatable). |
collectedinteger | ASYNC only. Results stored so far; final once COMPLETE. |
completedAtinteger or null | ASYNC only. Epoch ms the search finished (COMPLETE or FAILED); null while RUNNING. |
failureReasonstring | ASYNC only, present when FAILED: why, in words for a person. Nothing was charged. |
warningsarray of object | |
codeenum | RESULT_CAP_REACHEDSOURCE_UNAVAILABLE |
messagestring | |
createdAtinteger | Epoch ms. |
expiresAtinteger | Epoch ms. Results are deleted at this time. |
pageSizeinteger | The number of cases on a full page: 100. |
resultsarray of object | The cases on this page. |
caseRefstring | Stable id of the case: the same case has the same caseRef in every search. |
caseIdentifierobject or null | What identifies the case for a live lookup. Null when it cannot be established without a live check. |
identifierStatusenum | CONFIRMEDNEEDS_CONFIRMATION |
courtTypestring | DC, HC, SC, CC, NCLT, NCLAT, CESTAT, DRT, DRAT, GSTAT, ITAT, APTEL, NGT, SAT or OTHER. |
courtstring or null | The court the case is in. |
statestring or null | The state the court is in. |
districtstring or null | The district, for courts that have one. |
benchstring or null | The bench, for courts that have benches. |
caseTypestring or null | The court's short code for the type of case, for example WP. |
caseTypeNamestring or null | The full name of the case type, for example Writ Petition. |
caseNaturestring or null | The nature of the case, for example Civil. |
caseNumberstring or null | The case number as the court writes it. |
cnrNumberstring or null | Null when the case has no customer-visible CNR. |
filingNumberstring or null | The number the case was filed under. |
registrationNumberstring or null | The number the case was registered under. |
filingDatestring or null | YYYY-MM-DD. |
filingYearinteger or null | The year the case was filed. |
registrationDatestring or null | The date the case was registered. |
caseStatusstring or null | The case's status, for example PENDING. |
nextHearingDatestring or null | The date of the next hearing, if one is set. |
decisionDatestring or null | The date of the decision, for a decided case. |
natureOfDisposalstring or null | How the case was disposed of, for a decided case. |
petitionerstring or null | The petitioner named for the case. |
respondentstring or null | The respondent named for the case. |
partyRoleenum or null | The side the searched company is on. PETITIONERRESPONDENTBOTH |
matchedPartystring or null | The party that made this case match: the first party, on the side(s) searched, that carries the company's name or one of its variations, as the court wrote it (for example 'Acme Logistics Pvt. Ltd' when it is respondent 6 of 8). `petitioner` and `respondent` above are only the parties on the case's title line, so they may not include it. |
petitionersarray of string | Every petitioner, each once, in the court's order (placeholder entries such as 'Respondent' are left out). At most 25 - see `partyCountTruncated`. |
respondentsarray of string | Every respondent, each once, in the court's order. At most 25 - see `partyCountTruncated`. |
partyCountTruncatedboolean | True when either list was cut at 25. `matchedParty` is still named. |
nextPageTokenstring or null | Pass it to get the next page. Null when there is nothing more. |
{
"searchId": "CPHS0exampledemo0001",
"mode": "SYNC",
"status": "ACTIVE",
"name": "Acme Logistics Private Limited",
"partyType": "BOTH",
"filters": {
"caseStatus": "ALL"
},
"clientReference": "vendor-onboarding-4821",
"delivered": 100,
"warnings": [],
"createdAt": 1791600000000,
"expiresAt": 1792204800000,
"pageSize": 100,
"results": [
{
"caseRef": "CR0hc7f3a91e",
"caseIdentifier": {
"courtType": "HC",
"cnr": "KAHC010123452024"
},
"identifierStatus": "CONFIRMED",
"courtType": "HC",
"court": "High Court of Karnataka",
"state": "Karnataka",
"district": null,
"bench": "Bengaluru",
"caseType": "WP",
"caseTypeName": "Writ Petition",
"caseNature": "Civil",
"caseNumber": "WP/12345/2024",
"cnrNumber": "KAHC010123452024",
"filingNumber": "WP/45120/2024",
"registrationNumber": "WP/12345/2024",
"filingDate": "2024-03-18",
"filingYear": 2024,
"registrationDate": "2024-03-21",
"caseStatus": "PENDING",
"nextHearingDate": "2026-11-04",
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "K. Ramesh Babu",
"respondent": "The State of Karnataka",
"partyRole": "RESPONDENT",
"matchedParty": "Acme Logistics Pvt. Ltd",
"petitioners": [
"K. Ramesh Babu"
],
"respondents": [
"The State of Karnataka",
"The Principal Secretary, Revenue Department",
"The Deputy Commissioner",
"Acme Logistics Pvt. Ltd",
"Indian Oil Corporation Ltd"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0dc21b5c07",
"caseIdentifier": {
"courtType": "DC",
"cnr": "DLST010012342023"
},
"identifierStatus": "CONFIRMED",
"courtType": "DC",
"court": "Saket District Court, Delhi",
"state": "Delhi",
"district": "South Delhi",
"bench": null,
"caseType": "CS",
"caseTypeName": "Civil Suit (Commercial)",
"caseNature": "Civil",
"caseNumber": "CS/1234/2023",
"cnrNumber": "DLST010012342023",
"filingNumber": "1234/2023",
"registrationNumber": "CS/1234/2023",
"filingDate": "2023-06-02",
"filingYear": 2023,
"registrationDate": "2023-06-05",
"caseStatus": "DISPOSED",
"nextHearingDate": null,
"decisionDate": "2025-01-29",
"natureOfDisposal": "Decreed",
"petitioner": "BLUELINE FREIGHT SERVICES",
"respondent": "ACME LOGISTICS PRIVATE LIMITED",
"partyRole": "RESPONDENT",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"BLUELINE FREIGHT SERVICES"
],
"respondents": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0it88e0d412",
"caseIdentifier": null,
"identifierStatus": "NEEDS_CONFIRMATION",
"courtType": "ITAT",
"court": "Income Tax Appellate Tribunal, Mumbai",
"state": "Maharashtra",
"district": null,
"bench": "Mumbai",
"caseType": "ITA",
"caseTypeName": "Income Tax Appeal",
"caseNature": "Tax",
"caseNumber": "ITA/2210/MUM/2022",
"cnrNumber": null,
"filingNumber": null,
"registrationNumber": null,
"filingDate": "2022-09-14",
"filingYear": 2022,
"registrationDate": null,
"caseStatus": "PENDING",
"nextHearingDate": null,
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "ACME LOGISTICS PRIVATE LIMITED",
"respondent": "DCIT CIRCLE 4(1)",
"partyRole": "PETITIONER",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"respondents": [
"DCIT CIRCLE 4(1)"
],
"partyCountTruncated": false
}
],
"nextPageToken": "eyJzIjoiQ1BIUzBzYW5kYm94ZGVtbzAwMDEiLCJwIjoxMDB9.Qk3x9Wf2mT8aYb1c"
}{
"searchId": "CPHS0exampledemo0001",
"mode": "SYNC",
"status": "ACTIVE",
"name": "Acme Logistics Private Limited",
"partyType": "BOTH",
"filters": {
"caseStatus": "ALL"
},
"clientReference": "vendor-onboarding-4821",
"delivered": 200,
"warnings": [],
"createdAt": 1791600000000,
"expiresAt": 1792204800000,
"pageSize": 100,
"results": [
{
"caseRef": "CR0dc21b5c07",
"caseIdentifier": {
"courtType": "DC",
"cnr": "DLST010012342023"
},
"identifierStatus": "CONFIRMED",
"courtType": "DC",
"court": "Saket District Court, Delhi",
"state": "Delhi",
"district": "South Delhi",
"bench": null,
"caseType": "CS",
"caseTypeName": "Civil Suit (Commercial)",
"caseNature": "Civil",
"caseNumber": "CS/1234/2023",
"cnrNumber": "DLST010012342023",
"filingNumber": "1234/2023",
"registrationNumber": "CS/1234/2023",
"filingDate": "2023-06-02",
"filingYear": 2023,
"registrationDate": "2023-06-05",
"caseStatus": "DISPOSED",
"nextHearingDate": null,
"decisionDate": "2025-01-29",
"natureOfDisposal": "Decreed",
"petitioner": "BLUELINE FREIGHT SERVICES",
"respondent": "ACME LOGISTICS PRIVATE LIMITED",
"partyRole": "RESPONDENT",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"BLUELINE FREIGHT SERVICES"
],
"respondents": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0it88e0d412",
"caseIdentifier": null,
"identifierStatus": "NEEDS_CONFIRMATION",
"courtType": "ITAT",
"court": "Income Tax Appellate Tribunal, Mumbai",
"state": "Maharashtra",
"district": null,
"bench": "Mumbai",
"caseType": "ITA",
"caseTypeName": "Income Tax Appeal",
"caseNature": "Tax",
"caseNumber": "ITA/2210/MUM/2022",
"cnrNumber": null,
"filingNumber": null,
"registrationNumber": null,
"filingDate": "2022-09-14",
"filingYear": 2022,
"registrationDate": null,
"caseStatus": "PENDING",
"nextHearingDate": null,
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "ACME LOGISTICS PRIVATE LIMITED",
"respondent": "DCIT CIRCLE 4(1)",
"partyRole": "PETITIONER",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"respondents": [
"DCIT CIRCLE 4(1)"
],
"partyCountTruncated": false
},
{
"caseRef": "CR0hc7f3a91e",
"caseIdentifier": {
"courtType": "HC",
"cnr": "KAHC010123452024"
},
"identifierStatus": "CONFIRMED",
"courtType": "HC",
"court": "High Court of Karnataka",
"state": "Karnataka",
"district": null,
"bench": "Bengaluru",
"caseType": "WP",
"caseTypeName": "Writ Petition",
"caseNature": "Civil",
"caseNumber": "WP/12345/2024",
"cnrNumber": "KAHC010123452024",
"filingNumber": "WP/45120/2024",
"registrationNumber": "WP/12345/2024",
"filingDate": "2024-03-18",
"filingYear": 2024,
"registrationDate": "2024-03-21",
"caseStatus": "PENDING",
"nextHearingDate": "2026-11-04",
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "K. Ramesh Babu",
"respondent": "The State of Karnataka",
"partyRole": "RESPONDENT",
"matchedParty": "Acme Logistics Pvt. Ltd",
"petitioners": [
"K. Ramesh Babu"
],
"respondents": [
"The State of Karnataka",
"The Principal Secretary, Revenue Department",
"The Deputy Commissioner",
"Acme Logistics Pvt. Ltd",
"Indian Oil Corporation Ltd"
],
"partyCountTruncated": false
}
],
"nextPageToken": "eyJzIjoiQ1BIUzBzYW5kYm94ZGVtbzAwMDEiLCJwIjoyMDB9.Hs7d2Qe9Lm4TzYk1"
}{
"searchId": "CPHS0exampledemo0001",
"mode": "SYNC",
"status": "COMPLETE",
"name": "Acme Logistics Private Limited",
"partyType": "BOTH",
"filters": {
"caseStatus": "ALL"
},
"clientReference": "vendor-onboarding-4821",
"delivered": 137,
"warnings": [],
"createdAt": 1791600000000,
"expiresAt": 1792204800000,
"pageSize": 100,
"results": [
{
"caseRef": "CR0it88e0d412",
"caseIdentifier": null,
"identifierStatus": "NEEDS_CONFIRMATION",
"courtType": "ITAT",
"court": "Income Tax Appellate Tribunal, Mumbai",
"state": "Maharashtra",
"district": null,
"bench": "Mumbai",
"caseType": "ITA",
"caseTypeName": "Income Tax Appeal",
"caseNature": "Tax",
"caseNumber": "ITA/2210/MUM/2022",
"cnrNumber": null,
"filingNumber": null,
"registrationNumber": null,
"filingDate": "2022-09-14",
"filingYear": 2022,
"registrationDate": null,
"caseStatus": "PENDING",
"nextHearingDate": null,
"decisionDate": null,
"natureOfDisposal": null,
"petitioner": "ACME LOGISTICS PRIVATE LIMITED",
"respondent": "DCIT CIRCLE 4(1)",
"partyRole": "PETITIONER",
"matchedParty": "ACME LOGISTICS PRIVATE LIMITED",
"petitioners": [
"ACME LOGISTICS PRIVATE LIMITED"
],
"respondents": [
"DCIT CIRCLE 4(1)"
],
"partyCountTruncated": false
}
],
"nextPageToken": null
}Filters and options
These request fields control what the search looks for. Filters are fixed for the life of the search.
| Field | Values | Default |
|---|---|---|
partyType | PETITIONER, RESPONDENT or BOTH | BOTH |
filters.fromYear | A year, 1950 or later. Cases filed in this year or later. | None |
filters.toYear | A year, 1950 or later. Cases filed in this year or earlier. | None |
filters.caseStatus | ALL, PENDING or DISPOSED | ALL |
nameVariations | Up to 25 other spellings of the name | None |
autoNameVariations | true or false: generate further spellings of the name | true |
mode | SYNC or ASYNC. Asynchronous mode is available on some plans. | SYNC |
Paging and retries
Exactly 100 per page
Every page has 100 cases except the last, and a short or empty page is never returned while more exist.
Safe to repeat
Repeating a page request with the same token returns the same page again, so it is safe to retry.
Slow pages
If a page cannot be assembled within 60 seconds you get 503 with Retry-After. Nothing is delivered, so retry with the same token.
Retention
A search and its results are kept for 7 days. After that, requests return 410.
Errors
Errors use the HTTP status and a JSON body with a stable numeric code. These are the errors documented for the Company Litigation History Search API. The full format, and the limits that apply to every call, are on Rate limits & errors.
| Status | Code | Message |
|---|---|---|
| 400 | 60405 | Real-time court search is only available for company entities - add cases for a person entity manually |
| 400 | 61453 | The page token is not valid for this search |
| 400 | 61454 | The search filters are not valid |
| 402 | 61455 | Your plan's search allowance has been used up |
| 403 | 61456 | No data source is enabled for this account |
| 403 | 61465 | Asynchronous collection is not available on your plan. Page through the results with a normal search instead |
| 404 | 61449 | This search was not found |
| 409 | 61451 | Another request on this search is still running. Wait for it to finish, then retry |
| 409 | 61467 | This search is still being collected. Its results can be read once its status is COMPLETE |
| 410 | 61450 | This search is older than its retention period and its results have been deleted. Start a new search |
| 429 | 61457 | Too many requests - slow down and retry after the indicated time |
| 429 | 61466 | Too many of your searches are still being collected. Wait for one to finish, then start another |
| 503 | 61452 | This page could not be assembled in time. Nothing was delivered or charged - retry with the same page token |
Frequently asked questions
Can I search for a person?
No. The Company Litigation History Search API is for companies (entityType BUSINESS). A person search is refused. To monitor a person, use the Litigation Watchlist API.
How many cases does each call return?
100. The start call returns the first 100 cases, and each further page returns the next 100. The last page can be shorter.
How do I get the rest of the results?
Pass the nextPageToken from the previous response as pageToken to the results endpoint. You have reached the end when nextPageToken is null and the status is COMPLETE.
How long are results kept?
7 days. After that the search and its results are deleted and requests return 410. Start a new search to get fresh results.
What if a page takes too long?
If a page cannot be assembled within 60 seconds, the call returns 503 with a Retry-After header and nothing is delivered. Retry with the same token.
Is this the same as monitoring?
No. A history search is a one-time look at a company's past cases. To be alerted when new cases are filed, add the company to a watchlist with the Litigation Watchlist API.