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": "1",
"newAct": "BNS",
"newSection": "1(1)",
"subject": "Short title, commencement and application.",
"effectiveDate": "2024-07-01"
},
{
"oldAct": "IPC",
"oldSection": "2",
"newAct": "BNS",
"newSection": "1(3)",
"subject": "Punishment of offences committed within India.",
"effectiveDate": "2024-07-01"
}
],
"total": 534,
"coverage": {
"mappedProvisions": 534,
"numberedSectionsMapped": 477,
"numberedSectionsInOldCode": 511,
"numberedSectionCoverage": 0.933,
"oldCode": "IPC",
"source": {
"publisher": "Bureau of Police Research and Development, Ministry of Home Affairs",
"title": "Correspondence Table and Comparison Summary of the Bharatiya Nyaya Sanhita, 2023 (BNS) to the Indian Penal Code, 1860 (IPC)",
"url": "https://bprd.nic.in/uploads/pdf/COMPARISON%20SUMMARY%20BNS%20to%20IPC%20.pdf"
},
"basis": "official-publication",
"isComplete": false,
"note": "Transcribed from the correspondence table the Bureau of Police Research and Development (Ministry of Home Affairs) publishes for this pair, named in `source`. `isComplete` is false and stays false: the publisher's table omits sections the new code dropped out…",
"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": 54,
"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 2024.
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”.
Source: transcribed from the correspondence tables published by the Bureau
of Police Research and Development, an attached office of India’s Ministry of
Home Affairs. The coverage.source block on every response names the exact
document and links to it.
Both codes are live law at once. The repealed code still governs offences committed before 1 July 2024, for the lifetime of pending trials, so this is a correspondence and not a redirect.
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": "1",
"newAct": "BNS",
"newSection": "1(1)",
"subject": "Short title, commencement and application.",
"effectiveDate": "2024-07-01"
},
{
"oldAct": "IPC",
"oldSection": "2",
"newAct": "BNS",
"newSection": "1(3)",
"subject": "Punishment of offences committed within India.",
"effectiveDate": "2024-07-01"
}
],
"total": 534,
"coverage": {
"mappedProvisions": 534,
"numberedSectionsMapped": 477,
"numberedSectionsInOldCode": 511,
"numberedSectionCoverage": 0.933,
"oldCode": "IPC",
"source": {
"publisher": "Bureau of Police Research and Development, Ministry of Home Affairs",
"title": "Correspondence Table and Comparison Summary of the Bharatiya Nyaya Sanhita, 2023 (BNS) to the Indian Penal Code, 1860 (IPC)",
"url": "https://bprd.nic.in/uploads/pdf/COMPARISON%20SUMMARY%20BNS%20to%20IPC%20.pdf"
},
"basis": "official-publication",
"isComplete": false,
"note": "Transcribed from the correspondence table the Bureau of Police Research and Development (Ministry of Home Affairs) publishes for this pair, named in `source`. `isComplete` is false and stays false: the publisher's table omits sections the new code dropped out…",
"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": 54,
"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
Either side of a recodification pair, matched case-insensitively so IPC and ipc are the same request. ipc/bns and crpc/bnss each return the same mapping; iea/bsa are accepted and 404 until that mapping lands. Values: ipc, crpc, iea, bns, bnss, bsa.
ipc, crpc, iea, bns, bnss, bsa ^(?i:ipc|crpc|iea|bns|bnss|bsa)$"ipc"
Response
Successful Response
Show child attributes
Show child attributes
How much of the old code this mapping covers, where it came from, and how it was checked. source names the government publication the table is transcribed from, so a caller can go and read it. 🔴 It is still not a complete concordance: a section absent here is NOT thereby unchanged, and the correspondence is many-to-many in places. Read numberedSectionsMapped 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?

