curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/corresponding-provisions/{act_code} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/corresponding-provisions/{act_code}"
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/corresponding-provisions/{act_code}', 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/corresponding-provisions/{act_code}"
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))
}{
"oldAct": "Indian Penal Code, 1860",
"newAct": "Bharatiya Nyaya Sanhita, 2023",
"effectiveDate": "2024-07-01",
"provisions": [
{
"oldAct": "IPC",
"oldSection": "302",
"newAct": "BNS",
"newSection": "103",
"subject": "Murder",
"effectiveDate": "2024-07-01"
},
{
"oldAct": "IPC",
"oldSection": "304",
"newAct": "BNS",
"newSection": "105",
"subject": "Culpable homicide not amounting to murder",
"effectiveDate": "2024-07-01"
}
],
"total": 30,
"coverage": {
"mappedProvisions": 30,
"basis": "curated",
"isComplete": false,
"note": "This is a curated subset of the recodification, covering the provisions most often cited. No official machine-readable correspondence table exists for the 2023 codes; the government handbooks are training aids and every online converter is a private reconstru…",
"bothCodesAreLiveLaw": "The old code still applies to offences committed before 2024-07-01, so both codes are live law simultaneously for the lifetime of pending trials. This mapping is a correspondence, not a redirect."
},
"meta": {
"processingTimeMs": 87.6,
"creditsConsumed": 1
}
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Map a repealed code to its replacement
Section-by-section mapping from a repealed Indian criminal code to the 2023 code that replaced it, in force from 1 July 2025.
Pass either side of the pair: ipc and bns both return the IPC to BNS
mapping, crpc and bnss both return CrPC to BNSS.
Coverage: ipc/bns and crpc/bnss. iea/bsa are accepted but
return 404 until the Evidence Act mapping lands, rather than an empty list
that would read as “nothing changed”.
Authentication: API key via Authorization: Bearer vq_key_...
Cost: 1 credit
curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/corresponding-provisions/{act_code} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/corresponding-provisions/{act_code}"
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/corresponding-provisions/{act_code}', 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/corresponding-provisions/{act_code}"
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))
}{
"oldAct": "Indian Penal Code, 1860",
"newAct": "Bharatiya Nyaya Sanhita, 2023",
"effectiveDate": "2024-07-01",
"provisions": [
{
"oldAct": "IPC",
"oldSection": "302",
"newAct": "BNS",
"newSection": "103",
"subject": "Murder",
"effectiveDate": "2024-07-01"
},
{
"oldAct": "IPC",
"oldSection": "304",
"newAct": "BNS",
"newSection": "105",
"subject": "Culpable homicide not amounting to murder",
"effectiveDate": "2024-07-01"
}
],
"total": 30,
"coverage": {
"mappedProvisions": 30,
"basis": "curated",
"isComplete": false,
"note": "This is a curated subset of the recodification, covering the provisions most often cited. No official machine-readable correspondence table exists for the 2023 codes; the government handbooks are training aids and every online converter is a private reconstru…",
"bothCodesAreLiveLaw": "The old code still applies to offences committed before 2024-07-01, so both codes are live law simultaneously for the lifetime of pending trials. This mapping is a correspondence, not a redirect."
},
"meta": {
"processingTimeMs": 87.6,
"creditsConsumed": 1
}
}{
"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_...
Path Parameters
Act code: ipc, crpc, iea, bns, bnss or bsa
^(?i:ipc|crpc|iea|bns|bnss|bsa)$Response
Successful Response
Show child attributes
Show child attributes
How much of the old code this mapping covers, and what it is. 🔴 It is a CURATED subset, not a complete concordance: there is no official machine-readable IPC-to-BNS table, and every published converter is a private reconstruction. Read mappedProvisions before treating an absent section as unmapped-because-unchanged.
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?

