corpusType token from the US API applies
here.
Two different units, measured two different ways.
A section is one distinct (act, section) pair, and it is the unit a lawyer thinks in.
A passage is one retrieval chunk, and a section spans about 3.4 of them, so the collection
holds far more passages than sections.
Act and section counts on this page come from a dated scan; passage counts on
GET /acts/coverage are faceted live.
Divide passages by sections if you must, never multiply sections by anything, and never read a
passage count as a section count.What the corpus holds
Distinct acts and distinct (act, section) pairs, measured 2026-09-06.
Served acts are indexed as 2,461,060 retrieval passages, inside a collection of 2,532,537
points that also carries the retired records.
By category
category is the top-level split, and it is what you filter on when you want a whole class of
instrument rather than one jurisdiction.
repealed and spent are also accepted as category values for backward compatibility.
They resolve against act_status rather than category, so they select acts the publisher records
as repealed or spent in any jurisdiction.
GET /acts/coverage publishes this same legend as categoryLegend, and
GET /acts/filters returns the live vocabulary with counts, free.
By publisher status
Read Status is a claim, not our verdict before treating any of
these as a currency judgement.
Subordinate instruments
37,013 of the 64,179 served acts are subordinate instruments: rules, regulations, notifications and orders made under a parent act rather than enacted by a legislature. Include or exclude them with theisSubordinate filter on search.
Every response that names a parent resolves it by title match, not by a stored key, and says so
in matchBasis.
Title matching resolves a parent for 85.8% of the instruments that name one.
The stored parent_act_id field is not usable for this: all 35,502 values are the publisher’s own
identifiers, not ours, so a hard link would resolve to nothing.
Jurisdictions
Distinct acts and sections per jurisdiction, measured 2026-09-06, sorted by act volume. The middle column is the literal value to pass to thestate filter.
Depth: what we hold about an act, not just the act
This is the part of the page to read before you build on this API. “We hold the text of this act” and “we hold the record of what amended it” are different claims, and only the first is true for most of the corpus.GET /acts/coverage publishes the same four columns as a depth block so your code can read them
rather than trusting this page.
A further 840 acts carry a non-zero amendment count with no parseable amendment record behind
them.
Those acts return an empty event list, and the response says so in its own
coverage block rather
than leaving the emptiness to be read as “nothing ever changed”.
1,901 acts claim an amendment; we hold the events for 1,061 of them.
Inside the amendment record
About 3.15% of those records (1,035) are exact duplicates of another record on the same section,
so a count of events on one provision can overstate the number of distinct amendments.
Every event carries an
appliedStatus.
It is not_applied on all of them, because of the next point.
Limits you would otherwise find in production
We do not apply amendments to the text we serve
We serve the publisher’s text as published. We do not rewrite it to incorporate the amendments we list. Every amendment event states this on itself, so currency never has to be inferred from silence. There is consequently no point-in-time text reconstruction on this API. AnasOf parameter over unversioned text would be a wrong answer shaped like a right one, so it is
not offered.
The US statutes API does offer point-in-time reconstruction; that is a different corpus with
versioned editions behind it.
Status is a claim, not our verdict
actStatus, repealedBy and repealedByYear are the publisher’s statements.
We do not verify that a repealing Act was ever brought into force, and at least one repeal on
record involves an Act that never commenced.
GET /acts/{actId}/status keeps three vocabularies apart on purpose:
publisherStatus, which is India Code’s claim;servedStatus, which is our own serving decision;repealClaim, which is the repeal record plus our caveat, includingcommencementVerified.
goodLawStatus maps an unverified repeal claim to unknown, not to not_good_law.
The Factories Act, 1948 is the worked example: its recorded repeal is by the Industrial Relations
Code, 2020, which has never been brought into force.
GET /acts/list cannot see most of the corpus
GET /acts/list enumerates about 22,000 of the roughly 64,000 served acts.
It reads a separate act table that predates the current corpus, so about two thirds of what
POST /acts/search will happily return is invisible to it.
Every /list response now carries a note saying so.
Use POST /acts/search for discovery, and GET /acts/coverage for what exists.
An act id you cannot find through /list is very often held; a notFound from a lookup route is
more often a discovery gap than a corpus gap.
A properly paged act-level index is the fix and it is not built yet.
10.7% of acts carry no link to the publisher’s document
We servesourceUrl for 57,316 acts, which is 89.3%.
The remaining 6,863 return a named reason rather than a bare null, so “we have no link” is
distinguishable from “not applicable”.
The main cause is that India Code migrated from indiacode.nic.in to indiacode.gov.in around
2026-08-19 and re-minted every item handle with no redirect map.
The stored deep links are not merely stale, they 404.
They are blanked rather than rewritten, because pointing an old handle at the new host produces a
different 404 that merely looks current.
An empty provenance URL is allowed; a broken one would be a false statement.
Only live official Indian publishers are served in this field: .gov.in and .nic.in hosts, plus
rbi.org.in, the Reserve Bank of India.
No commercial legal database is a source or a link target.
703 acts are retired and are not served
They are held and deliberately withheld: 305 as duplicates of an act we kept, 190 as withdrawn by the publisher, and 208 with no reason recorded. Nothing was deleted. A retired act returns 404 with a reason from the text and amendment routes, and is refunded.GET /acts/{actId}/status answers it rather than 404ing, with servedStatus: retired and the
reason, because “we withdrew this” is a more useful answer than “no such thing”.
Citation strings are served with known cosmetic defects
citation is present on 99.9% of served acts and is what you would paste into a brief, so these
are worth knowing about before you render it verbatim:
- 6,646 acts (10.4%) have a title ending in a period, so the citation reads
The Maharashtra Value Added Tax Act, 2002., s. 23. - 3,003 acts (4.7%) carry no year in the title and no year field, so the citation identifies no edition.
The IPC to BNS mapping is a curated slice, not a complete table
GET /acts/corresponding-provisions/{actCode} holds 30 mapped pairs against the Indian Penal
Code’s 511 sections, about 6%.
The response states mappedProvisions, isComplete: false, and that the basis is curated rather
than official.
Both codes remain live law simultaneously for the lifetime of pending trials, so a mapping is a
research aid and not a substitution rule.
Endpoints and what they cost
Twelve routes, all underhttps://api.vaquill.ai/api/v1/in/acts.
Costs are in API credits, taken from the live pricing matrix; GET /api-credits/pricing is
authoritative.
Full request and response shapes are in the India API Reference.
GET /acts/coverage is free for the same reason the US coverage endpoint is: a consumer who
cannot see what the corpus holds cannot tell a gap from a bad query, and charging for that answer
compounds the confusion.Sources and refresh
The corpus is built from India Code, the Government of India’s official repository of Central and State legislation, and from statutory regulators’ own sites for theregulatory category.
No commercial database is a source.
India Code is re-swept on a weekly cadence, and each sweep is diffed against the previous one to
produce added, changed and withdrawn sets.
Act-level counts on this page move only when a new census scan is run, which is why every figure
here is stamped with the date it was measured.
US coverage
The separate US statutes corpus: federal, all 52 state and territory jurisdictions, and agency
guidance.
Authentication
One
vq_key_ credential and one credit ledger serve both jurisdictions.
