DevelopersDocsAPI reference

API family

Research and law API

Search judgments, read them by paragraph, check citations, read a citator, look up bare act sections, map IPC to BNS and count limitation in code.

These endpoints read the public library: judgments of the Supreme Court, High Courts and tribunals, and the bare acts of India. All need the scope data:read. In test mode they read the real library and are free, so you can build a research tool without spending. Names and ids in the examples are made up unless a real citation is named. Prices are in credits (1 credit is ₹1 before GST); see pricing.

Code works out citations, treatment counts, section numbers and limitation. AI does none of it. For AI answers that cite paragraphs, see intelligence.

#Search judgments

GET /judgments · ₹0.50, then ₹0.35 from 1,00,000 a month per search · free when nothing is found

Search the library with the library's own search syntax: words, "phrases", -exclusions, party:, judge:, citation:, "section 138 NI Act", and court: and year: clauses. Results are short; read a judgment with GET /judgments/{id}.

Parameter Meaning
q The search, 2 to 300 characters. Required.
court sc, hc, or a High Court name such as Delhi or Bombay High Court. An unknown name gives 400 invalid_court.
from, to Judgment dates, yyyy-MM-dd.
limit, cursor Pagination.
curl "https://adv.heliosynctech.com/api/v1/judgments?q=specific%20performance%20readiness%20and%20willingness&court=sc&from=2020-01-01&limit=1" \
  -H "Authorization: Bearer $AOS_KEY"
{
  "object": "list",
  "data": [
    {
      "object": "judgment",
      "id": 18234,
      "court": "sc",
      "court_name": "Supreme Court of India",
      "title": "Sample Buyer v. Sample Seller",
      "citation": null,
      "neutral_citation": "2023 INSC 512",
      "bench": "A. Rao, B. Sen",
      "case_no": "Civil Appeal No. 4410 of 2022",
      "cnr": null,
      "decision_date": "2023-05-18",
      "disposal": "Allowed",
      "pages": 22,
      "snippet": "…the plaintiff must plead and prove readiness and willingness throughout…",
      "citator": { "cited_by": 214, "overruled": 0, "distinguished": 18, "followed": 120 }
    }
  ],
  "has_more": true,
  "next_cursor": "bzox"
}

court in a result is sc, hc or trib. citator is the treatment count, or null when none is recorded.

#Read a judgment

GET /judgments/{id} · ₹0.30 per judgment · free when the library has no text yet

The judgment as numbered paragraphs, up to 300 a call. Each paragraph has a label you can cite: Para 12, or Passage 7 for a judgment that does not number its paragraphs. When next_from is not null, call again with from=next_from. from and to choose paragraph positions.

curl https://adv.heliosynctech.com/api/v1/judgments/18234 -H "Authorization: Bearer $AOS_KEY"
{
  "object": "judgment",
  "id": 18234,
  "court": "sc",
  "court_name": "Supreme Court of India",
  "title": "Sample Buyer v. Sample Seller",
  "citation": null,
  "neutral_citation": "2023 INSC 512",
  "bench": "A. Rao, B. Sen",
  "case_no": "Civil Appeal No. 4410 of 2022",
  "cnr": null,
  "decision_date": "2023-05-18",
  "disposal": "Allowed",
  "pages": 22,
  "text": null,
  "paragraphs": [
    { "position": 1, "label": "Para 1", "text": "This appeal arises from…" },
    { "position": 12, "label": "Para 12", "text": "Readiness and willingness is a continuing requirement…" }
  ],
  "next_from": null
}

text holds the whole text only when the judgment could not be split into paragraphs.

#Read a judgment's citator

GET /judgments/{id}/citator · ₹2 per judgment

How later courts treated this judgment, and which later judgments cite it. It is counted from the library by code; there is no AI in it. Use it to drop an overruled case before you rely on it. citing is a list of its own, newest first, paged with limit and cursor.

curl "https://adv.heliosynctech.com/api/v1/judgments/18234/citator?limit=1" -H "Authorization: Bearer $AOS_KEY"
{
  "object": "citator",
  "judgment": { "object": "judgment", "id": 18234, "court": "sc", "title": "Sample Buyer v. Sample Seller", "decision_date": "2023-05-18" },
  "cited_by": 214,
  "overruled": 0,
  "distinguished": 18,
  "followed": 120,
  "citing": {
    "object": "list",
    "data": [
      {
        "object": "citation",
        "cited_as": "2023 INSC 512",
        "treatment": "followed",
        "read_by": "code",
        "quote": null,
        "paragraph": 14,
        "judgment": { "object": "judgment", "id": 19002, "title": "Another Buyer v. Another Seller", "court": "hc", "court_name": "High Court of Delhi", "citation": null, "decision_date": "2024-02-09" }
      }
    ],
    "has_more": true,
    "next_cursor": "bzox"
  }
}

treatment is followed, distinguished, overruled, doubted or referred. read_by is code, or ai_checked_by_code when a model read the paragraph and code confirmed the quote. A flag says "check this paragraph", not that the law is bad. When a stay is on record the counts also carry stayed and stayed_url.

#Check citations

POST /citations/check · ₹1 per citation found · free when the text has none

Send text, such as a draft. Each authority is read with the case name before it and checked against the library: verified (the citation is that case), mismatch (the citation is a different case) or unknown (not in the library). You pay for each citation found, not for the text. A call checks at most 200 citations.

curl -X POST https://adv.heliosynctech.com/api/v1/citations/check \
  -H "Authorization: Bearer $AOS_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 5a2c9d10-7e41-4f0b-8a9d-1c3e5b7f9a44" \
  -d '{ "text": "The basic structure doctrine, Kesavananda Bharati v. State of Kerala, AIR 1973 SC 1461, applies." }'
{
  "object": "citation_check",
  "total": 1,
  "verified": 1,
  "mismatch": 0,
  "unknown": 0,
  "items": [
    {
      "citation": "AIR 1973 SC 1461",
      "name": "Kesavananda Bharati v. State of Kerala",
      "status": "verified",
      "judgment": { "object": "judgment", "id": 4102, "title": "Kesavananda Bharati v. State of Kerala", "court": "sc", "year": 1973 },
      "overruled": 0,
      "distinguished": 3
    }
  ]
}

unknown means "check it by hand", not that the citation is wrong. overruled and distinguished count the later judgments that treat it so.

#Read a section of an act

GET /acts/{act}/sections/{n} · ₹0.05 per section

The text of one section of a bare act. {act} is the act's short name (IPC, BNS, CrPC, BNSS, NI) or its numeric id; {n} is the section number, with any letter (498A).

curl https://adv.heliosynctech.com/api/v1/acts/BNS/sections/103 -H "Authorization: Bearer $AOS_KEY"
{
  "object": "act_section",
  "act": { "id": 41, "short_name": "BNS", "title": "The Bharatiya Nyaya Sanhita, 2023", "year": 2023, "jurisdiction": "central", "state": null, "in_force": true },
  "number": "103",
  "title": "Punishment for murder",
  "chapter": "Of offences affecting the human body",
  "text": "(1) Whoever commits murder shall be punished with death or imprisonment for life, and shall also be liable to fine. …",
  "amended_at": null,
  "source_url": null,
  "counterpart": { "act": "IPC", "section": "302", "sure": true }
}

An unknown act gives 404 act_not_found; an unknown section 404 section_not_found. counterpart is the matching section of the old or new criminal code, or null. "sure": false means it comes from an imported table: check the bare act.

#Map an old code section to the new

GET /code-map?act=IPC&section=302 · ₹0.10 per lookup · free when there is no counterpart

India replaced the IPC, CrPC and Evidence Act with the BNS, BNSS and BSA. This tells you the new section for an old one, and the old for a new, either way round. act is IPC, CrPC, IEA, BNS, BNSS or BSA. A section with no counterpart answers 404 mapping_not_found, free.

curl "https://adv.heliosynctech.com/api/v1/code-map?act=IPC&section=302" -H "Authorization: Bearer $AOS_KEY"
{
  "object": "code_map",
  "act": "IPC",
  "section": "302",
  "counterpart": { "act": "BNS", "section": "103(1)", "sure": true },
  "direction": "old_to_new",
  "write_as": "s.103(1) BNS (s.302 IPC)",
  "effective_from": "2024-07-01",
  "note": "Offences committed before 1 July 2024 stay under the old code; read both sections before relying on the match."
}

Use write_as when you cite the section in a draft. It is a lookup table kept by hand and tested, not AI.

#List limitation rules

GET /limitation/rules · free

The limitation periods and statutory timelines we can work out. Use a rule's key as the rule of POST /limitation.

curl "https://adv.heliosynctech.com/api/v1/limitation/rules?limit=1" -H "Authorization: Bearer $AOS_KEY"
{
  "object": "list",
  "data": [
    {
      "object": "limitation_rule",
      "key": "ni138_notice",
      "name": "Cheque bounce: send the demand notice",
      "basis": "Negotiable Instruments Act, s.138(b)",
      "group": "cheque",
      "group_label": "Cheque dishonour (NI Act)",
      "from": "Date the payee received the bank's information that the cheque was returned unpaid",
      "period": "30 days",
      "copies_excluded": false,
      "court_filing": true,
      "note": null
    }
  ],
  "has_more": true,
  "next_cursor": "bzox"
}

Other keys include cpc_appeal_hc, crl_appeal_hc, slp, arbitration_s34, ni138_complaint, default_bail_90 and consumer_complaint. The list has them all.

#Work out limitation

POST /limitation · ₹1 per calculation

Give a rule and the day time starts. You get the last day, with every step, counted in code under the Limitation Act s.12 and s.4 and the General Clauses Act: the start day is not counted, and a last day on which the court is closed moves to the next day it sits. The AI never decides a deadline. Check the provision before relying on a date.

Field Meaning
rule A rule key from GET /limitation/rules. An unknown key gives 400 unknown_rule.
start The day time starts, yyyy-MM-dd.
copy_applied, copy_ready For appeals: the dates the certified copy was applied for and ready, so the time spent getting it can be excluded. Send both or neither.
court A holiday_key or court code from GET /courts, so that court's holidays are used.
curl -X POST https://adv.heliosynctech.com/api/v1/limitation \
  -H "Authorization: Bearer $AOS_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 9b7d1c3e-2a64-4e8f-b1d0-5c8a7e3f2b55" \
  -d '{ "rule": "ni138_notice", "start": "2026-10-02" }'
{
  "object": "limitation",
  "rule": "ni138_notice",
  "name": "Cheque bounce: send the demand notice",
  "basis": "Negotiable Instruments Act, s.138(b)",
  "from": "Date the payee received the bank's information that the cheque was returned unpaid",
  "start": "2026-10-02",
  "raw_due": "2026-11-01",
  "due": "2026-11-02",
  "steps": [
    "Starts from: Date the payee received the bank's information that the cheque was returned unpaid — Fri 02.10.2026 (this day itself is not counted).",
    "+ 30 days → Sun 01.11.2026",
    "Sun 01.11.2026 the court is closed (Sunday); under s.4 the filing is in time on the next day it sits.",
    "Last day: Mon 02.11.2026."
  ],
  "note": null,
  "excluded_days": 0,
  "court": null
}

raw_due is the day the period ends; due is the last day to file after the closed-day rule. Dates that cannot be right (a copy ready before it was applied for) give 400 invalid_dates. When unsure whether a court sits on a day, we treat it as open, so an earlier date is given, never a later one.