State Regulations API: 1.5 Million Administrative Rules Across 52 Jurisdictions

Vaquill AI's state regulations corpus holds roughly 1.46 million administrative code sections across 52 jurisdictions (50 states, DC, and Puerto Rico), reachable with corpusType=REGULATION on a single search endpoint. It matters because the rule that actually binds your customer is usually not in the statute. It is in the agency regulation written under it.

This post is about how to query that corpus without building the two integration bugs almost everyone builds first.

TL;DR

  • State regulations are where daily compliance lives. The statute grants authority. The administrative code sets the retention period, the license condition, the reporting deadline, and the form number.
  • 52 publishers, 52 formats, no bulk standard. There is no state-level equivalent of the eCFR bulk API. Every state ships its own portal, its own numbering, and its own name for the same thing.
  • corpusType=REGULATION is a corpus token, not a jurisdiction. Pair it with state unless you genuinely want one ranking across 1.46 million sections from 52 different codes.
  • A section number is not a citation. sectionNumber is 170.8. The citation is N.Y. Comp. Codes R. & Regs. tit. 19, § 170.8. Keying on the first one collides across titles and silently merges unrelated rules.
  • currentThrough reports the publisher's own words, including when that is embarrassing. Some states are current to this month. Some are two years behind their own register. Connecticut says outright that its online database is not the official legal edition.
  • State regulation boards refresh monthly, and you can audit any single state for free with GET /boards, which reports cadence, lastRetrievedAt, and retrievalStatus per jurisdiction.

Three cards reading 1.51 million regulation sections, 52 jurisdictions, and 52 different publisher formats.

4-question check
Question 1 of 4

How many jurisdictions does the REGULATION corpus cover?

This post is part of our US primary law corpus series, which walks the corpus one source at a time.

The neighboring state corpora get the same treatment in State Court Rules API: 46 Jurisdictions, and an Honest Map of the Six Gaps and State Constitutions API: 51 Jurisdictions With Article and Section Structure. For the regulated-industry view of all four layers at once, read Insurance Compliance Across 50 States: Where the Rules Actually Live.

Ask a compliance engineer where their obligations come from and you get statutes. Ask them to point at the sentence that says "retain for three years," and it is almost always a regulation.

The federal side is solved. The eCFR publishes clean XML, on a documented schedule, from one publisher, which is why federal regulations can be served as a single daily-refreshed corpus. Everyone who wants federal regulations gets the same bytes.

The state side has none of that. There are 52 publishers, and they agree on almost nothing.

What differsWhat it looks like in practice
The nameCalifornia has CCR. Texas has TAC. New York has NYCRR. Florida has FAC. Maryland has COMAR. Connecticut has RCSA. Hawaii has HAR. Montana has ARM. New Mexico has NMAC. South Dakota has ARSD.
The numberingNew Mexico folds title, chapter, part, and section into one dotted string. Louisiana uses title plus a roman-numeral part. North Carolina uses a title, a chapter, and a leading-dot section.
The deliveryA few states publish bulk files. Most publish a portal built for a human with a mouse. Some publish PDFs of a loose-leaf binder.
The currency statementSome print a register volume and date. Some print an edition year. Some print nothing at all.
The permissionSome publishers welcome automated access. Some opt every automated crawler out by name in robots.txt.

There is no bulk standard to build against, so the work is 52 separate integrations that have to be kept alive separately. That is why the corpus is thin at most vendors, and why the ones who do have it usually bought a commercial compilation rather than sourcing the states.

What is in the corpus

REGULATION is one of fifteen corpus tokens on the same search surface. The wider corpus holds 4,087,253 distinct sections indexed as 12,001,364 retrieval passages across 53 jurisdictions. A section is one citable item with a stable actId; long documents split into several passages, which is why the passage count runs about three times the section count.

CorpusTokenJurisdictionsApproximate sections
State administrative regulationsREGULATION52~1.46M
State statutory codesSTATE52~1.93M
State court rulesSTATE_RULES46~47.6K
State constitutionsSTATE_CONSTITUTION51~13.0K
State agency guidance (insurance bulletins)STATE_AGENCY_GUIDANCE4913,178

The biggest jurisdictions, counting every corpus we hold for that jurisdiction, are California 238,492 sections, Texas 169,086, Puerto Rico 151,881, Illinois 127,998, Indiana 121,953, Oregon 114,565, New Jersey 111,681, Washington 104,005, New York 95,040, and Oklahoma 93,147. Puerto Rico ranking third surprises people. It should not: it is a full civil-law jurisdiction with its own administrative code, and its insurance bulletins are published in Spanish because Spanish is the enacted language.

The token needs a state

corpusType=REGULATION names a body of law. It does not name a jurisdiction. Send it alone and you get one relevance ranking computed across 1.46 million sections from 52 codes that do not share vocabulary. The other fourteen tokens are listed in the corpusType reference.

Here is a real cross-state query and what came back, unfiltered:

curl -X POST https://api.vaquill.ai/api/v1/us/statutes/search \
  -H "Authorization: Bearer vq_key_..." \
  -H "Content-Type: application/json" \
  -d '{
    "query": "licensee shall retain records for three years",
    "corpusType": "REGULATION",
    "limit": 20
  }'

The top twenty spanned New Mexico, Illinois, New Jersey, New York, Iowa, Louisiana, Hawaii, Oklahoma, Massachusetts, South Dakota, North Carolina, Ohio, Washington, Virginia, Wyoming, and California. Every hit was on point for the phrase. Not one of them was on point for a question about a specific licensee in a specific state.

Loading diagram...

Add state and the same query becomes answerable:

{
  "query": "licensee shall retain records for three years",
  "corpusType": "REGULATION",
  "state": "ca",
  "titleNumber": "22",
  "limit": 10
}

state accepts a single code or a list, so ["ca","ny","tx"] is a legitimate multi-state sweep when that is genuinely what you want. What is never right is leaving the field off and hoping ranking sorts out jurisdiction for you.

Two behaviors are worth knowing. Unknown filter values are rejected with a 422 rather than silently matching nothing, so a typo in a source code fails loudly instead of returning a confident empty list. And failed calls are not charged, so a rejected request costs nothing. A search costs 4 credits; GET /boards and GET /us/statutes/coverage are free.

The citation-shape trap

This is the bug. A state regulation's section number and its full citation are different fields, and teams keep building lookup keys out of the wrong one.

Take one real California result:

{
  "actId": "STATE_CA_CCR_T22_D5_C9_A4_S77119",
  "citation": "Cal. Code Regs. tit. 22, § 77119",
  "citationShort": "22 CCR § 77119",
  "sectionNumber": "77119",
  "titleNumber": "22",
  "sectionTitle": "Employee Personnel Records.",
  "currencyNote": "This database is current through 8/14/26 Register 2026, No. 33."
}

Four different strings identify the same rule. Now look at how little those strings agree from state to state, all from live results:

StatesectionNumbercitationcitationShort
New York170.8N.Y. Comp. Codes R. & Regs. tit. 19, § 170.819 CRR-NY 170.8
New Mexico15.4.1.1215.4.1.12 NMAC15.4.1.12 NMAC
Louisiana1731La. Admin. Code tit. 42, pt. I, § 1731LAC 42:I.1731
Washington16-306-060WAC 16-306-060WAC 16-306-060
Virginia12VAC5-481-207012 Va. Admin. Code § 5-481-207012VAC5-481-2070
South Dakota20:18:22:08S.D. Admin. R. 20:18:22:08ARSD 20:18:22:08
Wyoming020.0013.1.12Uranium Recovery Rules, Ch. 1, § 12020.0013.1.12

Read the New York row again. 170.8 is not a citation. It is a fragment. New York title 12 has a section 38.34 and title 19 has a section 185.3, and a key built from the bare number will happily merge rules from different titles that have nothing to do with each other. Louisiana has the same shape: the citation carries a title and a roman-numeral part, and 1731 on its own tells you neither.

Then look at Wyoming, where the human-readable citation is a rule-set name rather than a number, and New Mexico, where the section number is the whole citation because NMAC folds title, chapter, part, and section into one dotted string. No single parsing rule survives all three.

The practical rule for an integration: never reconstruct an identifier, always echo one. Store actId in your database, keep citation alongside it for display, and treat sectionNumber as a component for breadcrumbs and sorting rather than as an identity. The citation formats reference lists the accepted forms.

currentThrough, and being honest about it

Every corpus carries a currency entry saying what it is current through, in the publisher's own words, and each result carries the same string on currencyNote. We do not normalize these into a date, because normalizing would hide what the publisher actually said. The status and currency reference defines that field alongside goodLawStatus.

Here is what that looks like, verbatim from a live GET /us/statutes/coverage measured 2026-08-30:

JurisdictioncurrentThrough
CaliforniaThis database is current through 8/14/26 Register 2026, No. 33.
New JerseyThis file includes all Regulations adopted and published through the New Jersey Register, Vol. 58 No. 16, August 17, 2026
GeorgiaCurrent through Rules and Regulations filed through August 14, 2026
ArizonaSupp. 26-2
Indiana2027 Edition
New York2021
ConnecticutAt this time, the Regulations of Connecticut State Agencies database is not an official legal edition of the RCSA. The official version is the hard copy RCSA (in blue loose-leaf binders) published and printed by the Commission on Official Legal Publications, as amended by subsequent final approved regulations published and printed in the weekly Connecticut Law Journal (CLJ).
HawaiiUnofficial department-posted copy. Hawaii has no consolidated official HAR; the official filed copy is on paper with the Office of the Lieutenant Governor.

Three things fall out of that table, and none of them are flattering.

Some states are current to within two weeks. California, New Jersey, and Georgia are all inside August 2026. That is the good case, and it is more common than the bad case.

Some states are genuinely behind their own publisher. New York reads 2021. Pennsylvania, Massachusetts, Mississippi, Oklahoma, and Arkansas all sit on 2024 register volumes. That is a real gap, it is ours to close, and printing it in the API response is better than letting a customer discover it in a filing.

Some publishers print no currency statement at all. Arizona prints a supplement number with no date. Indiana prints an edition year that is ahead of the calendar. Connecticut prints a paragraph explaining that the thing you are reading is not the official edition, and Hawaii prints that no consolidated official version exists in electronic form anywhere.

Monthly cadence, and how to audit one state for free

State regulation boards run on a monthly cadence. That is the intended schedule, not a promise about the last run, so the API exposes both.

GET /boards is free and returns every watchable source:

{
  "corpusType": "state_regulation",
  "state": "al",
  "label": "State regs AL",
  "cadence": "monthly",
  "scopable": true,
  "scopeBrowseCorpus": "REGULATION",
  "lastRetrievedAt": "2026-08-22T14:10:22.151975+00:00",
  "retrievalStatus": "current"
}

Read three fields together:

  • cadence is the schedule the board is registered on. For state regulations it is monthly.
  • lastRetrievedAt is when a retrieval actually landed. It is absent when none has.
  • retrievalStatus is the verdict, and it can read current, stale, failing, or never_retrieved.

Registration is not cadence. A board can be registered monthly and still report never_retrieved, and the point of publishing the field is that you find that out from the API rather than from a wrong answer. If you are building a compliance product on this corpus, poll GET /boards on your own schedule, alert on any state you depend on that flips off current, and gate your UI on the age you measure rather than the age you assume.

One more honest note on the year filter. yearFrom and yearTo filter on the last amendment year the publisher credits, so they track the law rather than our rebuild date. About a fifth of sections carry no amendment credit at all, because some publishers print none, and those sections drop out of results as soon as either bound is set. That is a defensible default and a surprising one, so set the bounds deliberately.

Who this corpus is wrong for

It is wrong for anyone who needs point-in-time reconstruction of a rule as it stood on a past date. It is wrong for anyone who wants NAIC model law text, which is a copyrighted commercial publication and deliberately out of scope. And it is wrong for a team that wants a single normalized citation grammar across all 52 states, because that grammar does not exist in the source material and inventing one would misquote seven jurisdictions to tidy up the other forty-five.

It fits a team building compliance monitoring, licensing workflows, agent tooling that has to cite a rule it can link back to, or an internal research surface where a lawyer needs the state rule under a federal obligation. The collection layer is published at github.com/Vaquill-AI/open-us-law, so the parsers and the JSONL schema are inspectable before you take a dependency.

FAQ

What is a state regulations API?

It is an interface that returns state administrative code sections, the rules agencies write under statutory authority, as structured data rather than web pages. Vaquill AI exposes them through POST /us/statutes/search with corpusType=REGULATION and a state filter, plus direct retrieval by actId. Each result carries the citation, the code path, the statutory authority note, and the publisher's currency statement.

How many state regulations are in the corpus?

Roughly 1.46 million sections across 52 jurisdictions: the 50 states, the District of Columbia, and Puerto Rico. That sits inside a wider corpus of 4,087,253 distinct sections indexed as 12,001,364 retrieval passages across 53 jurisdictions. Exact per-jurisdiction counts come from the free GET /us/statutes/coverage endpoint with a measuredAt timestamp.

Why do I have to send a state filter with corpusType=REGULATION?

Because REGULATION names a body of law, not a place. Without state, one relevance ranking is computed across 52 different administrative codes, and a query about record retention returns correct-looking hits from sixteen states at once. The token narrows what kind of law you are searching; state narrows whose law it is.

What is the difference between sectionNumber and citation?

sectionNumber is the section component only, such as 170.8. citation is the full official form, such as N.Y. Comp. Codes R. & Regs. tit. 19, § 170.8, and citationShort is the compact form, 19 CRR-NY 170.8. Section numbers repeat across titles, so a lookup key built from sectionNumber merges unrelated rules. Use actId as the key.

Is actId predictable enough to construct by hand?

No. actId is stable but not guessable, and the prefix is not even uniform inside one corpus. Take it from a search or citation-resolve response and store it. Hand-built identifiers usually return 404.

How current are state regulations in the API?

It varies by publisher, and the API says so per jurisdiction in the currency array. Several states are current to within two weeks of the current register. Others sit on 2024 register volumes, and New York currently reads 2021. The value is the publisher's own words rather than a normalized date, so you can tell a stale corpus from a publisher who prints nothing.

How often do state regulations refresh?

State regulation boards are registered on a monthly cadence. Because a registered cadence is not proof a run happened, GET /boards also reports lastRetrievedAt and a retrievalStatus of current, stale, failing, or never_retrieved for every state. That endpoint is free, so you can audit any single jurisdiction without spending a credit.

Can I query what a state regulation said on a past date?

Versioning here runs off the amendment record rather than a date parameter. One citation maps to one text, the current one. Around it sit amendment history and lastAmendedYear per section, a yearFrom and yearTo filter on the publisher-credited amendment year, change events per refresh, and per-section diffs on watched boards. No as_of parameter exists.

Where does the text come from?

From each state's own government publisher. A commercial aggregator is never used, and it is not used as a fallback either. Where a state's only consolidated text sits behind a commercial licensee, or where a publisher's robots.txt opts automated access out, the corpus carries a declared gap or a declared pause with its reason in the API response rather than filling it from a third party.

The most complete US primary law API.
Every US statute, regulation, constitution, and executive order through one REST and MCP API. 4M+ sections, section-level citations, and links to the official source. Plus a free open dataset.
19 min read

New legal AI guides, weekly.

Priyansh Khodiyar

Priyansh Khodiyar

Co-Founder & CTO

Priyansh leads engineering and AI at Vaquill, from the matter workbench to drafting, document comparison, document matrix, and citation-verified research.