> ## Documentation Index
> Fetch the complete documentation index at: https://vaquill.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get statute full text

> Get the full text of a statute section in HTML and plain text.

**Cost**: 6 credits. You are only charged when text is returned:
not-found (404), failed fetches, and sections whose text is not yet ingested
(`available: false`) are all refunded.

Works across USC, CFR, and state corpora. The text preserves formatting,
cross-references, and paragraph numbering as published in the official source.

**Response**: `available: true` with `html` + `plain`, or `available: false`
with a `note` and `creditsConsumed: 0` when the full text is not yet ingested
(metadata is still available from `/us/statutes/section/{actId}`).

`sourceUrl` is where the government published this text: cite and verify
against that, not against `source`, which names our storage backend. It is null
when we hold no official link for the section; we never substitute a
third-party compiler.

## Tables and figures (`markdown` / `tables` / `figures`)

Where a section has a structured rendering, `source` is `r2_render` and the
body keeps what a flat text extraction loses: tables as real tables and images
at the position the publisher prints them.

- `html` -- `<table>` elements with `<caption>`, `colspan` and `rowspan`, and
  `<figure>` / `<img>` elements whose images are hosted on
  `statutes-us.vaquill.ai`
- `markdown` -- GitHub-flavoured Markdown, tables as pipe tables and figures as
  `![alt](url)`
- `plain` -- tables as one tab-separated line per row, figures as
  `[Figure N: caption]` placeholders
- `tables` / `figures` -- what the body contains, in document order. Each figure
  carries its hosted `url` and its offset into `markdown` and `plain`, so you
  can place images in your own layout. A figure we could not fetch is listed
  with `status: "unavailable"` and keeps its caption in the text.
- `hasTables` / `hasFigures` -- quick flags

A section in a covered corpus that has no table and no figure returns
`tables: []`, `figures: []` and both flags false, with its text in `html` and
`plain` as before. Where a corpus has no structured rendering yet, those fields
are null, meaning "not known", not "none": a table may still be present in
`html`. `markdown` is returned only for `format=all` or `format=markdown`: the
default `format=both` leaves it out, because it is a third full copy of the
text. `format=markdown` returns only `markdown`, and falls back to `plain`
with a `note` when the section has no structured rendering. The price is the
same whichever format you ask for.

## Telling the law from the apparatus (`content` / `sourceCredit` / `notes`)

`plain` and `html` are the WHOLE body as the publisher prints it: the operative
text, then the source credit, then the notes apparatus (historical and revision
notes, committee reports, editorial notes, amendments, effective-date notes).

For **United States Code** sections that body is mostly not the law: measured
2026-09-02, the operative text is a median 46% of it across USC, and as little
as 3.4% on `17 U.S.C. § 107`.

So the granule is split into three additional fields, using the field
delimiters GPO publishes in the source:

- `content` -- the operative text, and nothing else
- `sourceCredit` -- the credit line, e.g. `(Pub. L. 94-553, ...)`
- `notes` -- the apparatus, kept because it is the legislative history

Use `content` if you are feeding sections to a model: the full body invites it
to quote a 1992 amendment note as the law in force.

Two `format` values act on the split, and the difference between them is how
many bytes cross the wire, not what the law says:

- `format=content` drops `plain`/`html` and returns all three split fields. The
  apparatus is still on the response, because for a legislative-history or
  effective-date question it IS the answer.
- `format=operative` drops `notes` as well, returning `content` +
  `sourceCredit` and nothing else. Measured on `17 U.S.C. § 107`: 95,217 bytes
  at `both`, 61,003 at `plain`, 30,545 at `content`, 1,564 at `operative`. Same
  6 credits either way -- the fetch is identical, so this buys bandwidth and
  prompt budget, not a discount.

Reach for `operative` when you are putting the law in front of a model or a
reader and the notes are noise. Reach for `content` when you may need to read
the apparatus but want to keep it clearly separated from the law.

⚠️ USC only. CFR and the state corpora carry no equivalent structure in their
sources, so all three fields are null there and `plain` remains the whole body.
Null means "we cannot split this reliably", never "this section is empty".
Both `content` and `operative` fall back to serving `plain` with an explanatory
`note` on a corpus that cannot be split, rather than returning a response that
claims to carry the text and does not.

Pass `structured=true` to also get `markdown` (the body as nested Markdown lists)
and `subsections` (a tree you can address by pincite, e.g. `(b)(2)`, each node
carrying its pincite path and full pinpoint citation). Same cost.

## Point-in-time (`asOf`)

Pass `asOf=YYYY-MM-DD` to get the text as it stood on that date instead of
today's. Same cost.

**One parameter, two engines, and `asOf.engine` says which one answered.** Read
it before anything else in the block, because the two make different promises
and `isBounded` does not mean the same thing under each.

`engine: "stored_edition"` -- we hold the publisher's own printed editions for
this corpus and return one verbatim. CFR annual editions, the US Code, the
Copyright Compendium and OFAC FAQs. Here `isBounded: true` means your date fell
inside an edition we actually hold, which is a verified published printing.

Coverage under this engine is ENUMERATED, not continuous, and outside the CFR
annual editions it is currently sparse. A date in a gap between two held
editions returns `source: "unavailable"`, `isBounded: false`, no text, and an
`outOfCoverageReason` naming what we do hold. It is never answered from a
neighbouring edition, because the text may have changed in the gap. **For the US
Code this is the common case today: most historical dates fall between the
editions we hold and are reported out of coverage, with `outOfCoverageReason`
naming the editions that are available.** Do not read the presence of this
parameter as full US Code point-in-time coverage.

`engine: "observed_change"` -- every other corpus. **A reconstruction, not an
archive.** The corpus holds one current text per citation; an earlier one is
rebuilt from the before-side of the first change we OBSERVED after your date,
through the same resolver the watch diff uses. Here `isBounded: true` is the
WEAK claim, described below.

The `asOf` block reports:

- `source` -- on `observed_change`: `live` (nothing captured after your date, so
  today's text stood then), `reconstructed`, or `unavailable`. On
  `stored_edition`: `published` or `unavailable`
- `outOfCoverageReason` -- why no text came back, when none did
- `basisChangeId` -- the change event this answer rests on, readable at
  `/us/statutes/section/{actId}/changes`
- `observedFrom` -- how far back the evidence reaches for this section
- `isBounded` -- **read this one, and read `engine` first.** On
  `observed_change`, true means we observed no change affecting your date, which
  is not the same as there having been none: capture began long after the corpus
  did and is per-source. On `stored_edition` it is inverted and stronger, as
  above: true means a held edition governed your date.

`html` is never returned on this path: the text is plain, and synthesising markup
the publisher never printed would be a wrong answer on the endpoint whose job is
fidelity.

A section that did not exist on that date returns `available: false` with
`asOf.existed: false` and IS charged, the same way an unresolved citation is
charged on `/resolve`: a confident negative is the answer. On `observed_change`,
a section we know changed but cannot rebuild returns `source: "unavailable"` and
is refunded. On `stored_edition`, an out-of-coverage date is an ANSWER about what
we hold and is charged, which is the same rule the CFR annual editions have
always followed.



## OpenAPI

````yaml https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/body
openapi: 3.1.0
info:
  title: Vaquill Developer API
  description: >-
    Public API for legal statutes and legislation.


    **Authentication**: Pass your API key as `Authorization: Bearer vq_key_...`
    (preferred) or in the `X-API-Key` header. The `api_key` query parameter also
    works where a header cannot be set, but a URL ends up in logs and browser
    history. Sending two different keys in one request is rejected with a 401.


    **Credits**: Each call costs API credits. See `GET
    /api/v1/api-credits/pricing` for the full pricing matrix.


    ## Jurisdictions


    | Jurisdiction | Coverage | `countryCode` |

    |---|---|---|

    | **United States** | USC and the Statutes at Large, the CFR and its annual
    editions, all 52 state and territory statutory codes (50 states plus DC and
    Puerto Rico), state administrative regulations, court rules, federal and
    state constitutions, federal agency guidance and adjudications, the Federal
    Register, the Sentencing Guidelines and US tax treaties. | `US` |


    See the full [Coverage page](https://www.vaquill.ai/docs/api-guide/coverage)
    for the jurisdiction-by-jurisdiction breakdown, or call
    `/us/statutes/coverage` for live counts. Coverage is per (jurisdiction,
    corpusType) pair, so treat that endpoint as the authoritative list rather
    than this summary.


    ## Endpoints


    - **US Statutes**: Search and retrieve any of the corpora above with full
    text, resolve a citation to its exact section, browse the statutory
    hierarchy, read a section as it stood on a past date, and follow its change
    history, cross-references and defined terms

    - **Board Watches**: Subscribe to a corpus source and get a webhook or email
    when it refreshes with real changes (free, API key required)

    - **Pricing**: Credit costs per endpoint (no auth required)


    ## Rate limits


    Limits are enforced per API key and scale with your plan. A `429` response
    includes a `Retry-After` header.


    | Plan | Per minute | Per hour | Per day |

    |---|---|---|---|

    | Vaquill API Pro | 60 | 1,000 | 2,000 |

    | Vaquill API Business | 150 | 2,500 | 10,000 |


    For full documentation, visit the [API
    Reference](https://www.vaquill.ai/docs/api-reference/).
  version: 1.0.0
  contact:
    name: Vaquill API Support
    url: https://www.vaquill.ai
    email: support@vaquill.ai
  license:
    name: Proprietary
    url: https://www.vaquill.ai/terms
  termsOfService: https://www.vaquill.ai/terms
servers:
  - url: https://api.vaquill.ai
    description: Production
security:
  - ApiKeyAuth: []
  - ApiKeyHeader: []
  - ApiKeyQuery: []
tags:
  - name: US Statutes
    description: >-
      Search and retrieve US primary law. Covers the United States Code and the
      Statutes at Large, the Code of Federal Regulations and its annual
      editions, state statutory codes and administrative regulations, federal
      and state constitutions, court rules, Federal Register rules and
      Presidential documents, federal and state agency guidance, agency
      adjudications, state Attorney General opinions, the Sentencing Guidelines
      and US tax treaties. Scope a search with the `corpusType` filter, and call
      `/us/statutes/coverage` for the live jurisdiction-by-corpusType list.


      - **Search**: Search across all USC, CFR, state, and regulatory sections

      - **Section**: Get metadata, citation, hierarchy, and source links for a
      specific section

      - **Body**: Get the full text of a section

      - **Enactments**: Which state session laws a publisher's own tables list
      against a section (supported jurisdictions only, never a complete history)
  - name: US Session Laws
    description: >-
      State session laws: the acts of each legislature as they were enacted,
      chapter by chapter, before they are folded into a code. A session law is
      what the governor signs. It carries the act's own text, including the
      language it strikes and inserts, its approval and effective dates, and,
      where the publisher prints one, the code sections it changes. That makes
      it the source for "which act changed this section, and when did it take
      effect".


      Every act has a permanent `sessionLawId` (for example
      `SSL_MN_2025R_G_Y2025_C1`, Minnesota Laws 2025, regular session, chapter
      1) whether or not we hold its text, and a citation or bill number such as
      `S.F.No. 1552` is accepted where an id goes. v1 serves STATE acts only.
      Federal session laws (the Statutes at Large, `SAL_` ids) are served by
      `/us/statutes/section`, and `/us/statutes/resolve` points a session-law
      citation here.


      **Start here**: check `/us/statutes/coverage` (free) for what we hold per
      state: each jurisdiction's `sessionLaws` block lists its sessions, which
      are complete or only partly collected, and the `series` and
      `instrumentTypes` that exist. Then **List** a session or a date range to
      get ids, **Get** one act for its record, then **Body** for its text. A law
      missing from a partly collected session is a free 404
      (`session_not_fully_collected`), not proof it does not exist.


      - **List**: everything enacted in a state's session, approved in a window,
      or taking effect on a date

      - **Get**: one act by id or by citation; dates (`effectiveDates` is always
      a list), sources and the code sections it affects

      - **Body**: the act's text as printed, paged by cursor, with amendatory
      markup preserved where the publisher printed it

      - **Batch**: up to 50 ids or citations in one call, the same record as
      Get, billed per law served, with every miss listed and its reason

      - **Changes**: a sync feed of the registry over an integer cursor
      (`sinceId`): what began to be served, was corrected, withdrawn or merged


      The reverse link, from a code section to the acts a publisher's own tables
      list against it, is `GET /us/statutes/section/{actId}/enactments`.
  - name: Board Watches
    description: >-
      Law-change alerts. Subscribe to a **board** (a tracked corpus source,
      identified by `corpusType` plus an optional `state`) and get a webhook or
      email whenever it refreshes with real changes, naming the exact sections
      that changed. Fetch old-vs-new text for any amended section via the change
      diff.


      Boards refresh on their own existing cadence; watching one does not change
      how often it refreshes. Every endpoint here is **free**: authenticated by
      API key and rate-limited, but not credit-metered.


      See the [Law Change Alerts
      guide](https://www.vaquill.ai/docs/api-guide/alerts) for the full
      walkthrough.
  - name: Pricing
    description: >-
      Credit pricing and conversion rates. No authentication required. 1 credit
      = $0.01 USD.
  - name: Credits
    description: >-
      Your own credit balance: what is spendable right now, where it came from,
      and what is about to expire.


      Free and never charged, so it is safe to poll for low-balance alerting or
      to pre-flight a batch job.
externalDocs:
  description: Full API Reference
  url: https://www.vaquill.ai/docs/api-reference/
paths:
  /api/v1/us/statutes/section/{act_id}/body:
    get:
      tags:
        - US Statutes
      summary: Get statute full text
      description: >-
        Get the full text of a statute section in HTML and plain text.


        **Cost**: 6 credits. You are only charged when text is returned:

        not-found (404), failed fetches, and sections whose text is not yet
        ingested

        (`available: false`) are all refunded.


        Works across USC, CFR, and state corpora. The text preserves formatting,

        cross-references, and paragraph numbering as published in the official
        source.


        **Response**: `available: true` with `html` + `plain`, or `available:
        false`

        with a `note` and `creditsConsumed: 0` when the full text is not yet
        ingested

        (metadata is still available from `/us/statutes/section/{actId}`).


        `sourceUrl` is where the government published this text: cite and verify

        against that, not against `source`, which names our storage backend. It
        is null

        when we hold no official link for the section; we never substitute a

        third-party compiler.


        ## Tables and figures (`markdown` / `tables` / `figures`)


        Where a section has a structured rendering, `source` is `r2_render` and
        the

        body keeps what a flat text extraction loses: tables as real tables and
        images

        at the position the publisher prints them.


        - `html` -- `<table>` elements with `<caption>`, `colspan` and
        `rowspan`, and
          `<figure>` / `<img>` elements whose images are hosted on
          `statutes-us.vaquill.ai`
        - `markdown` -- GitHub-flavoured Markdown, tables as pipe tables and
        figures as
          `![alt](url)`
        - `plain` -- tables as one tab-separated line per row, figures as
          `[Figure N: caption]` placeholders
        - `tables` / `figures` -- what the body contains, in document order.
        Each figure
          carries its hosted `url` and its offset into `markdown` and `plain`, so you
          can place images in your own layout. A figure we could not fetch is listed
          with `status: "unavailable"` and keeps its caption in the text.
        - `hasTables` / `hasFigures` -- quick flags


        A section in a covered corpus that has no table and no figure returns

        `tables: []`, `figures: []` and both flags false, with its text in
        `html` and

        `plain` as before. Where a corpus has no structured rendering yet, those
        fields

        are null, meaning "not known", not "none": a table may still be present
        in

        `html`. `markdown` is returned only for `format=all` or
        `format=markdown`: the

        default `format=both` leaves it out, because it is a third full copy of
        the

        text. `format=markdown` returns only `markdown`, and falls back to
        `plain`

        with a `note` when the section has no structured rendering. The price is
        the

        same whichever format you ask for.


        ## Telling the law from the apparatus (`content` / `sourceCredit` /
        `notes`)


        `plain` and `html` are the WHOLE body as the publisher prints it: the
        operative

        text, then the source credit, then the notes apparatus (historical and
        revision

        notes, committee reports, editorial notes, amendments, effective-date
        notes).


        For **United States Code** sections that body is mostly not the law:
        measured

        2026-09-02, the operative text is a median 46% of it across USC, and as
        little

        as 3.4% on `17 U.S.C. § 107`.


        So the granule is split into three additional fields, using the field

        delimiters GPO publishes in the source:


        - `content` -- the operative text, and nothing else

        - `sourceCredit` -- the credit line, e.g. `(Pub. L. 94-553, ...)`

        - `notes` -- the apparatus, kept because it is the legislative history


        Use `content` if you are feeding sections to a model: the full body
        invites it

        to quote a 1992 amendment note as the law in force.


        Two `format` values act on the split, and the difference between them is
        how

        many bytes cross the wire, not what the law says:


        - `format=content` drops `plain`/`html` and returns all three split
        fields. The
          apparatus is still on the response, because for a legislative-history or
          effective-date question it IS the answer.
        - `format=operative` drops `notes` as well, returning `content` +
          `sourceCredit` and nothing else. Measured on `17 U.S.C. § 107`: 95,217 bytes
          at `both`, 61,003 at `plain`, 30,545 at `content`, 1,564 at `operative`. Same
          6 credits either way -- the fetch is identical, so this buys bandwidth and
          prompt budget, not a discount.

        Reach for `operative` when you are putting the law in front of a model
        or a

        reader and the notes are noise. Reach for `content` when you may need to
        read

        the apparatus but want to keep it clearly separated from the law.


        ⚠️ USC only. CFR and the state corpora carry no equivalent structure in
        their

        sources, so all three fields are null there and `plain` remains the
        whole body.

        Null means "we cannot split this reliably", never "this section is
        empty".

        Both `content` and `operative` fall back to serving `plain` with an
        explanatory

        `note` on a corpus that cannot be split, rather than returning a
        response that

        claims to carry the text and does not.


        Pass `structured=true` to also get `markdown` (the body as nested
        Markdown lists)

        and `subsections` (a tree you can address by pincite, e.g. `(b)(2)`,
        each node

        carrying its pincite path and full pinpoint citation). Same cost.


        ## Point-in-time (`asOf`)


        Pass `asOf=YYYY-MM-DD` to get the text as it stood on that date instead
        of

        today's. Same cost.


        **One parameter, two engines, and `asOf.engine` says which one
        answered.** Read

        it before anything else in the block, because the two make different
        promises

        and `isBounded` does not mean the same thing under each.


        `engine: "stored_edition"` -- we hold the publisher's own printed
        editions for

        this corpus and return one verbatim. CFR annual editions, the US Code,
        the

        Copyright Compendium and OFAC FAQs. Here `isBounded: true` means your
        date fell

        inside an edition we actually hold, which is a verified published
        printing.


        Coverage under this engine is ENUMERATED, not continuous, and outside
        the CFR

        annual editions it is currently sparse. A date in a gap between two held

        editions returns `source: "unavailable"`, `isBounded: false`, no text,
        and an

        `outOfCoverageReason` naming what we do hold. It is never answered from
        a

        neighbouring edition, because the text may have changed in the gap.
        **For the US

        Code this is the common case today: most historical dates fall between
        the

        editions we hold and are reported out of coverage, with
        `outOfCoverageReason`

        naming the editions that are available.** Do not read the presence of
        this

        parameter as full US Code point-in-time coverage.


        `engine: "observed_change"` -- every other corpus. **A reconstruction,
        not an

        archive.** The corpus holds one current text per citation; an earlier
        one is

        rebuilt from the before-side of the first change we OBSERVED after your
        date,

        through the same resolver the watch diff uses. Here `isBounded: true` is
        the

        WEAK claim, described below.


        The `asOf` block reports:


        - `source` -- on `observed_change`: `live` (nothing captured after your
        date, so
          today's text stood then), `reconstructed`, or `unavailable`. On
          `stored_edition`: `published` or `unavailable`
        - `outOfCoverageReason` -- why no text came back, when none did

        - `basisChangeId` -- the change event this answer rests on, readable at
          `/us/statutes/section/{actId}/changes`
        - `observedFrom` -- how far back the evidence reaches for this section

        - `isBounded` -- **read this one, and read `engine` first.** On
          `observed_change`, true means we observed no change affecting your date, which
          is not the same as there having been none: capture began long after the corpus
          did and is per-source. On `stored_edition` it is inverted and stronger, as
          above: true means a held edition governed your date.

        `html` is never returned on this path: the text is plain, and
        synthesising markup

        the publisher never printed would be a wrong answer on the endpoint
        whose job is

        fidelity.


        A section that did not exist on that date returns `available: false`
        with

        `asOf.existed: false` and IS charged, the same way an unresolved
        citation is

        charged on `/resolve`: a confident negative is the answer. On
        `observed_change`,

        a section we know changed but cannot rebuild returns `source:
        "unavailable"` and

        is refunded. On `stored_edition`, an out-of-coverage date is an ANSWER
        about what

        we hold and is charged, which is the same rule the CFR annual editions
        have

        always followed.
      operationId: get_section_body_api_v1_us_statutes_section__act_id__body_get
      parameters:
        - name: act_id
          in: path
          required: true
          schema:
            type: string
            minLength: 3
            maxLength: 200
            description: >-
              Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter
              21, Section 1983, which a lawyer writes as 42 U.S.C. § 1983). Take
              it from a `/us/statutes/search` or `/us/statutes/resolve` result.


              A citation also works here: `26 U.S.C. § 1`, `42 USC 1983` or
              `Cal. Civ. Code § 1950.5` is resolved with the same resolver
              `/resolve` uses, and the section is served. A citation costs this
              endpoint's price PLUS the `/resolve` price (2 credits), charged as
              its own line whether or not it resolves, exactly as `/resolve`
              charges; that is the same total as calling `/resolve` and then
              this endpoint, in one round trip. An exact act_id costs only this
              endpoint's price. When a citation resolves, or when the id only
              matched after surrounding whitespace, quotes or a trailing period
              were removed, the response carries `resolvedFrom` saying what your
              input was matched as. Check it the way you would check a
              `/resolve` answer. A citation containing `/` cannot travel in a
              URL path segment; resolve it with `GET /us/statutes/resolve`
              instead.


              Do not assemble an id from a citation: the title and section are
              derivable, but the CHAPTER is not, so `USC_T26_S1` misses. A miss
              returns 404 with `reason` and, where the section exists under
              another id, `didYouMean`.


              State session laws (acts as enacted, ids starting `SSL_`) are not
              code sections: read them at `/us/session-laws/{sessionLawId}`.
            examples:
              - CFR_T17_P240_S240_10b5_1
            title: Act Id
          description: >-
            Section identifier, e.g. `USC_T42_C21_S1983` (Title 42, Chapter 21,
            Section 1983, which a lawyer writes as 42 U.S.C. § 1983). Take it
            from a `/us/statutes/search` or `/us/statutes/resolve` result.


            A citation also works here: `26 U.S.C. § 1`, `42 USC 1983` or `Cal.
            Civ. Code § 1950.5` is resolved with the same resolver `/resolve`
            uses, and the section is served. A citation costs this endpoint's
            price PLUS the `/resolve` price (2 credits), charged as its own line
            whether or not it resolves, exactly as `/resolve` charges; that is
            the same total as calling `/resolve` and then this endpoint, in one
            round trip. An exact act_id costs only this endpoint's price. When a
            citation resolves, or when the id only matched after surrounding
            whitespace, quotes or a trailing period were removed, the response
            carries `resolvedFrom` saying what your input was matched as. Check
            it the way you would check a `/resolve` answer. A citation
            containing `/` cannot travel in a URL path segment; resolve it with
            `GET /us/statutes/resolve` instead.


            Do not assemble an id from a citation: the title and section are
            derivable, but the CHAPTER is not, so `USC_T26_S1` misses. A miss
            returns 404 with `reason` and, where the section exists under
            another id, `didYouMean`.


            State session laws (acts as enacted, ids starting `SSL_`) are not
            code sections: read them at `/us/session-laws/{sessionLawId}`.
        - name: format
          in: query
          required: false
          schema:
            enum:
              - all
              - both
              - html
              - markdown
              - plain
              - content
              - operative
            type: string
            description: >-
              Which representations to return. `both` (the default) returns
              `html` and `plain`. A long section carries the same text twice
              that way, so `plain` or `html` alone roughly halves the payload.
              Cost is unchanged: the fetch is the same either way.


              `all` adds `markdown` where the section has a structured
              rendering. It is opt-in because it is a third full copy of the
              text (about 600,000 extra characters on `49 CFR 172.101`), which a
              model-facing client would pay for in tokens without asking.


              `markdown` returns only `markdown`. On a section with no
              structured rendering it falls back to `plain` with a `note` saying
              so, never to an empty body. `tables` and `figures` are returned on
              every format, because they are small and describe the text you
              received.


              `content` omits `html` and `plain` and returns the split fields
              (`content`, `sourceCredit`, `notes`).


              `operative` omits `notes` as well, leaving `content` +
              `sourceCredit`: the law and what enacted it, and nothing else.
              This is the smallest representation of a section, and on a
              note-heavy section it is the difference between a payload that
              fits in a prompt and one that does not. Measured on `17 U.S.C. §
              107`: 95,217 bytes at `both`, 30,545 at `content`, 1,564 at
              `operative`, all for the same 6 credits.


              Only United States Code sections can be split, so on any other
              corpus both values fall back to returning `plain` with a `note`
              saying why -- `content` will be null there, so read `note` rather
              than assuming the section was empty.
            examples:
              - operative
            default: both
            title: Format
          description: >-
            Which representations to return. `both` (the default) returns `html`
            and `plain`. A long section carries the same text twice that way, so
            `plain` or `html` alone roughly halves the payload. Cost is
            unchanged: the fetch is the same either way.


            `all` adds `markdown` where the section has a structured rendering.
            It is opt-in because it is a third full copy of the text (about
            600,000 extra characters on `49 CFR 172.101`), which a model-facing
            client would pay for in tokens without asking.


            `markdown` returns only `markdown`. On a section with no structured
            rendering it falls back to `plain` with a `note` saying so, never to
            an empty body. `tables` and `figures` are returned on every format,
            because they are small and describe the text you received.


            `content` omits `html` and `plain` and returns the split fields
            (`content`, `sourceCredit`, `notes`).


            `operative` omits `notes` as well, leaving `content` +
            `sourceCredit`: the law and what enacted it, and nothing else. This
            is the smallest representation of a section, and on a note-heavy
            section it is the difference between a payload that fits in a prompt
            and one that does not. Measured on `17 U.S.C. § 107`: 95,217 bytes
            at `both`, 30,545 at `content`, 1,564 at `operative`, all for the
            same 6 credits.


            Only United States Code sections can be split, so on any other
            corpus both values fall back to returning `plain` with a `note`
            saying why -- `content` will be null there, so read `note` rather
            than assuming the section was empty.
        - name: structured
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              When true, also return a `subsections` tree parsed from the text
              for pincite addressing, and `markdown` as that tree rendered as
              nested Markdown lists. Same cost.


              `structured=true` OWNS `markdown`: on every `format`, and on every
              `source`, `markdown` is the nested-list rendering, never the
              table-preserving rendering a `r2_render` section otherwise returns
              for `format=all`/`markdown` (a `note` says so when that happens).
              Ask without `structured` for the tables. With `format=markdown`
              the nested lists are returned alone, without `html` or `plain`.
            examples:
              - true
            default: false
            title: Structured
          description: >-
            When true, also return a `subsections` tree parsed from the text for
            pincite addressing, and `markdown` as that tree rendered as nested
            Markdown lists. Same cost.


            `structured=true` OWNS `markdown`: on every `format`, and on every
            `source`, `markdown` is the nested-list rendering, never the
            table-preserving rendering a `r2_render` section otherwise returns
            for `format=all`/`markdown` (a `note` says so when that happens).
            Ask without `structured` for the tables. With `format=markdown` the
            nested lists are returned alone, without `html` or `plain`.
        - name: asOf
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                pattern: ^\d{4}-\d{2}-\d{2}$
              - type: 'null'
            description: >-
              Return the section's text as it stood on this date (`YYYY-MM-DD`)
              instead of today's. Same cost.


              **This is a reconstruction, not an archive.** The corpus holds one
              current text per citation; an earlier one is rebuilt from the
              before-side of the first change we OBSERVED after your date. The
              `asOf` block on the response says which version you got
              (`source`), what it rests on (`basisChangeId`), how far back the
              evidence reaches (`observedFrom`), and whether the answer is
              bounded by when capture began rather than by the law
              (`isBounded`). Read `isBounded` before citing the text.


              A section that did not exist yet returns `available: false` with
              `asOf.existed: false`, which is a real answer and is charged. A
              section we know changed but cannot rebuild returns `source:
              "unavailable"` and IS refunded, because you asked for a historical
              text and did not get one.


              A date that does not exist on a calendar (`2026-02-30`) is a 422
              and is not charged.
            examples:
              - '2026-01-15'
            format: date
            title: Asof
          description: >-
            Return the section's text as it stood on this date (`YYYY-MM-DD`)
            instead of today's. Same cost.


            **This is a reconstruction, not an archive.** The corpus holds one
            current text per citation; an earlier one is rebuilt from the
            before-side of the first change we OBSERVED after your date. The
            `asOf` block on the response says which version you got (`source`),
            what it rests on (`basisChangeId`), how far back the evidence
            reaches (`observedFrom`), and whether the answer is bounded by when
            capture began rather than by the law (`isBounded`). Read `isBounded`
            before citing the text.


            A section that did not exist yet returns `available: false` with
            `asOf.existed: false`, which is a real answer and is charged. A
            section we know changed but cannot rebuild returns `source:
            "unavailable"` and IS refunded, because you asked for a historical
            text and did not get one.


            A date that does not exist on a calendar (`2026-02-30`) is a 422 and
            is not charged.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatuteBodyResponse'
              example:
                actId: USC_T42_C21_S1983
                html: >-

                  <p>Every person who, under color of any statute, ordinance,
                  regulation, custom, or usage, of any State or Territory or the
                  District of Columbia, subjects, or causes to be subjected, any
                  citizen of the United States ...</p>
                plain: >-
                  Every person who, under color of any statute, ordinance,
                  regulation, custom, or usage, of any State or Territory or the
                  District of Columbia, subjects, or causes to be subjected, any
                  citizen of the United States or other person within the
                  jurisdiction thereof to the deprivation of any rights,
                  privileges, or immunities secured by the Constitution and
                  laws, shall be liable to the party injured ...
                source: r2_s3
                available: true
                processingTimeMs: 8.4
                creditsConsumed: 6
        '404':
          description: Section not found. `reason` says why and `didYouMean` what to send.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatuteSectionNotFoundError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    StatuteBodyResponse:
      properties:
        actId:
          type: string
          title: Actid
          description: >-
            The act_id of the section served. Equal to your request unless
            `resolvedFrom` is set, in which case it is the id your citation or
            cleaned-up input resolved to.
          examples:
            - USC_T42_C21_S1983
        html:
          anyOf:
            - type: string
            - type: 'null'
          title: Html
          description: >-
            The section text as HTML. When `source` is `r2_render` this is our
            structured rendering of the publisher's source: real `<table>`
            elements (with `<caption>`, `colspan` and `rowspan`) and `<figure>`
            / `<img>` elements at the position the publisher prints them, with
            images hosted on `statutes-us.vaquill.ai`. When `source` is `r2_s3`
            this is the publisher's own markup (tables, paragraph structure,
            history lines), cut to the section's own content where we recognise
            the publisher's page layout. For any other `source` the text was not
            held as per-section HTML, and `html` carries the same text as
            `plain` with no markup.
        plain:
          anyOf:
            - type: string
            - type: 'null'
          title: Plain
          description: Plain text version.
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
          description: >-
            Which copy the text came from: `r2_render` (our structured
            rendering, carrying `markdown`, `tables` and `figures`), `r2_s3`
            (the publisher's page for this section), `r2_text` (our per-section
            text extraction), `qdrant_reconstructed` (reassembled from indexed
            passages), and on `asOf` requests `stored_edition` or
            `corpus_change_history`. A storage identifier, not a citation: cite
            `sourceUrl`.
        sourceUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurl
          description: >-
            Where this text was published by the government, so the bytes you
            were served can be cited and verified against the official record.
            Null when we hold no publishable link for the section: a third-party
            compiler is never served here, and an absent link is the correct
            answer in that case. `source` is a storage identifier and is NOT a
            citation.
          examples:
            - >-
              https://www.govinfo.gov/content/pkg/USCODE-2024-title17/html/USCODE-2024-title17-chap1-sec107.htm
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
          description: >-
            The OPERATIVE TEXT of the section, with the source credit and the
            notes apparatus removed. This is the law; `plain` is the law plus
            everything the publisher prints around it.


            Populated for **United States Code** sections, where GPO delimits
            the fields in the granule it publishes. Null for CFR and for state
            corpora, whose sources carry no equivalent structure -- null means
            "we cannot split this reliably", never "this section is empty", and
            `plain` is still the whole body.


            Worth using if you feed sections to a model: the operative text is a
            median 46% of `plain` across USC and as little as 3.4% (`17 U.S.C. §
            107`, where nearly all of the body is committee reports and
            amendment notes). A model handed the full body can quote a 1992
            amendment note as the law in force.
          examples:
            - >-
              Notwithstanding the provisions of sections 106 and 106A, the fair
              use...
        sourceCredit:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourcecredit
          description: >-
            The publisher's credit line for the section, e.g. `(Pub. L. 94-553,
            title I, §101, Oct. 19, 1976, 90 Stat. 2546; ...)`. Split out of the
            body rather than left inside it.


            The same value is also on `GET /us/statutes/section/{actId}` as
            `sourceCredit`; it is repeated here so a caller fetching the text
            does not need a second call to know what enacted it.
          examples:
            - (Pub. L. 94-553, title I, §101, Oct. 19, 1976, 90 Stat. 2546)
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
          description: >-
            The notes apparatus the publisher prints after the section:
            Historical and Revision Notes, committee reports, Editorial Notes
            (codification and amendments), Statutory Notes and Related
            Subsidiaries (effective dates), and any guidelines reprinted by the
            editors.


            Kept, not discarded: it is the legislative history, and it is the
            reason a section's body can be twenty times the length of the law.
            It is simply NOT the operative text, so it is served as its own
            field. Null where we cannot split the body.


            Also null, deliberately, when you pass `format=operative`: that is
            the one format that asks us to leave the apparatus off the wire.
            Null there means "not sent", not "none exists" -- the same request
            at `format=content` returns it.
          examples:
            - |-
              Historical and Revision Notes

              house report no. 94–1476...
        available:
          type: boolean
          title: Available
          description: Whether full text is available.
          default: true
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
          description: Note if text is unavailable.
        markdown:
          anyOf:
            - type: string
            - type: 'null'
          title: Markdown
          description: >-
            The body as GitHub-flavoured Markdown. When `source` is `r2_render`
            this is the structured rendering: tables as GFM pipe tables (a
            caption line above, footnotes below, multi-level headers joined as
            `Parent / Child`) and figures as `![alt](url)` at their position in
            the text. Returned only when `format` is `all` or `markdown`, not on
            the default `both`, where it would be a third full copy.


            For a section with no structured rendering, `markdown` is null
            unless you pass `structured=true`, in which case it is the body as
            nested Markdown lists (the pre-existing behaviour). When both exist
            the structured rendering wins, because it is the one that keeps the
            tables; `subsections` is returned either way.
        tables:
          anyOf:
            - items:
                $ref: '#/components/schemas/BodyTable'
              type: array
            - type: 'null'
          title: Tables
          description: >-
            The tables in the body, in document order, with their size. An empty
            list means the section has none. Null means not known: the section's
            corpus has no structured rendering yet, so a table may still be
            present in `html`.
        figures:
          anyOf:
            - items:
                $ref: '#/components/schemas/BodyFigure'
              type: array
            - type: 'null'
          title: Figures
          description: >-
            The figures, equations and form images in the body, in document
            order, with hosted image urls and each one's offset into `markdown`
            and `plain`. An empty list means the section has none. Null means
            not known: the section's corpus has no structured rendering yet.
        hasTables:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Hastables
          description: >-
            True when the body contains at least one table, false when it
            contains none. Null when not known, because the section's corpus has
            no structured rendering yet.
        hasFigures:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Hasfigures
          description: >-
            True when the body contains at least one figure, equation or form
            image, false when it contains none. Null when not known, because the
            section's corpus has no structured rendering yet.
        subsections:
          anyOf:
            - items:
                $ref: '#/components/schemas/SubsectionNode'
              type: array
            - type: 'null'
          title: Subsections
          description: >-
            The section broken into its lettered and numbered subsections,
            nested as they appear in the text. Use it to quote or link a single
            clause rather than the whole section. Present only when
            `structured=true`.
        asOf:
          anyOf:
            - $ref: '#/components/schemas/AsOfProvenance'
            - type: 'null'
          description: >-
            Present only when the request passed `asOf`. Says WHICH version of
            the section you are holding and how far the evidence for it goes.
            Read `isBounded` before treating the text as the law on that date.
        resolvedFrom:
          anyOf:
            - $ref: '#/components/schemas/SectionIdentifierResolution'
            - type: 'null'
          description: >-
            Null when the section is exactly the act_id you sent. Otherwise how
            your input was matched: a citation, or an act_id with transport
            damage (whitespace, quotes, a trailing period) removed.
        processingTimeMs:
          type: number
          title: Processingtimems
          description: >-
            Server-side time for this request in milliseconds, excluding network
            transit. Useful for spotting a slow query; not billed on.
          default: 0
          examples:
            - 240.5
        creditsConsumed:
          type: number
          title: Creditsconsumed
          description: >-
            Credits actually charged for this call. Read it rather than assuming
            the list price: failed and refunded work bills 0, and batch
            endpoints charge per item returned, so a partial result costs less
            than a full one.
          default: 0
          examples:
            - 4
      type: object
      required:
        - actId
      title: StatuteBodyResponse
      description: Full text of a statute section in HTML and/or plain text.
    StatuteSectionNotFoundError:
      properties:
        detail:
          type: string
          title: Detail
          description: >-
            Human-readable reason, safe to show a user. Branch on `reason`, not
            on this string.
          examples:
            - >-
              Section not found. This id does not exist, but the section does,
              ...
        actId:
          type: string
          title: Actid
          description: The identifier exactly as you sent it.
        reason:
          type: string
          enum:
            - assembled_id
            - unresolved_citation
            - not_in_corpus
            - missing_act_id
            - state_session_law
          title: Reason
          description: >-
            `assembled_id` -- the id does not exist but the section does, under
            the ids in `didYouMean` (usually an id built by hand from a
            citation, or sent in the wrong case). `unresolved_citation` -- the
            input is a citation and resolves to nothing we hold; check it with
            `/us/statutes/resolve`. `not_in_corpus` -- nothing matched.
            `missing_act_id` -- the URL left the id out, so an endpoint name
            (`body`, `changes`, ...) sits where the id goes; `detail` names the
            path you meant. Never charged. `state_session_law` -- the id starts
            `SSL_`: it names a STATE session law (an act as enacted), which is
            not a code section; read it at `GET
            /us/session-laws/{sessionLawId}`.
          examples:
            - assembled_id
        didYouMean:
          items:
            type: string
          type: array
          title: Didyoumean
          description: >-
            Real act_ids for the section your id pointed at, best first, at most
            3.
          examples:
            - - USC_T26_C1_S1
      type: object
      required:
        - detail
        - actId
        - reason
      title: StatuteSectionNotFoundError
      description: The 404 from any `/us/statutes/section/{act_id}/...` route.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    BodyTable:
      properties:
        tableId:
          type: string
          title: Tableid
          examples:
            - t1
        order:
          type: integer
          title: Order
          description: 1-based position among the section's tables.
          default: 0
        caption:
          anyOf:
            - type: string
            - type: 'null'
          title: Caption
          description: The table's caption, when it has one.
        rows:
          type: integer
          title: Rows
          description: Row count, header rows included.
          default: 0
        cols:
          type: integer
          title: Cols
          description: Column count.
          default: 0
      type: object
      required:
        - tableId
      title: BodyTable
      description: One table inside a rendered section body.
    BodyFigure:
      properties:
        figureId:
          type: string
          title: Figureid
          description: >-
            Stable id for this figure, also carried on the `<figure
            data-figure-id>` element in `html`. Deterministic, so it does not
            change between renders of the same source.
          examples:
            - fig_3f2a9c0d1e4b5a67
        kind:
          type: string
          enum:
            - figure
            - equation
            - image
            - form
          title: Kind
          description: What the image is. `equation` renders inline in the text.
          default: figure
        caption:
          anyOf:
            - type: string
            - type: 'null'
          title: Caption
          description: The publisher's caption, when it prints one.
        alt:
          anyOf:
            - type: string
            - type: 'null'
          title: Alt
          description: Alternative text for the image.
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
          description: >-
            Where the image is hosted, always on `statutes-us.vaquill.ai`. A
            format a browser cannot display (TIFF, EPS, PDF) is served as a PNG.
            Null when `status` is `unavailable`.
          examples:
            - https://statutes-us.vaquill.ai/figures/9b2e...c41.gif
        sourceUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurl
          description: >-
            The image as the government publisher serves it. Use it for a "view
            at source" link, especially when `status` is `unavailable`. Null
            when we hold no publishable link.
          examples:
            - https://www.ecfr.gov/graphics/er13my11.020.gif
        width:
          anyOf:
            - type: integer
            - type: 'null'
          title: Width
          description: Pixel width of the hosted image.
        height:
          anyOf:
            - type: integer
            - type: 'null'
          title: Height
          description: Pixel height of the hosted image.
        mimeType:
          anyOf:
            - type: string
            - type: 'null'
          title: Mimetype
          examples:
            - image/gif
        order:
          type: integer
          title: Order
          description: 1-based position among the section's figures.
          default: 0
        offsetMarkdown:
          anyOf:
            - type: integer
            - type: 'null'
          title: Offsetmarkdown
          description: >-
            Character offset of this figure's placeholder in `markdown`, so a
            client can splice the image into its own layout.
        offsetPlain:
          anyOf:
            - type: integer
            - type: 'null'
          title: Offsetplain
          description: >-
            Character offset of this figure's `[Figure N: ...]` placeholder in
            `plain`.
        status:
          type: string
          enum:
            - hosted
            - unavailable
          title: Status
          description: >-
            `unavailable` means the publisher's image could not be fetched. The
            figure is still listed, and its caption and placeholder stay in the
            text, so a missing figure is never silently dropped.
          default: hosted
      type: object
      required:
        - figureId
      title: BodyFigure
      description: One figure, equation or form image inside a rendered section body.
    SubsectionNode:
      properties:
        label:
          type: string
          title: Label
          description: The marker as printed, e.g. `(b)` or `(2)`.
        pincite:
          type: string
          title: Pincite
          description: >-
            Full path to this subsection from the top of the section, e.g.
            `(b)(2)`. Append it to the section's citation to point at this exact
            passage: 42 U.S.C. § 1983(b)(2). Lawyers call that a pincite, a
            citation to the precise place rather than the whole section.
          examples:
            - (b)(2)
        type:
          type: string
          title: Type
          description: >-
            The drafting level of this node: `subsection`, `paragraph`,
            `subparagraph`, `clause`, or `subclause`. Use it to render the
            marker style (letters, numbers, roman).
          default: subsection
        citation:
          anyOf:
            - type: string
            - type: 'null'
          title: Citation
          description: >-
            Full pinpoint citation when the section citation is known, e.g. `42
            U.S.C. § 1983(b)(2)`.
        text:
          type: string
          title: Text
          description: This node's own text, excluding nested children.
          default: ''
        children:
          items:
            $ref: '#/components/schemas/SubsectionNode'
          type: array
          title: Children
          description: Nested subsections one level deeper.
      type: object
      required:
        - label
        - pincite
      title: SubsectionNode
      description: One node in a section's subsection tree (see `/body?structured=true`).
    AsOfProvenance:
      properties:
        requested:
          type: string
          title: Requested
          description: The date you asked for, echoed back (`YYYY-MM-DD`).
          examples:
            - '2026-01-15'
        engine:
          type: string
          enum:
            - stored_edition
            - observed_change
          title: Engine
          description: >-
            WHICH BACKEND ANSWERED. `asOf` is one parameter over two engines and
            they make different promises.


            `stored_edition`: the answer is a publisher's own printed edition of
            the text, held verbatim. Used wherever we hold published editions,
            which today is `corpusType=CFR_ANNUAL` (annual editions per title),
            the US Code, the Copyright Compendium and OFAC FAQs. The date is
            resolved to a held edition and that edition's text is returned as
            printed.


            Coverage under this engine is per corpus and is NOT continuous. The
            CFR annual editions tile the calendar per title; the others are
            ENUMERATED editions with gaps between them. A date that falls in a
            gap returns `source: "unavailable"` with `outOfCoverageReason` and
            NO text, rather than the neighbouring edition, because the text may
            have changed in the gap. For the US Code in particular, most dates
            are currently out of coverage: see `outOfCoverageReason` for which
            editions we hold.


            `observed_change`: the answer is RECONSTRUCTED from changes we
            observed, and reaches back only as far as capture began for that
            source. Every other corpus.


            Read this before `isBounded`, which does not make the same claim on
            both engines.
          default: observed_change
          examples:
            - observed_change
        source:
          type: string
          enum:
            - live
            - reconstructed
            - unavailable
            - published
          title: Source
          description: >-
            The detail WITHIN the engine above.


            On `observed_change` -- `live`: we captured no change to this
            section after your date, so today's text is what stood then as far
            as we ever saw. `reconstructed`: rebuilt from the before-side of the
            first change we captured after your date. `unavailable`: we know it
            changed but cannot rebuild the earlier text, so no text is returned.
            That is different from the section being empty, and different again
            from it not existing.


            On `stored_edition` -- `published`: an edition we hold answered,
            verbatim. `unavailable`: the date is out of coverage for this
            section and no text is returned, and `outOfCoverageReason` says why
            in a sentence. Out of coverage means the date falls outside every
            edition we hold, or inside a gap between two of them; it is never
            answered from a neighbouring edition.
          examples:
            - reconstructed
        existed:
          type: boolean
          title: Existed
          description: >-
            False when the earliest thing we ever captured for this section is
            its ADDITION and that addition postdates your date, so it
            demonstrably did not exist yet. A real answer, not a miss.
        basisChangeId:
          anyOf:
            - type: integer
            - type: 'null'
          title: Basischangeid
          description: >-
            The change event whose before-side supplied this text. Null when
            `source` is `live`. Pass it to
            `/us/statutes/section/{actId}/changes` to see the event this answer
            rests on.
          examples:
            - 91
        observedFrom:
          anyOf:
            - type: string
            - type: 'null'
          title: Observedfrom
          description: >-
            The earliest change we ever captured for this section. Null when we
            captured none. This is how far back the reconstruction can see, and
            it is a property of when capture began for this source, not of the
            age of the law.
          examples:
            - '2026-08-09T04:10:00Z'
        resolvedEditionYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Resolvededitionyear
          description: >-
            `stored_edition` only. The revision year actually served, read from
            the edition's own printed revision statement. 🔴 This is NOT always
            the year the schedule computes: a publisher reprints an unchanged
            volume into the next year without re-dating it, so the 2024 printing
            of 4 CFR is the January 1 2019 revision. Render THIS year, never
            `scheduledEditionYear`.
          examples:
            - 2019
        scheduledEditionYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Schedulededitionyear
          description: >-
            `stored_edition` only. The edition the revision schedule says SHOULD
            cover your date. Differs from `resolvedEditionYear` whenever the
            publisher reprinted an unchanged volume. Exposed so the disagreement
            is auditable, not so it can be displayed.
          examples:
            - 2024
        editionsObserved:
          anyOf:
            - items:
                type: integer
              type: array
            - type: 'null'
          title: Editionsobserved
          description: >-
            `stored_edition` only. Every edition year in which this exact text
            was observed, enumerated. An ENUMERATION, not a range: a year
            between the first and last that is absent here is an edition nobody
            read, and a date resolving to it is reported out of coverage rather
            than answered from a neighbour.
          examples:
            - - 2014
              - 2015
              - 2016
        outOfCoverageReason:
          anyOf:
            - type: string
            - type: 'null'
          title: Outofcoveragereason
          description: >-
            Why no text was returned, in a sentence safe to show a reader. Null
            when text was returned.
        isBounded:
          type: boolean
          title: Isbounded
          description: >-
            ⚠️ This flag does NOT make the same claim on both engines. Read
            `engine` first.


            On `stored_edition`, TRUE means your date falls inside the editions
            we actually parsed for this title, so the text is a verified
            published printing rather than an inference. FALSE means out of
            coverage, and no text is returned.


            On `observed_change`, TRUE means: we observed no change affecting
            your date, and that is NOT the same as there having been none.


            Set when your date predates `observedFrom`, or when we captured no
            change for this section at all. Change capture began long after the
            corpus did and is per-source, so a bounded answer is our best
            reconstruction rather than a verified historical text. Surface it.
            Rendering a bounded answer as authoritative point-in-time law makes
            a claim we did not make.
        coverage:
          type: string
          title: Coverage
          description: Prose statement of the same limit, safe to show a reader verbatim.
      type: object
      required:
        - requested
        - source
        - existed
        - isBounded
        - coverage
      title: AsOfProvenance
      description: >-
        Where an `asOf` body came from, and how far the evidence reaches.


        Every field but `text` on the parent exists so this answer cannot be

        over-read. The corpus holds ONE current text per citation; an earlier
        one is

        RECONSTRUCTED from observed changes, and observation started when it
        started.
    SectionIdentifierResolution:
      properties:
        input:
          type: string
          title: Input
          description: The identifier exactly as you sent it.
          examples:
            - 26 U.S.C. § 1
        actId:
          type: string
          title: Actid
          description: The act_id it matched. Send this next time to skip resolution.
          examples:
            - USC_T26_C1_S1
        via:
          type: string
          enum:
            - normalized_id
            - citation
          title: Via
          description: >-
            `citation` -- your input was a citation, resolved with the same
            resolver as `GET /us/statutes/resolve`. Check it the way you would
            check a `/resolve` answer. `normalized_id` -- your input was an
            act_id carrying surrounding whitespace, quotes, a trailing period or
            double percent-encoding, which were removed.
          examples:
            - citation
        subsection:
          anyOf:
            - type: string
            - type: 'null'
          title: Subsection
          description: >-
            The pincite your citation carried, e.g. `(h)(11)` for `26 U.S.C. §
            1(h)(11)`. The WHOLE section is served; use `structured=true` on
            `/body` to address the subsection.
          examples:
            - (h)(11)
      type: object
      required:
        - input
        - actId
        - via
      title: SectionIdentifierResolution
      description: >-
        How the identifier you sent was matched, when it was not an exact
        act_id.


        Present only when the input did NOT match as sent. Absent (null) means
        the

        section is exactly the act_id in your request.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...` (preferred).
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        The same API key as a bare header value: `X-API-Key: vq_key_...`.
        Equivalent to the Bearer form.
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: >-
        The same API key as a query parameter: `?api_key=vq_key_...`. Use only
        where you cannot set a header. A URL can end up in proxy and server
        logs, browser history and shared links, so prefer either header form,
        and rotate a key that has leaked.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.