Skip to main content
GET
Get statute full text

Authorizations

Authorization
string
header
required

API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_... (preferred).

Path Parameters

act_id
string
required

Section identifier, e.g. USC_T42_C21_S1983 (Title 42, Chapter 21, Section 1983, which a lawyer writes as 42 U.S.C. § 1983). Take it from a /us/statutes/search or /us/statutes/resolve result.

A citation also works here: 26 U.S.C. § 1, 42 USC 1983 or Cal. Civ. Code § 1950.5 is resolved with the same resolver /resolve uses, and the section is served. A citation costs this endpoint's price PLUS the /resolve price (2 credits), charged as its own line whether or not it resolves, exactly as /resolve charges; that is the same total as calling /resolve and then this endpoint, in one round trip. An exact act_id costs only this endpoint's price. When a citation resolves, or when the id only matched after surrounding whitespace, quotes or a trailing period were removed, the response carries resolvedFrom saying what your input was matched as. Check it the way you would check a /resolve answer. A citation containing / cannot travel in a URL path segment; resolve it with GET /us/statutes/resolve instead.

Do not assemble an id from a citation: the title and section are derivable, but the CHAPTER is not, so USC_T26_S1 misses. A miss returns 404 with reason and, where the section exists under another id, didYouMean.

State session laws (acts as enacted, ids starting SSL_) are not code sections: read them at /us/session-laws/{sessionLawId}.

Required string length: 3 - 200
Example:

"CFR_T17_P240_S240_10b5_1"

Query Parameters

format
enum<string>
default:both

Which representations to return. both (the default) returns html and plain. A long section carries the same text twice that way, so plain or html alone roughly halves the payload. Cost is unchanged: the fetch is the same either way.

all adds markdown where the section has a structured rendering. It is opt-in because it is a third full copy of the text (about 600,000 extra characters on 49 CFR 172.101), which a model-facing client would pay for in tokens without asking.

markdown returns only markdown. On a section with no structured rendering it falls back to plain with a note saying so, never to an empty body. tables and figures are returned on every format, because they are small and describe the text you received.

content omits html and plain and returns the split fields (content, sourceCredit, notes).

operative omits notes as well, leaving content + sourceCredit: the law and what enacted it, and nothing else. This is the smallest representation of a section, and on a note-heavy section it is the difference between a payload that fits in a prompt and one that does not. Measured on 17 U.S.C. § 107: 95,217 bytes at both, 30,545 at content, 1,564 at operative, all for the same 6 credits.

Only United States Code sections can be split, so on any other corpus both values fall back to returning plain with a note saying why -- content will be null there, so read note rather than assuming the section was empty.

Available options:
all,
both,
html,
markdown,
plain,
content,
operative
Example:

"operative"

structured
boolean
default:false

When true, also return a subsections tree parsed from the text for pincite addressing, and markdown as that tree rendered as nested Markdown lists. Same cost.

structured=true OWNS markdown: on every format, and on every source, markdown is the nested-list rendering, never the table-preserving rendering a r2_render section otherwise returns for format=all/markdown (a note says so when that happens). Ask without structured for the tables. With format=markdown the nested lists are returned alone, without html or plain.

Example:

true

asOf
string<date>

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.

Pattern: ^\d{4}-\d{2}-\d{2}$
Example:

"2026-01-15"

Response

Successful Response

Full text of a statute section in HTML and/or plain text.

actId
string
required

The act_id of the section served. Equal to your request unless resolvedFrom is set, in which case it is the id your citation or cleaned-up input resolved to.

Example:

"USC_T42_C21_S1983"

html
string | null

The section text as HTML. When source is r2_render this is our structured rendering of the publisher's source: real <table> elements (with <caption>, colspan and rowspan) and <figure> / <img> elements at the position the publisher prints them, with images hosted on statutes-us.vaquill.ai. When source is r2_s3 this is the publisher's own markup (tables, paragraph structure, history lines), cut to the section's own content where we recognise the publisher's page layout. For any other source the text was not held as per-section HTML, and html carries the same text as plain with no markup.

plain
string | null

Plain text version.

source
string | null

Which copy the text came from: r2_render (our structured rendering, carrying markdown, tables and figures), r2_s3 (the publisher's page for this section), r2_text (our per-section text extraction), qdrant_reconstructed (reassembled from indexed passages), and on asOf requests stored_edition or corpus_change_history. A storage identifier, not a citation: cite sourceUrl.

sourceUrl
string | null

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.

Example:

"https://www.govinfo.gov/content/pkg/USCODE-2024-title17/html/USCODE-2024-title17-chap1-sec107.htm"

content
string | null

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: the operative text is a median 46% of plain across USC and as little as 3.4% (17 U.S.C. § 107, where nearly all of the body is committee reports and amendment notes). A model handed the full body can quote a 1992 amendment note as the law in force.

Example:

"Notwithstanding the provisions of sections 106 and 106A, the fair use..."

sourceCredit
string | null

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.

Example:

"(Pub. L. 94-553, title I, §101, Oct. 19, 1976, 90 Stat. 2546)"

notes
string | null

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.

Also null, deliberately, when you pass format=operative: that is the one format that asks us to leave the apparatus off the wire. Null there means "not sent", not "none exists" -- the same request at format=content returns it.

Example:

"Historical and Revision Notes\n\nhouse report no. 94-1476..."

available
boolean
default:true

Whether full text is available.

note
string | null

Note if text is unavailable.

markdown
string | null

The body as GitHub-flavoured Markdown. When source is r2_render this is the structured rendering: tables as GFM pipe tables (a caption line above, footnotes below, multi-level headers joined as Parent / Child) and figures as ![alt](url) at their position in the text. Returned only when format is all or markdown, not on the default both, where it would be a third full copy.

For a section with no structured rendering, markdown is null unless you pass structured=true, in which case it is the body as nested Markdown lists (the pre-existing behaviour). When both exist the structured rendering wins, because it is the one that keeps the tables; subsections is returned either way.

tables
BodyTable · object[] | null

The tables in the body, in document order, with their size. An empty list means the section has none. Null means not known: the section's corpus has no structured rendering yet, so a table may still be present in html.

figures
BodyFigure · object[] | null

The figures, equations and form images in the body, in document order, with hosted image urls and each one's offset into markdown and plain. An empty list means the section has none. Null means not known: the section's corpus has no structured rendering yet.

hasTables
boolean | null

True when the body contains at least one table, false when it contains none. Null when not known, because the section's corpus has no structured rendering yet.

hasFigures
boolean | null

True when the body contains at least one figure, equation or form image, false when it contains none. Null when not known, because the section's corpus has no structured rendering yet.

subsections
SubsectionNode · object[] | null

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.

asOf
AsOfProvenance · object | null

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.

resolvedFrom
SectionIdentifierResolution · object | null

Null when the section is exactly the act_id you sent. Otherwise how your input was matched: a citation, or an act_id with transport damage (whitespace, quotes, a trailing period) removed. When your citation named a chapter, article, series or several sections, the section served is the FIRST of them and matchLevel says so, as on GET /us/statutes/resolve.

processingTimeMs
number
default:0

Server-side time for this request in milliseconds, excluding network transit. Useful for spotting a slow query; not billed on.

Example:

240.5

creditsConsumed
number
default:0

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.

Example:

4