Skip to main content
POST
Get metadata for many statute sections

Authorizations

Authorization
string
header
required

API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_... (preferred).

Headers

Idempotency-Key
string | null

Optional. 16 to 255 visible ASCII characters (a UUIDv4 works). Repeating the same request with the same key replays the original 2xx response for 24 hours without charging again. The same key on a different request is rejected. With the account's cacheQueryDerivedData retention setting off, no body is stored and a retry answers 409 idempotency_replay_unavailable, still without a second charge.

Required string length: 16 - 255
Pattern: ^[\x21-\x7e]+$
Example:

"3f9c2a1e-7b44-4d0a-9c1e-5a6b7c8d9e0f"

Body

application/json

Batch metadata lookup. See POST /us/statutes/sections.

actIds
string[]
required

Section identifiers from a prior /us/statutes/search response. Up to 50 DISTINCT ids per call, each at most 200 characters; a blank id is refused with a 422 naming its position. Duplicates are collapsed before the cap is counted, and order is preserved in the response. Each id encodes the citation's hierarchy: USC_T42_C21_S1983 is Title 42, Chapter 21, Section 1983. Do not build these from a citation: the chapter/article/part segments exist only in the data, so Tex. Property Code § 93.005 is STATE_TX_Cpr_C93_S93.005, not STATE_TX_C93_S93.005. Assembled ids miss, and notFoundDetail will say so and suggest the real ones. A citation (26 U.S.C. § 1) is also accepted in place of an id: it is resolved and served, and listed in resolved.

Required array length: 1 - 50 elements
Maximum string length: 200
Example:
includeBody
boolean
default:false

Return each section's full text inline on body, instead of metadata only. Adds the ordinary body price per row that returns text, so 20 ids resolving 20 bodies is 40 + 120 = 160 credits. Rows whose text cannot be resolved come back with body: null and are not charged for it, so read creditsConsumed rather than computing the total. Without this, use /us/statutes/section/{actId}/body one id at a time.

Example:

true

Response

Sections found, plus any ids that did not resolve.

Response for POST /us/statutes/sections.

sections
StatuteResult · object[]

Found sections, in the order the ids were supplied.

notFound
string[]

Identifiers with no match. These are not charged, so a batch with misses costs less than len(actIds) times the per-section rate.

notFoundDetail
StatuteSectionsNotFoundDetail · object[]

One entry per id in notFound, saying whether the id was assembled rather than taken from a search result, and suggesting the real ids where they could be recovered. Diagnostic only and never charged; it can come back empty if the lookup is unavailable, so treat it as a hint rather than a contract.

resolved
SectionIdentifierResolution · object[]

One entry per input that did not match as sent: a citation resolved to its section, or an id cleaned of whitespace, quotes or a trailing period. Use it to map your inputs onto sections, which carry the real act_ids. Empty when every input was an exact id.

bodyNote
string | null

Present only when includeBody: true was set and the bodies were withheld because the balance could not cover them (each row says bodyNote: insufficient_credits). The ranking was served and billed as usual; no body was charged.

count
integer
default:0

Number of sections returned.

processingTimeMs
number
default:0

Server-side time for this request in milliseconds, excluding network transit. Useful for spotting a slow query; not billed on.

Example:

240.5

creditsConsumed
number
default:0

Credits actually charged for this call, after any refund. Failed work bills 0 and batch endpoints charge per item returned.

Example:

4