> ## 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 many state session laws at once, by id or citation

> Read up to 50 STATE session laws in one call: the same record
`GET /us/session-laws/{sessionLawId}` returns, for each id or citation in `ids`, in the order
you sent them. Use it when you are enriching a list (a sync job holding ids from
`/us/session-laws/list` or `/us/session-laws/changes`, or an agent handed a memo with a dozen
session-law citations) instead of making a round trip per law.

**When to use this instead of `POST /us/statutes/resolve`.** `resolve` identifies a citation: it
costs 2 credits per item and answers with a `sessionLaw` match block (title, dates, source
link), never the record or its text. This route returns the FULL record of each law, the same as
`GET /us/session-laws/{sessionLawId}` (2 credits per law served), and optionally the
first page of its text. Use `resolve` to find the id; use this route to read many laws in one
request instead of one call each, which matters under the default limit of 30 requests per
minute per key (a plan raises it).

**Cost**: 2 credits per law served, the single-lookup price. Batching buys a round
trip, not a discount. A miss is not charged, and `creditsConsumed` reports what was actually
billed. A citation in `ids` also pays the `/us/statutes/resolve` price (2 credits), as its
own ledger line, exactly as `GET /us/session-laws/{sessionLawId}` charges a citation: kept
whenever we gave a verdict (a served law, an unresolved or ambiguous citation) and refunded
when the session it points into is only partly collected, or when we failed. An id never pays it.

**Every entry gets an answer.** A served law is in `laws`; every other entry is in `notFound` with
a `status` (`not_found`, `unparsed`, `ambiguous`, `needs_jurisdiction`,
`session_not_fully_collected`, `federal`, or `error`), the finer `reason` the single route's 404
carries, the same `detail` sentence, and the candidates where there are any. Nothing is dropped
silently, so a shorter `laws` array can always be explained: every distinct entry is in `laws`,
in `notFound`, or, when it names a law an earlier entry already produced, in `resolved`.

**Mapping your inputs.** `laws` holds only the laws served, so it cannot be zipped back onto
`ids` by position. Each law carries the `input` it answers, and `resolved` lists every input that
did not match an id exactly as sent (a citation, or an id cleaned of whitespace, quotes or a
trailing period) with the id it resolved to. **Duplicates are collapsed first**: an entry
identical to an earlier one after trimming is dropped, order is kept, and `deduped` says how many.
Two DIFFERENT spellings of one law (`S.F.No. 1552` and its `sessionLawId`) serve the law once,
under the first, bill it once, and list both in `resolved`.

**Statuses.** `resolved`: served. `not_held`: served as a record, because the registry knows the
law and holds no text (`textStatus: not_held`). `not_found`: no law carries the id. `unparsed`: it
reads as a citation no state session law we hold carries. `ambiguous`: the citation names several
laws, all in `didYouMean`, none chosen for you (Minnesota 2025 has two Chapter 1s).
`needs_jurisdiction`: a form several states share, naming none: send `jurisdiction` or name the
state. `session_not_fully_collected`: nothing matched in a session we have only partly collected, so
the law may exist; never charged, the resolve price included. `federal`: federal acts are served
by `/us/statutes/section`. `error`: WE failed to look this entry up. It says nothing about the law, is refunded
in full, and is safe to resend.

**`jurisdiction`** scopes how every citation in the batch is read, exactly as the same parameter
does on the single route. It is validated before anything is charged: a bad code is a 422.

**`includeBody`** adds the FIRST page of each served law's text (about 30,000 characters)
as `body`, at the body price (6 credits) per law whose page is served, charged after the
work because the count is not knowable up front. It multiplies with the batch: 50 laws at
2 + 6 is 400 credits in one call. A law whose text is withheld, not held or
empty returns `body: null` and is not charged for it. If your balance cannot cover the pages after
the records were served, the records are returned without bodies rather than taking the paid-for
result away. `bodyNextCursor` continues a longer act on `GET /us/session-laws/{sessionLawId}/body`.

**Limits.** At most 50 DISTINCT entries after duplicates collapse (a raw list of up to
200 is accepted so a run of repeats is not refused), each at most 300 characters. An
empty list, an over-long entry, more than 50 distinct entries or a bad `jurisdiction` is a 422
and nothing is charged. At most 8 lookups run at once inside a call.

**Example**

```bash
curl -X POST "https://api.vaquill.ai/api/v1/us/session-laws/batch" \
  -H "Authorization: Bearer $VAQUILL_API_KEY" -H "Content-Type: application/json" \
  -d '{"ids": ["SSL_MN_2025R_G_Y2025_C1", "S.F.No. 1552"], "jurisdiction": "mn"}'
```

```javascript
const res = await fetch("https://api.vaquill.ai/api/v1/us/session-laws/batch", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VAQUILL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ ids: ["SSL_MN_2025R_G_Y2025_C1", "S.F.No. 1552"], jurisdiction: "mn" }),
});
const { laws, notFound, resolved } = await res.json();
const byInput = new Map(laws.map((law) => [law.input, law]));
```

**Related endpoints**

- `GET /us/session-laws/{sessionLawId}` is the single read, with the same record and rules.
- `GET /us/session-laws/list` and `GET /us/session-laws/changes` are where the ids come from.
- `GET /us/statutes/resolve` points a session-law citation here.

**Nulls.** Every field of a response is always present: one with no value is `null` (or `[]`
for a list). The examples on this page leave the nulls out for brevity.

**Rate limits.** Calls count against your key's per-minute budget like every Data API route; a
429 carries `Retry-After`.



## OpenAPI

````yaml https://api.vaquill.ai/external/openapi.json post /api/v1/us/session-laws/batch
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/session-laws/batch:
    post:
      tags:
        - US Session Laws
      summary: Get many state session laws at once, by id or citation
      description: >-
        Read up to 50 STATE session laws in one call: the same record

        `GET /us/session-laws/{sessionLawId}` returns, for each id or citation
        in `ids`, in the order

        you sent them. Use it when you are enriching a list (a sync job holding
        ids from

        `/us/session-laws/list` or `/us/session-laws/changes`, or an agent
        handed a memo with a dozen

        session-law citations) instead of making a round trip per law.


        **When to use this instead of `POST /us/statutes/resolve`.** `resolve`
        identifies a citation: it

        costs 2 credits per item and answers with a `sessionLaw` match block
        (title, dates, source

        link), never the record or its text. This route returns the FULL record
        of each law, the same as

        `GET /us/session-laws/{sessionLawId}` (2 credits per law served), and
        optionally the

        first page of its text. Use `resolve` to find the id; use this route to
        read many laws in one

        request instead of one call each, which matters under the default limit
        of 30 requests per

        minute per key (a plan raises it).


        **Cost**: 2 credits per law served, the single-lookup price. Batching
        buys a round

        trip, not a discount. A miss is not charged, and `creditsConsumed`
        reports what was actually

        billed. A citation in `ids` also pays the `/us/statutes/resolve` price
        (2 credits), as its

        own ledger line, exactly as `GET /us/session-laws/{sessionLawId}`
        charges a citation: kept

        whenever we gave a verdict (a served law, an unresolved or ambiguous
        citation) and refunded

        when the session it points into is only partly collected, or when we
        failed. An id never pays it.


        **Every entry gets an answer.** A served law is in `laws`; every other
        entry is in `notFound` with

        a `status` (`not_found`, `unparsed`, `ambiguous`, `needs_jurisdiction`,

        `session_not_fully_collected`, `federal`, or `error`), the finer
        `reason` the single route's 404

        carries, the same `detail` sentence, and the candidates where there are
        any. Nothing is dropped

        silently, so a shorter `laws` array can always be explained: every
        distinct entry is in `laws`,

        in `notFound`, or, when it names a law an earlier entry already
        produced, in `resolved`.


        **Mapping your inputs.** `laws` holds only the laws served, so it cannot
        be zipped back onto

        `ids` by position. Each law carries the `input` it answers, and
        `resolved` lists every input that

        did not match an id exactly as sent (a citation, or an id cleaned of
        whitespace, quotes or a

        trailing period) with the id it resolved to. **Duplicates are collapsed
        first**: an entry

        identical to an earlier one after trimming is dropped, order is kept,
        and `deduped` says how many.

        Two DIFFERENT spellings of one law (`S.F.No. 1552` and its
        `sessionLawId`) serve the law once,

        under the first, bill it once, and list both in `resolved`.


        **Statuses.** `resolved`: served. `not_held`: served as a record,
        because the registry knows the

        law and holds no text (`textStatus: not_held`). `not_found`: no law
        carries the id. `unparsed`: it

        reads as a citation no state session law we hold carries. `ambiguous`:
        the citation names several

        laws, all in `didYouMean`, none chosen for you (Minnesota 2025 has two
        Chapter 1s).

        `needs_jurisdiction`: a form several states share, naming none: send
        `jurisdiction` or name the

        state. `session_not_fully_collected`: nothing matched in a session we
        have only partly collected, so

        the law may exist; never charged, the resolve price included. `federal`:
        federal acts are served

        by `/us/statutes/section`. `error`: WE failed to look this entry up. It
        says nothing about the law, is refunded

        in full, and is safe to resend.


        **`jurisdiction`** scopes how every citation in the batch is read,
        exactly as the same parameter

        does on the single route. It is validated before anything is charged: a
        bad code is a 422.


        **`includeBody`** adds the FIRST page of each served law's text (about
        30,000 characters)

        as `body`, at the body price (6 credits) per law whose page is served,
        charged after the

        work because the count is not knowable up front. It multiplies with the
        batch: 50 laws at

        2 + 6 is 400 credits in one call. A law whose text is withheld, not held
        or

        empty returns `body: null` and is not charged for it. If your balance
        cannot cover the pages after

        the records were served, the records are returned without bodies rather
        than taking the paid-for

        result away. `bodyNextCursor` continues a longer act on `GET
        /us/session-laws/{sessionLawId}/body`.


        **Limits.** At most 50 DISTINCT entries after duplicates collapse (a raw
        list of up to

        200 is accepted so a run of repeats is not refused), each at most 300
        characters. An

        empty list, an over-long entry, more than 50 distinct entries or a bad
        `jurisdiction` is a 422

        and nothing is charged. At most 8 lookups run at once inside a call.


        **Example**


        ```bash

        curl -X POST "https://api.vaquill.ai/api/v1/us/session-laws/batch" \
          -H "Authorization: Bearer $VAQUILL_API_KEY" -H "Content-Type: application/json" \
          -d '{"ids": ["SSL_MN_2025R_G_Y2025_C1", "S.F.No. 1552"], "jurisdiction": "mn"}'
        ```


        ```javascript

        const res = await
        fetch("https://api.vaquill.ai/api/v1/us/session-laws/batch", {
          method: "POST",
          headers: {
            Authorization: `Bearer ${process.env.VAQUILL_API_KEY}`,
            "Content-Type": "application/json",
          },
          body: JSON.stringify({ ids: ["SSL_MN_2025R_G_Y2025_C1", "S.F.No. 1552"], jurisdiction: "mn" }),
        });

        const { laws, notFound, resolved } = await res.json();

        const byInput = new Map(laws.map((law) => [law.input, law]));

        ```


        **Related endpoints**


        - `GET /us/session-laws/{sessionLawId}` is the single read, with the
        same record and rules.

        - `GET /us/session-laws/list` and `GET /us/session-laws/changes` are
        where the ids come from.

        - `GET /us/statutes/resolve` points a session-law citation here.


        **Nulls.** Every field of a response is always present: one with no
        value is `null` (or `[]`

        for a list). The examples on this page leave the nulls out for brevity.


        **Rate limits.** Calls count against your key's per-minute budget like
        every Data API route; a

        429 carries `Retry-After`.
      operationId: get_session_laws_batch_api_v1_us_session_laws_batch_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SessionLawBatchRequest'
        required: true
      responses:
        '200':
          description: >-
            One entry per distinct id or citation: the served laws in `laws`,
            every other entry in `notFound` with its status and reason. Not
            every entry is a law: read `notFound`, and `creditsConsumed` for
            what was billed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionLawBatchResponse'
              examples:
                ids:
                  summary: Two laws by id, and one id no law carries
                  value:
                    laws:
                      - sessionLawId: SSL_MN_2025R_G_Y2025_C1
                        jurisdiction: mn
                        citation: CHAPTER 1--S.F.No. 1552
                        citableAs: Minn. Laws 2025, ch. 1
                        citationShort: MN ch. 1 (2025)
                        session:
                          code: 2025R
                          label: 2025 Regular Session
                          type: regular
                          year: 2025
                          coverageStatus: complete
                        series: general
                        instrumentType: act
                        number: '1'
                        billNumber: S.F.No. 1552
                        numberingYear: 2025
                        title: >-
                          An act relating to agriculture; modifying financial
                          reporting requirements for grain buyers; amending
                          Minnesota Statutes 2024, section 223.17, subdivision
                          6.
                        approvedDate: '2025-03-17'
                        approvedDateDerived: false
                        enactmentOutcome: signed
                        isLaw: true
                        textStatus: held
                        charCount: 5470
                        estimatedBodyPages: 1
                        textSha256: >-
                          55c7a8d08647e41f87e23fc2016881a6583911a1d5cfa8687403442e9096451b
                        versionNo: 1
                        amendatoryMarkup: preserved
                        markupConvention: publisher_literal
                        documentKind: session_law_print
                        identityConfidence: single_source
                        licenseNote: >-
                          Government public: published by a government body with
                          no restrictive terms, so the text may be reused,
                          including commercially.
                        updatedAt: '2026-10-05T09:06:39.998043+00:00'
                        citationAsPrinted: CHAPTER 1--S.F.No. 1552
                        vetoStatusAsPrinted: Signed by the governor March 17, 2025, 10:54 a.m.
                        effectiveDates: []
                        otherDates:
                          - kind: approved
                            date: '2025-03-17'
                            dateAsPrinted: March 17, 2025, 10:54 a.m.
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presentment Date
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presented to the governor
                        codeSectionsAffected: []
                        sourceUrl: >-
                          https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                        sources:
                          - sourceIndex: 0
                            role: text
                            url: >-
                              https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                            fetchedAt: '2026-09-29T00:41:01+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              6c83d9c109c1ec61fcd96cea92c8c48414df7ae7dfda7452ebcfbddc181b6b45
                            byteLength: 69907
                            hostClass: gov
                          - sourceIndex: 1
                            role: identity
                            url: https://www.revisor.mn.gov/laws/2025/0/
                            fetchedAt: '2026-09-29T00:41:00+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              7c7e4d1195d3e82ec1b26a20687f8b4532f4e06bde6297a6c1a7963f92cedcb1
                            byteLength: 89348
                            hostClass: gov
                        publisher:
                          legislatureNumber: 94
                          sessionLastYear: 2025
                          publisherIds: []
                          otherCitations: []
                          publisherFields:
                            Chapter: Chapter 1
                            Bill: SF1552
                            Presentment Date: March 14, 2025
                          publisherFieldsOmitted: []
                        provenance:
                          textMethod: html
                          caveats:
                            - >-
                              session_label '2025 Regular Session' is the title
                              of the session index page; the chapter page also
                              names its own session ('2025 Regular Session') and
                              bill, both checked against the index, since every
                              special session restarts chapter numbering at 1
                              and session_ordinal 0 is part of identity.
                            - >-
                              Amendatory markup kept as the publisher's literal
                              markers. Raw HTML: 16 'new text begin', 16 'new
                              text end', 12 'deleted text begin', 12 'deleted
                              text end', alongside 16 <ins> and 12 line-through
                              spans that duplicate them typographically (not
                              also written as wdiff). Extracted text: 16 'new
                              text begin', 16 'new text end', 12 'deleted text
                              begin', 12 'deleted text end'. Counts match.
                        input: SSL_MN_2025R_G_Y2025_C1
                        status: resolved
                      - sessionLawId: SSL_LA_2025R_G_C2
                        jurisdiction: la
                        citation: ACT No. 2
                        citableAs: La. Acts 2025, No. 2
                        citationShort: LA Act 2 (2025)
                        session:
                          code: 2025R
                          label: 2025 Regular Session
                          type: regular
                          year: 2025
                        series: general
                        instrumentType: act
                        number: '2'
                        billNumber: HOUSE BILL NO. 2
                        title: >-
                          To provide with respect to the capital outlay budget
                          and the capital outlay program for state government,
                          state institutions, and other public entities; to
                          provide for the designation of projects and
                          improvements; to provide for the financing thereof
                          making appropriations from certain sources; and to
                          provide for related matters.
                        approvedDate: '2025-06-20'
                        approvedDateDerived: false
                        effectiveFirst: '2025-06-20'
                        effectiveLast: '2025-06-20'
                        enactmentOutcome: signed
                        isLaw: true
                        textStatus: withheld
                        withheldReason: >-
                          LA: struck (deleted) law is merged into the text as if
                          current while the record declares the markup preserved
                          or absent (audit 2026-10-03). Awaiting a re-run with
                          strike and underline recovery.
                        charCount: 290570
                        textSha256: >-
                          20b4b897e95427a214dc2c41e37ffabb18513751537d3486d7ffbc22ef639af7
                        versionNo: 1
                        amendatoryMarkup: absent
                        documentKind: enrolled_bill
                        identityConfidence: single_source
                        licenseNote: >-
                          Government public: published by a government body with
                          no restrictive terms, so the text may be reused,
                          including commercially.
                        updatedAt: '2026-10-05T09:01:58.992647+00:00'
                        citationAsPrinted: ACT No. 2
                        vetoStatusAsPrinted: Signed by the Governor - Act 2
                        pageCount: 162
                        effectiveDates:
                          - date: '2025-06-20'
                            dateAsPrinted: 06/20/25
                        otherDates:
                          - kind: approved
                            date: '2025-06-20'
                            dateAsPrinted: 06/20/25
                        codeSectionsAffected: []
                        sourceUrl: >-
                          https://www.legis.la.gov/legis/ViewDocument.aspx?d=1426048
                        sources:
                          - sourceIndex: 0
                            role: text
                            url: >-
                              https://www.legis.la.gov/legis/ViewDocument.aspx?d=1426048
                            fetchedAt: '2026-09-29T00:37:45+00:00'
                            contentType: application/pdf
                            sha256: >-
                              4fb7220c0f502ff45ee57d7febaa1d86a1d3f94ab239f98d060d3a95c6a053ec
                            byteLength: 560862
                            hostClass: gov
                        input: SSL_LA_2025R_G_C2
                        status: resolved
                    resolved: []
                    notFound:
                      - input: SSL_MN_1801R_G_Y1801_C9999
                        status: not_found
                        reason: not_in_registry
                        detail: >-
                          Session law not found. No law in the registry carries
                          this id. Take ids from a /us/session-laws/list result,
                          or send the citation in its place.
                        didYouMean: []
                    count: 2
                    deduped: 0
                    creditsConsumed: 4
                    processingTimeMs: 584.9
                citationAndId:
                  summary: >-
                    A citation and the id of the same law: served once, both
                    mapped
                  value:
                    laws:
                      - sessionLawId: SSL_MN_2025R_G_Y2025_C1
                        jurisdiction: mn
                        citation: CHAPTER 1--S.F.No. 1552
                        citableAs: Minn. Laws 2025, ch. 1
                        citationShort: MN ch. 1 (2025)
                        session:
                          code: 2025R
                          label: 2025 Regular Session
                          type: regular
                          year: 2025
                          coverageStatus: complete
                        series: general
                        instrumentType: act
                        number: '1'
                        billNumber: S.F.No. 1552
                        numberingYear: 2025
                        title: >-
                          An act relating to agriculture; modifying financial
                          reporting requirements for grain buyers; amending
                          Minnesota Statutes 2024, section 223.17, subdivision
                          6.
                        approvedDate: '2025-03-17'
                        approvedDateDerived: false
                        enactmentOutcome: signed
                        isLaw: true
                        textStatus: held
                        charCount: 5470
                        estimatedBodyPages: 1
                        textSha256: >-
                          55c7a8d08647e41f87e23fc2016881a6583911a1d5cfa8687403442e9096451b
                        versionNo: 1
                        amendatoryMarkup: preserved
                        markupConvention: publisher_literal
                        documentKind: session_law_print
                        identityConfidence: single_source
                        licenseNote: >-
                          Government public: published by a government body with
                          no restrictive terms, so the text may be reused,
                          including commercially.
                        updatedAt: '2026-10-05T09:06:39.998043+00:00'
                        citationAsPrinted: CHAPTER 1--S.F.No. 1552
                        vetoStatusAsPrinted: Signed by the governor March 17, 2025, 10:54 a.m.
                        effectiveDates: []
                        otherDates:
                          - kind: approved
                            date: '2025-03-17'
                            dateAsPrinted: March 17, 2025, 10:54 a.m.
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presentment Date
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presented to the governor
                        codeSectionsAffected: []
                        sourceUrl: >-
                          https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                        sources:
                          - sourceIndex: 0
                            role: text
                            url: >-
                              https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                            fetchedAt: '2026-09-29T00:41:01+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              6c83d9c109c1ec61fcd96cea92c8c48414df7ae7dfda7452ebcfbddc181b6b45
                            byteLength: 69907
                            hostClass: gov
                          - sourceIndex: 1
                            role: identity
                            url: https://www.revisor.mn.gov/laws/2025/0/
                            fetchedAt: '2026-09-29T00:41:00+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              7c7e4d1195d3e82ec1b26a20687f8b4532f4e06bde6297a6c1a7963f92cedcb1
                            byteLength: 89348
                            hostClass: gov
                        publisher:
                          legislatureNumber: 94
                          sessionLastYear: 2025
                          publisherIds: []
                          otherCitations: []
                          publisherFields:
                            Chapter: Chapter 1
                            Bill: SF1552
                            Presentment Date: March 14, 2025
                          publisherFieldsOmitted: []
                        provenance:
                          textMethod: html
                          caveats:
                            - >-
                              session_label '2025 Regular Session' is the title
                              of the session index page; the chapter page also
                              names its own session ('2025 Regular Session') and
                              bill, both checked against the index, since every
                              special session restarts chapter numbering at 1
                              and session_ordinal 0 is part of identity.
                            - >-
                              Amendatory markup kept as the publisher's literal
                              markers. Raw HTML: 16 'new text begin', 16 'new
                              text end', 12 'deleted text begin', 12 'deleted
                              text end', alongside 16 <ins> and 12 line-through
                              spans that duplicate them typographically (not
                              also written as wdiff). Extracted text: 16 'new
                              text begin', 16 'new text end', 12 'deleted text
                              begin', 12 'deleted text end'. Counts match.
                        input: S.F.No. 1552
                        status: resolved
                    resolved:
                      - input: S.F.No. 1552
                        sessionLawId: SSL_MN_2025R_G_Y2025_C1
                        via: citation
                        matchedForm: bill
                    notFound: []
                    count: 1
                    deduped: 0
                    creditsConsumed: 4
                    processingTimeMs: 497.1
                includeBody:
                  summary: 'includeBody: the first page of the text beside the record'
                  value:
                    laws:
                      - sessionLawId: SSL_MN_2025R_G_Y2025_C1
                        jurisdiction: mn
                        citation: CHAPTER 1--S.F.No. 1552
                        citableAs: Minn. Laws 2025, ch. 1
                        citationShort: MN ch. 1 (2025)
                        session:
                          code: 2025R
                          label: 2025 Regular Session
                          type: regular
                          year: 2025
                          coverageStatus: complete
                        series: general
                        instrumentType: act
                        number: '1'
                        billNumber: S.F.No. 1552
                        numberingYear: 2025
                        title: >-
                          An act relating to agriculture; modifying financial
                          reporting requirements for grain buyers; amending
                          Minnesota Statutes 2024, section 223.17, subdivision
                          6.
                        approvedDate: '2025-03-17'
                        approvedDateDerived: false
                        enactmentOutcome: signed
                        isLaw: true
                        textStatus: held
                        charCount: 5470
                        estimatedBodyPages: 1
                        textSha256: >-
                          55c7a8d08647e41f87e23fc2016881a6583911a1d5cfa8687403442e9096451b
                        versionNo: 1
                        amendatoryMarkup: preserved
                        markupConvention: publisher_literal
                        documentKind: session_law_print
                        identityConfidence: single_source
                        licenseNote: >-
                          Government public: published by a government body with
                          no restrictive terms, so the text may be reused,
                          including commercially.
                        updatedAt: '2026-10-05T09:06:39.998043+00:00'
                        citationAsPrinted: CHAPTER 1--S.F.No. 1552
                        vetoStatusAsPrinted: Signed by the governor March 17, 2025, 10:54 a.m.
                        effectiveDates: []
                        otherDates:
                          - kind: approved
                            date: '2025-03-17'
                            dateAsPrinted: March 17, 2025, 10:54 a.m.
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presentment Date
                          - kind: other
                            date: '2025-03-14'
                            dateAsPrinted: March 14, 2025
                            kindAsPrinted: Presented to the governor
                        codeSectionsAffected: []
                        sourceUrl: >-
                          https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                        sources:
                          - sourceIndex: 0
                            role: text
                            url: >-
                              https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
                            fetchedAt: '2026-09-29T00:41:01+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              6c83d9c109c1ec61fcd96cea92c8c48414df7ae7dfda7452ebcfbddc181b6b45
                            byteLength: 69907
                            hostClass: gov
                          - sourceIndex: 1
                            role: identity
                            url: https://www.revisor.mn.gov/laws/2025/0/
                            fetchedAt: '2026-09-29T00:41:00+00:00'
                            contentType: text/html; charset=utf-8
                            sha256: >-
                              7c7e4d1195d3e82ec1b26a20687f8b4532f4e06bde6297a6c1a7963f92cedcb1
                            byteLength: 89348
                            hostClass: gov
                        publisher:
                          legislatureNumber: 94
                          sessionLastYear: 2025
                          publisherIds: []
                          otherCitations: []
                          publisherFields:
                            Chapter: Chapter 1
                            Bill: SF1552
                            Presentment Date: March 14, 2025
                          publisherFieldsOmitted: []
                        provenance:
                          textMethod: html
                          caveats:
                            - >-
                              session_label '2025 Regular Session' is the title
                              of the session index page; the chapter page also
                              names its own session ('2025 Regular Session') and
                              bill, both checked against the index, since every
                              special session restarts chapter numbering at 1
                              and session_ordinal 0 is part of identity.
                            - >-
                              Amendatory markup kept as the publisher's literal
                              markers. Raw HTML: 16 'new text begin', 16 'new
                              text end', 12 'deleted text begin', 12 'deleted
                              text end', alongside 16 <ins> and 12 line-through
                              spans that duplicate them typographically (not
                              also written as wdiff). Extracted text: 16 'new
                              text begin', 16 'new text end', 12 'deleted text
                              begin', 12 'deleted text end'. Counts match.
                        input: SSL_MN_2025R_G_Y2025_C1
                        status: resolved
                        body: >-
                          CHAPTER 1--S.F.No. 1552


                          An act


                          relating to agriculture; modifying financial reporting
                          requirements for grain buyers; amending Minnesota
                          Statutes 2024, section 223.17, subdivision 6. ...
                        bodyPageEnd: 5470
                        bodyTotalChars: 5470
                        bodyHasMore: false
                    resolved: []
                    notFound: []
                    count: 1
                    deduped: 0
                    creditsConsumed: 8
                    processingTimeMs: 731.2
        '401':
          description: Missing, invalid or revoked API key. Not charged.
          content:
            application/json:
              example:
                detail: Invalid or expired API key
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '402':
          description: >-
            Insufficient credits for this call. Nothing was done and nothing was
            charged. Read your balance, free, at `GET /credits/balance`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
              example:
                detail: Insufficient credits
        '403':
          description: The API key lacks the `research:read` scope. Not charged.
          content:
            application/json:
              example:
                detail: Insufficient permissions for this operation
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '422':
          description: >-
            A parameter failed validation: `ids` empty, over-long or holding
            more than 50 distinct entries, `jurisdiction` not a state, or a key
            the body does not define. Never charged. `errors[].loc` names the
            parameter exactly as you send it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
              examples:
                emptyIds:
                  summary: 'An empty `ids` list: nothing to read, nothing charged'
                  value:
                    detail: Invalid request parameters
                    errors:
                      - loc:
                          - body
                          - ids
                        msg: >-
                          List should have at least 1 item after validation, not
                          0
                        type: too_short
                tooManyIds:
                  summary: More than 50 distinct entries after duplicates collapse
                  value:
                    detail: Invalid request parameters
                    errors:
                      - loc:
                          - body
                          - ids
                        msg: >-
                          Value error, `ids` holds 51 distinct entries after
                          duplicates collapse; the limit is 50 per call. Split
                          the batch.
                        type: value_error
                federalJurisdiction:
                  summary: >-
                    `jurisdiction` is `federal`: federal session laws are on
                    /us/statutes/section
                  value:
                    detail: Invalid request parameters
                    errors:
                      - loc:
                          - body
                          - jurisdiction
                        msg: >-
                          Value error, Unknown `jurisdiction` value 'federal'.
                          Expected one of: ak, al, ar, as, az, ca, co, ct, dc,
                          de, fl, ga, gu, hi, ia, id, il, in, ks, ky, la, ma,
                          md, me, mi, mn, mo, mp, ms, mt, nc, nd, ne, nh, nj,
                          nm, nv, ny, oh, ok, or, pa, pr, ri, sc, sd, tn, tx,
                          ut, va, vi, vt, wa, wi, wv, wy.
                        type: value_error
                unknownField:
                  summary: >-
                    An unrecognised key, such as `includebody`: refused, never
                    silently dropped
                  value:
                    detail: Invalid request parameters
                    errors:
                      - loc:
                          - body
                          - includebody
                        msg: Extra inputs are not permitted
                        type: extra_forbidden
        '429':
          description: >-
            Rate limit exceeded for your key. Not charged. Wait `Retry-After`
            seconds.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                examples:
                  - 12
            X-RateLimit-Limit:
              description: Requests per minute your key is allowed.
              schema:
                type: integer
                examples:
                  - 60
            X-RateLimit-Remaining:
              description: Requests left in the current minute. 0 on a 429.
              schema:
                type: integer
                examples:
                  - 0
            X-RateLimit-Reset:
              description: Unix time at which the minute window resets.
              schema:
                type: integer
                examples:
                  - 1791194460
          content:
            application/json:
              example:
                detail: Rate limit exceeded. Try again in 12 seconds.
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '500':
          description: An unexpected failure on our side. The charge is refunded.
          content:
            application/json:
              example:
                detail: Internal server error
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '503':
          description: >-
            The session-laws database is temporarily unavailable. The charge is
            refunded; retry.
          content:
            application/json:
              example:
                detail: >-
                  The US session-laws database is temporarily unavailable.
                  Please retry.
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    SessionLawBatchRequest:
      properties:
        ids:
          items:
            type: string
          type: array
          maxItems: 200
          minItems: 1
          title: Ids
          description: >-
            State session law ids, or citations, to read: up to 50 DISTINCT
            entries per call. Each entry is read exactly as the `{sessionLawId}`
            path of `GET /us/session-laws/{sessionLawId}` reads one: an id as
            sent, an id carrying copy damage, or a citation (`Minn. Laws 2025,
            ch. 1`, `P.A. 104-0001`, `S.F.No. 1552`). Entries are trimmed, and
            blank ones are dropped. Duplicates collapse FIRST (the first
            spelling wins, order is kept) and the cap applies to what is left,
            so a list quoting one law sixty times is one entry; `deduped` says
            how many were collapsed. 200 is the ceiling on the raw list. An
            entry is at most 300 characters. Federal ids (`SAL_...`) and
            endpoint names are misses, never charged.
          examples:
            - - SSL_MN_2025R_G_Y2025_C1
              - S.F.No. 1552
              - SSL_MN_1801R_G_Y1801_C9999
        jurisdiction:
          anyOf:
            - type: string
              enum:
                - al
                - ak
                - as
                - az
                - ar
                - ca
                - co
                - ct
                - de
                - dc
                - fl
                - ga
                - gu
                - hi
                - id
                - il
                - in
                - ia
                - ks
                - ky
                - la
                - me
                - md
                - ma
                - mi
                - mn
                - ms
                - mo
                - mt
                - ne
                - nv
                - nh
                - nj
                - nm
                - ny
                - nc
                - nd
                - mp
                - oh
                - ok
                - or
                - pa
                - pr
                - ri
                - sc
                - sd
                - tn
                - tx
                - ut
                - vt
                - vi
                - va
                - wa
                - wv
                - wi
                - wy
            - type: 'null'
          title: Jurisdiction
          description: >-
            Optional two-letter state code that scopes how a CITATION in `ids`
            is read, for the whole batch: it supplies the state a citation does
            not name (`Laws 2025, ch. 1` with `mn` is Minnesota's) and vetoes a
            state the citation does name or whose form belongs to another.
            Ignored for an id. The 50 states, `dc` and `pr`, case-insensitive;
            `federal` or an unknown code is a 422 and nothing is charged. Omit
            it for a batch whose citations each name their own state.
          examples:
            - mn
        includeBody:
          type: boolean
          title: Includebody
          description: >-
            Return the FIRST page of each served law's text inline, on `body`,
            beside the record. A page is about 30,000 characters and costs the
            ordinary body price (6 credits) per law whose page is served; a law
            whose text is withheld, not held or empty comes back with `body:
            null` and is not charged for it. Read `creditsConsumed` rather than
            computing the total: the worst case is 50 laws at 2 + 6 credits
            each. `bodyNextCursor` continues a longer act on `GET
            /us/session-laws/{sessionLawId}/body`.
          default: false
          examples:
            - true
      additionalProperties: false
      type: object
      required:
        - ids
      title: SessionLawBatchRequest
      description: Batch read. See `POST /us/session-laws/batch`.
    SessionLawBatchResponse:
      properties:
        laws:
          items:
            $ref: '#/components/schemas/SessionLawBatchLaw'
          type: array
          title: Laws
          description: >-
            The served laws, one per distinct law, in the order the entries of
            `ids` first reached them. Entries that missed are NOT here, so a
            client mapping by position must use `input` on each law (or
            `notFound`), never the index.
        resolved:
          items:
            $ref: '#/components/schemas/SessionLawResolution'
          type: array
          title: Resolved
          description: >-
            One entry per input that did NOT match an id exactly as sent: a
            citation resolved to its law, or an id cleaned of whitespace, quotes
            or a trailing period. Includes an input whose law an earlier entry
            already produced, so every input is mappable onto `laws`. Empty when
            every entry was an exact id.
        notFound:
          items:
            $ref: '#/components/schemas/SessionLawBatchMiss'
          type: array
          title: Notfound
          description: >-
            Every entry that did not yield a law, in the order sent, each with
            its `status` and `reason`. A miss is not charged for the route's own
            price. An entry read as a CITATION also paid the resolve price, kept
            whenever we gave a verdict on it (`unparsed`, `ambiguous`,
            `needs_jurisdiction`, `federal`) and refunded on
            `session_not_fully_collected` and `error`. An id pays no resolve
            price.
        count:
          type: integer
          title: Count
          description: Number of laws returned in `laws`.
          default: 0
          examples:
            - 2
        deduped:
          type: integer
          title: Deduped
          description: >-
            How many entries of `ids` were collapsed because an earlier entry
            was identical after trimming. Zero when none were. Two DIFFERENT
            spellings of one law are not counted here: the law appears once in
            `laws` and both spellings are in `resolved`.
          default: 0
          examples:
            - 0
        creditsConsumed:
          type: integer
          title: Creditsconsumed
          description: >-
            Credits actually charged for this call, never the list price: 2 per
            law served, plus the 2-credit resolve price for each citation whose
            resolution is kept, plus the body price per `body` served. Misses
            and failures bill nothing for the route.
          default: 0
          examples:
            - 4
        processingTimeMs:
          type: number
          title: Processingtimems
          description: >-
            Server-side time for this request in milliseconds, excluding network
            transit. Not billed on.
          default: 0
          examples:
            - 512.3
      type: object
      title: SessionLawBatchResponse
      description: Response for `POST /us/session-laws/batch`.
    ApiDetailError:
      properties:
        detail:
          type: string
          title: Detail
          description: >-
            Human-readable reason, safe to surface to an end user. Branch on the
            HTTP status rather than on this string: the wording is not part of
            the contract and may be reworded, but 401 (bad key), 402 (out of
            credits), 403 (missing scope), 404 (no such resource) and 429 (rate
            limited) are stable.
          examples:
            - Insufficient API credits.
        errors:
          anyOf:
            - items:
                $ref: '#/components/schemas/ApiFieldError'
              type: array
            - type: 'null'
          title: Errors
          description: 'Present on 422 only: every field that failed validation.'
      type: object
      required:
        - detail
      title: ApiDetailError
      description: >-
        Error envelope the API actually returns.


        Every error (400/401/402/403/404/405/422/429/5xx) carries a `detail`

        string, e.g. `{"detail": "Insufficient API credits."}`, on every mount
        of

        the API. A 422 adds `errors`, one entry per rejected field. Some 404s
        add

        endpoint-specific diagnosis beside `detail` (the statutes section routes

        add `actId`, `reason` and `didYouMean`); treat unknown keys as optional.
    SessionLawBatchLaw:
      properties:
        sessionLawId:
          type: string
          title: Sessionlawid
          description: >-
            Permanent identifier of the law, the key to use everywhere. Shape
            `SSL_{state}_{session
            code}_{series}[_Y{numberingYear}]_{C<chapter>|B<billKey>}`. It never
            changes: a correction to our reading of a law keeps the old id
            working. Pass it to `GET /us/session-laws/{sessionLawId}`.
          examples:
            - SSL_MN_2025R_G_Y2025_C1
        lawId:
          anyOf:
            - type: string
            - type: 'null'
          title: Lawid
          description: >-
            The law's identifier in the open us1 scheme. Null until its identity
            is confirmed by a second source and the us1 state shape is minted,
            so it is null on every state law today. Use `sessionLawId`, which is
            always present.
          examples:
            - null
        jurisdiction:
          type: string
          title: Jurisdiction
          description: >-
            Lowercase two-letter code of the state, `dc` or `pr`. Federal acts
            are not served by this family: they are on `/us/statutes/section`.
          examples:
            - mn
        citation:
          type: string
          title: Citation
          description: >-
            The act's citation as its publisher prints it, falling back to
            `{session label}, ch. {number}` when none is printed. It is NOT
            unique: many states print a bare `CHAPTER 1` every session. Key on
            `sessionLawId`.
          examples:
            - CHAPTER 1--S.F.No. 1552
            - ACT No. 2
            - Chapter 1, Laws of 2025
        citableAs:
          anyOf:
            - type: string
            - type: 'null'
          title: Citableas
          description: >-
            The law cited the way a lawyer writes it, from the state's own form:
            `Minn. Laws 2025, ch. 1`, `2025 Fla. Laws ch. 3`, `Ill. Pub. Act
            104-0001`, `S.L. 2025-12` (North Carolina), `Stats. 2025, ch. 12`
            (California), `Ohio S.B. 1 (2025)` for a state that numbers no
            chapters. A law in a special or extraordinary session carries it
            (`Minn. Laws 2025, 1st Spec. Sess., ch. 1`). Every value is read
            back through the grammar that `GET /us/session-laws/{sessionLawId}`
            accepts a citation in, and must name this law; one that would not is
            null, never guessed. Null where the state's form is not known, for a
            series with no standard form (resolutions, memorials), or for a law
            with neither a chapter nor a bill key. Where a regular and a special
            session each have a chapter 1, the bare form is the regular
            session's law and resolves with that law flagged as the default; the
            special session's carries its session. Distinct from `citation`,
            which is the publisher's printed form.
          examples:
            - Minn. Laws 2025, ch. 1
            - 2025 Tex. Gen. Laws ch. 1
            - null
        citationShort:
          anyOf:
            - type: string
            - type: 'null'
          title: Citationshort
          description: >-
            A compact label for tables and badges: `MN ch. 1 (2025)`, `IL P.A.
            104-0001`, `OH S.B. 1 (2025)`. Not a form to send back: use
            `citableAs` or the `sessionLawId`. Null exactly when `citableAs` is
            null.
          examples:
            - MN ch. 1 (2025)
            - TX ch. 1 (2025)
            - null
        session:
          $ref: '#/components/schemas/SessionLawDetailSession'
          description: >-
            The legislative session the law was enacted in, and whether we hold
            all of it (`coverageStatus`).
        series:
          type: string
          title: Series
          description: >-
            The numbering series the law belongs to within its session. Most
            states have one, `general`. Others number acts, resolutions or local
            laws separately (`public`, `act`, `acts`, `law`, `public_act`,
            `resolve`, `resolution_chapter`, `local`, ...). An open list that
            grows as jurisdictions load. Filter with `series` on the list.
          examples:
            - general
        instrumentType:
          type: string
          title: Instrumenttype
          description: >-
            What kind of measure this is: `act`, `joint_resolution`,
            `concurrent_resolution`, `resolution`, `resolve`, `memorial` or
            `other`. An open list. A resolution that was numbered and published
            among the session laws is included, with `isLaw` saying whether it
            binds as law.
          examples:
            - act
        number:
          anyOf:
            - type: string
            - type: 'null'
          title: Number
          description: >-
            The chapter or act number exactly as printed, as a string. It is not
            always an integer: `1`, `2025-12` (Florida), `104-0001` (Illinois),
            `1A`. Null where the state does not number its acts (see `billKey`).
          examples:
            - '1'
            - 2025-12
        billKey:
          anyOf:
            - type: string
            - type: 'null'
          title: Billkey
          description: >-
            Normalised bill identifier (chamber and type letters plus the
            number) that stands in for a chapter number in states that do not
            number their acts (Missouri, Ohio, Nebraska). `House Bill 2` is
            `HB2`. Null whenever `number` is set. Part of the `sessionLawId` as
            `B<billKey>`.
          examples:
            - HB2
            - null
        billNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Billnumber
          description: >-
            The bill the act originated as, as the publisher prints it. Matches
            as a citation on `GET /us/session-laws/{sessionLawId}`.
          examples:
            - S.F.No. 1552
            - House Bill 2
        numberingYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Numberingyear
          description: >-
            The year of the numbering sequence the chapter number belongs to,
            where the state numbers by year (Minnesota, Florida, Texas). It
            appears in the `sessionLawId` as `_Y2025`. A chapter number is only
            unique within a session and numbering year: Minnesota's regular and
            first special sessions of 2025 each have a Chapter 1. Null where one
            sequence runs across the session (Louisiana).
          examples:
            - 2025
            - null
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: >-
            The act's long title as printed, usually beginning `An act relating
            to`. It names the code sections the act amends in prose.
          examples:
            - >-
              An act relating to agriculture; modifying financial reporting
              requirements for grain buyers; amending Minnesota Statutes 2024,
              section 223.17, subdivision 6.
        shortTitle:
          anyOf:
            - type: string
            - type: 'null'
          title: Shorttitle
          description: >-
            The act's short title when the publisher gives one (Ohio, New York,
            the District of Columbia and a few others do), otherwise null.
          examples:
            - Enact Advance Ohio Higher Education Act
            - null
        approvedDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Approveddate
          description: >-
            Date the governor (or the equivalent authority) approved the act,
            ISO 8601. Never an effective date: an act is usually in force on a
            different day, which is `effectiveDates`. Null when the publisher
            prints no approval date. Where the registry holds none but the
            publisher's own dated label on `otherDates` names the governor's
            signature, it is filled from that label and `approvedDateDerived` is
            true. The `approvedFrom` and `approvedTo` filters do NOT match a
            derived date: they read the registry's own approval date.
          examples:
            - '2025-03-17'
        approvedDateDerived:
          type: boolean
          title: Approveddatederived
          description: >-
            True only when `approvedDate` was not held as an approval date and
            we filled it from a dated label printed on the act (today South
            Dakota's `Signed by the Governor`, listed under `otherDates`), on an
            act whose `enactmentOutcome` is `signed` or `line_item_veto`. False
            when `approvedDate` is null or is the registry's own. We never read
            a `presented` or `passed` date as an approval, nor a signing label
            on an act that became law without signature.
          default: false
          examples:
            - false
            - true
        effectiveFirst:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Effectivefirst
          description: >-
            Earliest of the act's effective dates we hold. Null when we hold
            none: a date the publisher does not print, or prints as a relative
            rule (`the day following final enactment`), is not guessed. The full
            list is `effectiveDates` on `GET /us/session-laws/{sessionLawId}`.
          examples:
            - '2025-09-01'
            - null
        effectiveLast:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Effectivelast
          description: >-
            Latest of the act's effective dates we hold. Equal to
            `effectiveFirst` for an act with one date; null when we hold none.
          examples:
            - '2026-01-01'
            - null
        enactmentOutcome:
          type: string
          title: Enactmentoutcome
          description: >-
            How the measure became, or failed to become, law. `signed`;
            `became_law_without_signature`; `veto_overridden`; `line_item_veto`
            (signed with some items vetoed); `vetoed` and `pocket_veto` (not
            law); `not_presented` (no governor action recorded, usual for
            resolutions); `approved_by_voters`; `unknown` (the publisher does
            not say).
          examples:
            - signed
        isLaw:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Islaw
          description: >-
            True for an act that is law. False for a numbered measure that is
            not: a vetoed bill, a pocket veto. Null when `enactmentOutcome` does
            not settle it (`not_presented`, `unknown`).
          examples:
            - true
        textStatus:
          type: string
          enum:
            - held
            - withheld
            - not_held
            - pending
          title: Textstatus
          description: >-
            Whether we serve this law's text. `held`: the text is served by
            `/us/session-laws/{sessionLawId}/body`. `withheld`: we hold the text
            but a measured defect keeps it from being served, and
            `withheldReason` says what. `not_held`: we know the act exists and
            do not hold its text. `pending`: collected and not yet verified.
          examples:
            - held
        withheldReason:
          anyOf:
            - type: string
            - type: 'null'
          title: Withheldreason
          description: >-
            Present only when `textStatus` is `withheld`: a plain sentence
            saying what is wrong with the text we hold and what would release
            it. Free text, not an enum: show it, do not branch on it. The record
            itself (dates, sources, title) is still served and still correct.
          examples:
            - >-
              LA: struck (deleted) law is merged into the text as if current
              while the record declares the markup preserved or absent (audit
              2026-10-03). Awaiting a re-run with strike and underline recovery.
            - null
        charCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Charcount
          description: >-
            Length of the law's full text in characters, the same as
            `totalChars` on the body. Null when there is no text. It is reported
            for a withheld law too (a fact about the text we hold), though that
            text is not served.
          examples:
            - 5470
            - 310454
        estimatedBodyPages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Estimatedbodypages
          description: >-
            How many body pages the text takes: `charCount` divided by the page
            size (30,000 characters), rounded up. Pages are cut back to a
            paragraph break, so a long act can run a few percent over. Null
            unless `textStatus` is `held`: there is nothing to read. Reading a
            whole law costs `estimatedBodyPages` times the price of one body
            page (6 credits per page on `GET
            /us/session-laws/{sessionLawId}/body`). Ohio's 2025 budget act (HB
            96) is 9,571,132 characters, about 320 pages or 1,920 credits to
            read in full; most acts are a page or two.
          examples:
            - 1
            - 11
        textSha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Textsha256
          description: >-
            SHA-256 (hex) of the full text of this law. It changes only when the
            text does, so it is the cheap way to tell whether a copy you hold is
            current. Body pages carry the same value.
          examples:
            - 55c7a8d08647e41f87e23fc2016881a6583911a1d5cfa8687403442e9096451b
        versionNo:
          anyOf:
            - type: integer
            - type: 'null'
          title: Versionno
          description: >-
            Revision counter of our record of this law: 1 for the first
            collection, higher after a re-collection changed the text or the
            metadata. Not a legislative version.
          examples:
            - 1
        amendatoryMarkup:
          anyOf:
            - type: string
            - type: 'null'
          title: Amendatorymarkup
          description: >-
            Whether the language an amending act strikes and inserts survives in
            the text. `preserved`: it is in `text`, in the convention
            `markupConvention` names. `lost`: the publisher printed it and our
            text does not keep it, so deleted words can read as law: check the
            source before quoting. `absent`: the act carries no such markup that
            we found. `not_applicable`: there is no text to carry it.
          examples:
            - preserved
        markupConvention:
          anyOf:
            - type: string
            - type: 'null'
          title: Markupconvention
          description: >-
            How preserved markup is written, set only when `amendatoryMarkup` is
            `preserved`. `wdiff`: deleted language is `[-like this-]` and
            inserted language `{+like this+}`. `publisher_literal`: the
            publisher's own words are left as printed (Minnesota prints `new
            text begin` / `new text end` and `deleted text begin` / `deleted
            text end` markers). `mixed`: both in one text.
          examples:
            - publisher_literal
            - wdiff
        documentKind:
          anyOf:
            - type: string
            - type: 'null'
          title: Documentkind
          description: >-
            What kind of document the text was taken from: `session_law_print`
            (the publisher's printed chapter), `enrolled_bill`, `slip_law`,
            `volume_extract` (carved out of a bound volume) or `other`. An open
            list. Null when there is no text.
          examples:
            - session_law_print
            - enrolled_bill
        identityConfidence:
          type: string
          title: Identityconfidence
          description: >-
            How firmly the law's identity (session and number) is established.
            `single_source`: read from one publisher source, which is every
            state law at launch. `confirmed`: agreed by a second independent
            source, the level at which a `lawId` can be minted. `inferred`:
            derived by us rather than printed. `disputed`: sources disagree. The
            `sessionLawId` is the same at every level.
          examples:
            - single_source
        licenseNote:
          anyOf:
            - type: string
            - type: 'null'
          title: Licensenote
          description: >-
            What the law's licence class is and what it means for reuse, in a
            plain sentence: `Government public: published by a government body
            with no restrictive terms, so the text may be reused, including
            commercially.` Every law served with text is of a class that permits
            reuse; a note saying otherwise describes a record whose text is held
            back. Free text to show, not an enum to branch on: branch on
            `textStatus`.
          examples:
            - >-
              Government public: published by a government body with no
              restrictive terms, so the text may be reused, including
              commercially.
        updatedAt:
          anyOf:
            - type: string
            - type: 'null'
          title: Updatedat
          description: >-
            When this law's record last changed in our registry, ISO 8601 UTC
            with a `+00:00` offset, the same form as the statutes routes. Use it
            with `updatedSince` on the list to sync only what changed.
          examples:
            - '2026-10-05T09:06:39.998043+00:00'
        citationAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Citationasprinted
          description: >-
            The citation exactly as the publisher prints it. Null when none is
            printed.
          examples:
            - CHAPTER 1--S.F.No. 1552
            - CCS SS SCS HCS HB 2
        vetoStatusAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Vetostatusasprinted
          description: >-
            The publisher's own words on the governor's action.
            `enactmentOutcome` is our normalised reading of it.
          examples:
            - Signed by the governor March 17, 2025, 10:54 a.m.
        pageCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pagecount
          description: >-
            Pages in the source document when it is a PDF. Null for HTML
            sources.
          examples:
            - 162
            - null
        sourceUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurl
          description: >-
            The official page or file the act's text was collected from, on a
            government publisher's host: the first `sources` entry whose `role`
            is `text` and whose `hostClass` is `gov`. Open it to verify the text
            against the publisher. Null when we hold no such source (a law we
            know exists and have not collected) or when the text source is not a
            government host. Present on a withheld law too: the official copy is
            always where to go when we hold the text back.
          examples:
            - https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
        effectiveDates:
          items:
            $ref: '#/components/schemas/SessionLawDate'
          type: array
          title: Effectivedates
          description: >-
            Every effective date the publisher prints for the act, in printed
            order. Always a list, never null; empty when none is held. Empty
            does NOT mean the act is not in force: a date printed as a rule
            (`the day following final enactment`) or not printed in the
            publisher's metadata is not guessed, and the approval date is never
            substituted for it. An act can take effect in parts, so a date may
            carry a `scopeAsPrinted`.
          examples:
            - - date: '2024-12-05'
                dateAsPrinted: December 5, 2024
            - - date: '2025-04-02'
                dateAsPrinted: '2025-04-02 00:00:00'
                scopeAsPrinted: CCP §871.20.
            - []
        otherDates:
          items:
            $ref: '#/components/schemas/SessionLawDate'
          type: array
          title: Otherdates
          description: >-
            Every other date printed on the act, each with its `kind`: the
            approval date, filing dates and the publisher's own milestones
            (presentment to the governor).
          examples:
            - - date: '2025-03-17'
                dateAsPrinted: March 17, 2025, 10:54 a.m.
                kind: approved
              - date: '2025-03-14'
                dateAsPrinted: March 14, 2025
                kind: other
                kindAsPrinted: Presentment Date
        codeSectionsAffected:
          items:
            $ref: '#/components/schemas/CodeSectionAffected'
          type: array
          title: Codesectionsaffected
          description: >-
            The code sections the publisher's own table lists the act as
            affecting, as printed. Always a list. Empty when the publisher
            prints no such table, which is common: the title still names
            sections in prose. We do not read sections out of the act text into
            this list.
          examples:
            - - actSectionAsPrinted: '6'
                actionAsPrinted: AMD
                codeAsPrinted: RCW
                sectionAsPrinted: 19.27A.020
            - []
        sources:
          items:
            $ref: '#/components/schemas/SessionLawSource'
          type: array
          title: Sources
          description: >-
            The publisher documents the record was collected from, with the hash
            and fetch time of each: the audit trail from this response back to
            the official copy.
          examples:
            - - byteLength: 69907
                contentType: text/html; charset=utf-8
                fetchedAt: '2026-09-29T00:41:01Z'
                hostClass: gov
                role: text
                sha256: >-
                  6c83d9c109c1ec61fcd96cea92c8c48414df7ae7dfda7452ebcfbddc181b6b45
                sourceIndex: 0
                url: https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
        publisher:
          anyOf:
            - $ref: '#/components/schemas/SessionLawPublisher'
            - type: 'null'
          description: >-
            What the publisher itself printed or published about the act, beyond
            the dates and citation above: its own structured fields verbatim
            (`publisherFields`: the bill's action history, committees, sponsors,
            and vote counts where the publisher gives them), its own
            identifiers, the legislature number and the printed pages. Omitted,
            not null, when it cannot be read or we only know the act exists.
        provenance:
          anyOf:
            - $ref: '#/components/schemas/SessionLawProvenance'
            - type: 'null'
          description: >-
            How we came by the text (the extraction method, the bound volume it
            was cut from) and the collector's own `caveats` on the record.
            Omitted, not null, when it cannot be read or we only know the act
            exists.
        input:
          type: string
          title: Input
          description: >-
            The entry of your `ids` this law answers, exactly as you sent it
            (trimmed). When two entries name the same law, the law appears once,
            under the first.
          examples:
            - S.F.No. 1552
        status:
          type: string
          enum:
            - resolved
            - not_held
          title: Status
          description: >-
            `resolved`: the law is in the registry and its text status is
            `held`, `withheld` or `pending`. `not_held`: the registry knows the
            law exists and we hold no text (`textStatus: not_held`); the record
            is still served, and charged like any other, because it is the
            answer the lookup was for.
          examples:
            - resolved
        body:
          anyOf:
            - type: string
            - type: 'null'
          title: Body
          description: >-
            The first page of the law's text exactly as printed, present only
            when `includeBody` was true and the text is served. Null otherwise,
            and then not charged. Read `bodyHasMore` to know whether the act
            continues.
          examples:
            - |-
              CHAPTER 1--S.F.No. 1552

              An act

              relating to agriculture; ...
        bodyPageEnd:
          anyOf:
            - type: integer
            - type: 'null'
          title: Bodypageend
          description: >-
            Character offset just past `body` in the full text: the first page
            starts at 0. Null when `body` is null.
          examples:
            - 5470
        bodyTotalChars:
          anyOf:
            - type: integer
            - type: 'null'
          title: Bodytotalchars
          description: Length of the whole text in characters. Null when `body` is null.
          examples:
            - 5470
        bodyHasMore:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Bodyhasmore
          description: >-
            True when the text continues beyond `body`. Each further page is
            read, and charged, on `GET /us/session-laws/{sessionLawId}/body`.
            Null when `body` is null.
          examples:
            - false
        bodyNextCursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Bodynextcursor
          description: >-
            Send as `cursor` to `GET /us/session-laws/{sessionLawId}/body` to
            read the next page of this law. Null on the last page, and when
            `body` is null.
          examples:
            - null
      type: object
      required:
        - sessionLawId
        - jurisdiction
        - citation
        - session
        - series
        - instrumentType
        - enactmentOutcome
        - textStatus
        - identityConfidence
        - input
        - status
      title: SessionLawBatchLaw
      description: >-
        One served law: the same record `GET /us/session-laws/{sessionLawId}`
        returns.
    SessionLawResolution:
      properties:
        input:
          type: string
          title: Input
          description: What you sent in the path, exactly.
          examples:
            - S.F.No. 1552
        sessionLawId:
          type: string
          title: Sessionlawid
          description: >-
            The id it resolved to. Send this next time to skip resolution and
            its fee.
          examples:
            - SSL_MN_2025R_G_Y2025_C1
        via:
          type: string
          enum:
            - normalized_id
            - citation
          title: Via
          description: >-
            `citation`: your input was a citation and matched exactly one law's
            citation form. `normalized_id`: your input was an id carrying
            surrounding whitespace, quotes or a trailing period, which were
            removed.
          examples:
            - citation
        matchedForm:
          anyOf:
            - type: string
            - type: 'null'
          title: Matchedform
          description: >-
            Which of the law's citation forms your input matched: `as_printed`
            (its printed citation), `bill` (its bill number) or
            `other_as_printed` (another printed form). Null for `normalized_id`.
          examples:
            - bill
            - as_printed
      type: object
      required:
        - input
        - sessionLawId
        - via
      title: SessionLawResolution
      description: How a citation sent in place of a `sessionLawId` was matched.
    SessionLawBatchMiss:
      properties:
        input:
          type: string
          title: Input
          description: The entry of your `ids`, exactly as you sent it (trimmed).
          examples:
            - SSL_MN_1801R_G_Y1801_C9999
        status:
          type: string
          enum:
            - ambiguous
            - needs_jurisdiction
            - unparsed
            - session_not_fully_collected
            - not_found
            - federal
            - error
          title: Status
          description: >-
            `not_found`: no law carries this id (or it exists in another letter
            case, see `didYouMean`). `unparsed`: it reads as a citation and no
            state session law we hold carries it. `ambiguous`: the citation
            names several laws of one state, all in `didYouMean`, none chosen
            for you. `needs_jurisdiction`: the citation is in a form several
            states share and names none; `jurisdictions` lists where it exists.
            `session_not_fully_collected`: nothing matched and the session it
            points into is only partly collected, so the law may exist;
            `sessionCoverage` says how much we hold. `federal`: a federal act,
            served by `/us/statutes/section`. `error`: we failed to look this
            entry up; it is NOT a statement that the law does not exist, it is
            refunded in full, and it is safe to send again.
          examples:
            - not_found
        reason:
          type: string
          title: Reason
          description: >-
            The finer reason, the same vocabulary as `reason` on the 404 of `GET
            /us/session-laws/{sessionLawId}`: `not_in_registry`, `wrong_case`,
            `unresolved_citation`, `ambiguous_citation`, `needs_jurisdiction`,
            `federal_session_law`, `missing_session_law_id`,
            `session_not_fully_collected`; or `lookup_failed` when `status` is
            `error`. Branch on `status`, which is the closed set; the wording of
            a reason can grow.
          examples:
            - not_in_registry
        detail:
          type: string
          title: Detail
          description: >-
            A sentence safe to show a user, the same text the single route's 404
            carries.
          examples:
            - >-
              Session law not found. No law in the registry carries this id.
              Take ids from a /us/session-laws/list result, or send the citation
              in its place.
        didYouMean:
          items:
            type: string
          type: array
          title: Didyoumean
          description: >-
            Real `sessionLawId`s the entry points at: the one that exists in
            another case, or every law an ambiguous citation names (at most 20,
            the conventional reading first). Empty when nothing matched.
          examples:
            - - SSL_KY_2025R_G_Y2025_C100
              - SSL_MO_2025R_G_Y2025_BHB2
        defaultSessionLawId:
          anyOf:
            - type: string
            - type: 'null'
          title: Defaultsessionlawid
          description: >-
            On `ambiguous`, the conventional reading when the registry records
            one. Informational: it is never served for you.
          examples:
            - null
        jurisdictions:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Jurisdictions
          description: >-
            On `needs_jurisdiction`, every state (lower-case postal code) where
            the citation exists. Name one in the citation, or send
            `jurisdiction`, and resend. Null otherwise.
          examples:
            - - il
              - mn
              - tx
        candidateCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Candidatecount
          description: >-
            On `ambiguous` and `needs_jurisdiction`, how many laws the citation
            names in all. When it exceeds `len(didYouMean)` the list is a
            sample. Null otherwise.
          examples:
            - 22
        truncated:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Truncated
          description: >-
            True when `didYouMean` was capped and `candidateCount` is larger.
            Null otherwise.
          examples:
            - true
        sessionCoverage:
          anyOf:
            - $ref: '#/components/schemas/SessionLawSessionCoverage'
            - type: 'null'
          description: >-
            On `session_not_fully_collected`, the partly collected session the
            entry points into: how many laws we hold of how many it should have.
            Null otherwise.
      type: object
      required:
        - input
        - status
        - reason
        - detail
      title: SessionLawBatchMiss
      description: One entry of `ids` that did not yield a law, and why.
    ApiFieldError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Loc
          description: >-
            Where the bad value is: `body`, `query` or `path`, then the
            parameter name exactly as you send it (camelCase), then list
            indexes. A bare `["body"]` means the body as a whole was not a JSON
            object.
          examples:
            - - body
              - corpusType
        msg:
          type: string
          title: Msg
          description: What is wrong with the value, in plain English.
          examples:
            - Input should be 'USC', 'CFR' or 'STATE'
        type:
          type: string
          title: Type
          description: >-
            Machine-readable error kind, e.g. `missing`, `literal_error`,
            `json_invalid`.
          examples:
            - literal_error
      type: object
      required:
        - loc
        - msg
        - type
      title: ApiFieldError
      description: One rejected field in a 422 response.
    SessionLawDetailSession:
      properties:
        code:
          type: string
          title: Code
          description: >-
            Session code, `{year}{type}{ordinal}`. `type` is `R` regular, `S`
            special, `X` extraordinary, `F` fiscal, `V` veto, `U` unknown. A
            regular session has no ordinal (`2025R`); a numbered special session
            carries it (`2025S1`, the first special session of 2025); a lettered
            one carries its letter (`2025SC`, Florida's Special Session C).
            `year` is the year the publisher numbers the session by, which for a
            period spanning two years is the first (District of Columbia Council
            Period 25 is `2023R`). Pass it as `session` to `GET
            /us/session-laws/list`.
          examples:
            - 2025R
            - 2025S1
        label:
          anyOf:
            - type: string
            - type: 'null'
          title: Label
          description: The session's canonical label, as the publisher names it.
          examples:
            - 2025 Regular Session
            - 2025 1st Special Session
        type:
          anyOf:
            - type: string
            - type: 'null'
          title: Type
          description: >-
            `regular`, `special`, `extraordinary`, `fiscal`, `veto` or
            `unknown`.
          examples:
            - regular
        year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Year
          description: The year the session convened, the same year `code` starts with.
          examples:
            - 2025
        coverageStatus:
          anyOf:
            - type: string
              enum:
                - complete
                - partial
            - type: 'null'
          title: Coveragestatus
          description: >-
            Whether we hold every law of this session. `complete`: every law the
            publisher lists for the session is accounted for, so a law absent
            from the list does not exist. `partial`: the collection of the
            session stopped short, so a law that is not found may exist, and
            this law's neighbours may be missing. The same verdict, with the
            counts behind it, is in the `sessionLaws` block on `GET
            /us/statutes/coverage`. Omitted when it cannot be read.
          examples:
            - complete
            - partial
      type: object
      required:
        - code
      title: SessionLawDetailSession
      description: >-
        The session block of a single law: the session, and whether we hold all
        of it.
    SessionLawDate:
      properties:
        kind:
          anyOf:
            - type: string
            - type: 'null'
          title: Kind
          description: >-
            What the date is, on `otherDates`: `approved`, `filed` or `other`
            (`kindAsPrinted` carries the publisher's label for `other`). Null on
            `effectiveDates`, where every entry is an effective date.
          examples:
            - approved
            - other
            - null
        date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Date
          description: >-
            The date as ISO 8601 when the printed text could be read as one.
            Null when the publisher's wording is not a calendar date.
          examples:
            - '2025-03-17'
        dateAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Dateasprinted
          description: >-
            The date exactly as the publisher wrote it, including any time of
            day.
          examples:
            - March 17, 2025, 10:54 a.m.
            - 06/20/25
        kindAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Kindasprinted
          description: The publisher's own label for what the date is, when it prints one.
          examples:
            - Presentment Date
            - Presented to the governor
        scopeAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopeasprinted
          description: >-
            What the date applies to when it is not the whole act, as printed:
            an act can take effect in parts. Null when the date applies to the
            act as a whole.
          examples:
            - CCP §871.20.
            - null
      type: object
      title: SessionLawDate
      description: One printed date on a session law.
    CodeSectionAffected:
      properties:
        sectionAsPrinted:
          type: string
          title: Sectionasprinted
          description: >-
            The code section the act changes, as the publisher's table prints
            it. Not normalised and not linked to an `actId` on `/us/statutes`.
          examples:
            - 19.27A.020
        actionAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Actionasprinted
          description: >-
            What the act does to that section, in the publisher's own words or
            abbreviation (`AMD` amended, `ADD`, `REP`, ...).
          examples:
            - AMD
        codeAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Codeasprinted
          description: The code the section belongs to, as printed.
          examples:
            - RCW
        actSectionAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Actsectionasprinted
          description: The section of the act itself that makes the change.
          examples:
            - '6'
      type: object
      required:
        - sectionAsPrinted
      title: CodeSectionAffected
      description: A code section the publisher lists the act as affecting.
    SessionLawSource:
      properties:
        sourceIndex:
          type: integer
          title: Sourceindex
          description: Position of this source in the law's source list, starting at 0.
          examples:
            - 0
        role:
          anyOf:
            - type: string
            - type: 'null'
          title: Role
          description: >-
            What this document supplied: `text` (the act itself), `identity`
            (the publisher page that lists and numbers the session's laws),
            `metadata` (dates, veto and status tables), `code_sections` or
            `certified_image`.
          examples:
            - text
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
          description: The publisher's URL for this document, as we fetched it.
          examples:
            - https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/
        fetchedAt:
          anyOf:
            - type: string
            - type: 'null'
          title: Fetchedat
          description: When we fetched the document, ISO 8601 UTC with a `+00:00` offset.
          examples:
            - '2026-09-29T00:41:01+00:00'
        contentType:
          anyOf:
            - type: string
            - type: 'null'
          title: Contenttype
          description: The document's media type as the publisher served it.
          examples:
            - text/html; charset=utf-8
            - application/pdf
        sha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Sha256
          description: SHA-256 (hex) of the exact bytes we fetched and archived.
          examples:
            - 6c83d9c109c1ec61fcd96cea92c8c48414df7ae7dfda7452ebcfbddc181b6b45
        byteLength:
          anyOf:
            - type: integer
            - type: 'null'
          title: Bytelength
          description: Size of the fetched document in bytes.
          examples:
            - 69907
        hostClass:
          anyOf:
            - type: string
            - type: 'null'
          title: Hostclass
          description: >-
            `gov` when the document comes from a government publisher (including
            an official publisher on a non-`.gov` host), otherwise `other`.
          examples:
            - gov
      type: object
      required:
        - sourceIndex
      title: SessionLawSource
      description: A document the record was collected from.
    SessionLawPublisher:
      properties:
        legislatureNumber:
          anyOf:
            - type: integer
            - type: 'null'
          title: Legislaturenumber
          description: >-
            The number of the legislature that enacted the act, as the publisher
            counts them (Minnesota's 94th Legislature, Alaska's 34th). Null
            where the publisher does not number its legislatures on the act's
            own pages; a gap in what we hold, not a fact about the act.
          examples:
            - 94
            - 34
            - null
        sessionLastYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sessionlastyear
          description: >-
            The last calendar year of the session the act belongs to, for a
            session that spans two (the District of Columbia's Council Period 25
            runs 2023 to 2024, California's regular session 2025 to 2026). Equal
            to `session.year` for a session inside one year.
          examples:
            - 2025
            - 2024
            - 2026
        printedPageStart:
          anyOf:
            - type: string
            - type: 'null'
          title: Printedpagestart
          description: >-
            The page number printed on the act's first page in the publisher's
            bound volume, as printed and therefore a string (`1`, `ix`, `42A`).
            Not the physical page of a PDF: see `provenance.volume`. Null where
            the act is not printed in a volume.
          examples:
            - '1'
            - '135'
            - null
        printedPageEnd:
          anyOf:
            - type: string
            - type: 'null'
          title: Printedpageend
          description: >-
            The page number printed on the act's last page, as printed. Null as
            above.
          examples:
            - '1'
            - '142'
            - null
        documentKindAsPrinted:
          anyOf:
            - type: string
            - type: 'null'
          title: Documentkindasprinted
          description: >-
            The label the publisher's own document carries for what kind of text
            it is, exactly as printed: `Enrolled version` (Texas), `As Adopted`,
            `Pamphlet Law` (New Jersey), `As Enacted`, `slip copy of this
            session law`. Our normalised reading of it is `documentKind`. Null
            where the document prints none.
          examples:
            - Enrolled version
            - As Adopted
            - Pamphlet Law
            - null
        publisherIds:
          items:
            $ref: '#/components/schemas/SessionLawPublisherId'
          type: array
          title: Publisherids
          description: >-
            The identifiers the publisher itself gives the act, in the order it
            presents them: South Carolina's ratification number, California's
            `bill_id`, the District of Columbia's act and bill numbers,
            Maryland's `BillNumber`. Useful for joining to the publisher's own
            site or data. Which identifiers exist differs by state. Empty when
            the publisher exposes none.
          examples:
            - - name: RAT#
                value: '5'
            - - name: num type="act"
                value: 25-5
        otherCitations:
          items:
            type: string
          type: array
          title: Othercitations
          description: >-
            Other citations the publisher prints for the same act, each exactly
            as printed: `Act No. 1` beside `CHAPTER 1`, `A.L.2025, c.1`, `70 DCR
            1863`, `D.C. Act 25-5`. They are accepted as citations on `GET
            /us/session-laws/{sessionLawId}`. Empty when the publisher prints
            one form only.
          examples:
            - - Act No. 1
            - - D.C. Act 25-5
              - 70 DCR 1863
        publisherFields:
          additionalProperties: true
          type: object
          title: Publisherfields
          description: >-
            The publisher's own structured fields for this act, as the publisher
            states them and otherwise untouched: an object whose keys, nesting
            and values are the publisher's own words. The keys DIFFER BY STATE
            and are not normalised or renamed: Texas gives the bill's full
            action history with journal page numbers (`Actions`), Maryland the
            committees and the reading and hearing dates in each chamber, North
            Carolina and New Mexico a history that can carry vote counts, most
            states little more than the bill number and a sponsor. What a given
            state supplies is whatever its publisher printed; do not assume any
            key exists, and do not read a missing key as a fact about the act.
            Votes in particular are present only where a publisher printed them.
            A few values are the publisher's own HTML: treat every string as
            untrusted text and never render it unescaped. `{}` when the
            publisher printed no such fields. A value too large to serve is left
            out and its key named in `publisherFieldsOmitted`.
          examples:
            - Actions:
                - Action Chamber: E
                  Action Comment: ''
                  Action Date: 04/23/2025
                  Action Description: Effective on 9/1/25
                  Action Time: ''
                  Journal Page Number: ''
                - Action Chamber: E
                  Action Comment: ''
                  Action Date: 04/23/2025
                  Action Description: Signed by the Governor
                  Action Time: ''
                  Journal Page Number: '1441'
                - Action Chamber: E
                  Action Comment: ''
                  Action Date: 04/14/2025
                  Action Description: Sent to the Governor
                  Action Time: ''
                  Journal Page Number: '1265'
              Bill: '14'
              Caption Version: Enrolled
              Chapter: '1'
              Last Action: 04/23/2025 E Effective on 9/1/25
            - BillNumber: HB0001
              ChapterNumber: CH0437
              CommitteePrimaryOpposite: Judicial Proceedings
              CommitteePrimaryOrigin: Environment and Transportation
              CrossfileBillNumber: SB0007
              FirstReadingDateHouseOfOrigin: '2025-01-08'
              SponsorPrimary: Delegate Ebersole
              Status: Approved by the Governor - Chapter 437
              ThirdReadingActionHouseOfOrigin: Passed
              ThirdReadingDateHouseOfOrigin: '2025-02-27'
            - Bill: S115
              History:
                - Action: Concurred In H Com Sub
                  Chamber: Senate
                  Date: 2/26/2025
                  Documents: None
                  Votes: 'PASS: 46-2'
                - Action: Passed 2nd Reading
                  Chamber: House
                  Date: 2/25/2025
                  Documents: None
                  Votes: 'PASS: 93-23'
              Session Law: 2025-1
        publisherFieldsOmitted:
          items:
            type: string
          type: array
          title: Publisherfieldsomitted
          description: >-
            Keys of `publisherFields` that exist on the record but were too
            large to serve inline (past 64 KiB of JSON the largest values are
            left out, whole, never cut). Typically a publisher's full-bill HTML
            copy, whose text is on the body route in any case. Empty when
            nothing was left out, which is almost always.
          examples:
            - []
            - - currentBillHTML
      type: object
      title: SessionLawPublisher
      description: >-
        What the publisher itself printed or published about an act, beyond the
        record's dates and citation.
    SessionLawProvenance:
      properties:
        textMethod:
          anyOf:
            - type: string
            - type: 'null'
          title: Textmethod
          description: >-
            How the text was extracted from the publisher's document:
            `pdf_text_layer`, `html`, `xml`, `docx`, `doc`, or `none` when no
            text was extracted. An open list. `none` is the same fact as
            `textStatus: not_held` for a collected law.
          examples:
            - pdf_text_layer
            - html
            - xml
        pagesWithText:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pageswithtext
          description: >-
            For a PDF, how many of its `pageCount` pages had a text layer to
            read. A figure below `pageCount` means some pages (a signature page,
            a scanned stamp) contributed no text. Null for a source that has no
            pages.
          examples:
            - 3
            - 162
            - null
        volume:
          anyOf:
            - $ref: '#/components/schemas/SessionLawVolume'
            - type: 'null'
          description: >-
            Present only when the act's text was cut out of a bound volume of
            the session's laws rather than published on its own: the volume and
            the pages. Null otherwise.
        caveats:
          items:
            type: string
          type: array
          title: Caveats
          description: >-
            The collector's own remarks on this record, one string each,
            verbatim and in order. Most say something about the act or its text
            that a reader should know: where the chapter number came from when
            the act does not print one, that the publisher prints no
            strike-through so there is no amendatory markup to carry, that an
            effective date is the publisher's wording rather than a calendar
            date, that the text layer has kerning damage. Some are working notes
            about how the record was assembled and are published as written;
            they are free text for a person to read, not a vocabulary to branch
            on, and their wording can change. Notes that only describe how a
            page was fetched or decoded are not included. `[]` when there are
            none.
          examples:
            - - >-
                Chapter number is from the publisher's Passed Legislation index
                ('Current Status'); the enrolled PDF prints a blank 'Chapter No.
                ____' field.
              - The 1-25 line-number column printed on every page is stripped.
      type: object
      title: SessionLawProvenance
      description: >-
        How the text of an act was obtained, and what the collector noted about
        the record.
    SessionLawSessionCoverage:
      properties:
        code:
          type: string
          title: Code
          description: Session code, for example `2025R`.
          examples:
            - 2025R
        label:
          anyOf:
            - type: string
            - type: 'null'
          title: Label
          description: The session's canonical label.
          examples:
            - 2025 Regular Session
        type:
          anyOf:
            - type: string
            - type: 'null'
          title: Type
          description: >-
            `regular`, `special`, `extraordinary`, `fiscal`, `veto` or
            `unknown`.
          examples:
            - regular
        year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Year
          description: The year the session convened, the year `code` starts with.
          examples:
            - 2025
        status:
          type: string
          enum:
            - complete
            - partial
          title: Status
          description: >-
            `complete` when every law the publisher lists for the session is
            accounted for. Anything less is `partial`: a law missing from a
            partial session is not evidence that it does not exist, and asking
            for one by id or citation answers `session_not_fully_collected`,
            free of charge, rather than a plain not found.
          examples:
            - complete
        servedCount:
          type: integer
          minimum: 0
          title: Servedcount
          description: >-
            Laws from this session we serve: every one we answer for by id,
            citation or list, whether or not we hold its text (`notHeldCount` of
            them have none). Laws whose text is withheld are not counted here,
            they are `withheldCount`. `servedCount + withheldCount` is
            `registryCount`, less any law still being verified.
          examples:
            - 39
        withheldCount:
          type: integer
          minimum: 0
          title: Withheldcount
          description: >-
            Laws from this session we hold and list but whose text is withheld
            for a measured defect (`textStatus: withheld`). They are real laws:
            their records are served, their text is not.
          default: 0
          examples:
            - 0
        notHeldCount:
          type: integer
          minimum: 0
          title: Notheldcount
          description: >-
            Of the laws counted in `servedCount`, how many have no text held
            (`textStatus: not_held` or `pending`). A subset of `servedCount`,
            not an addition to it: do not add it to `servedCount` or
            `withheldCount`.
          default: 0
          examples:
            - 0
        registryCount:
          type: integer
          minimum: 0
          title: Registrycount
          description: >-
            Every law of this session in our registry, whether or not its text
            is held: `servedCount + withheldCount`. Any difference is a law
            still being verified, which is neither.
          default: 0
          examples:
            - 39
        collectedCount:
          type: integer
          minimum: 0
          title: Collectedcount
          description: >-
            Laws from this session whose text we have collected, served or
            withheld. Compare it with `denominator.value` to see how much of the
            session we hold.
          default: 0
          examples:
            - 39
        denominator:
          anyOf:
            - $ref: '#/components/schemas/SessionLawDenominator'
            - type: 'null'
          description: >-
            How many laws the session is expected to hold, and where that figure
            comes from. Null when it could not be read.
          examples:
            - derivation: >-
                The publisher's complete listing of this session names 296
                measures. We hold 43 of them; the rest are not yet collected.
              kind: complete_listing
              value: 296
        openGaps:
          type: integer
          minimum: 0
          title: Opengaps
          description: >-
            Laws the publisher lists for this session that we could not collect
            and have not yet. 0 on a `complete` session.
          default: 0
          examples:
            - 0
        measuredAt:
          anyOf:
            - type: string
            - type: 'null'
          title: Measuredat
          description: When this session's coverage was last measured, ISO 8601 UTC.
          examples:
            - '2026-10-05T09:07:12+00:00'
      type: object
      required:
        - code
        - status
        - servedCount
      title: SessionLawSessionCoverage
      description: One legislative session's session-law coverage.
    SessionLawPublisherId:
      properties:
        name:
          type: string
          title: Name
          description: >-
            The publisher's own label for the identifier, exactly as it prints
            or exposes it, so it is not a vocabulary: `RAT#` (South Carolina),
            `bill_id` (California), `num type="act"` (District of Columbia),
            `BillNumber` (Maryland), `L.D.` (Maine).
          examples:
            - RAT#
            - bill_id
            - num type="act"
        value:
          type: string
          title: Value
          description: >-
            The identifier's value as the publisher gives it, always a string:
            `5`, `202520260SB26`, `25-5`, `HB0001`.
          examples:
            - '5'
            - 202520260SB26
            - 25-5
      type: object
      required:
        - name
        - value
      title: SessionLawPublisherId
      description: An identifier the publisher itself gives an act.
    SessionLawVolume:
      properties:
        url:
          type: string
          title: Url
          description: >-
            The publisher's URL of the whole volume (a PDF of every act of the
            session) that this act's text was cut from. A government host.
          examples:
            - >-
              https://static.legmt.gov/Laws/MCA-Supplements/2025SessionLaws_VOL1_Updated.pdf
        pageStart:
          type: integer
          title: Pagestart
          description: >-
            First physical page of the act in that volume, counted from 1 at the
            first page of the file. Not the page number printed on the page: see
            `publisher.printedPageStart` for that.
          examples:
            - 135
        pageEnd:
          type: integer
          title: Pageend
          description: >-
            Last physical page of the act in that volume, the same counting as
            `pageStart`.
          examples:
            - 135
        boundaryHeading:
          anyOf:
            - type: string
            - type: 'null'
          title: Boundaryheading
          description: >-
            The heading in the volume at which the act's text begins, which is
            how the cut was found. Null when none is recorded.
          examples:
            - CHAPTER NO. 1
      type: object
      required:
        - url
        - pageStart
        - pageEnd
      title: SessionLawVolume
      description: The bound volume an act's text was cut out of.
    SessionLawDenominator:
      properties:
        kind:
          type: string
          enum:
            - stated_count
            - complete_listing
            - max_number
            - feed_total
            - our_recount
            - registry_union
            - none
          title: Kind
          description: >-
            Where the total comes from. `stated_count`: the publisher states how
            many measures the session enacted. `complete_listing`: the
            publisher's own complete list of the session's acts, which we
            counted. `max_number`: the highest chapter number the publisher
            printed. `feed_total`: the total a publisher feed reports.
            `our_recount`: we counted the publisher's pages ourselves.
            `registry_union`: the measures we know of from several sources.
            `none`: no total is available, so completeness cannot be judged.
          examples:
            - complete_listing
        value:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Value
          description: >-
            The number of laws the session is expected to hold. Null when `kind`
            is `none`. Compare it with `registryCount` and `servedCount`.
          examples:
            - 296
        derivation:
          type: string
          title: Derivation
          description: >-
            One plain sentence saying what `value` counts and where it comes
            from. Written for customers: it never contains our internal audit or
            collection notes.
          examples:
            - The publisher's complete listing of this session names 296 acts.
      type: object
      required:
        - kind
        - derivation
      title: SessionLawDenominator
      description: >-
        How many laws a session is supposed to hold, and where that number comes
        from.
  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.