actId. It is stable, unique, and the key you use to fetch a section’s
metadata and full text.
You never construct an actId by hand. You get it from search results and pass
it back to the section endpoints.
What an actId looks like
actId values encode the section’s place in the source hierarchy. A few examples:
State sections follow the same idea, encoding the state’s code and section
structure. Treat the whole string as an opaque key: read it from a result, store
it, and pass it back unchanged.
The workflow
1
Search to get an actId
POST /us/statutes/search returns result objects, each with an actId.2
Fetch section metadata
GET /us/statutes/section/{actId} returns the full result object for that one
section (citation, hierarchy, source URLs).3
Fetch full text
GET /us/statutes/section/{actId}/body returns the section’s full text.
Returned only when text is available.4
Optional: fetch its neighbors
GET /us/statutes/section/{actId}/related returns the section’s immediate
statutory neighbors - the previous and next section within the same
container (chapter, part, or code). This is not numeric adjacency; it’s
what a lawyer would actually turn to next when reading a section in
context.Result and hierarchy fields
Search results and thesection object share the same shape. Alongside actId,
these fields describe where a section sits and how to cite it:
titleNumber can be alphanumeric (some states use ids like 13A), so treat it
as a string, not an integer.Example: search, then fetch
This walks the full path: run a search, take the firstactId, fetch its
metadata, then fetch its body.
When an actId misses
The batch routePOST /us/statutes/sections takes up to 50 actIds and tells
you WHY each one missed, which is the difference between a bug in your code and
a gap in ours.
Alongside sections it returns notFound (the bare ids) and notFoundDetail,
one entry per missed id:
reason: "assembled_id" means this id does not exist, but the section does,
under the ids in didYouMean.
That is almost always an id built from a citation.
The chapter, article and part segments are not derivable from a citation, so
Tex. Property Code § 93.005 is STATE_TX_Cpr_C93_S93.005, not
STATE_TX_C93_S93.005.
Send one of the suggested ids back and you get the section.
reason: "not_in_corpus" means nothing matching was found: either the id is
malformed beyond recovery, or the section is genuinely absent.
Check GET /us/statutes/coverage for that jurisdiction before reading it as
missing coverage.
Ids in
notFound are not charged, so a batch with misses costs less than
50 times the per-section rate. notFoundDetail is diagnostic only and never
charged. It can come back empty if the suggestion lookup is unavailable, so
treat it as a hint rather than a contract.GET /us/statutes/resolve instead of assembling an id.
That is what it is for.
Finding a section’s neighbors
GET /us/statutes/section/{actId}/related returns the sections immediately
before and after the one you already have, within the same container:
cURL
previous and next arrays (each a full section
object, same shape as a search result) plus a container label naming what
they’re neighbors within (e.g. the enclosing chapter or part). Useful for
“show me the surrounding sections” without a second search call - reading
§ 1983 alongside §§ 1981-1982 and 1985 in one request, for example.
Related
Response Formats
The text formats and source URLs a section can carry.
Corpus Types
The corpusType tokens you filter a search by.

