curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/{act_id}/sections/{section_number}/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/{act_id}/sections/{section_number}/history"
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/{act_id}/sections/{section_number}/history', 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/{act_id}/sections/{section_number}/history"
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))
}{
"actId": "IND_state_20326",
"sectionNumber": "23",
"citation": {
"citation": "The Maharashtra Value Added Tax Act, 2002., s. 23",
"citationShort": "Maharashtra Value Added Tax Act, 2002., s. 23",
"displayPath": "The Maharashtra Value Added Tax Act, 2002. / Chapter V. RETURNS AND ASSESSMENT, ETC. / s. 23",
"breadcrumb": [
{
"type": "chapter",
"num": "V",
"label": "Chapter V",
"name": "RETURNS AND ASSESSMENT, ETC."
}
]
},
"events": [
{
"effectId": "AMD_14b4a64b60_0013",
"action": "substituted",
"amendingAct": "Mah. 6 of 2011",
"amendingActKind": "state_act",
"amendingActYear": 2011,
"amendingSection": "3",
"effectiveDate": "2005-04-01",
"effectiveDateSource": "publisher",
"originalText": "four years",
"publisherNote": "These words were substituted for the words \"four years\" by Mah. 6 of 2011, s. 3(b)(ii), w.e.f. 1st April 2005.",
"appliedStatus": "not_applied",
"appliedNote": "The text this API serves is the publisher's published text. We do not edit it, so this amendment is not applied to it."
},
{
"effectId": "AMD_0421a7f328_0015",
"action": "substituted",
"amendingAct": "Mah. 6 of 2011",
"amendingActKind": "state_act",
"amendingActYear": 2011,
"amendingSection": "3",
"effectiveDate": "2005-04-01",
"effectiveDateSource": "publisher",
"publisherNote": "Sub-section (3A) was substituted by Mah. 6 of 2011, w.e.f. 1st April 2005, s. 3(c).",
"appliedStatus": "not_applied",
"appliedNote": "The text this API serves is the publisher's published text. We do not edit it, so this amendment is not applied to it."
}
],
"total": 43,
"hasMore": false,
"offset": 0,
"coverage": {
"publisherClaimsAmendments": true,
"structuredEventsHeld": 43,
"eventsWithDate": 9
},
"meta": {
"processingTimeMs": 284.4,
"creditsConsumed": 2
}
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}Every recorded amendment to one provision
The amendment record for a single provision: what changed, which Act changed it, which of that Act’s sections did so, when it took effect where the publisher records a date, and the wording it replaced where the publisher quotes it.
Cost: 2 credits. An empty history for a provision we hold IS the answer and
is charged; the coverage block tells you whether it is empty because nothing
changed or because we hold no parsed record.
Read appliedStatus on every event. It is not_applied throughout, because
the text this API serves is the publisher’s published text and we do not edit
it. That is a deliberate, stated position rather than an omission: you should
never have to infer currency from silence.
asOf returns a TIMELINE, not text. We hold amendment events and no
versioned text, so there is no honest way to render this provision as it stood
on a date. Passing asOf tells you how many recorded amendments had taken
effect by then, how many had not, and how many carry no date at all. isBounded
true means we hold no recorded event affecting that date, which is not the same
as there having been none.
Coverage is real and uneven: many acts carry a non-zero amendment count with no
parseable footnote behind it, and about half the records we do hold carry no
effective date. Read the coverage block on this response for the provision you
asked about, and the free GET /acts/coverage for the corpus-wide split
(depth.actsWithAmendmentEvents against
depth.actsClaimingAmendmentsWithoutEvents).
curl --request GET \
--url https://api.vaquill.ai/api/v1/in/acts/{act_id}/sections/{section_number}/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/in/acts/{act_id}/sections/{section_number}/history"
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/{act_id}/sections/{section_number}/history', 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/{act_id}/sections/{section_number}/history"
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))
}{
"actId": "IND_state_20326",
"sectionNumber": "23",
"citation": {
"citation": "The Maharashtra Value Added Tax Act, 2002., s. 23",
"citationShort": "Maharashtra Value Added Tax Act, 2002., s. 23",
"displayPath": "The Maharashtra Value Added Tax Act, 2002. / Chapter V. RETURNS AND ASSESSMENT, ETC. / s. 23",
"breadcrumb": [
{
"type": "chapter",
"num": "V",
"label": "Chapter V",
"name": "RETURNS AND ASSESSMENT, ETC."
}
]
},
"events": [
{
"effectId": "AMD_14b4a64b60_0013",
"action": "substituted",
"amendingAct": "Mah. 6 of 2011",
"amendingActKind": "state_act",
"amendingActYear": 2011,
"amendingSection": "3",
"effectiveDate": "2005-04-01",
"effectiveDateSource": "publisher",
"originalText": "four years",
"publisherNote": "These words were substituted for the words \"four years\" by Mah. 6 of 2011, s. 3(b)(ii), w.e.f. 1st April 2005.",
"appliedStatus": "not_applied",
"appliedNote": "The text this API serves is the publisher's published text. We do not edit it, so this amendment is not applied to it."
},
{
"effectId": "AMD_0421a7f328_0015",
"action": "substituted",
"amendingAct": "Mah. 6 of 2011",
"amendingActKind": "state_act",
"amendingActYear": 2011,
"amendingSection": "3",
"effectiveDate": "2005-04-01",
"effectiveDateSource": "publisher",
"publisherNote": "Sub-section (3A) was substituted by Mah. 6 of 2011, w.e.f. 1st April 2005, s. 3(c).",
"appliedStatus": "not_applied",
"appliedNote": "The text this API serves is the publisher's published text. We do not edit it, so this amendment is not applied to it."
}
],
"total": 43,
"hasMore": false,
"offset": 0,
"coverage": {
"publisherClaimsAmendments": true,
"structuredEventsHeld": 43,
"eventsWithDate": 9
},
"meta": {
"processingTimeMs": 284.4,
"creditsConsumed": 2
}
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}{
"detail": "Insufficient API credits.",
"errors": [
{
"loc": [
"body",
"corpusType"
],
"msg": "Input should be 'USC', 'CFR' or 'STATE'",
"type": "literal_error"
}
],
"code": "insufficient_credits",
"type": "https://www.vaquill.ai/docs/errors/insufficient_credits",
"title": "Insufficient credits",
"status": 402,
"requestId": "8d32789e-7b27-44f7-9523-424596e7a929",
"retryable": false,
"retryAfterSeconds": 30,
"actId": "USC_99_9999",
"reason": "not_in_registry",
"didYouMean": [
"<string>"
]
}Authorizations
API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_... (preferred).
Headers
Optional. 16 to 255 visible ASCII characters (a UUIDv4 is ideal). A retry with the same key and the same request replays the original 2xx response for 24 hours without charging again. The same key with a different request is rejected. Scope is the API key, method, path and body.
16 - 255^[\x21-\x7e]+$"3f9c2a1e-7b44-4d0a-9c1e-5a6b7c8d9e0f"
Path Parameters
Act identifier, as returned by /acts/search, /acts/list or /acts/resolve, e.g. IND_central_20062 (the Bharatiya Nyaya Sanhita, 2023). Surrounding whitespace, quotes, backticks, invisible characters, a trailing period and double percent-encoding are removed when the id as sent matches nothing; the response then carries resolvedFrom.
An act NAME or citation (Indian Penal Code, IPC, The Companies Act, 2013) is not resolved here. It returns 404 with reason: "act_name_or_citation" and suggestedRequest, the call that finds the id. A misspelt id returns 404 with the real ids in didYouMean.
1 - 200^[^/\\\x00-\x1f]+$"IND_state_20326"
Section number as the publisher writes it, e.g. 302 or 498A. Alphanumeric suffixes are part of the number, not a sub-provision: 498A is one section, not section 498 clause A.
When the number as sent matches nothing, common spellings are tried: a s. / Sec. / Section prefix, 498-A or 498 A or 498a for 498A, and a trailing sub-provision such as 302(1), which serves the whole section. A match is served only when exactly one stored number fits, and the response carries resolvedFrom. A miss returns 404 with reason and the act's nearest numbers in didYouMean.
1 - 40^[^/\\\x00-\x1f]{1,40}$"23"
Query Parameters
Events per page.
1 <= x <= 50050
Zero-based offset.
x >= 00
Split the recorded amendments around a date (YYYY-MM-DD). Returns a timeline, never reconstructed text.
"2019-03-12"
Response
Successful Response
How to cite the thing this response is about.
Built from the publisher's own title, so where that title carries a defect
so does the citation: some titles end in a period, which reads as
... Act., s. 3, and some carry no year at all. Those are recorded defects
rather than reasons to withhold the field. GET /acts/coverage publishes
how many served acts carry a citation, as depth.actsWithCitation.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Events on THIS page.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
True when more events exist beyond this page.
Zero-based offset of this page.
A dated question answered with a TIMELINE, never with reconstructed text.
We hold amendment EVENTS and no versioned text, so there is no honest way to render this provision as it stood on a date. Returning current text under a date parameter would be a wrong answer shaped like a right one.
Show child attributes
Show child attributes
How your act_id or section number was matched, when it did not match exactly as sent. Null when it did.
Show child attributes
Show child attributes
Was this page helpful?

