curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/filters \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/filters"
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/filters', 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/filters"
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))
}{
"data": {
"categories": [
{
"value": "state",
"count": 1219846
},
{
"value": "central",
"count": 686388
}
],
"states": [
{
"value": "central",
"count": 703310
},
{
"value": "chhattisgarh",
"count": 93069
}
],
"departments": [
{
"value": "sebi",
"count": 130384
},
{
"value": "moefcc",
"count": 120426
}
],
"truncated": [
"department"
]
},
"meta": {
"processingTimeMs": 2.4,
"creditsConsumed": 0
}
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Discover valid filter values
List every value accepted by the category, state, and department filters
on POST /acts/search, with the number of sections behind each.
Authentication: API key via Authorization: Bearer vq_key_...
Cost: free.
Values are lowercase and hyphenated (madhya-pradesh, law-commission).
POST /acts/search rejects anything not listed here with HTTP 422, so read
this rather than guessing. Counts are read from the corpus and refresh as
ingest runs land, so treat the list as live rather than caching it in your app.
curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/filters \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/filters"
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/filters', 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/filters"
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))
}{
"data": {
"categories": [
{
"value": "state",
"count": 1219846
},
{
"value": "central",
"count": 686388
}
],
"states": [
{
"value": "central",
"count": 703310
},
{
"value": "chhattisgarh",
"count": 93069
}
],
"departments": [
{
"value": "sebi",
"count": 130384
},
{
"value": "moefcc",
"count": 120426
}
],
"truncated": [
"department"
]
},
"meta": {
"processingTimeMs": 2.4,
"creditsConsumed": 0
}
}{
"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_...
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
Was this page helpful?

