Blog

NeevLegal eCourt API for developers - turning Indian court data into structured verification results

ECourt API for Developers: Turning Indian Court Data into Structured Verification Results

NeevLegal Blogs

ECourt API for Developers: Turning Indian Court Data into Structured Verification Results







ECourt API for Developers: Turning Indian Court Data into Structured Verification Results

ECourt API for Developers: Turning Indian Court Data into Structured Verification Results

Building background-checks, lending, and compliance products on Indian court data usually starts the same way: someone writes a scraper against a court portal, and everyone downstream inherits the maintenance pain. An ecourt api for developers exists to replace that fragile pipeline with a single, structured, queryable verification layer. This guide walks through what such an API returns, how to integrate it reliably, and why a structured-plus-human-verified feed beats raw HTML scraping for anything that touches a hiring or credit decision.

NeevLegal is one implementation of that idea — an Indian court record verification API used by BGV/HR teams, lenders and fintechs, insurers, and compliance functions. It returns structured data on criminal and civil litigation across the Supreme Court, every High Court, and district courts in India, with lookup by CNR number, case number, or party name, plus a human-reviewed layer on top of the automated extraction. The point of this article is the engineering pattern, so the examples below are representative of any well-built service of this kind.

Why JSON Beats a Parsed HTML Page

Court portals such as the official eCourts services of India portal display case information as rendered web pages designed for a human reader, not a machine consumer. The same datum — say, a case status — can sit in different DOM structures across court benches, and portal markup changes without notice. Every change breaks a scraper, and a silently broken scraper is worse than none because it produces confidently wrong “no case found” answers.

A structured ecourt api for developers inverts that relationship. The provider owns the scraping and the reconciliation with the source of truth (the courts themselves, ultimately the Indian judiciary via main.sci.gov.in), and exposes clean typed fields over HTTP. The consumer receives a contract with named fields, documented types, and defined semantics instead of markup to reverse-engineer.

What an eCourt API Actually Returns

A mature response models the important entities of a litigation record rather than mirroring a screen. Fields you should expect include:

  • Case identifiers — CNR number, case number, case type code, filing and registration numbers.
  • Court metadata — court complex, bench, judge, and the jurisdiction (Supreme Court, High Court, or district/taluka court).
  • Parties — petitioner/respondent names with role disambiguation, plus related case parties where relevant.
  • Advocates — counsel names for each side when available.
  • Case type and stage — the proceeding type (civil, criminal, etc.), current stage, and status as a normalized enum.
  • Hearing history — dated hearing list entries with the action taken on each date.
  • Outcome — pending, disposed, transferred, withdrawn, or quasi-judicial disposition, with disposal dates.
  • Judgment summaries — a structured or narrative summary of the decision where one exists.
  • Provenance — the source record identifier and an extraction timestamp, so you can trace any individual field.

The useful fold is the normalized status field. Raw portals leave status as free text; a good API maps it to a small set of values so your business logic can branch on pending, disposed, or transferred without string matching on dozens of regional variants.

A Look at the Response Shape

Here is a condensed, fictional-but-plausible response for a single case lookup:

{
  "request_id": "req_8f2c1a7e",
  "case_id": "case_9d4f",
  "identifiers": {
    "cnr": "DLSC22-000123-2024",
    "case_number": "000123/2024",
    "case_type": "Criminal"
  },
  "court": {
    "level": "district",
    "complex": "Tis Hazari Courts, Delhi",
    "bench": "ASJ-03"
  },
  "parties": [
    {"role": "petitioner", "name": "State of Delhi"},
    {"role": "respondent", "name": "Rajesh Kumar"}
  ],
  "advocates": [
    {"role": "defense", "name": "A. Sharma"}
  ],
  "proceedings": {
    "stage": "Trial",
    "status": "pending",
    "next_hearing": "2026-11-14"
  },
  "hearing_history": [
    {"date": "2026-08-02", "action": "Charge framed"},
    {"date": "2026-09-10", "action": "Adjourned"}
  ],
  "summary": {
    "disposition": null,
    "judgment_summary": null
  },
  "source": {
    "portal_url": "https://services.ecourts.gov.in/...",
    "fetched_at": "2026-09-24T08:31:05Z",
    "verified": true
  }
}

The verified flag is the part scrapers cannot give you. NeevLegal adds a human review layer, so fields routed into a decision have been checked against the underlying record rather than trusted from an automated parse alone.

Designing Your Integration

Treating court-data lookup as a plain REST dependency makes the integration predictable. The core concerns reduce to authentication, rate limits, response handling, webhooks, and error handling.

Authentication and Security

Most services use API keys in the Authorization: Bearer header or an HMAC-signed request. Store the key in your secret manager, never in client code or committed config. Because these lookups feed background checks, consider end-to-end encryption in transit and minimize logging of case numbers and party names at your edge.

Rate Limits and Quotas

Read the provider’s limits before you build a retry loop. Expected patterns include per-second request caps, per-day verification quotas, and burst allowances. A compliant client:

  • Keeps a sliding-window rate limiter on the client side so you never trip the cap.
  • Backs off exponentially with Retry-After respect on 429s.
  • Separates synchronous lookups from bulk background sweeps so a batch job cannot starve interactive requests.

Response Fields and Versioning

Pin the API version you integrate against and treat unknown fields as forward-compatible additions, not errors. Normalize dates to ISO-8601 UTC on your side. Keep the verified flag and provenance intact end-to-end so downstream systems can distinguish an automated extraction from a human-checked one — that distinction is exactly why a structured ecourt api for developers is preferred for verification work.

Webhooks for Status Changes

Polling every case daily is wasteful. Prefer status-change webhooks: register a callback URL, and the provider POSTs an event when a watched case moves from pending to disposed or gets a new hearing date. Idempotency keys and retries on your callback handle at-least-once delivery cleanly.

Error Handling Matrix

Map provider errors to your own domain codes instead of letting HTTP semantics leak into application logic:

HTTP Typical cause Recommended action
400 Malformed request or invalid CNR format Validate input client-side before retrying
401 / 403 Missing or expired API key Rotate credentials, do not retry blindly
404 Case not found Record as “no match”, log for reconciliation
429 Rate limit exceeded Back off using Retry-After
502 / 504 Upstream court portal or provider hiccup Exponential backoff with jitter, bounded retries

Practical Use Cases

Once you have a reliable structured layer, the integrations follow the shape of the product rather than the shape of a court website.

Background Verification (BGV)

Pre-employment screens query a candidate’s litigation record by name and CNR against court data, then feed the structured result into a screening decision or an adverse-action workflow. The human-verified layer matters most here: a false “case found” on a name collision, or a missed disposal, has real hiring consequences.

Lending and Fintech Litigation Checks

Loan origination systems run a litigation check on the applicant and guarantors before disbursal. Structured status fields let underwriting rules react — for example, flag pending recovery suits or a recent disposition — without writing parsers for court HTML.

KYC and Onboarding Compliance

Eligibility and honest-and-capable checks during onboarding pull the same records to meet compliance obligations. Because the API returns structured fields, the output can be audited, versioned, and reproduced for regulators instead of storing screenshots of scraped pages.

NeevLegal vs. Raw Court Scraping

The table below contrasts operating on a verified API versus building your own scraper against eCourts and related portals.

Concern Raw scraping NeevLegal structured API
Data shape HTML you must re-parse Typed JSON fields and enums
Portal changes Break your pipeline, silently Absorbed upstream, contract stable
Accuracy Unverified automated parse Automated extraction plus human review
Coverage Ombudsman-limit depending on your bench list Supreme Court, all High Courts, district courts
Lookup Build your own CNR/name matching CNR, case number, or party name out of the box
Maintenance Ongoing unplanned work Managed by the provider

Request/Response Flow in Practice

A concrete flow, from the caller’s perspective:

  1. Your service receives a screening request with party_name and party demographics.
  2. Your code calls GET /v1/cases?party_name=RAJESH+KUMAR&court=district with the API key in the request header.
  3. The provider resolves candidate cases and returns a JSON array of case objects such as the example above.
  4. Your service normalizes statuses, flags verified versus automated fields, and stores the result with the request_id for audit.
  5. You optionally register a webhook so subsequent status changes reach you without polling.
  6. On a pending-to-disposed transition, the webhook fires, your workflow re-evaluates the record, and the screen is updated.

At each step you are handling a typed object with clear semantics — the property that makes court verification embeddable in a real product. If you are evaluating a provider, NeevLegal is a good comparison point: test its status normalization, its human-verified layer, and how it answers a 404 before you commit either way. You can also see the rest of the series on the NeevLegal blog, which covers verification workflows in more depth.

Ten Questions to Ask Any eCourt API Vendor

Before you lock integration, an ecourt api for developers should answer all of these:

  • Which courts are covered, and is coverage stated per data point?
  • Is the status field a closed enum, and is its mapping documented?
  • Is there a structured judgment summary, and for which case types?
  • How is the human-verified layer applied — and can I see it in the payload?
  • Are lookups deterministic and reproducible for audit?
  • What are the rate limits, quotas, and webhook semantics?
  • Is there a sandbox or test environment with synthetic data?
  • What is the SLA and the error-handling contract?
  • How is source provenance exposed end to end?
  • How quickly are portal changes and disposals reflected?

Get Started

Start with a sandbox key and a handful of known cases, and verify that the statuses, dates, and judgment summaries match what the source portals show. Wire the error matrix into your observability early so a 404-vs-429 distinction is visible the first week. The shift from scraping court HTML to consuming a structured ecourt api for developers is not a convenience — it is the difference between a product feature you can rely on and infrastructure you will keep repairing. Explore NeevLegal or head to the blog listing for related reading, then build the integration around a typed contract and a verified source of truth.



Leave your thought here

Your email address will not be published. Required fields are marked *