42 U.S.C. § 1983, 16 C.F.R. § 444.1, or
Del. Code Ann. tit. 13, § 1301, resolve it to the exact section and get back the
section metadata with an official source link.
One route does the whole job: /us/statutes/resolve parses the citation
server-side and tells you whether it is real.
Use the GET form for a single citation and the POST form for up to 50 at
once, which is what you want when you are checking the citations in a document
rather than looking one up.
Endpoints used: GET /us/statutes/resolve for one citation (2 credits), POST /us/statutes/resolve for up to 50 at a time (2 credits each).
Resolve in one call
GET /us/statutes/resolve does the whole thing for you: it parses the Bluebook citation, resolves it to the exact section, and returns the section metadata with an official source link. The resolved flag tells you whether the citation is real, which is exactly the signal you want when verifying a citation an LLM produced.
/us/statutes/section/{actId}), plus subsection when the citation had a pinpoint like 42 U.S.C. § 1983(b)(2). When resolved is false, treat the citation as unverified, not current.
/us/statutes/resolve is charged whether or not the citation resolves, because a confident “this does not resolve” is the answer you want when checking an LLM’s output. Only server errors are refunded.A guidance citation can be ambiguous, and we would rather answer nothing
than guess. Some regulators reuse one citation across several documents:
Delaware reissues
DE Domestic/Foreign Bulletin No. 113 five times, Vermont
twice, and Massachusetts has three separate documents citing MA Bulletin 1991-01. Where the publisher’s own citation does not identify a single
document, resolved is false rather than one of the candidates picked
arbitrarily. Reach those documents by actId, or with a
corpusType=STATE_AGENCY_GUIDANCE search scoped to the state.Resolve a whole document’s citations at once
A brief, a memo, or a model’s output typically carries dozens of citations, and checking them one at a time is dozens of round trips.POST /us/statutes/resolve takes up to 50 citations in one call and returns the
same verdict per citation.
- Every input gets an entry.
An unresolved citation comes back with
resolved: false, never as an omission, so you can tell WHICH of thirty citations failed. Theresultsarray lines up with your de-duplicated input, in order. - Duplicates are collapsed before pricing and before the response is built, so the same citation sent twice costs once and returns one entry.
- Cost is 2 credits per citation, the same as resolving them one at a time.
Batching buys a round trip and latency, not a discount.
Thirty citations is 60 credits either way.
Read
creditsConsumedrather than multiplying: citations we failed to process because of a backend error are refunded. - Scope the whole batch with
stateorcorpusTypewhen every citation belongs to one jurisdiction or corpus.22 CCR 76227is California and8 CCR 1206-2is Colorado, and the acronym alone cannot say which. Omit both for a batch that spans jurisdictions and let each citation name its own.
POST /us/statutes/resolve accepts at most 50 citations, and rejects an empty
list or a longer one with 422. Chunk a longer document into batches of 50.If you need your own match tolerance
Both resolve routes run the server-side citation parser, which knows every form in Citation Formats, including the ones a state’s own courts print and the agency-guidance strings that have no Bluebook form at all. You only need to build your own matcher if you want tolerance the parser does not offer, for example accepting a citation whose section number is off by a digit and reporting it as a near miss. In that case, send the citation as thequery on POST /us/statutes/search,
compare the top result’s citation and citationShort against your input under
your own rules, and call GET /us/statutes/section/{actId}/body when you are
satisfied.
Do the arithmetic before you commit to it.
That path is 4 credits for the search plus 6 for the body, so 10 credits against
2 for /resolve, and a substring comparison is a weaker matcher than the parser
you just skipped.
It is the right call only when the tolerance itself is the point.
Flagging what you cannot resolve
Return an unresolved flag, not a guess
Return an unresolved flag, not a guess
resolved: false means unverified, not “not current”. Do not fall
through to a loosely related section, and do not present a near match as the
answer. If you are checking a citation an LLM produced, an unresolved flag is
exactly the signal that the model may have fabricated it.Scope by corpus to cut false matches
Scope by corpus to cut false matches
The corpus token is usually right there in the citation.
... CFR ... means
corpusType: "CFR"; ... U.S.C. ... means "USC"; a state code section
means "STATE" with the two-letter state. Scope is a constraint, not a
hint: a citation naming a different jurisdiction returns resolved: false
rather than being forced into the scope, so leave the scope off unless you
are disambiguating. FAR/DFARS citations live in CFR Title 48, so they are
corpusType: "CFR"; add source: "far" or source: "dfars" to exclude
every other CFR title from the ranking.Picking the official source link
Picking the official source link
A resolved section carries several optional source URL fields and any of them
may be null. Use the canonical preference order in
Text Formats and Source URLs
rather than writing your own, so every surface in your product links the same
reader to the same official page.
Related
Ground an LLM answer (RAG)
Use verified citations as grounding sources for an LLM answer.
Map a requirement to the law
Go from a plain-language obligation to the governing sections.
Grounding LLMs
Why citation verification belongs in every legal AI pipeline.
Statute lookup chatbot
A conversational front end over the same lookups.

