curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/list \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vaquill.ai/api/v1/in/acts/list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/api/v1/in/acts/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"actId": "INC_619586",
"title": "The Kerala (Alteration of Name) Act, 2026",
"year": 2026,
"category": "central",
"actNumber": "18",
"actStatus": "in_force",
"enactmentDate": "2026-08-14",
"citation": "The Kerala (Alteration of Name) Act, 2026",
"sectionCount": 1
},
{
"actId": "INC_619582",
"title": "The Tribunals Reforms Act, 2026",
"year": 2026,
"category": "central",
"department": "Department of Legal Affairs",
"actNumber": "17",
"actStatus": "in_force",
"enactmentDate": "2026-08-13",
"citation": "The Tribunals Reforms Act, 2026",
"sectionCount": 3
}
],
"total": 32,
"page": 1,
"pageSize": 3,
"hasMore": true,
"meta": {
"processingTimeMs": 591.4,
"creditsConsumed": 1
},
"note": "This listing enumerates every served act, from an act index built 2026-09-07T11:53:52Z. An act ingested after that date is available from search and the act routes before it appears here."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Browse and discover acts
Browse Indian acts, regulations and legislation with filters.
Use this endpoint to discover act IDs for the other routes here.
It enumerates every served act (64,179 as of the index build) and pages
over a total order, so walking the offsets returns each act exactly once with
a total that does not move underneath you.
The listing is a dated snapshot, rebuilt on the ingest cadence. An act
ingested after that build is served by POST /acts/search and the act routes
before it appears here; every response states the build date in note. If the
index is ever unavailable the response falls back to a smaller legacy listing
and says so, prefixed DEGRADED:, rather than quietly returning less.
Authentication: API key via Authorization: Bearer vq_key_...
Cost: 1 credit
Filter by category (central, state, regulatory, repealed, spent), state,
department, year range, and act status. Sort by year or title. Rows carry
sectionCount and citation, so a caller can size and cite an act without a
second request.
curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/list \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vaquill.ai/api/v1/in/acts/list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/api/v1/in/acts/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"actId": "INC_619586",
"title": "The Kerala (Alteration of Name) Act, 2026",
"year": 2026,
"category": "central",
"actNumber": "18",
"actStatus": "in_force",
"enactmentDate": "2026-08-14",
"citation": "The Kerala (Alteration of Name) Act, 2026",
"sectionCount": 1
},
{
"actId": "INC_619582",
"title": "The Tribunals Reforms Act, 2026",
"year": 2026,
"category": "central",
"department": "Department of Legal Affairs",
"actNumber": "17",
"actStatus": "in_force",
"enactmentDate": "2026-08-13",
"citation": "The Tribunals Reforms Act, 2026",
"sectionCount": 3
}
],
"total": 32,
"page": 1,
"pageSize": 3,
"hasMore": true,
"meta": {
"processingTimeMs": 591.4,
"creditsConsumed": 1
},
"note": "This listing enumerates every served act, from an act index built 2026-09-07T11:53:52Z. An act ingested after that date is available from search and the act routes before it appears here."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Authorizations
API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_...
Query Parameters
Jurisdictional class of the instrument. repealed and spent are accepted for backward compatibility and resolve against the act's status instead. Values: central, state, regulatory, repealed, spent.
central, state, regulatory, repealed, spent "central"
Jurisdiction slug. central is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage.
andaman-and-nicobar-islands, andaman-nicobar, andhra-pradesh, arunachal-pradesh, assam, bihar, central, chandigarh, chhattisgarh, dadra-and-nagar-haveli-and-daman-and-diu, dadra-nagar-haveli, delhi, goa, gujarat, haryana, himachal-pradesh, jammu-and-kashmir, jammu-kashmir, jharkhand, karnataka, kerala, ladakh, lakshadweep, madhya-pradesh, maharashtra, manipur, meghalaya, mizoram, nagaland, odisha, puducherry, punjab, rajasthan, sikkim, tamil-nadu, telangana, tripura, uttar-pradesh, uttarakhand, west-bengal "maharashtra"
Issuing body. Deliberately NOT an enumerated list: this field holds 943 distinct values and mixes clean regulator slugs (sebi, rbi, moefcc) with free-text state department names (Law Department). Read GET /acts/filters for the values with the most data behind them.
"sebi"
Earliest year of enactment to include, inclusive. Matched against the publisher's own year field, which is occasionally corrupt, so there is no lower bound and a value below 1800 is a legitimate way to find those rows.
x <= 21002015
Latest year of enactment to include, inclusive.
x <= 21002024
The publisher's lifecycle status for the act. Their claim, not our verdict: see GET /acts/{actId}/status. Values: in_force, repealed, superseded, spent.
in_force, repealed, superseded, spent "repealed"
Keep only acts whose title contains this substring, matched case-insensitively. A title filter, not a search over the text: use POST /acts/search for that.
2 - 200"income tax"
Sort order. popular is DEPRECATED and behaves as year_desc: it ordered by a read counter held only in the retired store. Values: year_desc, year_asc, title_asc, title_desc, popular.
year_desc, year_asc, title_asc, title_desc, popular "title_asc"
1-based page number.
x >= 11
Results per page (1-100).
1 <= x <= 10050
Response
Successful Response
Show child attributes
Show child attributes
What this call cost and how long it took.
🔴 Added 2026-09-06. Five of the six original routes returned NO statement
of what they billed: /text (3 credits), /amendments (5), /list (1),
/filters (0) and /corresponding-provisions (1). The house rule on the
US surface is that creditsConsumed is the CONTRACT and the list price is
not, and it matters most exactly where refunds happen -- /text refunds on
a missing act, /corresponding-provisions refunds when a mapping does not
exist yet. Without this field a caller cannot tell a refunded call from a
charged one, and has to reconcile against the ledger to find out.
Show child attributes
Show child attributes
Always set on this endpoint, naming the source that answered. On the normal path it carries the act index's BUILD DATE, because the listing is a snapshot and an act ingested after that date reaches search before it reaches here. If the index is unavailable the note is prefixed DEGRADED: and states the shortfall. A gap a caller can see is not the same as one they cannot.
Was this page helpful?

