curl --request GET \
--url https://api.vaquill.ai/api/v1/us/statutes/section/{act_id}/body \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/us/statutes/section/{act_id}/body"
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/us/statutes/section/{act_id}/body', 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/us/statutes/section/{act_id}/body"
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": "USC_T42_C21_S1983",
"html": "\n<span>42 U.S.C. </span><br>\n<span>United States Code, 2024 Edition</span><br>\n<span>Title 42 - THE PUBLIC HEALTH AND WELFARE</span><br>\n<span>CHAPTER 21 - CIVIL RIGHTS</span><br>\n<span>SUBCHAPTER I - GENERALLY</span><br>\n<span>Sec. 1983 - Civil action for deprivation of rights</span><br>\n<span>From the U.S. Government ...",
"plain": "42 U.S.C. \n\nUnited States Code, 2024 Edition\n\nTitle 42 - THE PUBLIC HEALTH AND WELFARE\n\nCHAPTER 21 - CIVIL RIGHTS\n\nSUBCHAPTER I - GENERALLY\n\nSec. 1983 - Civil action for deprivation of rights\n\nFrom the U.S. Government Publishing Office, www.gpo.gov\n\n§1983. Civil action for deprivation of rights\n\nEvery person who, under ...",
"source": "r2_s3",
"available": true,
"processingTimeMs": 8.4,
"creditsConsumed": 6
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get statute full text
Get the full text of a statute section in HTML and plain text.
Cost: 6 credits. You are only charged when text is returned:
not-found (404), failed fetches, and sections whose text is not yet ingested
(available: false) are all refunded.
Works across USC, CFR, and state corpora. The text preserves formatting, cross-references, and paragraph numbering as published in the official source.
Response: available: true with html + plain, or available: false
with a note and creditsConsumed: 0 when the full text is not yet ingested
(metadata is still available from /us/statutes/section/{actId}).
sourceUrl is where the government published this text: cite and verify
against that, not against source, which names our storage backend. It is null
when we hold no official link for the section; we never substitute a
third-party compiler.
Telling the law from the apparatus (content / sourceCredit / notes)
plain and html are the WHOLE body as the publisher prints it: the operative
text, then the source credit, then the notes apparatus (historical and revision
notes, committee reports, editorial notes, amendments, effective-date notes).
For United States Code sections that body is mostly not the law. Measured
2026-09-02, the operative text is a median 46% of it across USC, and as little
as 3.4% on 17 U.S.C. § 107, where 28,529 of 29,775 characters are commentary.
So the granule is split into three additional fields, using the field delimiters GPO publishes in the source:
content— the operative text, and nothing elsesourceCredit— the credit line, e.g.(Pub. L. 94-553, ...)notes— the apparatus, kept because it is the legislative history
Use content if you are feeding sections to a model: the full body invites it
to quote a 1992 amendment note as the law in force. Pass format=content to
skip plain/html on the wire entirely.
⚠️ USC only. CFR and the state corpora carry no equivalent structure in their
sources, so all three fields are null there and plain remains the whole body.
Null means “we cannot split this reliably”, never “this section is empty”.
Pass structured=true to also get markdown (the body as nested Markdown lists)
and subsections (a tree you can address by pincite, e.g. (b)(2), each node
carrying its pincite path and full pinpoint citation). Same cost.
Point-in-time (asOf)
Pass asOf=YYYY-MM-DD to get the text as it stood on that date instead of
today’s. Same cost.
This is the question behind every compliance diff and every historical citation: what did this say when we last reviewed it. Answering it previously required holding a board watch and reading the alert diff, so the historical text existed but was reachable only through the alerts product.
It is a reconstruction, not an archive, and the response says so in
structured form rather than in a footnote. The corpus holds one current text per
citation; an earlier one is rebuilt from the before-side of the first change we
OBSERVED after your date, through the same resolver the watch diff uses. The
asOf block reports:
source—live(nothing captured after your date, so today’s text stood then),reconstructed, orunavailablebasisChangeId— the change event this answer rests on, readable at/us/statutes/section/{actId}/changesobservedFrom— how far back the evidence reaches for this sectionisBounded— read this one. True means we observed no change affecting your date, which is not the same as there having been none. Capture began long after the corpus did and is per-source.
html is never returned on this path: the reconstructed text is plain, and
synthesising markup the publisher never printed would be a wrong answer on the
endpoint whose job is fidelity.
A section that did not exist on that date returns available: false with
asOf.existed: false and IS charged, the same way an unresolved citation is
charged on /resolve: a confident negative is the answer. A section we know
changed but cannot rebuild returns source: "unavailable" and is refunded.
curl --request GET \
--url https://api.vaquill.ai/api/v1/us/statutes/section/{act_id}/body \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/api/v1/us/statutes/section/{act_id}/body"
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/us/statutes/section/{act_id}/body', 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/us/statutes/section/{act_id}/body"
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": "USC_T42_C21_S1983",
"html": "\n<span>42 U.S.C. </span><br>\n<span>United States Code, 2024 Edition</span><br>\n<span>Title 42 - THE PUBLIC HEALTH AND WELFARE</span><br>\n<span>CHAPTER 21 - CIVIL RIGHTS</span><br>\n<span>SUBCHAPTER I - GENERALLY</span><br>\n<span>Sec. 1983 - Civil action for deprivation of rights</span><br>\n<span>From the U.S. Government ...",
"plain": "42 U.S.C. \n\nUnited States Code, 2024 Edition\n\nTitle 42 - THE PUBLIC HEALTH AND WELFARE\n\nCHAPTER 21 - CIVIL RIGHTS\n\nSUBCHAPTER I - GENERALLY\n\nSec. 1983 - Civil action for deprivation of rights\n\nFrom the U.S. Government Publishing Office, www.gpo.gov\n\n§1983. Civil action for deprivation of rights\n\nEvery person who, under ...",
"source": "r2_s3",
"available": true,
"processingTimeMs": 8.4,
"creditsConsumed": 6
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_...
Path Parameters
Section identifier. Encodes the citation's hierarchy: USC_T42_C21_S1983 is Title 42, Chapter 21, Section 1983, the section a lawyer writes as 42 U.S.C. § 1983. Take it from a /us/statutes/search result rather than assembling it: the title and section are derivable from a citation, but the CHAPTER is not, so hand-built ids usually 404.
3 - 200"CFR_T17_P240_S240_10b5_1"
Query Parameters
Which representations to return. A long section carries the same text twice by default, so plain or html roughly halves the payload. Cost is unchanged: the fetch is the same either way.
content omits html and plain entirely and returns only the split fields (content, sourceCredit, notes). Use it when you want the operative text and nothing else: on 17 U.S.C. § 107 that is about 1 KB instead of 30 KB over the wire, for the same price. Only United States Code sections can be split, so for any other corpus content returns no text at all -- check content for null and fall back to plain if you are not sure which corpus you have.
both, html, plain, content "content"
When true, also return markdown and a subsections tree parsed from the text for pincite addressing. Same cost.
true
Return the section's text as it stood on this date (YYYY-MM-DD) instead of today's. Same cost.
This is a reconstruction, not an archive. The corpus holds one current text per citation; an earlier one is rebuilt from the before-side of the first change we OBSERVED after your date. The asOf block on the response says which version you got (source), what it rests on (basisChangeId), how far back the evidence reaches (observedFrom), and whether the answer is bounded by when capture began rather than by the law (isBounded). Read isBounded before citing the text.
A section that did not exist yet returns available: false with asOf.existed: false, which is a real answer and is charged. A section we know changed but cannot rebuild returns source: "unavailable" and IS refunded, because you asked for a historical text and did not get one.
A date that does not exist on a calendar (2026-02-30) is a 422 and is not charged.
^\d{4}-\d{2}-\d{2}$"2026-01-15"
Response
Successful Response
Full text of a statute section in HTML and/or plain text.
The section this body belongs to, echoed back from the request.
"USC_T42_C21_S1983"
HTML-formatted statute text.
Plain text version.
Data source identifier.
Where this text was published by the government, so the bytes you were served can be cited and verified against the official record. Null when we hold no publishable link for the section: a third-party compiler is never served here, and an absent link is the correct answer in that case. source is a storage identifier and is NOT a citation.
"https://www.govinfo.gov/content/pkg/USCODE-2024-title17/html/USCODE-2024-title17-chap1-sec107.htm"
The OPERATIVE TEXT of the section, with the source credit and the notes apparatus removed. This is the law; plain is the law plus everything the publisher prints around it.
Populated for United States Code sections, where GPO delimits the fields in the granule it publishes. Null for CFR and for state corpora, whose sources carry no equivalent structure -- null means "we cannot split this reliably", never "this section is empty", and plain is still the whole body.
Worth using if you feed sections to a model: measured 2026-09-02, the operative text is a median 46% of plain across USC and as little as 3.4% (17 U.S.C. § 107, where 28,529 of 29,775 characters are committee reports and amendment notes). A model handed the full body can quote a 1992 amendment note as the law in force.
"Notwithstanding the provisions of sections 106 and 106A, the fair use..."
The publisher's credit line for the section, e.g. (Pub. L. 94-553, title I, §101, Oct. 19, 1976, 90 Stat. 2546; ...). Split out of the body rather than left inside it.
The same value is also on GET /us/statutes/section/{actId} as sourceCredit; it is repeated here so a caller fetching the text does not need a second call to know what enacted it.
"(Pub. L. 94–553, title I, §101, Oct. 19, 1976, 90 Stat. 2546)"
The notes apparatus the publisher prints after the section: Historical and Revision Notes, committee reports, Editorial Notes (codification and amendments), Statutory Notes and Related Subsidiaries (effective dates), and any guidelines reprinted by the editors.
Kept, not discarded: it is the legislative history, and it is the reason a section's body can be twenty times the length of the law. It is simply NOT the operative text, so it is served as its own field. Null where we cannot split the body.
"Historical and Revision Notes\n\nhouse report no. 94–1476..."
Whether full text is available.
Note if text is unavailable.
The body rendered as nested Markdown lists. Present only when structured=true.
The section broken into its lettered and numbered subsections, nested as they appear in the text. Use it to quote or link a single clause rather than the whole section. Present only when structured=true.
Show child attributes
Show child attributes
Present only when the request passed asOf. Says WHICH version of the section you are holding and how far the evidence for it goes. Read isBounded before treating the text as the law on that date.
Show child attributes
Show child attributes
Server-side time for this request in milliseconds, excluding network transit. Useful for spotting a slow query; not billed on.
240.5
Credits actually charged for this call. Read it rather than assuming the list price: failed and refunded work bills 0, and batch endpoints charge per item returned, so a partial result costs less than a full one.
4
Was this page helpful?

