Court Case and FIR Check Retrieve API
Introduction
The Court Case and FIR API simplifies the process of finding and retrieving court cases and FIR information linked to an individual. By consolidating both court record searches and FIR checks into a single, unified endpoint, this API ensures easy integration into your systems while offering comprehensive insights into the legal history of the entities you are interested in. This API covers cases across district courts, session courts, High courts, Supreme court and Tribunals (like MACT) and FIRs
To use the service, you can initiate a query through the Initiate API by providing the relevant individual details, and subsequently fetch the results using the Retrieve API
Key Features
- Unified Endpoint for Court & FIR Data: Streamline your workflows by fetching both court case records and FIR details through a single API integration.
- Comprehensive Court Coverage: Access legal records across all levels of the judiciary, including District Courts, Session Courts, Tribunals, High Courts, and the Supreme Court.
- Advanced Entity Resolution Algorithm: Public court and FIR data is notoriously incomplete. To solve this, our API leverages proprietary matching algorithms to accurately filter and identify the right individuals using a combination of input.
Common Use Cases
- Background Verification (BGV): Seamlessly integrate into HR tech platforms to conduct thorough criminal and civil background checks on prospective employees.
- Tenant Screening: Empower property managers and landlords to verify the legal history of potential tenants before signing lease agreements.
- Vendor & Partner Due Diligence: Assess the legal standing and risk profile of individual contractors, vendors, or business partners prior to onboarding.
- Risk & Compliance: Enhance Know Your Customer (KYC) and risk assessment models for lending, insurance, or financial services by surfacing undisclosed legal liabilities.
API Description
API cURL
curl --location 'https://api-preproduction.signzy.app/api/v3/court-fir/retrieve' \
--header 'Content-Type: application/json' \
--header 'Authorization: (Auth Token)' \
--data-raw '{
"requestId": "<request_id_from_initiate_api>"
}'Input Table
Parameters | Required | Type | Description |
|---|---|---|---|
requestId | Yes | String | The requestId returned by the Initiate API: 24 characters (0-9, a-f). Only the account that started the check can retrieve it. |
Check Status
status | code | What to do |
|---|---|---|
IN_PROGRESS | S002 (HTTP 200) | The search is still running. Call again in 15 seconds or more, or wait for the callback. |
COMPLETED | S001 (HTTP 200) | The result is ready in summary and records. |
FAILED | E401 (HTTP 409) | The search could not be completed: the court records source failed, or gave no result within about 30 minutes. Start a new check. |
API Output
COMPLETED
{
"result": {
"requestId": "6718c2f4a1b2c3d4e5f60718",
"clientRefId": "LOAN-2026-000123",
"status": "FAILED",
"createdAt": "2026-10-21T10:15:30.120Z",
"completedAt": "2026-10-21T10:47:31.006Z",
"summary": null,
"records": []
},
"reason": "Error in Fetching Data from Upstream",
"code": "E401"
}Output Table
Category | Subcategory | Description | Type |
|---|---|---|---|
result | — | The check. | Object |
reason | — | Request Successful (COMPLETED), Data in Process (IN_PROGRESS) or Error in Fetching Data from Upstream (FAILED). | String |
code | — | S001 (COMPLETED), S002 (IN_PROGRESS) or E401 (FAILED). | String |
result | requestId | ID of the check. | String |
result | clientRefId | The clientRefId sent at initiate; "" when none was sent. | String |
result | status | IN_PROGRESS, COMPLETED or FAILED. | String |
result | createdAt | When the check was started (ISO 8601, UTC). | String |
result | completedAt | When the check finished (ISO 8601, UTC); "" while IN_PROGRESS. | String |
result | summary | Verdict, risk band and counts. null until the check is COMPLETED. | Object |
result | records | The records that match the person (CONFIRMED and PROBABLE). [] until the check is COMPLETED, or when none matches. | Array |
summary | verdict | RECORD_FOUND, POSSIBLE_RECORD or NO_RECORD_FOUND. See Verdict below. | String |
summary | riskBand | The highest riskBand among the CONFIRMED records, or among the PROBABLE records when none is confirmed. "" when no record is returned or none has a risk band. | String |
summary | counts | Record counts. | Object |
summary.counts | total | Records the search found: confirmed + probable. | Number |
summary.counts | confirmed | Records returned as CONFIRMED. | Number |
summary.counts | probable | Records returned as PROBABLE. | Number |
summary.counts | byRecordType | Returned records by type: COURT_CASE, FIR. | Object |
summary.counts | byCategory | Returned records by category: CRIMINAL, CIVIL, OTHER. A record without a category counts as OTHER. | Object |
summary.counts | byStage | Returned records by stage: PENDING, DISPOSED, UNDER_INVESTIGATION, CLOSED, UNKNOWN. | Object |
records | recordType | COURT_CASE or FIR. | String |
records | recordId | Signzy's ID for the record, 20 characters. The same case always gets the same recordId. | String |
records | identifiers | Case identifiers. | Object |
records.identifiers | cnr | eCourts CNR number of a court case; "" when not available. | String |
records.identifiers | caseYear | Year of a court case, for example "2021"; "" for FIRs or when not known. | String |
records | court | The court. Empty values for FIRs. | Object |
records.court | level | DISTRICT, HIGH_COURT, SUPREME_COURT, TRIBUNAL, CONSUMER or OTHER; "" for FIRs. | String |
records.court | name | Name of the court; "" for FIRs. | String |
records.court | state | State of a district or high court, read from the CNR; "" otherwise. | String |
records.court | stateCode | Two-letter state code from the CNR, for example "DL"; "" otherwise. | String |
records | fir | FIR details. | Object |
records.fir | firNumber | FIR number. Court cases filed by the police also carry the FIR they arise from. "" when not available. | String |
records.fir | firYear | Year of the FIR (FIR records); "" otherwise. | String |
records.fir | policeStation | Police station (FIR records); "" otherwise. | String |
records | category | CRIMINAL, CIVIL or OTHER; "" when not given. | String |
records | riskBand | The source's risk rating for the case: NO_RISK, LOW_RISK, AVERAGE_RISK, HIGH_RISK or VERY_HIGH_RISK; "" when not rated. | String |
records | parties | The parties to the case. | Array |
records.parties | partyId | p1 is the party matched against the person; p2 is the other side, when the record names it. | String |
records.parties | name | Party name. | String |
records.parties | side | RESPONDENT or PETITIONER; "" when not known. | String |
records.parties | relation | The party's relative: type is FATHER when a father's name is recorded, else ""; name is that name. | Object |
records.parties | address | Party address; "" when not recorded. | String |
records | offences | The acts and sections charged; [] when none is recorded. | Array |
records.offences | act | The act, for example INDIAN PENAL CODE. | String |
records.offences | sections | The sections, for example "420", "406". | Array |
records.offences | rawText | The act and sections as published. | String |
records | status | Where the case stands. | Object |
records.status | stage | PENDING, DISPOSED, UNDER_INVESTIGATION, CLOSED or UNKNOWN. | String |
records.status | disposal | How a decided case ended: ACQUITTED, ALLOWED, COMMITTED, CONVICTED, DECIDED_OTHER, DISMISSED, REJECTED, SETTLED, TRANSFERRED or UNKNOWN; "" when there is no disposal. | String |
records.status | rawStatus | The case status as published. | String |
records.status | rawDisposal | The disposal as published. | String |
records | dates | Key dates. | Object |
records.dates | nextHearingDate | Next hearing date as published; "" when not available. | String |
records.dates | decisionDate | Decision date as published; "" when not available. | String |
records | documentUrl | Link to Signzy's copy of the court document, kept for 180 days; "" when there is no document. | String |
records | match | How well the record matches the person. | Object |
records.match | classification | CONFIRMED or PROBABLE. See Match below. | String |
records.match | score | Average of the signal scores, "0" to "100"; "" when no signal has a score. | String |
records.match | signals | One entry each for name, fatherName and address, each with result, score and matched. | Object |
records.match.signals | result | EXACT_MATCH, PARTIAL_MATCH or ALIAS_MATCH (name and fatherName), MATCH (address), NO_MATCH, NOT_IN_RECORD or NOT_PROVIDED. See Match below. | String |
records.match.signals | score | "0" to "100"; "" when the record has no such value. | String |
records.match.signals | matched | The value in the record that was compared. | String |
Names, addresses, court names, police stations and acts are returned in upper case.
Verdict
verdict | When |
|---|---|
RECORD_FOUND | At least one record is CONFIRMED. |
POSSIBLE_RECORD | No record is CONFIRMED, but at least one is PROBABLE. |
NO_RECORD_FOUND | No record matches the person. Records of other people with a similar name may still have been found; they are counted in summary.counts.discarded. |
Match
Each record found is compared with the person on name, father's name and address.
classification | Meaning |
|---|---|
CONFIRMED | The record has the name, father's name and address, and all three match. |
PROBABLE | Every value the record has matches, but it lacks one or two of them (often the father's name or the address). |
Signal result | Meaning |
|---|---|
EXACT_MATCH | Name or father's name: the record's name matches exactly (score 100). |
PARTIAL_MATCH | Name or father's name: the record's name is a close variant, such as a spelling difference or a missing initial. |
ALIAS_MATCH | Name or father's name: matches an alias in the record, for example Ramu in "Ramesh @ Ramu". |
MATCH | Address: the record's address matches. |
NO_MATCH | The value does not match. |
NOT_IN_RECORD | The record has no such value. |
NOT_PROVIDED | The request has no such value. |
Risk Band
riskBand | Description |
|---|---|
NO_RISK | The source rates the case as carrying no risk. |
LOW_RISK | Low risk. |
AVERAGE_RISK | Average risk. |
HIGH_RISK | High risk. |
VERY_HIGH_RISK | Very high risk. |
Status Codes
Code | status | Description |
|---|---|---|
200 | Request Successful (S001) | The check is COMPLETED. The result is in summary and records. |
200 | Data in Process (S002) | The check is IN_PROGRESS. Call again in 15 seconds or more. |
400 | Bad Request (E001) | requestId is missing or not valid, for example: Bad Request: "requestId" is not a valid requestId. |
401 | Unauthorized | The Authorization token is missing or invalid. |
404 | Data Not Found (E301) | No check with this requestId exists for your account. |
409 | Upstream Error (E401) | The check FAILED; start a new check. If result has no status, the check could not be read; please try again. |
500 | Internal Server Error | Internal Server Error. Please contact support. |
Getting help
Please feel free to contact us if you have any questions, require clarification, or have ideas for how to make the documents or any of our services better.
You can reach out to us at [email protected]. We strive to provide prompt and reliable assistance, ensuring your queries are addressed effectively.
We value your feedback and are committed to making your experience smooth and enjoyable. Our team is dedicated to assisting you with any needs you may have. Thank you for choosing our services. We look forward to helping you!