The federal Statutes at Large are not here.
They are served by
/us/statutes under corpusType=SESSION_LAW; see Corpus Types.
What is held
20,604 state session laws across 50 jurisdictions, from the 2025 sessions (Connecticut 2026, New Jersey 2024-2025, the DC Council’s 25th period). 18,704 are served with text. Approval dates run from 2024-04-23 to 2026-09-24.
Indiana and Tennessee are not held.
Delaware, Oklahoma and Colorado are partial: the publisher’s index lists more acts than were collected (Delaware 43 of 296, Oklahoma 82 of 494, Colorado 452 of 477).
Every law in this table is collected from the publishing government’s own site.
Identifiers
Every law has asessionLawId, built from its jurisdiction, session, series and chapter (or bill, where the state numbers no chapters):
The session code is the year plus
R (regular), S (special), X (extraordinary) or U (not stated), and the session’s number where it has one: 2025S1, 2025X2, Florida’s 2025SC.
An id never changes once issued.
Finding a law
By id.GET /us/session-laws/SSL_MN_2025R_G_Y2025_C1.
By citation. Put the citation in place of the id, URL-encoded.
It is matched against the citation the publisher prints and the law’s bill number:
resolvedFrom.
A citation naming more than one law is a 404 with reason: ambiguous_citation, every candidate in didYouMean and the conventional reading in defaultSessionLawId.
By state and date. GET /us/session-laws/list takes a required jurisdiction and these filters:
A malformed value is a
422 and is never charged.
A value that is well formed but matches nothing returns an empty page, which is charged.
GET /us/statutes/coverage lists, for each state, the series and instrumentType values it actually holds and the span of approval dates, so you can offer a real list before you filter.
Everything taking effect in California on 1 January 2026:
jurisdiction is a 422 and is not charged.
By citation, inside a document. POST /us/statutes/resolve (and GET /us/statutes/resolve) recognises a state session law citation when it names no code section.
The response then carries matchedCorpus: "session_law" and a sessionLaw block, and resolved stays false and section stays null, because both describe a code section.
sessionLaw.status is matched (one law, with its title, bill number, approval and effective dates, outcome, official source URL and href) or ambiguous (every candidate listed, none chosen for you).
There is no extra charge beyond the resolve price.
A state scope applies; a corpusType scope skips the lookup.
Searching the text
POST /us/session-laws/search finds laws by what they say.
Send a question in plain words, words from a title, a quoted phrase, a citation, a code section or a bill number.
You get the laws, best first, each with the passage of its text that matched and a snippet around your words.
422 and is not charged; a failure on our side is refunded.
What is searched
The enacted text: the law as it reads once the act takes effect. Language an act strikes out is not searched and never appears in a snippet, so a repealed word cannot match as if it were law. Only laws we serve with text are searched; laws whose text we withhold are not returned.GET /us/statutes/coverage shows what each state holds.
What you can ask
Parts combine:
hemp "licensed retailer" 63-3004 reads as the words, a phrase and a citation, and parsed in the response shows how the query was read.
How it ranks, and what that does not mean
Ranking is keyword relevance, not meaning. A question has to share vocabulary with the act:teeth cleaning professional will not find an act that says dental hygienist, and how often are property values reassessed will not find one that says reappraisal.
When a question finds nothing, try the words the legislature would use, or quote a phrase.
A law matched by its title and its text, or by an exact part of your query, ranks above one matched a single way.
Each result says how: matchType is exact when a quoted phrase, citation, code section or bill number matched, otherwise text, and matchedBy lists every way (title, text, phrase, citation, codeSection, billNumber).
Neither says the law is the right one.
A question with no true answer still returns its closest words, and there is no “no good match” flag, because keyword scores do not separate the two cases.
Read the snippet.
The snippet
passage.snippet is about 280 characters of the enacted text around your words, plain text, with … where it was cut.
passage.highlights lists [start, end] character offsets inside the snippet (end exclusive) for each word that matched, so you draw the highlight yourself.
The snippet carries no markup.
passage.bodyHref reads the text from that passage: it is the law’s /body with startChar set to passage.ownStart.
Filters and paging
A page past the 60 best matches is a
422.
Narrow the search with a filter instead of paging deeper.
Unknown fields in the body are a 422, so a typo is never silently dropped.
What a law carries
GET /us/session-laws/SSL_MN_2025R_G_Y2025_C1
effectiveDatesis always a list: one act can take effect on several dates, each with its scope as printed.codeSectionsAffectedlists the code sections the act changed, as the publisher’s own table prints them, in the 11 jurisdictions that publish one (California, Maryland, Utah, the District of Columbia, Washington, Iowa, Kentucky, Nebraska, Missouri, Mississippi, Hawaii).enactmentOutcomeissigned,became_law_without_signature,veto_overridden,line_item_veto,vetoed,pocket_veto,not_presentedorunknown;vetoStatusAsPrintedis the publisher’s own words.sourcesnames every document the record was built from, with its fetch time and sha256.
textStatus
The 1,834 withheld laws are Colorado, Louisiana and Maryland, where the source documents show deleted language as plain text, and six New Mexico appropriation acts whose line-item vetoes are not marked.
Their metadata is served; their text is not.
Reading the text
/body returns the text as printed, in pages of about 30,000 characters, cut at a paragraph break where possible.
Pass nextCursor back as cursor for the next page.
A cursor is tied to the text it was issued for; if the text changes, the old cursor is a 409.
Session laws amend existing law, so their text carries amendment markup.
markupConvention says how it is written:
amendatoryMarkup: "lost" means deleted language could not be recovered from the source and may read as law.
Many laws at once
POST /us/session-laws/batch takes up to 50 ids or citations in ids and returns each law’s record, the same one GET /us/session-laws/{sessionLawId} returns, in the order sent.
- 2 credits per law served; a miss is not charged.
- A citation in
idsalso pays 2 credits to resolve it, as on the single route. includeBody: trueadds each law’s first page of text asbody, at 6 credits per page served. 50 laws with text is 400 credits.jurisdictionscopes how every citation in the batch is read.
Keeping a copy current
GET /us/session-laws/changes is a feed of every law that began to be served, had its text added, was corrected, unserved, withdrawn or merged, oldest first.
- Call it with
sinceId=0. - While
hasMoreistrue, call again withsinceIdset to thecursoryou were given. - When
hasMoreisfalse, keep the cursor and call again later.
kind, sessionLawId, jurisdiction and detectedAt, which is when we recorded the change, not an approval or effective date.
A withdrawn or merged entry means the law no longer answers at its id.
1 credit per page of up to 200 entries; an empty page is charged.
From a code section to the acts that changed it
GET /us/statutes/section/{actId}/enactments lists the session laws a state publisher’s own “sections affected” tables print against one code section: which act added, amended or repealed it, and when the act took effect.
supported: false and is refunded.
It is not a complete amendment history.
It lists only acts we hold, in sessions we hold, whose table prints the section in a form we match; coverage.note says what is not matched in each jurisdiction.
An empty list with supported: true means no held table lists the section.
1 credit; a section that does not exist is not charged.
