Skip to main content
GET /us/statutes/resolve turns a citation string into one exact section, and POST /us/statutes/resolve does the same for up to 50 at a time. This page answers the two questions that decide whether either works for you: what to send, and when to scope it.

The short answer: send back the citation we gave you

Every section we return carries a citation field. That string is the form the publishing jurisdiction itself prints, and feeding it back is guaranteed to resolve to the same section.
Result from /us/statutes/search
Feed it straight back
If you are storing citations in your own database, store the citation value we return rather than a form you construct. It round-trips by definition, and it survives us adding jurisdictions.

You do not have to send Bluebook

Both the Bluebook form and the form the state’s own courts use resolve to the same section. You do not need a per-state table. Also accepted, because real documents contain them:
  • The code name after the section. § 292.290, RSMo and § 162.41, Fla. Stat. resolve exactly like the name-first forms.
  • An edition year inside the code name. Ala. Code 1975, § 17-14-2 and NMSA 1978, § 22-23-1.1. The year names the edition, not the section, and is ignored.
  • Doubled section symbols. Cal. Civ. Code §§ 1950.5.
  • A trailing period, so a citation lifted out of a sentence works: 42 U.S.C. § 1983.
  • Typographic dashes. Text copied from a PDF or Word document carries non-breaking hyphens, figure dashes and minus signs instead of -. They are invisible on screen and they are normalized for you.
  • Pinpoint subsections. 42 U.S.C. § 1983(b)(2) resolves to the parent section and echoes (b)(2) back in subsection.

Forms that are refused on purpose

Some acronyms belong to two jurisdictions. For those, resolve returns resolved: false rather than guessing.
resolved: false on one of these is the correct answer, not a gap. A wrong section is a wrong statement of the law; an unresolved citation is a question you can answer.
Pass state and they resolve. You have told us which jurisdiction you mean, so there is nothing left to guess:
The same applies to a form carrying no jurisdiction at all: Virginia’s own in-state form is the bare word Code, so cite=Code § 8.01-243&state=va resolves while the string alone cannot. Connecticut and North Carolina both print General Statutes § ..., which names a compilation but no jurisdiction. Those resolve the same way: cite=General Statutes § 42a-1-101&state=ct.

Court rules

Many states cite a court rule with no jurisdiction token at all, because inside that state none is needed. Those resolve on the set acronym alone: Punctuation and case do not matter: I.I.R. 4, IIR 4 and iir 4 are the same citation.
Some set acronyms are shared. CR is both the Kentucky Civil Rules and the Washington Superior Court Civil Rules; RAP belongs to Washington, Kentucky and West Virginia; TCR to Oregon and West Virginia. These return resolved: false until you pass state, and they are refused on the acronym’s own ambiguity, not on whether we happen to hold that rule number for one state only. A gap in our coverage must never read as disambiguation.

Scoping: a constraint, not a hint

state and corpusType narrow a lookup. They never redirect one.
1

A citation that agrees with the scope resolves normally

cite=O.C.G.A. § 51-1-6&state=ga&corpusType=STATE returns the same section as the unscoped call.
2

A citation that disagrees returns resolved: false

cite=O.C.G.A. § 51-1-6&state=tx does not find a Texas section that happens to share the number. It returns resolved: false.
That refusal is the point. Scope when a citation form is shared across jurisdictions or corpora, which is exactly when a bare lookup could pick the wrong one:
  • 8 CCR 1206-2 is Colorado and 22 CCR 76227 is California. The acronym alone cannot say which, so pass state.
  • A rule number and a statute section often collide. If your citation names a court rule, pass corpusType=STATE_RULES so a same-numbered statute cannot answer instead.
If you are not disambiguating, leave the scope off. Scoping an unambiguous citation cannot improve the answer, and a scope that disagrees with the citation turns a good result into resolved: false.

Checking a whole document: POST /us/statutes/resolve

Everything above applies unchanged to the batch route. It takes up to 50 citations in one call and returns the same verdict per citation. Use it when you are checking the citations in a document rather than looking one up. A brief, a memo or a model’s output typically carries dozens, and the single-citation route makes that dozens of round trips.
Four things to know about the response and the price. Every input gets an entry. An unresolved citation comes back with resolved: false, never as an omission. A caller checking thirty citations needs to know WHICH failed, and a shorter array cannot say that. Duplicates are collapsed before pricing and before the response is built, so sending the same citation twice costs once and returns one entry. results lines up with the de-duplicated input, in the order supplied, and count is its length. Scoping applies to the whole batch. state and corpusType are the same constraint they are on the single route, applied to every citation in the call. A batch spanning jurisdictions should omit them and let each citation name its own. Batching buys a round trip, not a discount. It is 2 credits per citation, exactly as if you resolved them one at a time. Unresolved citations are charged, because a confident “this does not resolve” is the answer you are paying for when you are verifying a model’s output. Only citations we failed to process because of a backend error are refunded, so read creditsConsumed rather than multiplying.

Scoping on search is a different thing

On POST /us/statutes/search, state and corpusType filter the candidate pool before ranking. Two consequences worth knowing:
  • A recognized citation passed as the query is pinned to rank 1 at relevanceScore: 1.0, scoped or not. If you want one exact section, prefer /us/statutes/resolve: it is cheaper and it tells you whether the citation is real.
  • For a natural-language query, scoping changes which candidates are considered, so scoped and unscoped searches legitimately return different result sets. That is filtering working, not a bug.

When something does not resolve

1

Check it is not a deliberate refusal

Compare against the ambiguous-acronym table above. If it is on that list, add state.
2

Drop the scope

A scope that disagrees with the citation returns resolved: false. Retry without state and corpusType to find out whether the scope was the problem.
3

Search for it instead

POST /us/statutes/search with the citation as the query will surface the section even when the string is not a form we parse, and the result carries the citation we do recognize.
4

Tell us

A citation that a jurisdiction genuinely prints and that we cannot read back is a defect on our side, not yours. Send it to contact@vaquill.ai and we will fix the parser.
Case law citations are not covered here. The Data API serves statutes, regulations, constitutions and court rules; it is not a case law API.
Last modified on September 6, 2026