curl --request POST \
--url https://api.vaquill.ai/api/v1/us/statutes/resolve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"citations": [
"42 U.S.C. 1983",
"16 C.F.R. 444.1",
"Cal. Civ. Code 1950.5"
]
}
'import requests
url = "https://api.vaquill.ai/api/v1/us/statutes/resolve"
payload = { "citations": ["42 U.S.C. 1983", "16 C.F.R. 444.1", "Cal. Civ. Code 1950.5"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({citations: ['42 U.S.C. 1983', '16 C.F.R. 444.1', 'Cal. Civ. Code 1950.5']})
};
fetch('https://api.vaquill.ai/api/v1/us/statutes/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/api/v1/us/statutes/resolve"
payload := strings.NewReader("{\n \"citations\": [\n \"42 U.S.C. 1983\",\n \"16 C.F.R. 444.1\",\n \"Cal. Civ. Code 1950.5\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"resolved": true,
"inputCitation": "<string>",
"section": {
"actId": "<string>",
"citation": "<string>",
"citationShort": "<string>",
"title": "<string>",
"corpusType": "<string>",
"state": "<string>",
"source": "sct",
"year": 123,
"relevanceScore": 123,
"excerpt": "",
"body": "(a) If within a reasonable time after written or oral notice...",
"titleNumber": "<string>",
"titleName": "<string>",
"chapter": "<string>",
"chapterName": "<string>",
"sectionNumber": "<string>",
"sectionTitle": "<string>",
"displayPath": "<string>",
"breadcrumb": [
{}
],
"parent": {},
"subchapter": "<string>",
"subchapterName": "<string>",
"part": "<string>",
"partName": "<string>",
"subpart": "<string>",
"subpartName": "<string>",
"popularName": "<string>",
"actStatus": "<string>",
"goodLawStatus": "<string>",
"currencyNote": "<string>",
"renumberedTo": "<string>",
"transferredTo": "<string>",
"issueDate": "<string>",
"crossReferencesCfr": [
"<string>"
],
"crossReferencesUsc": [
"<string>"
],
"statutoryAuthority": [
{}
],
"implementingRegulations": [
{}
],
"frRegulationIdNumbers": [
"<string>"
],
"frDocketIds": [
"<string>"
],
"frEffectiveOn": "<string>",
"frCommentsCloseOn": "<string>",
"frSignificant": true,
"frCorrectionOf": "<string>",
"frCorrections": [
"<string>"
],
"frRegulationsDotGovUrl": "<string>",
"frRelatedDocuments": [
{
"actId": "<string>",
"citation": "<string>",
"title": "<string>",
"documentType": "<string>",
"publicationDate": "<string>"
}
],
"subject": "<string>",
"rescindedOn": "<string>",
"sourceCredit": "<string>",
"amendmentYears": [
123
],
"lastAmendedYear": 123,
"amendmentsCount": 123,
"currentThrough": "<string>",
"amendmentHistory": [
"<string>"
],
"sourceNote": "<string>",
"effectiveDate": "<string>",
"priorEffectiveDates": [
"<string>"
],
"history": "<string>",
"supersededBy": "<string>",
"supersedes": "<string>",
"ruleSet": "<string>",
"publicLaws": [
"<string>"
],
"federalRegisterCitations": [
"<string>"
],
"granuleId": "<string>",
"packageId": "<string>",
"htmlUrl": "<string>",
"pdfUrl": "<string>",
"xmlUrl": "<string>",
"textUrl": "<string>",
"docxUrl": "<string>",
"stateHtmlUrl": "<string>",
"govInfoHtmlUrl": "<string>",
"govInfoPdfUrl": "<string>",
"abstract": "This regulation extends time-limited tolerances for pesticides.",
"agencies": [
"Environmental Protection Agency"
],
"agencySlugs": [
"environmental-protection-agency"
],
"topics": [
"Environmental protection",
"Pesticides and pests"
],
"documentTypeLabel": "Rule",
"documentSubtype": "Proclamation",
"action": "Final rule.",
"president": "George W. Bush",
"signingDate": "2026-04-02",
"datesText": "This regulation is effective December 14, 2001.",
"frVolume": 66,
"frStartPage": 64768,
"frEndPage": 64775,
"wordCount": 6271,
"issuingAgency": "Pollution Control Board",
"adoptingCitations": [
"37 Ill. Reg. 16539"
],
"lawImplemented": "Section 4656.1, Public Resources Code",
"lastAmendedDate": "October 4, 2013",
"amendmentNote": "Amended at 37 Ill. Reg. 16539, effective October 4, 2013",
"currencyYear": 2025,
"reviewDate": "11/1/2028",
"originalEnactmentDate": "June 27, 1934",
"releaseDate": "2018-06-14",
"documentNumber": "21-CA-211066",
"caseName": "Dunn-Edwards Corp.",
"forum": "Administrative Proceeding",
"court": "U.S. District Court for the District of Massachusetts",
"relatedDocuments": [
"Consent Order",
"Stipulation"
],
"settlementAmount": "$16,500",
"requesters": [
"Preece, Inc."
],
"program": "Old-Age and Survivors Insurance",
"languageCode": "es",
"volume": 1,
"articleNumber": "1",
"articleName": "Declaration of Rights",
"ruleSetCode": "NDSUPCTADMINR",
"edition": "2025",
"relatedCitations": [
"RCW 28A.150.290"
],
"supersessionActions": {
"modifies": [
"Rev. Proc. 2011-47"
]
},
"licenseNote": "MIT (reglab/statecodes)",
"subtitle": "11",
"subtitleName": "AIR QUALITY",
"publisherKey": "430000000310400000000000000000000",
"versionId": "11948",
"referencedShortTitles": [
"Driftnet Modernization and Bycatch Reduction Act"
],
"subjectNumber": "47",
"audience": "All Persons Engaged in Marketing",
"sourceCharStart": 263194,
"sourceCharEnd": 264198,
"alternateCitations": [
"4 L.P.R.A. § 2077"
],
"expirationDate": "03-01-2029",
"committeeNote": "<string>",
"sourcePageStart": 114,
"sourcePageEnd": 114,
"displayLabel": "MPEP § 2165.03",
"publicationDate": "2001-12-14",
"publicLawCites": [
{}
],
"topLevelTitle": "Title 9: Criminal",
"externalUrl": "<string>"
},
"subsection": "<string>"
}
],
"resolvedCount": 2,
"count": 3,
"processingTimeMs": 610.2,
"creditsConsumed": 6
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Resolve many citations at once
Resolve up to 50 Bluebook citations to their exact sections in one call.
The batch form of GET /us/statutes/resolve, and 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.
Cost: 2 credits per citation, the same as resolving them one at a time.
Batching buys a round trip and latency, not a discount. Unresolved citations
are charged (a confident “this does not resolve” is the answer you are paying
for when verifying a model’s output); only citations we failed to process
because of a backend error are refunded, and creditsConsumed reports what was
actually billed.
Duplicates are collapsed before pricing and before the response is built, so sending the same citation twice costs once and returns one entry.
Every input gets an entry. An unresolved citation appears with
resolved: false, never as an omission: a caller checking thirty citations
needs to know WHICH failed, and a shorter array cannot say that.
Example
requests.post(url, headers=h, json={
"citations": [
"42 U.S.C. 1983",
"16 C.F.R. 444.1",
"Cal. Civ. Code 1950.5",
],
})
Scope the whole batch with state or corpusType when every citation belongs
to one jurisdiction or corpus (22 CCR 76227 is California and 8 CCR 1206-2
is Colorado; the acronym alone cannot say which). Omit both for a batch that
spans jurisdictions and let each citation name its own.
curl --request POST \
--url https://api.vaquill.ai/api/v1/us/statutes/resolve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"citations": [
"42 U.S.C. 1983",
"16 C.F.R. 444.1",
"Cal. Civ. Code 1950.5"
]
}
'import requests
url = "https://api.vaquill.ai/api/v1/us/statutes/resolve"
payload = { "citations": ["42 U.S.C. 1983", "16 C.F.R. 444.1", "Cal. Civ. Code 1950.5"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({citations: ['42 U.S.C. 1983', '16 C.F.R. 444.1', 'Cal. Civ. Code 1950.5']})
};
fetch('https://api.vaquill.ai/api/v1/us/statutes/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/api/v1/us/statutes/resolve"
payload := strings.NewReader("{\n \"citations\": [\n \"42 U.S.C. 1983\",\n \"16 C.F.R. 444.1\",\n \"Cal. Civ. Code 1950.5\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"resolved": true,
"inputCitation": "<string>",
"section": {
"actId": "<string>",
"citation": "<string>",
"citationShort": "<string>",
"title": "<string>",
"corpusType": "<string>",
"state": "<string>",
"source": "sct",
"year": 123,
"relevanceScore": 123,
"excerpt": "",
"body": "(a) If within a reasonable time after written or oral notice...",
"titleNumber": "<string>",
"titleName": "<string>",
"chapter": "<string>",
"chapterName": "<string>",
"sectionNumber": "<string>",
"sectionTitle": "<string>",
"displayPath": "<string>",
"breadcrumb": [
{}
],
"parent": {},
"subchapter": "<string>",
"subchapterName": "<string>",
"part": "<string>",
"partName": "<string>",
"subpart": "<string>",
"subpartName": "<string>",
"popularName": "<string>",
"actStatus": "<string>",
"goodLawStatus": "<string>",
"currencyNote": "<string>",
"renumberedTo": "<string>",
"transferredTo": "<string>",
"issueDate": "<string>",
"crossReferencesCfr": [
"<string>"
],
"crossReferencesUsc": [
"<string>"
],
"statutoryAuthority": [
{}
],
"implementingRegulations": [
{}
],
"frRegulationIdNumbers": [
"<string>"
],
"frDocketIds": [
"<string>"
],
"frEffectiveOn": "<string>",
"frCommentsCloseOn": "<string>",
"frSignificant": true,
"frCorrectionOf": "<string>",
"frCorrections": [
"<string>"
],
"frRegulationsDotGovUrl": "<string>",
"frRelatedDocuments": [
{
"actId": "<string>",
"citation": "<string>",
"title": "<string>",
"documentType": "<string>",
"publicationDate": "<string>"
}
],
"subject": "<string>",
"rescindedOn": "<string>",
"sourceCredit": "<string>",
"amendmentYears": [
123
],
"lastAmendedYear": 123,
"amendmentsCount": 123,
"currentThrough": "<string>",
"amendmentHistory": [
"<string>"
],
"sourceNote": "<string>",
"effectiveDate": "<string>",
"priorEffectiveDates": [
"<string>"
],
"history": "<string>",
"supersededBy": "<string>",
"supersedes": "<string>",
"ruleSet": "<string>",
"publicLaws": [
"<string>"
],
"federalRegisterCitations": [
"<string>"
],
"granuleId": "<string>",
"packageId": "<string>",
"htmlUrl": "<string>",
"pdfUrl": "<string>",
"xmlUrl": "<string>",
"textUrl": "<string>",
"docxUrl": "<string>",
"stateHtmlUrl": "<string>",
"govInfoHtmlUrl": "<string>",
"govInfoPdfUrl": "<string>",
"abstract": "This regulation extends time-limited tolerances for pesticides.",
"agencies": [
"Environmental Protection Agency"
],
"agencySlugs": [
"environmental-protection-agency"
],
"topics": [
"Environmental protection",
"Pesticides and pests"
],
"documentTypeLabel": "Rule",
"documentSubtype": "Proclamation",
"action": "Final rule.",
"president": "George W. Bush",
"signingDate": "2026-04-02",
"datesText": "This regulation is effective December 14, 2001.",
"frVolume": 66,
"frStartPage": 64768,
"frEndPage": 64775,
"wordCount": 6271,
"issuingAgency": "Pollution Control Board",
"adoptingCitations": [
"37 Ill. Reg. 16539"
],
"lawImplemented": "Section 4656.1, Public Resources Code",
"lastAmendedDate": "October 4, 2013",
"amendmentNote": "Amended at 37 Ill. Reg. 16539, effective October 4, 2013",
"currencyYear": 2025,
"reviewDate": "11/1/2028",
"originalEnactmentDate": "June 27, 1934",
"releaseDate": "2018-06-14",
"documentNumber": "21-CA-211066",
"caseName": "Dunn-Edwards Corp.",
"forum": "Administrative Proceeding",
"court": "U.S. District Court for the District of Massachusetts",
"relatedDocuments": [
"Consent Order",
"Stipulation"
],
"settlementAmount": "$16,500",
"requesters": [
"Preece, Inc."
],
"program": "Old-Age and Survivors Insurance",
"languageCode": "es",
"volume": 1,
"articleNumber": "1",
"articleName": "Declaration of Rights",
"ruleSetCode": "NDSUPCTADMINR",
"edition": "2025",
"relatedCitations": [
"RCW 28A.150.290"
],
"supersessionActions": {
"modifies": [
"Rev. Proc. 2011-47"
]
},
"licenseNote": "MIT (reglab/statecodes)",
"subtitle": "11",
"subtitleName": "AIR QUALITY",
"publisherKey": "430000000310400000000000000000000",
"versionId": "11948",
"referencedShortTitles": [
"Driftnet Modernization and Bycatch Reduction Act"
],
"subjectNumber": "47",
"audience": "All Persons Engaged in Marketing",
"sourceCharStart": 263194,
"sourceCharEnd": 264198,
"alternateCitations": [
"4 L.P.R.A. § 2077"
],
"expirationDate": "03-01-2029",
"committeeNote": "<string>",
"sourcePageStart": 114,
"sourcePageEnd": 114,
"displayLabel": "MPEP § 2165.03",
"publicationDate": "2001-12-14",
"publicLawCites": [
{}
],
"topLevelTitle": "Title 9: Criminal",
"externalUrl": "<string>"
},
"subsection": "<string>"
}
],
"resolvedCount": 2,
"count": 3,
"processingTimeMs": 610.2,
"creditsConsumed": 6
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}{
"detail": "Insufficient API credits."
}Authorizations
API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_...
Body
Batch citation resolution. See POST /us/statutes/resolve.
/resolve took 1,159 calls in the 16 days to 2026-08-31, second only to
search, and every one of them carried a single citation. The caller shape it
is actually serving is an agent handed a brief, a memo or a model's output
with thirty citations in it, doing thirty round trips to check them.
Bluebook citation strings to resolve, up to 50 per call. Duplicates are collapsed and order is preserved, so the response's results array lines up with the de-duplicated input.
Priced PER CITATION at the single-resolve rate, exactly like POST /us/statutes/sections: batching is a round-trip and latency win, not a discount. Thirty citations cost the same 60 credits either way and take one request instead of thirty.
1[ "42 U.S.C. 1983", "16 C.F.R. 444.1", "Cal. Civ. Code 1950.5" ]
Optional two-letter jurisdiction to resolve every citation WITHIN. Applies to the whole batch: a batch spanning jurisdictions should omit it and let each citation name its own. Same semantics as the single-citation route -- a constraint, not a hint.
2"ca"
Optional corpus to resolve every citation WITHIN: STATE, REGULATION, STATE_RULES, CONSTITUTION, STATE_CONSTITUTION.
"REGULATION"
Response
One verdict per submitted citation, in order.
Response for POST /us/statutes/resolve.
One entry per de-duplicated input citation, in the order supplied. An unresolved citation is an entry with resolved: false, never an omission: a caller checking thirty citations needs to know which of them failed, and a shorter array cannot say.
Show child attributes
Show child attributes
How many of the submitted citations resolved.
2
Total entries in results, after de-duplication.
3
Server-side time for this request in milliseconds.
610.2
Credits actually charged. Read it rather than multiplying the list price by your input length: a backend failure on some citations refunds those, so this can be lower than 2 x count.
6
Was this page helpful?

