Search US statutes, constitutions, court rules, and executive actions
Search across federal and state law and get back the most relevant sections with citations and links to official source documents. State session laws (acts as enacted) are at /us/session-laws.
Corpora (corpusType):
- USC: United States Code
- CFR: Code of Federal Regulations
- STATE: State statutory codes. Call /us/statutes/coverage for live coverage and /us/statutes/divisions (corpusType=STATE&state=XX) for a state's codes; see the Coverage page for the full breakdown.
- CONSTITUTION: U.S. Constitution (Articles I-VII + 27 Amendments)
- FEDERAL_RULES: FRCP, FRCrP, FRE, FRAP, FRBP
- STATE_CONSTITUTION: state constitutions. Call /us/statutes/coverage for live coverage.
- STATE_RULES: state court rules. Call /us/statutes/coverage for live coverage; see the Coverage page for the full breakdown.
- EXECUTIVE_ACTION: Federal Register Presidential Documents (Executive Orders, Proclamations, Memos; 2015 to today, refreshed daily)
- REGULATION: state administrative regulations (pair with state; call /us/statutes/coverage for coverage)
- FEDERAL_REGISTER: Federal Register agency rules, final and proposed
- AGENCY_GUIDANCE: sub-regulatory federal agency guidance, 53 named sources across the tax, banking, securities, labor, immigration, health-privacy, export-control, intellectual-property, antitrust, energy and communications agencies. Scope to one with source (which lists every code and name), or see the Coverage page for the per-source table.
- STATE_AGENCY_GUIDANCE: state-issued regulatory guidance, currently state Department of Insurance bulletins and circular letters (pair with state; call /us/statutes/coverage for coverage)
- SENTENCING_GUIDELINES: US Sentencing Guidelines Manual
- US_TAX_TREATY: US income tax treaties and protocols
- US_TREATY: treaty and international agreement text (Statutes at Large, U.S.T., T.I.A.S., Bevans) plus the Senate ratification record
Authentication: API key via Authorization: Bearer vq_key_...
Cost: 4 credits per call (see /api-credits/pricing). Failed calls are not charged.
Set includeBody: true to get each hit's full text inline on body, instead of a follow-up /section/{actId}/body call per result. That adds the ordinary 6-credit body price for each row that actually returns text, so it buys round trips and latency rather than a discount; rows we cannot resolve come back body: null and are not charged. Read creditsConsumed.
Set includePinpoint: true to learn which subsection each hit matched. The response gains a pinpoints object keyed by actId: a hit for 30 mph urban district speed limit reads 625 ILCS 5/11-601(c)(1), with the unit's own text, the lead-in it completes and its character offsets in the section's text. It costs nothing extra, never changes which sections are returned or their order, and a hit whose subsection cannot be named says why (located: false) instead of guessing. See pinpoints in the response.
Pagination: use limit (page size, max 50) with offset (max 70, or 10,000 with matchType: "boolean"); check hasMore in the response to page forward. For any, all and phrase, ranked results come from a bounded pool of about 60 sections plus up to about 30 from the law-specific legs, so about 60 to 90 results are reachable and hasMore turns false at the end of that pool. For exhaustive paging use matchType: "boolean" and follow nextOffset. count is the size of the CURRENT page, not a corpus-wide match total -- ranking runs over a bounded window, so no such total exists. (total is a deprecated alias for count.) Every page of a given query slices one ranking, so results never repeat or go missing across pages.
Returns relevant sections with full metadata: citation, title hierarchy, and direct links to official source documents where available.
Matching (matchType): search is hybrid semantic + keyword by default (any), which suits natural-language questions. For strict keyword or exact-phrase lookups, use matchType: "all" or "phrase". To jump straight to one section, pass its citation as the query (e.g. 42 U.S.C. § 1983) and it resolves to rank 1.
Boolean (matchType: "boolean"): the query is a terms-and-connectors expression, and EVERY result satisfies it, judged over the section's full text and ranked by relevance among the matches. Operators are UPPERCASE:
| Operator | Meaning | Example |
|---|---|---|
| AND | both terms anywhere | contract AND breach |
| OR | either term | work OR employment |
| NOT | first term without the second anywhere | negligence NOT criminal |
| /p /s /N | same paragraph, same sentence, within N words (1-255) | arbitration /5 award |
| +p +s +N | as above, first term first | notice +5 termination |
| atleastN(term) | at least N occurrences (1-100) | atleast5(negligence) |
| "exact phrase" | these words in this order | "summary judgment" |
| term1 term2 | bare words side by side are also a phrase | summary judgment |
| * ! ? | any letters or digits; one character (3+ characters first) | retaliat*, wom?n |
| ( ) | grouping | (work OR employment) AND retaliation |
Precedence follows the convention of legal research services: OR binds tightest, then /N, /s, /p, then AND, then NOT. parsedQuery in the response shows how the expression was read. A malformed expression is a 422 that names the problem and its position, and is not charged. A query written in Boolean syntax but sent with matchType: "any" runs as natural language and says so in queryHint.
A Boolean search returns EVERY match, not a top slice. totalMatches says how many sections satisfy the expression (totalMatchesExact: false marks an upper bound, see that field), and offset goes up to 10,000. The first relevanceRankedCount results (at most 120) are ordered by relevance; later pages continue in keyword (BM25) order. A later page can hold fewer rows than limit, because candidates outside your filters or failing full-text verification are left out: page with nextOffset until hasMore is false. POST /us/statutes/count returns the same total without the results.
Examples
# Search SEC regulations
requests.post(url, headers=h, json={
"query": "insider trading material nonpublic information",
"corpusType": "CFR",
"titleNumber": 17,
"limit": 5,
})
# Search California state statutes
requests.post(url, headers=h, json={
"query": "shareholder derivative action standing",
"corpusType": "STATE",
"state": "ca",
})
# Search Executive Orders on a topic
requests.post(url, headers=h, json={
"query": "AI safety federal agency adoption",
"corpusType": "EXECUTIVE_ACTION",
})
# Search Federal Rules of Civil Procedure
requests.post(url, headers=h, json={
"query": "personal jurisdiction long-arm statute",
"corpusType": "FEDERAL_RULES",
})
# Cross-corpus search (no corpusType filter)
requests.post(url, headers=h, json={
"query": "due process equal protection fourteenth amendment",
})
Parameters
Every filter below accepts a single value OR a list, so one call can span several jurisdictions or corpora.
- query (required): natural-language or keyword query, 2 to 500 characters.
- corpusType (optional, string or list): one of the corpus tokens above, e.g. "CFR" or ["USC", "CFR"]. Case-insensitive. Omit to search every corpus.
- state (optional, string or list): a 2-letter jurisdiction code (50 states + DC + PR, GU, VI, AS, MP), or federal to scope to USC / CFR / Constitution / federal rules in one call. ["ca", "ny", "tx"] searches three at once. Case-insensitive. An unrecognized value is rejected with 422 rather than silently matching nothing.
- code (optional, string or list): restrict to specific state statutory codes, e.g. "tx_pe" for the Texas Penal Code. Values are the identifiers returned by GET /us/statutes/divisions?corpusType=STATE&state=XX. This is the only way to scope BELOW a jurisdiction: state=tx alone searches every Texas code. With corpusType=FEDERAL_RULES, a value can be a rule set from GET /us/statutes/divisions?corpusType=FEDERAL_RULES instead ("frcp", "uscapp_t28a_fre").
- article (optional, string or list): scope to an article. On CONSTITUTION / STATE_CONSTITUTION, the article label browse lists ("Amendment XIV", "Article IV"); on a STATE / REGULATION code divided by article rather than chapter (New York), its article number ("2-A"). Needs a corpusType from one of those families, plus state on STATE_CONSTITUTION and code on STATE/REGULATION; a missing pairing is a 422 before anything is charged.
- titleNumber (optional, integer): restrict to a USC/CFR title (e.g. 17 for SEC, 42 for civil rights). Applies only to USC/CFR; state titles are alphabetic or collide across states, so use code for those.
- chapter / part (optional, string or list): scope BELOW a title/code to a chapter (USC/state) or part (CFR), e.g. chapter="21" or part="240". This is the search-side of the parent object on each result: feed a hit's parent back to search its neighbors (a constitution, federal-rules or New York hit's parent carries article or a rule-set code for the same purpose). Must be paired with titleNumber or code, which parent always carries; an unpaired chapter/part is rejected with 422.
- matchType (optional): any (default) intent-ranked hybrid, all requires every query word, phrase requires the query's words in order. Both match WHOLE words, case-insensitively, ignoring punctuation (act does not match fact; 10b-5 matches 10b 5; § 1983 matches section 1983), over the full text of every section in scope, and page with nextOffset like boolean. boolean reads the query as a terms-and-connectors expression (see Boolean above).
- yearFrom / yearTo (optional, integer): bound results by version year. A section matches on its credited amendment year, else its effective year, else (for corpora dated by publication rather than amendment: Federal Register proposed rules, agency guidance, adjudications, the treaty record) the document's own publication year. Sections carrying none of the three are excluded once either bound is set.
- limit (optional, default 10, max 50): page size.
- offset (optional, default 0, max 70 with matchType: "any"; 10,000 with boolean, all or phrase): results to skip. A natural-language search reaches about 60 to 90 results in all. See Pagination.
Tips
- Provide corpusType whenever you know it. Unscoped queries can surface keyword matches from unrelated corpora; a corpus filter sharply improves precision.
- Take a returned actId and call /us/statutes/section/{actId} for metadata or /us/statutes/section/{actId}/body for the full text. To enrich a whole page at once, POST up to 50 ids to /us/statutes/sections instead of looping.
- relevanceScore ranks results within one response; do not compare it across different queries. A recognized citation (e.g. "Cal. CIV § 1952", "42 USC 1983") always resolves its exact section to the top result at relevanceScore: 1.0; if you already know the citation, GET /us/statutes/resolve is a cheaper way to get the same section without paying for a search.
Bounded rows. A heavily amended section (26 U.S.C. 1) carries hundreds of references and a credit line of tens of thousands of characters. Each row keeps the first 50 items of every long list and the first 4,000 characters of history and committeeNote. A row that was cut carries responseBounds (truncated, and per field the total, what was returned and nextOffset); a row that was not cut omits it. The whole record is one call away: GET /us/statutes/section/{actId}?full=true.
Request
- Base URLhttps://api.vaquill.ai
- Auth
- HTTP bearer
- or API key in header X-API-Key
- TypeScriptA function with typed inputs. Its response is checked against the schema.
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. The stored response body is a query-derived cache controlled by the account's data retention setting cacheQueryDerivedData: when it is false the body is never stored and a retry answers 409 idempotency_replay_unavailable, without charging again.
Request body
Example request
{
"corpusType": "STATE",
"limit": 5,
"matchType": "any",
"query": "data breach notification deadline",
"state": "ca"
}Response
Ranked sections for the query.
Example response
{
"results": [
{
"source": "sct",
"body": "(a) If within a reasonable time after written or oral notice...",
"bodyUnavailable": true,
"bodyUnavailableReason": "image_only_source",
"bodyNote": "fetch_failed",
"matchContexts": [
{
"text": "(a) An employer shall not retaliate against an employee who files a complaint",
"highlights": [
[
7,
15
],
[
26,
35
]
]
}
],
"renumberedTo": "self:4651",
"renumberedToLabel": "section 10105 of Title 34",
"transferredTo": "34:10105",
"transferredToLabel": "section 10105 of Title 34",
"issueDate": "1999-05-25",
"statutoryAuthority": [
{
"display": "15 U.S.C. 78o",
"section": "78o",
"title": 15,
"type": "usc"
}
],
"implementingRegulations": [
{
"cfrTitle": 17,
"display": "17 CFR Part 240",
"part": "240",
"partName": "General Rules"
}
],
"rescindedOn": "2016-07-01",
"pendingAdoptions": [
{
"agency": "Department of Financial Services",
"effectiveDate": "2026-09-23",
"idNo": "DFS-23-26-00013-A",
"issueDate": "2026-09-23",
"scope": "part"
}
],
"adoptedAfterCurrentThrough": true,
"responseBounds": {
"truncated": true,
"fields": [
{
"field": "publicLaws",
"unit": "items",
"total": 190,
"returned": 50,
"nextOffset": 50
}
]
},
"effectiveDate": "2002-11-25",
"effectiveDateRaw": "September 8, 1916",
"historyEffectiveDate": "2009-06-19",
"priorEffectiveDates": [
"2004-12-17",
"2012-11-01"
],
"pendingAmendments": [
{
"id": "FRULES_FRCP_R26_P2027",
"status": "approved_by_standing_committee",
"cycle": 2027,
"effectiveDate": "2027-12-01",
"commentPeriodEnd": "2026-02-16",
"sourceUrl": "https://www.uscourts.gov/rules-policies/pending-rules-and-forms-amendments",
"textComplete": true,
"commentDocketIds": [
"USC-RULES-CV-2025-0004"
]
}
],
"abstract": "This regulation extends time-limited tolerances for pesticides.",
"agencies": [
"Environmental Protection Agency"
],
"agencySlugs": [
"environmental-protection-agency"
],
"topics": [
"Environmental protection",
"Pesticides and pests"
],
"documentTypeLabel": "Rule",
"documentSubtype": "Proclamation",
"action": "Final rule.",
"president": "George W. Bush",
"signingDate": "2026-04-02",
"executiveOrderNumber": "14179",
"proclamationNumber": "10886",
"instrumentNumberSource": "derived_from_text",
"datesText": "This regulation is effective December 14, 2001.",
"frVolume": 66,
"frStartPage": 64768,
"frEndPage": 64775,
"wordCount": 6271,
"issuingAgency": "Pollution Control Board",
"adoptingCitations": [
"37 Ill. Reg. 16539"
],
"lawImplemented": "Section 4656.1, Public Resources Code",
"lastAmendedDate": "2013-10-04",
"amendmentNote": "Amended at 37 Ill. Reg. 16539, effective October 4, 2013",
"currencyYear": 2025,
"reviewDate": "11/1/2028",
"originalEnactmentDate": "1934-06-27",
"originalEnactmentDateRaw": "June 27, 1934",
"releaseDate": "2018-06-14",
"documentNumber": "21-CA-211066",
"caseName": "Dunn-Edwards Corp.",
"forum": "Administrative Proceeding",
"court": "U.S. District Court for the District of Massachusetts",
"relatedDocuments": [
"Consent Order",
"Stipulation"
],
"settlementAmount": "$16,500",
"requesters": [
"Preece, Inc."
],
"program": "Old-Age and Survivors Insurance",
"languageCode": "es",
"volume": 1,
"articleNumber": "1",
"articleName": "Declaration of Rights",
"ruleSetCode": "NDSUPCTADMINR",
"edition": "2025",
"relatedCitations": [
"RCW 28A.150.290"
],
"supersessionActions": {
"modifies": [
"Rev. Proc. 2011-47"
]
},
"subtitle": "11",
"subtitleName": "AIR QUALITY",
"publisherKey": "430000000310400000000000000000000",
"versionId": "11948",
"referencedShortTitles": [
"Driftnet Modernization and Bycatch Reduction Act"
],
"subjectNumber": "47",
"audience": "All Persons Engaged in Marketing",
"sourceCharStart": 263194,
"sourceCharEnd": 264198,
"matchSegment": "note",
"matchNoteYear": 1993,
"alternateCitations": [
"4 L.P.R.A. § 2077"
],
"expirationDate": "2029-03-01",
"expirationDateRaw": "03-01-2029",
"sourcePageStart": 114,
"sourcePageEnd": 114,
"displayLabel": "MPEP § 2165.03",
"publicationDate": "2001-12-14",
"topLevelTitle": "Title 9: Criminal",
"externalUrl": "https://www.mass.gov/regulations/240-CMR-200-licensure-of-cosmetologists",
"sourceUrl": "https://www.mass.gov/regulations/240-CMR-200-licensure-of-cosmetologists"
}
],
"changedSectionCount": 19055,
"matchQuality": "strong",
"citationOutsideFilters": {
"actId": "USC_T42_C21_S1983",
"citation": "42 U.S.C. § 1983 (2026)",
"title": "Civil action for deprivation of rights",
"state": "federal",
"corpusType": "USC",
"excludedBy": [
"state"
]
},
"citationMissReason": {
"candidates": [
{
"state": "co",
"actId": "REG_CO_T8_S1206-2",
"citation": "8 CCR 1206-2"
}
]
},
"parsedQuery": "\"trust fund\" AND penalty NOT 6672",
"totalMatches": 1342,
"totalMatchesExact": true,
"relevanceRankedCount": 120,
"nextOffset": 170,
"pinpoints": {
"STATE_IL_C625_A5_S11-601": {
"charEnd": 1647,
"charStart": 1624,
"citation": "625 ILCS 5/11-601(c)(1)",
"label": "1.",
"leadIn": [
{
"label": "(c)",
"path": [
"c"
],
"text": "Unless some other speed restriction is established under this Chapter, the maximum speed limit in an urban district for all vehicles is:"
}
],
"level": "paragraph",
"located": true,
"matchedBy": "passage",
"matchedTerms": [
"30",
"urban",
"district",
"speed",
"limit"
],
"path": [
"c",
"1"
],
"pinpoint": "(c)(1)",
"scope": "unit",
"structure": {
"builder": "text-grammar/1:il",
"quality": "verified",
"source": "artifact",
"textSha256": "2d9692ef44e3312970955fb7bcc9577d988914dd0e914d2b41695f5a84a749e2"
},
"text": "30 miles per hour; and"
},
"STATE_IL_C625_A5_S11-605": {
"located": false,
"note": "No single subsection carries enough of your query's words for us to name it. The section itself is a real match.",
"reason": "no_single_unit"
}
},
"droppedCount": 1,
"processingTimeMs": 240.5,
"creditsConsumed": 4
}Changes
No recorded changes to this operation across all 1 revision of this API.