openapi: 3.2.0 info: title: Vaquill Ai US Session Laws API 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 description: 'Operations tagged US Session Laws across 2 of this provider''s published API definitions: vaquill-ai-openapi.json, vaquill-ai-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.vaquill.ai description: Production security: - ApiKeyAuth: [] - ApiKeyHeader: [] - ApiKeyQuery: [] tags: - 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.' paths: /api/v1/us/session-laws/changes: get: tags: - US Session Laws summary: Feed of changes to the session-law registry description: 'A sync feed of the registry: every state law that began to be served, had its text added, was corrected, unserved, withdrawn or merged, oldest first, as a cursor over an integer `id`. Poll it to keep a copy of the registry current without re-listing it: read from `sinceId=0` once, then call again with the `cursor` you were given. **Cost**: 1 credit per page of up to 200 entries (default 50). An empty page is an answer, "nothing changed since your cursor", and is charged. A request that fails validation (422) is never charged; a failure on our side (500, 503) is refunded. **Walking the feed.** Send `sinceId=0` for the first page. While `hasMore` is true, call again with `sinceId` set to `cursor`: the feed is ordered by `id`, `id` only grows, and a page carries the entries after `sinceId` and nothing else, so no entry is skipped or repeated between your calls. When `hasMore` is false you have caught up as of this call; keep your cursor and ask again later. An empty page has `cursor: null`: keep the one you hold. **What an entry says.** `kind` is what happened (see its description), `sessionLawId` the law, `jurisdiction` its state, and `detectedAt` when we recorded it, an upper bound on when the law changed in the world and never an approval or effective date. Read the law itself at `GET /us/session-laws/{sessionLawId}`, or many at once with `POST /us/session-laws/batch`. A `withdrawn` or `merged` entry is a tombstone: the law no longer answers there. **Filter.** `jurisdiction` limits the feed to one state, `dc` or `pr`, and then `hasMore` means more MATCHING entries follow. The cursor is a position in the whole feed, so the same `sinceId` means the same point with or without the filter, and a filtered page can skip ids. **Read a short window behind your cursor.** `id` is assigned in order but a row can become visible slightly after a later one if two writers commit at once. Every writer today commits a whole batch together, so this has not happened, but a job that must never miss an entry should re-read the last few hundred ids it has already seen. **Scope.** State session laws only: federal acts (`SAL_...`) are never in this feed. **Example** ```bash curl "https://api.vaquill.ai/api/v1/us/session-laws/changes?sinceId=0&limit=100" \ -H "Authorization: Bearer $VAQUILL_API_KEY" ``` ```javascript let cursor = 0; for (;;) { const res = await fetch(`https://api.vaquill.ai/api/v1/us/session-laws/changes?sinceId=${cursor}`, { headers: { Authorization: `Bearer ${process.env.VAQUILL_API_KEY}` }, }); const page = await res.json(); for (const change of page.changes) handle(change); if (page.cursor !== null) cursor = page.cursor; if (!page.hasMore) break; } ``` **Related endpoints** - `GET /us/session-laws/list` lists the laws of one state, filtered; this feed is how you learn that one changed. - `POST /us/session-laws/batch` reads many laws at once from the ids this feed returns. - `GET /us/statutes/coverage` says which sessions we hold and how complete each is, in each jurisdiction''s `sessionLaws` block. **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.' operationId: get_session_law_changes_api_v1_us_session_laws_changes_get parameters: - name: sinceId in: query required: false schema: type: integer maximum: 9223372036854775807 minimum: 0 description: 'Return only entries with an `id` greater than this: the cursor for walking the feed forward. Send 0 (the default) to start from the beginning, then the `cursor` of your last page. `id` is an integer that only grows, so this is exact and immune to clock skew. A negative or non-integer value is a 422 and is never charged; a value past the newest `id` is an empty page, which is charged.' examples: - 1500 default: 0 title: Sinceid description: 'Return only entries with an `id` greater than this: the cursor for walking the feed forward. Send 0 (the default) to start from the beginning, then the `cursor` of your last page. `id` is an integer that only grows, so this is exact and immune to clock skew. A negative or non-integer value is a 422 and is never charged; a value past the newest `id` is an empty page, which is charged.' - name: jurisdiction in: query required: false schema: anyOf: - type: string enum: - al - ak - 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 - va - wa - wv - wi - wy - type: 'null' description: 'Limit the feed to one jurisdiction: a two-letter state code, `dc` or `pr`, case-insensitive. Omit for every jurisdiction. `federal` and any unknown code is a 422 and is never charged: federal session laws are not in this feed. The cursor is a position in the whole feed, so a filtered page may have gaps in `id`.' examples: - mn title: Jurisdiction description: 'Limit the feed to one jurisdiction: a two-letter state code, `dc` or `pr`, case-insensitive. Omit for every jurisdiction. `federal` and any unknown code is a 422 and is never charged: federal session laws are not in this feed. The cursor is a position in the whole feed, so a filtered page may have gaps in `id`.' - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 description: 'Most entries on this page: 1 to 200, default 50. The price is per page, however many entries it holds, so a larger page is cheaper per entry. Out of range is a 422 and is never charged.' examples: - 100 default: 50 title: Limit description: 'Most entries on this page: 1 to 200, default 50. The price is per page, however many entries it holds, so a larger page is cheaper per entry. Out of range is a 422 and is never charged.' responses: '200': description: A page of the feed, oldest first. `hasMore` and `cursor` say how to continue; an empty `changes` is a charged answer. content: application/json: schema: $ref: '#/components/schemas/SessionLawChangesResponse' examples: page: summary: 'A full page: more follow, so call again with `sinceId=1502`' value: changes: - id: 1501 kind: served sessionLawId: SSL_MN_2025R_G_Y2025_C1 jurisdiction: mn detectedAt: '2026-10-05T09:04:11.120118+00:00' - id: 1502 kind: served sessionLawId: SSL_MN_2025R_G_Y2025_C10 jurisdiction: mn detectedAt: '2026-10-05T09:04:11.120118+00:00' count: 2 cursor: 1502 hasMore: true creditsConsumed: 1 processingTimeMs: 41.8 caughtUp: summary: 'Nothing since your cursor: charged, `cursor` null, keep the one you hold' value: changes: [] count: 0 hasMore: false creditsConsumed: 1 processingTimeMs: 12.4 '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: example: detail: Insufficient credits schema: $ref: '#/components/schemas/ApiDetailError' '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: `sinceId` negative or not an integer, `limit` out of range, or `jurisdiction` not a state. Never charged. `errors[].loc` names the parameter exactly as you send it.' content: application/json: examples: negativeSinceId: summary: '`sinceId=-1`' value: detail: Invalid request parameters errors: - loc: - query - sinceId msg: Input should be greater than or equal to 0 type: greater_than_equal limitTooLarge: summary: '`limit=500`: at most 200' value: detail: Invalid request parameters errors: - loc: - query - limit msg: Input should be less than or equal to 200 type: less_than_equal federalJurisdiction: summary: '`jurisdiction=federal`: federal acts are never in this feed' value: detail: Invalid request parameters errors: - loc: - query - jurisdiction msg: 'Value error, Unknown `jurisdiction` value ''federal''. Expected one of: ak, al, ar, 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, vt, wa, wi, wv, wy.' type: value_error schema: $ref: '#/components/schemas/ApiDetailError' '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' servers: - url: https://api.vaquill.ai description: Production /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.' 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 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 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 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: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Invalid or expired API key '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: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Insufficient permissions for this operation '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, 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, 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: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Rate limit exceeded. Try again in 12 seconds. '500': description: An unexpected failure on our side. The charge is refunded. content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Internal server error '503': description: The session-laws database is temporarily unavailable. The charge is refunded; retry. content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: The US session-laws database is temporarily unavailable. Please retry. servers: - url: https://api.vaquill.ai description: Production /api/v1/us/session-laws/search: post: tags: - US Session Laws summary: Search the text of state session laws description: 'Find state session laws by what they SAY. Send a question in plain words, words from a title, a quoted phrase, a citation (`63-3004`), a code section or a bill number (`S.F.No. 1552`). You get the laws, best first, each with the passage of its text that matched and a snippet around your words. **Cost**: 4 credits per page, each page a new search. An empty result is an answer ("nothing matches") and is charged. A request that fails validation (422) is never charged; a failure on our side (500, 503) is refunded. To read a law you found, use `GET /us/session-laws/{sessionLawId}` (record) or its `/body` (text), which are priced on their own. **What is searched.** The ENACTED text: the law as it reads once the act takes effect. Language an act strikes out is not searched and never appears in a snippet, so a repealed word cannot match as if it were law. Only laws we serve with text are searched (see `GET /us/statutes/coverage`, `sessionLaws`, for what each state holds). Laws whose text we withhold are not returned. **How it ranks.** Keyword relevance (BM25), not meaning. Words are matched as written and stemmed (`licensing` finds `licensed`), so a question has to share vocabulary with the act: `teeth cleaning professional` does not find an act that says `dental hygienist`. A law matched by its title AND its text, or by an exact part of your query, ranks above one matched a single way. Quote a phrase to require it verbatim. **What a result says about itself.** `matchType` is `exact` when a quoted phrase, citation, code section or bill number you typed matched, otherwise `text`; `matchedBy` lists every way. Neither says the law is the right one: a question with no true answer still returns its closest words, and there is no "no good match" flag because keyword scores do not separate the two cases. Read the snippet. **Paging.** `limit` is 1 to 25. `offset` plus `limit` reaches at most the 60 best matches; narrow with `jurisdiction`, `session`, `series`, `instrumentType` or the approval dates rather than paging deeper. ```bash curl -X POST "https://api.vaquill.ai/api/v1/us/session-laws/search" \ -H "Authorization: Bearer vq_key_..." \ -H "Content-Type: application/json" \ -d ''{"query": "can the sheriff pay with a debit card", "jurisdiction": "al", "limit": 5}'' ``` ```javascript const res = await fetch("https://api.vaquill.ai/api/v1/us/session-laws/search", { method: "POST", headers: { Authorization: "Bearer vq_key_...", "Content-Type": "application/json" }, body: JSON.stringify({ query: ''"credit card or debit card"'', jurisdiction: "al", limit: 5 }), }); const { results } = await res.json(); ``` **Related.** `GET /us/session-laws/list` filters one state''s laws by session, series and date; `POST /us/session-laws/batch` reads up to 50 laws by id; `GET /us/statutes/section/{actId}/enactments` lists the acts a publisher''s own tables tie to a code section.' operationId: search_session_laws_api_v1_us_session_laws_search_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SessionLawSearchRequest' required: true responses: '200': description: The laws that matched, best first. An empty `results` is a charged answer. content: application/json: schema: $ref: '#/components/schemas/SessionLawSearchResponse' examples: words: summary: A plain question, scoped to one state value: query: can the sheriff pay with a debit card parsed: text: can the sheriff pay with a debit card phrases: [] citationTokens: [] billNumbers: [] results: - sessionLawId: SSL_AL_2025R_G_Y2025_C2025-127 jurisdiction: al session: 2025R series: general instrumentType: act citation: Act 2025-127 title: Relating to Houston County; to authorize the sheriff to establish procedures for using a credit card or debit card to make purchases. approvedDate: '2025-04-15' enactmentOutcome: signed matchType: text matchedBy: - title - text passage: seq: 0 ownStart: 0 ownEnd: 1820 heading: Section 1. snippet: Section 1. The sheriff of Houston County may establish procedures for using a credit card… highlights: - - 15 - 22 - - 85 - 89 bodyHref: https://api.vaquill.ai/api/v1/us/session-laws/SSL_AL_2025R_G_Y2025_C2025-127/body?startChar=0 href: https://api.vaquill.ai/api/v1/us/session-laws/SSL_AL_2025R_G_Y2025_C2025-127 count: 1 offset: 0 limit: 5 hasMore: false creditsConsumed: 4 processingTimeMs: 38.6 noMatch: summary: 'Nothing matches: an empty list, charged' value: query: xylophone excise levy parsed: text: xylophone excise levy phrases: [] citationTokens: [] billNumbers: [] results: [] count: 0 offset: 0 limit: 10 hasMore: false creditsConsumed: 4 processingTimeMs: 21.4 '401': description: Missing, invalid or revoked API key. Not charged. content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Invalid or expired API key '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: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Insufficient permissions for this operation '422': description: 'A parameter failed validation: `query` shorter than 2 characters or with control characters, `jurisdiction` not a state, an unknown `series` or `instrumentType`, a date that is not a real calendar date, `approvedTo` before `approvedFrom`, or `offset` past the 60 best matches. Never charged. `errors[].loc` names the parameter exactly as you send it.' content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' examples: queryTooShort: summary: '`query` of one character' value: detail: Invalid request parameters errors: - loc: - body - query msg: String should have at least 2 characters type: string_too_short offsetTooDeep: summary: '`offset` past the 60 best matches' value: detail: Invalid request parameters errors: - loc: - body - offset msg: Input should be less than or equal to 59 type: less_than_equal '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: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Rate limit exceeded. Try again in 12 seconds. '500': description: An unexpected failure on our side. The charge is refunded. content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: Internal server error '503': description: The session-laws database is temporarily unavailable. The charge is refunded; retry. content: application/json: schema: $ref: '#/components/schemas/ApiDetailError' example: detail: The US session-laws database is temporarily unavailable. Please retry. servers: - url: https://api.vaquill.ai description: Production /api/v1/us/session-laws/list: get: tags: - US Session Laws summary: List a state's session laws description: 'List the session laws of one state: every act its legislature enacted, filtered by session, approval date or effective date.' operationId: list_session_laws_api_v1_us_session_laws_list_get parameters: - name: jurisdiction in: query required: true schema: type: string description: 'Two-letter code of the state whose session laws to list: the 50 states, `dc` and `pr`. Case-insensitive (`MN` works). Required: the list is scoped to one jurisdiction at a time. `federal` and any unknown code is a 422; federal session laws are on `/us/statutes/section`. A jurisdiction we hold no session laws for yet (Indiana and Tennessee at launch) returns an empty page, which is charged: see `sessionLaws` on `/us/statutes/coverage` for what is held.' examples: - mn enum: - al - ak - 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 - va - wa - wv - wi - wy title: Jurisdiction description: 'Two-letter code of the state whose session laws to list: the 50 states, `dc` and `pr`. Case-insensitive (`MN` works). Required: the list is scoped to one jurisdiction at a time. `federal` and any unknown code is a 422; federal session laws are on `/us/statutes/section`. A jurisdiction we hold no session laws for yet (Indiana and Tennessee at launch) returns an empty page, which is charged: see `sessionLaws` on `/us/statutes/coverage` for what is held.' - name: session in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 32 pattern: ^[A-Za-z0-9._-]+$ - type: 'null' description: 'Only laws enacted in this session. Use the code exactly as `session.code` reports it: `2025R` is the 2025 regular session, `2025S1` the first special session of 2025. Case-sensitive, so `2025r` matches nothing. A code that matches no session returns an empty page (charged), not an error; characters other than letters, digits, `.`, `_` and `-` are a 422. Omit to list every session.' examples: - 2025R title: Session description: 'Only laws enacted in this session. Use the code exactly as `session.code` reports it: `2025R` is the 2025 regular session, `2025S1` the first special session of 2025. Case-sensitive, so `2025r` matches nothing. A code that matches no session returns an empty page (charged), not an error; characters other than letters, digits, `.`, `_` and `-` are a 422. Omit to list every session.' - name: series in: query required: false schema: anyOf: - type: array items: enum: - general - public - public_act - special_act - private_and_special - act - acts - law - local - municipal - appropriation - resolve - resolves - resolution - resolution_chapter - joint_resolution - concurrent_resolution - memorial - initiated_bill - constitutional_amendment type: string - type: 'null' description: 'Only laws in one of these numbering series. Repeat the parameter for several (`series=resolve&series=resolves`); they combine with OR. `general` is the ordinary chapter sequence of most states; others number acts, resolutions or local laws apart. One of `general`, `public`, `public_act`, `special_act`, `private_and_special`, `act`, `acts`, `law`, `local`, `municipal`, `appropriation`, `resolve`, `resolves`, `resolution`, `resolution_chapter`, `joint_resolution`, `concurrent_resolution`, `memorial`, `initiated_bill`, `constitutional_amendment`, as a result''s `series` reports it. Not every jurisdiction uses every series: `sessionLaws` on `/us/statutes/coverage` lists each one''s. Any other value is a 422, never charged; a valid series nothing matches returns an empty page (charged). Omit for every series.' examples: - - general title: Series description: 'Only laws in one of these numbering series. Repeat the parameter for several (`series=resolve&series=resolves`); they combine with OR. `general` is the ordinary chapter sequence of most states; others number acts, resolutions or local laws apart. One of `general`, `public`, `public_act`, `special_act`, `private_and_special`, `act`, `acts`, `law`, `local`, `municipal`, `appropriation`, `resolve`, `resolves`, `resolution`, `resolution_chapter`, `joint_resolution`, `concurrent_resolution`, `memorial`, `initiated_bill`, `constitutional_amendment`, as a result''s `series` reports it. Not every jurisdiction uses every series: `sessionLaws` on `/us/statutes/coverage` lists each one''s. Any other value is a 422, never charged; a valid series nothing matches returns an empty page (charged). Omit for every series.' - name: instrumentType in: query required: false schema: anyOf: - type: array items: enum: - act - joint_resolution - concurrent_resolution - resolution - resolve - memorial - other type: string - type: 'null' description: Only these kinds of measure. Repeat the parameter for several (`instrumentType=joint_resolution&instrumentType=concurrent_resolution`); they combine with OR. One of `act`, `joint_resolution`, `concurrent_resolution`, `resolution`, `resolve`, `memorial`, `other` (`act` is an ordinary law), as `instrumentType` reports it. Any other value is a 422, never charged; a valid kind nothing matches returns an empty page (charged). Omit for every kind. examples: - - joint_resolution - concurrent_resolution title: Instrumenttype description: Only these kinds of measure. Repeat the parameter for several (`instrumentType=joint_resolution&instrumentType=concurrent_resolution`); they combine with OR. One of `act`, `joint_resolution`, `concurrent_resolution`, `resolution`, `resolve`, `memorial`, `other` (`act` is an ordinary law), as `instrumentType` reports it. Any other value is a 422, never charged; a valid kind nothing matches returns an empty page (charged). Omit for every kind. - name: approvedFrom in: query required: false schema: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: 'Only laws approved (signed) on or after this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A law with no printed approval date never matches, and neither does one whose `approvedDate` we derived (`approvedDateDerived: true`): this filter reads the registry''s own approval date, so South Dakota''s derived dates are not found by it. Pair with `approvedTo` for a range; an end before the start is a 422 (never charged).' examples: - '2025-04-01' format: date title: Approvedfrom description: 'Only laws approved (signed) on or after this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A law with no printed approval date never matches, and neither does one whose `approvedDate` we derived (`approvedDateDerived: true`): this filter reads the registry''s own approval date, so South Dakota''s derived dates are not found by it. Pair with `approvedTo` for a range; an end before the start is a 422 (never charged).' - name: approvedTo in: query required: false schema: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: Only laws approved (signed) on or before this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). Like `approvedFrom`, it does not match a derived `approvedDate`. examples: - '2025-05-31' format: date title: Approvedto description: Only laws approved (signed) on or before this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). Like `approvedFrom`, it does not match a derived `approvedDate`. - name: effectiveFrom in: query required: false schema: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: 'Only laws with an effective date on or after this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A law matches when the span from its first to its last effective date (`effectiveFirst` to `effectiveLast`) overlaps your window, so one whose dates straddle your day is returned even though none falls exactly on it: read `effectiveDates` on the law for the dates themselves. Only laws with a held effective date can match, and not every state''s publisher prints them (Texas, Washington and Iowa do; Minnesota does not yet): a law with no effective date is never returned by this filter, though it may well be in force. To get everything taking effect on one day, send the same date to both `effectiveFrom` and `effectiveTo`; for example `jurisdiction=tx`, `effectiveFrom=2025-09-01`, `effectiveTo=2025-09-01` lists the Texas acts effective September 1, 2025.' examples: - '2025-09-01' format: date title: Effectivefrom description: 'Only laws with an effective date on or after this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A law matches when the span from its first to its last effective date (`effectiveFirst` to `effectiveLast`) overlaps your window, so one whose dates straddle your day is returned even though none falls exactly on it: read `effectiveDates` on the law for the dates themselves. Only laws with a held effective date can match, and not every state''s publisher prints them (Texas, Washington and Iowa do; Minnesota does not yet): a law with no effective date is never returned by this filter, though it may well be in force. To get everything taking effect on one day, send the same date to both `effectiveFrom` and `effectiveTo`; for example `jurisdiction=tx`, `effectiveFrom=2025-09-01`, `effectiveTo=2025-09-01` lists the Texas acts effective September 1, 2025.' - name: effectiveTo in: query required: false schema: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: Only laws with an effective date on or before this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). Overlap rule as for `effectiveFrom`. An end before `effectiveFrom` is a 422 (never charged). examples: - '2025-09-30' format: date title: Effectiveto description: Only laws with an effective date on or before this date. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). Overlap rule as for `effectiveFrom`. An end before `effectiveFrom` is a 422 (never charged). - name: hasText in: query required: false schema: anyOf: - type: boolean - type: 'null' description: '`true`: only laws whose text is served (`textStatus: held`), the ones `/{sessionLawId}/body` will return. `false`: only laws whose text is not served (`withheld`, `not_held` or `pending`). Omit for both. Combined with `textStatus` by AND, so `hasText=true&textStatus=withheld` is always empty. Anything but a boolean is a 422.' examples: - true title: Hastext description: '`true`: only laws whose text is served (`textStatus: held`), the ones `/{sessionLawId}/body` will return. `false`: only laws whose text is not served (`withheld`, `not_held` or `pending`). Omit for both. Combined with `textStatus` by AND, so `hasText=true&textStatus=withheld` is always empty. Anything but a boolean is a 422.' - name: textStatus in: query required: false schema: anyOf: - enum: - held - withheld - not_held - pending type: string - type: 'null' description: 'Only laws with this text status. One of `held`, `withheld`, `not_held`, `pending`: `held` is served, `withheld` is held but kept back for a measured defect, `not_held` is known to exist without text, `pending` is collected and not yet verified. Any other value is a 422. Omit for every status.' examples: - held title: Textstatus description: 'Only laws with this text status. One of `held`, `withheld`, `not_held`, `pending`: `held` is served, `withheld` is held but kept back for a measured defect, `not_held` is known to exist without text, `pending` is collected and not yet verified. Any other value is a 422. Omit for every status.' - name: isLaw in: query required: false schema: anyOf: - type: boolean - type: 'null' description: '`true`: only measures that are law. `false`: only numbered measures that are NOT law (a vetoed bill, a pocket veto), the ones `isLaw: false` marks. Omit for both. A measure whose outcome does not settle it (`not_presented`, `unknown`) has a null `isLaw`, so it matches neither `true` nor `false`: use `enactmentOutcome` for those. Anything but a boolean is a 422.' examples: - false title: Islaw description: '`true`: only measures that are law. `false`: only numbered measures that are NOT law (a vetoed bill, a pocket veto), the ones `isLaw: false` marks. Omit for both. A measure whose outcome does not settle it (`not_presented`, `unknown`) has a null `isLaw`, so it matches neither `true` nor `false`: use `enactmentOutcome` for those. Anything but a boolean is a 422.' - name: enactmentOutcome in: query required: false schema: anyOf: - type: array items: enum: - signed - became_law_without_signature - veto_overridden - line_item_veto - vetoed - pocket_veto - not_presented - approved_by_voters - unknown type: string - type: 'null' description: Only laws with one of these outcomes. Repeat the parameter for several (`enactmentOutcome=vetoed&enactmentOutcome=pocket_veto`); they combine with OR. One of `signed`, `became_law_without_signature`, `veto_overridden`, `line_item_veto`, `vetoed`, `pocket_veto`, `not_presented`, `approved_by_voters`, `unknown`, as `enactmentOutcome` reports it. Any other value is a 422, never charged; a valid outcome nothing matches returns an empty page (charged). The order you send them in does not matter, and a cursor stays valid for the same set. examples: - - vetoed - pocket_veto title: Enactmentoutcome description: Only laws with one of these outcomes. Repeat the parameter for several (`enactmentOutcome=vetoed&enactmentOutcome=pocket_veto`); they combine with OR. One of `signed`, `became_law_without_signature`, `veto_overridden`, `line_item_veto`, `vetoed`, `pocket_veto`, `not_presented`, `approved_by_voters`, `unknown`, as `enactmentOutcome` reports it. Any other value is a 422, never charged; a valid outcome nothing matches returns an empty page (charged). The order you send them in does not matter, and a cursor stays valid for the same set. - name: updatedSince in: query required: false schema: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: 'Only laws whose record changed on or after this date, midnight UTC, by `updatedAt`: the filter for a sync job that pulls only what is new or corrected since its last run. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A day with no change returns an empty page (charged), not an error.' examples: - '2026-10-01' format: date title: Updatedsince description: 'Only laws whose record changed on or after this date, midnight UTC, by `updatedAt`: the filter for a sync job that pulls only what is new or corrected since its last run. Format `YYYY-MM-DD`, inclusive; it must be a real calendar date (`2025-02-30` is a 422). A day with no change returns an empty page (charged), not an error.' - name: q in: query required: false schema: anyOf: - type: string minLength: 3 maxLength: 100 - type: 'null' description: 'Only laws whose `title` or printed `billNumber` contains this text, case-insensitively (`grain buyers` finds `An act relating to agriculture; modifying financial reporting requirements for grain buyers ...`). A plain substring, not a search engine: no stemming, no ranking, and `%` and `_` mean themselves. The bill number is matched as the publisher prints it (`S.F.No. 1552`, not `SF 1552`): to find a law by citation, use `GET /us/session-laws/{sessionLawId}`. 3 to 100 characters after trimming and without control characters, else a 422 (never charged); text that matches nothing returns an empty page (charged). Combines with the other filters by AND within the required `jurisdiction`.' examples: - grain buyers title: Q description: 'Only laws whose `title` or printed `billNumber` contains this text, case-insensitively (`grain buyers` finds `An act relating to agriculture; modifying financial reporting requirements for grain buyers ...`). A plain substring, not a search engine: no stemming, no ranking, and `%` and `_` mean themselves. The bill number is matched as the publisher prints it (`S.F.No. 1552`, not `SF 1552`): to find a law by citation, use `GET /us/session-laws/{sessionLawId}`. 3 to 100 characters after trimming and without control characters, else a 422 (never charged); text that matches nothing returns an empty page (charged). Combines with the other filters by AND within the required `jurisdiction`.' - name: cursor in: query required: false schema: anyOf: - type: string maxLength: 600 - type: 'null' description: 'Where to resume: the previous page''s `nextCursor`, unchanged. Send it with the same filters that produced it (`limit` may change). It is opaque, signed and tied to those filters, and is only ever issued by this API: a value we did not issue is a 422 with `reason: invalid_cursor`, one from an older cursor format is `cursor_expired`, and one sent with different filters is `cursor_query_mismatch` (restart without `cursor`). Never an empty page. Omit for the first page.' examples: - eyJ2IjoyLCJqIjoibW4iLCJzIjoiMjAyNVIiLCJpIjoiU1NMX01OXzIwMjVSX0dfWTIwMjVfQzEwIiwicSI6IjYxMjk2NDEzOTE2OTJmOTYifQ.86d0NXnVAJD7j_3d9zoWPQ title: Cursor description: 'Where to resume: the previous page''s `nextCursor`, unchanged. Send it with the same filters that produced it (`limit` may change). It is opaque, signed and tied to those filters, and is only ever issued by this API: a value we did not issue is a 422 with `reason: invalid_cursor`, one from an older cursor format is `cursor_expired`, and one sent with different filters is `cursor_query_mismatch` (restart without `cursor`). Never an empty page. Omit for the first page.' - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 description: Rows per page, 1 to 200; default 50. A page costs the same however many rows it holds, so a larger `limit` is cheaper per law. Outside the range is a 422. examples: - 25 default: 50 title: Limit description: Rows per page, 1 to 200; default 50. A page costs the same however many rows it holds, so a larger `limit` is cheaper per law. Outside the range is a 422. responses: '200': description: A page of the state's session laws. `hasMore` and `nextCursor` say whether another follows; an empty `results` is a charged answer, unless `coverage` says the session or state is not fully collected. content: application/json: schema: $ref: '#/components/schemas/SessionLawListResponse' examples: search: summary: 'jurisdiction=mn&q=court fees: laws whose title or bill number contains the text' value: results: - sessionLawId: SSL_MN_2025R_G_Y2025_C10 jurisdiction: mn citation: CHAPTER 10--H.F.No. 2184 citableAs: Minn. Laws 2025, ch. 10 citationShort: MN ch. 10 (2025) session: code: 2025R label: 2025 Regular Session type: regular year: 2025 series: general instrumentType: act number: '10' billNumber: H.F.No. 2184 numberingYear: 2025 title: An act relating to court fees; exempting the Office of Ombudsperson for American Indian Families from court fee requirements; amending Minnesota Statutes 2024, section 357.021, subdivision 1a. approvedDate: '2025-04-30' approvedDateDerived: false enactmentOutcome: signed isLaw: true textStatus: held charCount: 4561 estimatedBodyPages: 1 textSha256: 6c4008d050a5b85a7eaf03cd6f26ccca5160f015bbeb7bf9dceece9bd8bcd8d9 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' count: 1 hasMore: false processingTimeMs: 204.1 creditsConsumed: 1 session: summary: jurisdiction=mn&session=2025R&limit=2 value: results: - 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 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' - sessionLawId: SSL_MN_2025R_G_Y2025_C10 jurisdiction: mn citation: CHAPTER 10--H.F.No. 2184 citableAs: Minn. Laws 2025, ch. 10 citationShort: MN ch. 10 (2025) session: code: 2025R label: 2025 Regular Session type: regular year: 2025 series: general instrumentType: act number: '10' billNumber: H.F.No. 2184 numberingYear: 2025 title: An act relating to court fees; exempting the Office of Ombudsperson for American Indian Families from court fee requirements; amending Minnesota Statutes 2024, section 357.021, subdivision 1a. approvedDate: '2025-04-30' approvedDateDerived: false enactmentOutcome: signed isLaw: true textStatus: held charCount: 4561 estimatedBodyPages: 1 textSha256: 6c4008d050a5b85a7eaf03cd6f26ccca5160f015bbeb7bf9dceece9bd8bcd8d9 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' count: 2 nextCursor: eyJ2IjoyLCJqIjoibW4iLCJzIjoiMjAyNVIiLCJpIjoiU1NMX01OXzIwMjVSX0dfWTIwMjVfQzEwIiwicSI6IjYxMjk2NDEzOTE2OTJmOTYifQ.86d0NXnVAJD7j_3d9zoWPQ hasMore: true processingTimeMs: 186.4 creditsConsumed: 1 effectiveDate: summary: jurisdiction=tx&effectiveFrom=2025-09-01&effectiveTo=2025-09-01&limit=2 value: results: - sessionLawId: SSL_TX_2025R_G_Y2025_C1 jurisdiction: tx citation: 89th Regular Session, ch. 1 citableAs: 2025 Tex. Gen. Laws ch. 1 citationShort: TX ch. 1 (2025) session: code: 2025R label: 89th Regular Session type: regular year: 2025 series: general instrumentType: act number: '1' billNumber: S.B. No. 14 numberingYear: 2025 title: Relating to reforming the procedure by which state agencies adopt rules and impose regulatory requirements and the deference given to the interpretation of laws and rules by state agencies in certain judicial proceedings. approvedDate: '2025-04-23' approvedDateDerived: false effectiveFirst: '2025-09-01' effectiveLast: '2025-09-01' enactmentOutcome: signed isLaw: true textStatus: held charCount: 18449 estimatedBodyPages: 1 textSha256: 27df48f5be5c3d8b6a13832b064710b7584cd26b1dd1de0033f085dd3249f257 versionNo: 1 amendatoryMarkup: preserved markupConvention: mixed 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:04:11.120118+00:00' - sessionLawId: SSL_TX_2025R_G_Y2025_C10 jurisdiction: tx citation: 89th Regular Session, ch. 10 citableAs: 2025 Tex. Gen. Laws ch. 10 citationShort: TX ch. 10 (2025) session: code: 2025R label: 89th Regular Session type: regular year: 2025 series: general instrumentType: act number: '10' billNumber: S.B. No. 711 numberingYear: 2025 title: Relating to property owners' associations, including condominium unit owners' associations. approvedDate: '2025-05-13' approvedDateDerived: false effectiveFirst: '2025-09-01' effectiveLast: '2025-09-01' enactmentOutcome: signed isLaw: true textStatus: held charCount: 10764 estimatedBodyPages: 1 textSha256: 8d82fb97105d63cd50ec09865c1591cbaa8d3996f813951bba4f9a52bdb8e92b versionNo: 1 amendatoryMarkup: preserved markupConvention: mixed 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:04:11.120118+00:00' count: 2 nextCursor: eyJ2IjoyLCJqIjoidHgiLCJzIjoiMjAyNVIiLCJpIjoiU1NMX1RYXzIwMjVSX0dfWTIwMjVfQzEwIiwicSI6IjMzYmM2NWQ5MWU2ZjAyZjUifQ.V2XakPeIVCCaxSqKPBCbFg hasMore: true processingTimeMs: 231.9 creditsConsumed: 1 emptyPartialSession: summary: 'jurisdiction=ok&session=2025R&q=zoning: an empty page in a session we hold only part of. Not charged: the law may exist' value: results: [] count: 0 hasMore: false coverage: scope: session jurisdiction: ok status: partial session: code: 2025R label: Oklahoma Session Laws - 2025 type: regular year: 2025 sessionsHeld: 1 partialSessions: - 2025R message: No law in session 2025R matches your filters, but we hold only part of this session, so the law you want may exist. This page was not charged. processingTimeMs: 47.2 creditsConsumed: 0 emptyCompleteSession: summary: 'jurisdiction=mn&session=2025R&q=zzz: an empty page in a session we hold in full. Charged: nothing matches' value: results: [] count: 0 hasMore: false coverage: scope: session jurisdiction: mn status: complete session: code: 2025R label: 2025 Regular Session type: regular year: 2025 sessionsHeld: 2 partialSessions: [] message: No law in session 2025R matches your filters. We hold every law the publisher lists for it, so this is not a gap in our collection. processingTimeMs: 51.8 creditsConsumed: 1 emptyNotHeld: summary: 'jurisdiction=in: a state we hold no session laws for. Not charged' value: results: [] count: 0 hasMore: false coverage: scope: jurisdiction jurisdiction: in status: not_held sessionsHeld: 0 partialSessions: [] reason: Indiana publishes its session laws only through a service that needs an access token we do not hold yet. message: Indiana publishes its session laws only through a service that needs an access token we do not hold yet. This page was not charged. processingTimeMs: 38.6 creditsConsumed: 0 '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: example: detail: Insufficient credits schema: $ref: '#/components/schemas/ApiDetailError' '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: `jurisdiction` missing or not a state, a malformed filter or date (`enactmentOutcome` outside its vocabulary, `q` shorter than 3 characters), `limit` out of range, or a `cursor` we did not issue. Never charged. `errors[].loc` names the parameter exactly as you send it.' content: application/json: examples: missingJurisdiction: summary: '`jurisdiction` omitted' value: detail: Invalid request parameters errors: - loc: - query - jurisdiction msg: Field required type: missing federalJurisdiction: summary: '`jurisdiction=federal`: federal acts are on /us/statutes/section' value: detail: Invalid request parameters errors: - loc: - query - jurisdiction msg: 'Value error, Unknown `jurisdiction` value ''federal''. Expected one of: al, ak, 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, va, wa, wv, wi, wy.' type: value_error impossibleDate: summary: '`effectiveFrom=2025-02-30`' value: detail: Invalid request parameters errors: - loc: - query - effectiveFrom msg: Value error, `effectiveFrom` must be a real calendar date in YYYY-MM-DD form. type: value_error limitTooLarge: summary: '`limit=500`' value: detail: Invalid request parameters errors: - loc: - query - limit msg: Input should be less than or equal to 200 type: less_than_equal badEnactmentOutcome: summary: '`enactmentOutcome=bogus`' value: detail: Invalid request parameters errors: - loc: - query - enactmentOutcome - 0 msg: Input should be 'signed', 'became_law_without_signature', 'veto_overridden', 'line_item_veto', 'vetoed', 'pocket_veto', 'not_presented', 'approved_by_voters' or 'unknown' type: literal_error qTooShort: summary: '`q=ab`: at least 3 characters' value: detail: Invalid request parameters errors: - loc: - query - q msg: String should have at least 3 characters type: string_too_short impossibleUpdatedSince: summary: '`updatedSince=2026-02-30`' value: detail: Invalid request parameters errors: - loc: - query - updatedSince msg: Value error, `updatedSince` must be a real calendar date in YYYY-MM-DD form. type: value_error badTextStatus: summary: '`textStatus=bogus`' value: detail: Invalid request parameters errors: - loc: - query - textStatus msg: Input should be 'held', 'withheld', 'not_held' or 'pending' type: literal_error reversedDateRange: summary: '`effectiveFrom=2025-09-30&effectiveTo=2025-09-01` (an end before the start)' value: detail: '`effectiveFrom` (2025-09-30) must not be after `effectiveTo` (2025-09-01). Swap them, or send the same date to both for a single day.' badCursor: summary: A `cursor` this API did not issue value: detail: '`cursor` is not one this API issued.' reason: invalid_cursor cursorQueryMismatch: summary: A `cursor` sent with different filters than produced it value: detail: '`cursor` was issued for a different query. Send it only with the filters that produced it, or restart without `cursor`.' reason: cursor_query_mismatch cursorExpired: summary: A `cursor` from before the cursor format changed value: detail: '`cursor` is from an earlier version of this API and has expired. Restart without `cursor`.' reason: cursor_expired schema: $ref: '#/components/schemas/ApiDetailError' '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' servers: - url: https://api.vaquill.ai description: Production /api/v1/us/session-laws/{session_law_id}/body: get: tags: - US Session Laws summary: Get a state session law's text description: 'The act''s text exactly as printed, one page of about 30,000 characters at a time, cut at a paragraph break where one is near.' operationId: get_session_law_body_api_v1_us_session_laws__session_law_id__body_get parameters: - name: session_law_id in: path required: true schema: type: string minLength: 1 maxLength: 300 description: 'A STATE session law''s id, for example `SSL_MN_2025S1_G_Y2025_C1`, from a `/us/session-laws/list` result. A citation also works here on `GET /us/session-laws/{sessionLawId}`, and `resolvedFrom` says what your input matched. Name the state in the citation: `Minn. Laws 2025, ch. 1`, `2025 Minn. Laws ch. 1`, `Ch. 1, Laws of Minnesota 2025`, `Ch. 2025-12, Laws of Fla.`, `2025 Wash. Sess. Laws ch. 12`, `La. Acts 2025, No. 12`, `Pa. Act 12 of 2025`, `Minn. S.F. 1552 (2025)`, `MN: Laws 2025, ch. 1`. A form only one state uses needs no state: `P.A. 104-0001` (Illinois), `Pub. Act No. 26-151` (Connecticut), `S.L. 2025-12` (North Carolina), `Stats. 2025, ch. 12` (California), `D.C. Law 25-713`. The publisher''s printed form (`CHAPTER 2025-12`, `S.F.No. 1552`) and the `citation` we print on every law also work. A form several states share (`Laws 2025, ch. 1`, `HB 123`, `Act 12 of 2025`) is a 404 with `reason: needs_jurisdiction`, the states it exists in and one candidate per state: we never guess the state. A citation naming several laws of one state (Minnesota 2025 has two Chapter 1s) is a 404 listing all of them, `candidateCount` and `truncated` saying whether the list is complete, and `defaultSessionLawId` the regular session''s law where there is exactly one conventional reading. An id or citation that matches nothing in a session we have only partly collected is a 404 with `reason: session_not_fully_collected` and that session''s coverage: the law may exist and not be held yet, so it is never charged, the resolve price included. A citation costs the route''s price PLUS the `/us/statutes/resolve` price (2 credits), the second charged whether or not it resolves. URL-encode the citation; one containing `/` cannot travel in a path segment. Federal session laws (`SAL_...`, `Pub. L. 118-5`, the Statutes at Large) are served by `/us/statutes/section`, not here, and code citations (`26 U.S.C. § 1`) by `/us/statutes/resolve`.' examples: - SSL_MN_2025S1_G_Y2025_C1 title: Session Law Id description: 'A STATE session law''s id, for example `SSL_MN_2025S1_G_Y2025_C1`, from a `/us/session-laws/list` result. A citation also works here on `GET /us/session-laws/{sessionLawId}`, and `resolvedFrom` says what your input matched. Name the state in the citation: `Minn. Laws 2025, ch. 1`, `2025 Minn. Laws ch. 1`, `Ch. 1, Laws of Minnesota 2025`, `Ch. 2025-12, Laws of Fla.`, `2025 Wash. Sess. Laws ch. 12`, `La. Acts 2025, No. 12`, `Pa. Act 12 of 2025`, `Minn. S.F. 1552 (2025)`, `MN: Laws 2025, ch. 1`. A form only one state uses needs no state: `P.A. 104-0001` (Illinois), `Pub. Act No. 26-151` (Connecticut), `S.L. 2025-12` (North Carolina), `Stats. 2025, ch. 12` (California), `D.C. Law 25-713`. The publisher''s printed form (`CHAPTER 2025-12`, `S.F.No. 1552`) and the `citation` we print on every law also work. A form several states share (`Laws 2025, ch. 1`, `HB 123`, `Act 12 of 2025`) is a 404 with `reason: needs_jurisdiction`, the states it exists in and one candidate per state: we never guess the state. A citation naming several laws of one state (Minnesota 2025 has two Chapter 1s) is a 404 listing all of them, `candidateCount` and `truncated` saying whether the list is complete, and `defaultSessionLawId` the regular session''s law where there is exactly one conventional reading. An id or citation that matches nothing in a session we have only partly collected is a 404 with `reason: session_not_fully_collected` and that session''s coverage: the law may exist and not be held yet, so it is never charged, the resolve price included. A citation costs the route''s price PLUS the `/us/statutes/resolve` price (2 credits), the second charged whether or not it resolves. URL-encode the citation; one containing `/` cannot travel in a path segment. Federal session laws (`SAL_...`, `Pub. L. 118-5`, the Statutes at Large) are served by `/us/statutes/section`, not here, and code citations (`26 U.S.C. § 1`) by `/us/statutes/resolve`.' - name: cursor in: query required: false schema: anyOf: - type: string maxLength: 600 - type: 'null' description: 'Where to resume: the previous page''s `nextCursor`, unchanged. Omit for the first page. It is opaque, signed and tied to the exact text it was cut from: a value we did not issue (`reason: invalid_cursor`), from an older cursor format (`cursor_expired`) or past the end of the text (`cursor_past_end`) is a 422, and one from before the text was re-collected is a 409 (start again without it). None is charged. Send either `cursor` or `startChar`, never both (a 422, never charged).' examples: - eyJ2IjoyLCJvIjoyOTk4NywiaCI6IjAyNjkzZDViNTVkNDcwOWIifQ.stWHVSgGqJPIElcTLfAGHA title: Cursor description: 'Where to resume: the previous page''s `nextCursor`, unchanged. Omit for the first page. It is opaque, signed and tied to the exact text it was cut from: a value we did not issue (`reason: invalid_cursor`), from an older cursor format (`cursor_expired`) or past the end of the text (`cursor_past_end`) is a 422, and one from before the text was re-collected is a 409 (start again without it). None is charged. Send either `cursor` or `startChar`, never both (a 422, never charged).' - name: startChar in: query required: false schema: anyOf: - type: integer maximum: 100000000 minimum: 0 - type: 'null' description: 'Start the page at this character offset into the text (0-based, the same scale as `pageStart` and `totalChars`): an alternative to `cursor` for jumping to a place you already know, such as the character where a section begins, without paging from the start. The page that comes back is the same size and price as any other, its `nextCursor` is a normal signed cursor you can follow, and a page is still cut at a paragraph break near its end. Send either `startChar` or `cursor`, never both (a 422, never charged). 0 to 100,000,000; a value at or beyond the end of the text is a 422 and is refunded. There is no page-size parameter: the price per page is fixed.' examples: - 29987 title: Startchar description: 'Start the page at this character offset into the text (0-based, the same scale as `pageStart` and `totalChars`): an alternative to `cursor` for jumping to a place you already know, such as the character where a section begins, without paging from the start. The page that comes back is the same size and price as any other, its `nextCursor` is a normal signed cursor you can follow, and a page is still cut at a paragraph break near its end. Send either `startChar` or `cursor`, never both (a 422, never charged). 0 to 100,000,000; a value at or beyond the end of the text is a 422 and is refunded. There is no page-size parameter: the price per page is fixed.' - name: expectTextSha256 in: query required: false schema: anyOf: - type: string pattern: ^[0-9a-f]{16,64}$ - type: 'null' description: 'The `textSha256` you read the text under, in lowercase hex (the whole 64 characters, or any prefix of 16 or more). When this law''s text no longer has that hash (it was re-collected), the answer is a 409 and nothing is charged, exactly as for a `cursor` cut from an earlier version: use it with `startChar`, which otherwise has no version binding of its own. Anything that is not 16 to 64 lowercase hex characters is a 422.' examples: - 02693d5b55d4709bdd36fdccee4a9737d2655a3988a90daeb6b7c486ce50260b title: Expecttextsha256 description: 'The `textSha256` you read the text under, in lowercase hex (the whole 64 characters, or any prefix of 16 or more). When this law''s text no longer has that hash (it was re-collected), the answer is a 409 and nothing is charged, exactly as for a `cursor` cut from an earlier version: use it with `startChar`, which otherwise has no version binding of its own. Anything that is not 16 to 64 lowercase hex characters is a 422.' responses: '200': description: 'One page of the act''s text, or `available: false` (not charged) when we do not serve it.' content: application/json: schema: $ref: '#/components/schemas/SessionLawBodyResponse' examples: firstPage: summary: Page 1 of a long act (text abbreviated here) value: sessionLawId: SSL_MN_2025S1_G_Y2025_C1 citation: CHAPTER 1--S.F.No. 3 jurisdiction: mn session: code: 2025S1 label: 2025 1st Special Session type: special year: 2025 approvedDate: '2025-06-14' approvedDateDerived: false sourceUrl: https://www.revisor.mn.gov/laws/2025/1/Session+Law/Chapter/1/ available: true textStatus: held text: 'CHAPTER 1--S.F.No. 3 An act relating to state government; appropriating money for environment and natural resources; appropriating money from environment and natural resources trust fund; modifying prior appropriations; modifying fees and surcharges; ...' pageStart: 0 pageEnd: 29987 totalChars: 310454 totalPages: 11 pagePrice: 6 estimatedRemainingCredits: 60 textSha256: 02693d5b55d4709bdd36fdccee4a9737d2655a3988a90daeb6b7c486ce50260b amendatoryMarkup: preserved markupConvention: publisher_literal nextCursor: eyJ2IjoyLCJvIjoyOTk4NywiaCI6IjAyNjkzZDViNTVkNDcwOWIifQ.stWHVSgGqJPIElcTLfAGHA hasMore: true processingTimeMs: 612.3 creditsConsumed: 6 startChar: summary: 'startChar=29987: the page that begins where page 1 ended, no cursor needed' value: sessionLawId: SSL_MN_2025S1_G_Y2025_C1 citation: CHAPTER 1--S.F.No. 3 jurisdiction: mn session: code: 2025S1 label: 2025 1st Special Session type: special year: 2025 approvedDate: '2025-06-14' approvedDateDerived: false sourceUrl: https://www.revisor.mn.gov/laws/2025/1/Session+Law/Chapter/1/ available: true textStatus: held text: '...(continues at character 29987, cut at the paragraph break before it) ...' pageStart: 29987 pageEnd: 59974 totalChars: 310454 totalPages: 11 pagePrice: 6 estimatedRemainingCredits: 54 textSha256: 02693d5b55d4709bdd36fdccee4a9737d2655a3988a90daeb6b7c486ce50260b amendatoryMarkup: preserved markupConvention: publisher_literal nextCursor: eyJ2IjoyLCJvIjo1OTk3NCwiaCI6IjAyNjkzZDViNTVkNDcwOWIifQ.9KqnMFXT9SmUwN9e7TzHKA hasMore: true processingTimeMs: 612.3 creditsConsumed: 6 onePageAct: summary: 'A short act is one page: the last page has no nextCursor and nothing remains' value: sessionLawId: SSL_MN_2025R_G_Y2025_C1 citation: CHAPTER 1--S.F.No. 1552 jurisdiction: mn session: code: 2025R label: 2025 Regular Session type: regular year: 2025 approvedDate: '2025-03-17' approvedDateDerived: false sourceUrl: https://www.revisor.mn.gov/laws/2025/0/Session+Law/Chapter/1/ available: true textStatus: held text: '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. ...' pageStart: 0 pageEnd: 5470 totalChars: 5470 totalPages: 1 pagePrice: 6 estimatedRemainingCredits: 0 textSha256: 55c7a8d08647e41f87e23fc2016881a6583911a1d5cfa8687403442e9096451b amendatoryMarkup: preserved markupConvention: publisher_literal hasMore: false processingTimeMs: 318.9 creditsConsumed: 6 withheld: summary: 'A withheld law: available false, nothing charged' value: sessionLawId: SSL_LA_2025R_G_C2 citation: ACT No. 2 jurisdiction: la session: code: 2025R label: 2025 Regular Session type: regular year: 2025 approvedDate: '2025-06-20' approvedDateDerived: false sourceUrl: https://www.legis.la.gov/legis/ViewDocument.aspx?d=1426048 available: false reason: withheld 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.' pagePrice: 0 amendatoryMarkup: absent hasMore: false processingTimeMs: 41.7 creditsConsumed: 0 '404': description: Unknown id, a federal act, or an endpoint name where the id goes. `reason` says which. Never charged. content: application/json: examples: not_in_registry: summary: No law carries this id value: detail: 'Session law not found. No law in the registry carries this id. Take ids from a /us/session-laws/list result. This route takes ids only, not citations: GET /us/session-laws/{sessionLawId} accepts a citation and returns the id to send here.' sessionLawId: SSL_MN_1801R_G_Y1801_C9999 reason: not_in_registry didYouMean: [] wrong_case: summary: The id exists in another letter case (never served for you) value: detail: Session law not found. Ids are case-sensitive and this one exists in a different case; see didYouMean. sessionLawId: ssl_mn_2025r_g_y2025_c1 reason: wrong_case didYouMean: - SSL_MN_2025R_G_Y2025_C1 federal_session_law: summary: 'A federal act: served by /us/statutes/section, refused before any charge' value: detail: Session law not found. This endpoint covers STATE session laws; federal session laws (the Statutes at Large) are served by GET /us/statutes/section/{actId}. A federal id (`SAL_...`) is not charged; a federal citation typed in its place keeps the /us/statutes/resolve price, like any unresolved citation. sessionLawId: SAL_PL118-5 reason: federal_session_law didYouMean: [] missing_session_law_id: summary: An endpoint name where the id goes, refused before any charge value: detail: 'Session law not found. The URL has no session-law id in it: the segment where the id goes names an endpoint, for example /us/session-laws/{sessionLawId}/body. Nothing was charged.' sessionLawId: body reason: missing_session_law_id didYouMean: [] session_not_fully_collected: summary: 'Nothing matched, and the session is only partly collected: the law may exist (nothing is charged, the resolve price included)' value: detail: 'Session law not found. Nothing matched, and the session this points into is only partly collected, so the law may exist and not be held yet. `sessionCoverage` says how much of the session we hold. Nothing was charged: a miss in a partly collected session is never billed.' sessionLawId: SSL_DE_2025R_G_C3 reason: session_not_fully_collected didYouMean: [] sessionCoverage: code: 2025R label: 153rd General Assembly type: regular year: 2025 status: partial servedCount: 43 withheldCount: 0 notHeldCount: 0 registryCount: 43 collectedCount: 43 denominator: kind: complete_listing value: 296 derivation: The publisher's complete listing of this session names 296 measures. We hold 43 of them; the rest are not yet collected. openGaps: 253 schema: $ref: '#/components/schemas/SessionLawNotFoundError' '409': description: 'The `cursor` was cut from an earlier version of this law''s text, or the `expectTextSha256` you sent is not its hash: the text has since been re-collected. Not charged. Start again without `cursor`.' content: application/json: examples: staleCursor: summary: A `cursor` from before the text was re-collected value: detail: This cursor belongs to an earlier version of the text. Start again without `cursor`. staleHash: summary: An `expectTextSha256` that is no longer the text's hash value: detail: The text of this law no longer matches `expectTextSha256` (it was re-collected). Read `textSha256` from the law and start again. schema: $ref: '#/components/schemas/ApiDetailError' '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: example: detail: Insufficient credits schema: $ref: '#/components/schemas/ApiDetailError' '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: a `cursor` we did not issue, `cursor` sent with `startChar`, or a malformed `startChar` or `expectTextSha256`. Never charged. `errors[].loc` names the parameter exactly as you send it.' content: application/json: examples: badCursor: summary: A `cursor` this API did not issue value: detail: '`cursor` is not one this API issued.' reason: invalid_cursor cursorExpired: summary: A `cursor` from before the cursor format changed value: detail: '`cursor` is from an earlier version of this API and has expired. Restart without `cursor`.' reason: cursor_expired cursorPastEnd: summary: A `cursor` at or beyond the end of the text (never issued by this API) value: detail: '`cursor` points past the end of this law''s text. A final page has no `nextCursor`: restart without `cursor`.' reason: cursor_past_end cursorAndStartChar: summary: '`cursor` and `startChar` together: a cursor already says where the page starts' value: detail: 'Send either `cursor` or `startChar`, not both: a cursor already says where the page starts.' startCharPastEnd: summary: '`startChar=400000` on a text of 310454 characters (refunded)' value: detail: '`startChar` (400000) is at or beyond the end of this law''s text, which is 310454 characters long. Nothing was charged.' startCharNegative: summary: '`startChar=-1`' value: detail: Invalid request parameters errors: - loc: - query - startChar msg: Input should be greater than or equal to 0 type: greater_than_equal badExpectTextSha256: summary: '`expectTextSha256=abc`: 16 to 64 lowercase hex characters' value: detail: Invalid request parameters errors: - loc: - query - expectTextSha256 msg: String should match pattern '^[0-9a-f]{16,64}$' type: string_pattern_mismatch schema: $ref: '#/components/schemas/ApiDetailError' '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' servers: - url: https://api.vaquill.ai description: Production /api/v1/us/session-laws/{session_law_id}: get: tags: - US Session Laws summary: Get a state session law, by id or by citation description: 'Everything we hold about one STATE session law except its text: identity and citation, session, approval date, every printed effective date (`effectiveDates`, always a list), other printed dates, the code sections the publisher''s own table lists the act as affecting (`codeSectionsAffected`), its sources with hashes, and whether its text is held.' operationId: get_session_law_api_v1_us_session_laws__session_law_id__get parameters: - name: session_law_id in: path required: true schema: type: string minLength: 1 maxLength: 300 description: 'A STATE session law''s id, for example `SSL_MN_2025S1_G_Y2025_C1`, from a `/us/session-laws/list` result. A citation also works here on `GET /us/session-laws/{sessionLawId}`, and `resolvedFrom` says what your input matched. Name the state in the citation: `Minn. Laws 2025, ch. 1`, `2025 Minn. Laws ch. 1`, `Ch. 1, Laws of Minnesota 2025`, `Ch. 2025-12, Laws of Fla.`, `2025 Wash. Sess. Laws ch. 12`, `La. Acts 2025, No. 12`, `Pa. Act 12 of 2025`, `Minn. S.F. 1552 (2025)`, `MN: Laws 2025, ch. 1`. A form only one state uses needs no state: `P.A. 104-0001` (Illinois), `Pub. Act No. 26-151` (Connecticut), `S.L. 2025-12` (North Carolina), `Stats. 2025, ch. 12` (California), `D.C. Law 25-713`. The publisher''s printed form (`CHAPTER 2025-12`, `S.F.No. 1552`) and the `citation` we print on every law also work. A form several states share (`Laws 2025, ch. 1`, `HB 123`, `Act 12 of 2025`) is a 404 with `reason: needs_jurisdiction`, the states it exists in and one candidate per state: we never guess the state. A citation naming several laws of one state (Minnesota 2025 has two Chapter 1s) is a 404 listing all of them, `candidateCount` and `truncated` saying whether the list is complete, and `defaultSessionLawId` the regular session''s law where there is exactly one conventional reading. An id or citation that matches nothing in a session we have only partly collected is a 404 with `reason: session_not_fully_collected` and that session''s coverage: the law may exist and not be held yet, so it is never charged, the resolve price included. A citation costs the route''s price PLUS the `/us/statutes/resolve` price (2 credits), the second charged whether or not it resolves. URL-encode the citation; one containing `/` cannot travel in a path segment. Federal session laws (`SAL_...`, `Pub. L. 118-5`, the Statutes at Large) are served by `/us/statutes/section`, not here, and code citations (`26 U.S.C. § 1`) by `/us/statutes/resolve`.' examples: - SSL_MN_2025R_G_Y2025_C1 title: Session Law Id description: 'A STATE session law''s id, for example `SSL_MN_2025S1_G_Y2025_C1`, from a `/us/session-laws/list` result. A citation also works here on `GET /us/session-laws/{sessionLawId}`, and `resolvedFrom` says what your input matched. Name the state in the citation: `Minn. Laws 2025, ch. 1`, `2025 Minn. Laws ch. 1`, `Ch. 1, Laws of Minnesota 2025`, `Ch. 2025-12, Laws of Fla.`, `2025 Wash. Sess. Laws ch. 12`, `La. Acts 2025, No. 12`, `Pa. Act 12 of 2025`, `Minn. S.F. 1552 (2025)`, `MN: Laws 2025, ch. 1`. A form only one state uses needs no state: `P.A. 104-0001` (Illinois), `Pub. Act No. 26-151` (Connecticut), `S.L. 2025-12` (North Carolina), `Stats. 2025, ch. 12` (California), `D.C. Law 25-713`. The publisher''s printed form (`CHAPTER 2025-12`, `S.F.No. 1552`) and the `citation` we print on every law also work. A form several states share (`Laws 2025, ch. 1`, `HB 123`, `Act 12 of 2025`) is a 404 with `reason: needs_jurisdiction`, the states it exists in and one candidate per state: we never guess the state. A citation naming several laws of one state (Minnesota 2025 has two Chapter 1s) is a 404 listing all of them, `candidateCount` and `truncated` saying whether the list is complete, and `defaultSessionLawId` the regular session''s law where there is exactly one conventional reading. An id or citation that matches nothing in a session we have only partly collected is a 404 with `reason: session_not_fully_collected` and that session''s coverage: the law may exist and not be held yet, so it is never charged, the resolve price included. A citation costs the route''s price PLUS the `/us/statutes/resolve` price (2 credits), the second charged whether or not it resolves. URL-encode the citation; one containing `/` cannot travel in a path segment. Federal session laws (`SAL_...`, `Pub. L. 118-5`, the Statutes at Large) are served by `/us/statutes/section`, not here, and code citations (`26 U.S.C. § 1`) by `/us/statutes/resolve`.' - name: jurisdiction in: query required: false schema: anyOf: - type: string enum: - al - ak - 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 - va - wa - wv - wi - wy - type: 'null' description: 'Optional two-letter state code that scopes how a CITATION sent in place of the id is read. It supplies the state a citation does not name (`Laws 2025, ch. 1` with `jurisdiction=mn` is Minnesota''s) and it vetoes a state the citation does name or whose form belongs to another: `Minn. Laws 2025, ch. 1` with `jurisdiction=tx` is a 404 `unresolved_citation` (the resolution fee is kept), never answered from Minnesota. Ignored, with no effect, when you send an id. The same codes as the list''s `jurisdiction`: the 50 states, `dc` and `pr`, case-insensitive; `federal` or an unknown code is a 422 and is never charged.' examples: - mn title: Jurisdiction description: 'Optional two-letter state code that scopes how a CITATION sent in place of the id is read. It supplies the state a citation does not name (`Laws 2025, ch. 1` with `jurisdiction=mn` is Minnesota''s) and it vetoes a state the citation does name or whose form belongs to another: `Minn. Laws 2025, ch. 1` with `jurisdiction=tx` is a 404 `unresolved_citation` (the resolution fee is kept), never answered from Minnesota. Ignored, with no effect, when you send an id. The same codes as the list''s `jurisdiction`: the 50 states, `dc` and `pr`, case-insensitive; `federal` or an unknown code is a 422 and is never charged.' responses: '200': description: The law's record. `textStatus` says whether its text is served; `resolvedFrom` is present when a citation was sent in place of an id. content: application/json: schema: $ref: '#/components/schemas/SessionLawResponse' examples: byId: summary: A law by id (Minnesota 2025, chapter 1) value: 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 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.' processingTimeMs: 412.6 creditsConsumed: 2 byCitation: summary: The same law by its bill number, which adds the resolve fee value: 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 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.' resolvedFrom: input: S.F.No. 1552 sessionLawId: SSL_MN_2025R_G_Y2025_C1 via: citation matchedForm: bill processingTimeMs: 412.6 creditsConsumed: 4 withheld: summary: A law whose text is withheld (the record is still served) value: 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 processingTimeMs: 388.2 creditsConsumed: 2 withPublisherRecord: summary: 'Texas chapter 1: the publisher''s own fields (the bill''s action history with journal pages), the legislature number and the collector''s caveats' value: sessionLawId: SSL_TX_2025R_G_Y2025_C1 jurisdiction: tx citation: 89th Regular Session, ch. 1 citableAs: 2025 Tex. Gen. Laws ch. 1 citationShort: TX ch. 1 (2025) session: code: 2025R label: 89th Regular Session type: regular year: 2025 coverageStatus: complete series: general instrumentType: act number: '1' billNumber: S.B. No. 14 numberingYear: 2025 title: Relating to reforming the procedure by which state agencies adopt rules and impose regulatory requirements and the deference given to the interpretation of laws and rules by state agencies in certain judicial proceedings. approvedDate: '2025-04-23' approvedDateDerived: false effectiveFirst: '2025-09-01' effectiveLast: '2025-09-01' enactmentOutcome: signed isLaw: true textStatus: held charCount: 18449 estimatedBodyPages: 1 textSha256: 27df48f5be5c3d8b6a13832b064710b7584cd26b1dd1de0033f085dd3249f257 versionNo: 1 amendatoryMarkup: preserved markupConvention: mixed 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:04:11.120118+00:00' vetoStatusAsPrinted: Signed by the Governor effectiveDates: - date: '2025-09-01' dateAsPrinted: Effective on 9/1/25 otherDates: - kind: approved date: '2025-04-23' dateAsPrinted: 04/23/2025 codeSectionsAffected: [] sourceUrl: https://capitol.texas.gov/tlodocs/89R/billtext/html/SB00014F.htm sources: - sourceIndex: 0 role: text url: https://capitol.texas.gov/tlodocs/89R/billtext/html/SB00014F.htm fetchedAt: '2026-09-30T01:27:33+00:00' contentType: text/html sha256: 2cf759f6fb4b194c84cfc2e728efa304dbc48b4682fb0181ab15438ed3782096 byteLength: 101673 hostClass: gov - sourceIndex: 3 role: metadata url: https://capitol.texas.gov/BillLookup/History.aspx?LegSess=89R&Bill=SB14 fetchedAt: '2026-09-30T01:27:34+00:00' contentType: text/html; charset=utf-8 sha256: 6c2061e7f16f7880ae16eb1c2d3143249eff282b42a8ac198c80c6b390727fed byteLength: 85366 hostClass: gov publisher: legislatureNumber: 89 sessionLastYear: 2025 documentKindAsPrinted: Enrolled version publisherIds: [] otherCitations: [] publisherFields: Bill: '14' Chapter: '1' Caption Version: Enrolled Last Action: 04/23/2025 E Effective on 9/1/25 Actions: - Action Chamber: E Action Description: Effective on 9/1/25 Action Comment: '' Action Date: 04/23/2025 Action Time: '' Journal Page Number: '' - Action Chamber: E Action Description: Signed by the Governor Action Comment: '' Action Date: 04/23/2025 Action Time: '' Journal Page Number: '1441' - Action Chamber: E Action Description: Sent to the Governor Action Comment: '' Action Date: 04/14/2025 Action Time: '' Journal Page Number: '1265' publisherFieldsOmitted: [] provenance: textMethod: html caveats: - One printed line per text line; a blank line marks a paragraph, taken from the publisher's indented first line (a run of non-breaking spaces opening the row). - 'Amendatory markup preserved from / tags: 4 deletion and 215 addition spans. Texas also prints literal brackets around struck text, kept as printed, so deletions read ''[[-...-]]'' and the convention is ''mixed''.' - Chapter number and session label '89th Regular Session' come from the SOS table; the enrolled bill prints neither. numbering_year is 2025, the session's own calendar year (chapters restart at 1 each session, and the session's year is what the standard citation form 'Acts of the ... Legislature, Regular Session, 2025' prints); citation_as_printed is null because no source this record cites prints that or any other formatted citation. - 'publisher_fields.Actions is the bill-history action table as printed, every row and column: the visible header merges the first two columns under one ''Description'' heading, so the keys are the source''s own per-cell data-label attributes (Action Chamber, Action Description, ...), not a heading we invented.' processingTimeMs: 437.9 creditsConsumed: 2 '404': description: Unknown id, an unresolved or ambiguous citation, a federal act, or an endpoint name where the id goes. `reason` says which, `didYouMean` lists real ids, and `defaultSessionLawId` is the conventional reading of an ambiguous citation. The route's own price is never kept; a citation's resolve fee is kept on `unresolved_citation` and `ambiguous_citation`. content: application/json: examples: not_in_registry: summary: No law carries this id value: 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. sessionLawId: SSL_MN_1801R_G_Y1801_C9999 reason: not_in_registry didYouMean: [] wrong_case: summary: The id exists in another letter case (never served for you) value: detail: Session law not found. Ids are case-sensitive and this one exists in a different case; see didYouMean. sessionLawId: ssl_mn_2025r_g_y2025_c1 reason: wrong_case didYouMean: - SSL_MN_2025R_G_Y2025_C1 federal_session_law: summary: 'A federal act: served by /us/statutes/section, refused before any charge' value: detail: Session law not found. This endpoint covers STATE session laws; federal session laws (the Statutes at Large) are served by GET /us/statutes/section/{actId}. A federal id (`SAL_...`) is not charged; a federal citation typed in its place keeps the /us/statutes/resolve price, like any unresolved citation. sessionLawId: SAL_PL118-5 reason: federal_session_law didYouMean: [] missing_session_law_id: summary: An endpoint name where the id goes, refused before any charge value: detail: 'Session law not found. The URL has no session-law id in it: the segment where the id goes names an endpoint, for example /us/session-laws/{sessionLawId}/body. Nothing was charged.' sessionLawId: body reason: missing_session_law_id didYouMean: [] session_not_fully_collected: summary: 'Nothing matched, and the session is only partly collected: the law may exist (nothing is charged, the resolve price included)' value: detail: 'Session law not found. Nothing matched, and the session this points into is only partly collected, so the law may exist and not be held yet. `sessionCoverage` says how much of the session we hold. Nothing was charged: a miss in a partly collected session is never billed.' sessionLawId: SSL_DE_2025R_G_C3 reason: session_not_fully_collected didYouMean: [] sessionCoverage: code: 2025R label: 153rd General Assembly type: regular year: 2025 status: partial servedCount: 43 withheldCount: 0 notHeldCount: 0 registryCount: 43 collectedCount: 43 denominator: kind: complete_listing value: 296 derivation: The publisher's complete listing of this session names 296 measures. We hold 43 of them; the rest are not yet collected. openGaps: 253 unresolved_citation: summary: A citation no law carries (the resolve fee is kept) value: detail: Session law not found. This reads as a citation, and no state session law we know of carries it. The resolution attempt is charged at the /us/statutes/resolve price, as an unresolved citation is there. sessionLawId: Laws 1801, ch. 9999 reason: unresolved_citation didYouMean: [] needs_jurisdiction: summary: 'A citation in a form several states share and naming none: `jurisdictions` lists where it exists, `didYouMean` one law per state (the resolve fee is kept)' value: detail: 'Session law not found. This citation is in a form several states share and it names none, so no law was chosen for you. Name the state in the citation, for example `Minn. Laws 2025, ch. 1`, `MN: Laws 2025, ch. 1` or `Minn. S.F. 1552 (2025)`; on /us/statutes/resolve pass `state`. `jurisdictions` lists every state where the citation exists and `didYouMean` one law per state. The resolution attempt is charged at the /us/statutes/resolve price.' sessionLawId: ACT No. 1 reason: needs_jurisdiction didYouMean: - SSL_LA_2025R_G_C1 - SSL_SC_2025R_G_C1 jurisdictions: - la - sc candidateCount: 2 truncated: false ambiguous_citation: summary: A citation naming several laws, every candidate listed and none chosen (the resolve fee is kept) value: detail: 'Session law not found. This citation names more than one law, so none was chosen for you: every candidate id is in didYouMean, and defaultSessionLawId is the conventional reading. Send the id you mean. The resolution attempt is charged at the /us/statutes/resolve price.' sessionLawId: House Bill 2 reason: ambiguous_citation didYouMean: - SSL_KY_2025R_G_Y2025_C100 - SSL_MO_2025R_G_Y2025_BHB2 candidateCount: 2 truncated: false schema: $ref: '#/components/schemas/SessionLawNotFoundError' '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: example: detail: Insufficient credits schema: $ref: '#/components/schemas/ApiDetailError' '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: `sessionLawId` empty or over 300 characters, or `jurisdiction` not a state. Never charged. `errors[].loc` names the parameter exactly as you send it.' content: application/json: examples: badJurisdiction: summary: '`jurisdiction=federal`: federal acts are on /us/statutes/section' value: detail: Invalid request parameters errors: - loc: - query - jurisdiction msg: 'Value error, Unknown `jurisdiction` value ''federal''. Expected one of: al, ak, 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, va, wa, wv, wi, wy.' type: value_error idTooLong: summary: A `sessionLawId` over 300 characters value: detail: Invalid request parameters errors: - loc: - path - session_law_id msg: String should have at most 300 characters type: string_too_long schema: $ref: '#/components/schemas/ApiDetailError' '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' servers: - url: https://api.vaquill.ai description: Production components: schemas: SessionLawChangesResponse: properties: changes: items: $ref: '#/components/schemas/SessionLawChange' type: array title: Changes description: The entries after `sinceId`, oldest first, at most `limit`. Empty when nothing changed since your cursor, which is an answer and is charged. count: type: integer title: Count description: Entries on this page. default: 0 examples: - 2 cursor: anyOf: - type: integer - type: 'null' title: Cursor description: 'The largest `id` on this page: send it as `sinceId` for the next page. Null when the page is empty, so keep the cursor you already hold.' examples: - 1502 hasMore: type: boolean title: Hasmore description: 'True when more entries follow this page: call again with `sinceId` set to `cursor` straight away. False means you have caught up as of this call.' default: false examples: - true creditsConsumed: type: integer title: Creditsconsumed description: Credits actually charged for this call, never the list price. 0 when the call was refunded (a failure on our side). default: 0 examples: - 1 processingTimeMs: type: number title: Processingtimems description: Server-side time for this request in milliseconds, excluding network transit. Not billed on. default: 0.0 examples: - 41.8 type: object title: SessionLawChangesResponse description: Response for `GET /us/session-laws/changes`. 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. 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|B}`. 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`. 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.' SessionLawSearchResponse: properties: query: type: string title: Query description: The query as read, whitespace collapsed. examples: - can the sheriff pay with a debit card parsed: $ref: '#/components/schemas/SessionLawSearchParsed' description: How the query was split into words, phrases, citations and bill numbers. results: items: $ref: '#/components/schemas/SessionLawSearchResult' type: array title: Results description: The laws, best first. Empty when nothing matched, which is an answer and is charged. count: type: integer title: Count description: Laws on this page. default: 0 examples: - 5 offset: type: integer title: Offset description: The `offset` this page was read from. default: 0 examples: - 0 limit: type: integer title: Limit description: The `limit` this page was read with. default: 10 examples: - 5 hasMore: type: boolean title: Hasmore description: 'True when more laws follow: call again with `offset` raised by `limit` (within the 60 best).' default: false examples: - true creditsConsumed: type: integer title: Creditsconsumed description: Credits actually charged for this call, never the list price. 0 when the call was refunded. 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.0 examples: - 38.6 type: object required: - query - parsed title: SessionLawSearchResponse description: Response for `POST /us/session-laws/search`. SessionLawSearchRequest: properties: query: type: string maxLength: 300 minLength: 2 title: Query description: 'What to look for: a question in plain words (`can a sheriff pay with a debit card`), words from a title, a quoted phrase (`"credit card or debit card"`), a citation (`63-3004`), a code section or a bill number (`S.F.No. 1552`). Quoted parts must appear verbatim; everything else is matched on its words, stemmed, so `licensing` finds `licensed`. Words are matched as the legislature wrote them: `teeth cleaning professional` does not find an act that says `dental hygienist`. 2 to 300 characters.' examples: - can the sheriff pay with a debit card jurisdiction: anyOf: - type: string enum: - al - ak - 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 - va - wa - wv - wi - wy - type: 'null' title: Jurisdiction description: Limit to one state, `dc` or `pr`. Two-letter code, case-insensitive. Omit to search every jurisdiction we hold. `federal` and an unknown code are a 422, never charged. examples: - al session: anyOf: - type: string maxLength: 32 minLength: 1 pattern: ^[A-Za-z0-9._-]+$ - type: 'null' title: Session description: Limit to one session, by the code `session.code` reports (`2025R`, `2025S1`). Case-sensitive. Matches the act's own session, so it narrows the TITLE, citation and bill signals; the passage text of an act carries its session year and type but not the code. examples: - 2025R series: anyOf: - items: type: string enum: - general - public - public_act - special_act - private_and_special - act - acts - law - local - municipal - appropriation - resolve - resolves - resolution - resolution_chapter - joint_resolution - concurrent_resolution - memorial - initiated_bill - constitutional_amendment type: array - type: 'null' title: Series description: Limit to these numbering series, one or more (they combine with OR). One of `general`, `public`, `public_act`, `special_act`, `private_and_special`, `act`, `acts`, `law`, `local`, `municipal`, `appropriation`, `resolve`, `resolves`, `resolution`, `resolution_chapter`, `joint_resolution`, `concurrent_resolution`, `memorial`, `initiated_bill`, `constitutional_amendment`. Any other value is a 422, never charged. examples: - - general instrumentType: anyOf: - items: type: string enum: - act - joint_resolution - concurrent_resolution - resolution - resolve - memorial - other type: array - type: 'null' title: Instrumenttype description: Limit to these kinds of measure, one or more (OR). One of `act`, `joint_resolution`, `concurrent_resolution`, `resolution`, `resolve`, `memorial`, `other`. Any other value is a 422, never charged. examples: - - act - joint_resolution approvedFrom: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' format: date title: Approvedfrom description: Only laws approved on or after this date, `YYYY-MM-DD`, inclusive; a real calendar date (`2025-02-30` is a 422). A law with no printed approval date never matches. examples: - '2025-03-01' approvedTo: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' format: date title: Approvedto description: Only laws approved on or before this date, `YYYY-MM-DD`, inclusive. An end before `approvedFrom` is a 422, never charged. examples: - '2025-06-30' limit: type: integer maximum: 25.0 minimum: 1.0 title: Limit description: Laws per page, 1 to 25. A page costs the same however many laws it holds, so a larger `limit` is cheaper per law. default: 10 examples: - 5 offset: type: integer maximum: 59.0 minimum: 0.0 title: Offset description: 'Laws to skip, for the next page: `offset` plus `limit` can reach at most the 60 best matches. Each page is a new search and is charged. Deeper than 60 is a 422, never charged: narrow the search with a filter instead.' default: 0 examples: - 5 additionalProperties: false type: object required: - query title: SessionLawSearchRequest description: Body of `POST /us/session-laws/search`. SessionLawSearchResult: properties: sessionLawId: type: string title: Sessionlawid description: The law's permanent id. Read the whole law at `GET /us/session-laws/{sessionLawId}`. examples: - SSL_AL_2025R_G_Y2025_C2025-127 jurisdiction: type: string title: Jurisdiction description: Lowercase two-letter code of the state, `dc` or `pr`. examples: - al session: type: string title: Session description: The session's code, as `session.code` reports it. examples: - 2025R series: type: string title: Series description: The numbering series the law sits in. examples: - general instrumentType: type: string title: Instrumenttype description: 'The kind of measure: `act`, `joint_resolution` and so on.' examples: - act citation: type: string title: Citation description: The law's canonical citation, as the registry holds it. examples: - Act 2025-127 title: anyOf: - type: string - type: 'null' title: Title description: The act's title as the publisher prints it; null where the publisher printed none. examples: - Relating to Houston County; to authorize the sheriff to establish procedures for using a credit card. approvedDate: anyOf: - type: string - type: 'null' title: Approveddate description: The date the governor approved it, `YYYY-MM-DD`, where the publisher printed one; else null. examples: - '2025-04-15' enactmentOutcome: type: string title: Enactmentoutcome description: 'How it became law: `signed`, `became_law_without_signature`, `veto_overridden` and so on.' examples: - signed matchType: type: string enum: - exact - text title: Matchtype description: '`exact` when a quoted phrase, a citation, a code section or a bill number you typed matched this law; `text` when it matched on words alone. It says HOW it matched and makes no claim that this is the right law: a question with no true answer still returns its closest words.' examples: - text matchedBy: items: type: string enum: - title - text - phrase - citation - codeSection - billNumber type: array title: Matchedby description: 'Every way this law matched, strongest context first. `title`: the words are in the act''s title. `text`: they are in its enacted text. `phrase`: your quoted phrase appears verbatim. `citation`: a citation you typed (`63-3004`) appears in the text. `codeSection`: the act''s own table lists that code section. `billNumber`: the act''s bill number is the one you typed. A law matched by several ranks above one matched by a single way.' examples: - - title - text passage: anyOf: - $ref: '#/components/schemas/SessionLawSearchPassage' - type: 'null' description: The passage of the law's text that matched best, with a snippet. Null when this law matched only by title, citation, code section or bill number and no passage did. href: type: string title: Href description: 'The law''s record: `GET /us/session-laws/{sessionLawId}`.' examples: - https://api.vaquill.ai/api/v1/us/session-laws/SSL_AL_2025R_G_Y2025_C2025-127 type: object required: - sessionLawId - jurisdiction - session - series - instrumentType - citation - enactmentOutcome - matchType - matchedBy - href title: SessionLawSearchResult description: One law in the ranking. 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.' SessionLawListCoverage: properties: scope: type: string enum: - session - jurisdiction title: Scope description: '`session` when the request named a `session`, `jurisdiction` when it named only the state.' examples: - session - jurisdiction jurisdiction: type: string title: Jurisdiction description: Lowercase two-letter code of the state, `dc` or `pr`. examples: - ok status: type: string enum: - complete - partial - not_held title: Status description: '`complete`: we hold every law the publisher lists for what you asked about, so an empty page means nothing matches your filters, and it is charged. `partial`: the collection stopped short, so the empty page may be a gap in our collection and not an absence of law; it is not charged when everything you asked about is partial. On a state-wide request (`scope: jurisdiction`) with some sessions complete and some partial the status is `partial`, `partialSessions` names the ones to doubt, and the page is charged, because for the complete sessions it is a true negative. `not_held`: we hold no session laws for this session or state at all (a state whose publisher we cannot yet collect from, for example); not charged.' examples: - complete - partial - not_held session: anyOf: - $ref: '#/components/schemas/SessionLawSession' - type: 'null' description: The session you named, when `scope` is `session` and we hold any of it. Its counts are in the jurisdiction's `sessionLaws` block on `GET /us/statutes/coverage`. sessionsHeld: type: integer minimum: 0.0 title: Sessionsheld description: How many sessions of this state we hold session laws for. 0 when `not_held`. default: 0 examples: - 1 - 0 partialSessions: items: type: string type: array title: Partialsessions description: 'Session codes of this state whose collection is `partial`: the ones an empty page may be missing laws from. Empty when none.' examples: - - 2025R - [] reason: anyOf: - type: string - type: 'null' title: Reason description: 'Present on `not_held`: why we hold nothing, in one plain sentence. A gap in our collection, not a statement that the state enacted no laws.' examples: - Indiana publishes its session laws only through a service that needs an access token we do not hold yet. message: type: string title: Message description: 'One sentence saying what this empty page means and whether it was charged. Free text to show, not an enum to branch on: branch on `status`.' examples: - No law in this session matches your filters. We hold every law the publisher lists for 2025R, so this is not a gap in our collection. type: object required: - scope - jurisdiction - status - message title: SessionLawListCoverage description: What we hold of the session or state an EMPTY page was asked about. 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. SessionLawBodyResponse: properties: processingTimeMs: type: number title: Processingtimems description: Server-side time for this request in milliseconds, excluding network transit. Not billed on. default: 0.0 examples: - 747.5 creditsConsumed: type: integer title: Creditsconsumed description: 'Credits actually charged for this call, never the list price. It includes the `/us/statutes/resolve` fee when a citation was sent where an id goes. 0 when the call was not charged or was refunded (a body that answers `available: false`).' default: 0 examples: - 2 sessionLawId: type: string title: Sessionlawid description: The law this page belongs to. examples: - SSL_MN_2025S1_G_Y2025_C1 citation: type: string title: Citation description: The act's citation as its publisher prints it, the same as `citation` on `GET /us/session-laws/{sessionLawId}`. Carried here so a page is attributable on its own, with no second call. examples: - CHAPTER 1--S.F.No. 3 jurisdiction: type: string title: Jurisdiction description: Lowercase two-letter code of the state, `dc` or `pr`. examples: - mn session: $ref: '#/components/schemas/SessionLawSession' description: The legislative session the law was enacted in. approvedDate: anyOf: - type: string format: date - type: 'null' title: Approveddate description: 'Date the governor approved the act, ISO 8601, as on `GET /us/session-laws/{sessionLawId}`: never an effective date. Null when none is held. See `approvedDateDerived`.' examples: - '2025-06-14' approvedDateDerived: type: boolean title: Approveddatederived description: True only when `approvedDate` was filled from the publisher's dated signature label rather than held as the approval date. See the same field on `GET /us/session-laws/{sessionLawId}`. default: false examples: - false sourceUrl: anyOf: - type: string - type: 'null' title: Sourceurl description: 'The official page or file this text was collected from, on a government publisher''s host. Present on EVERY outcome, a withheld or not-held law included, so a reader is never at a dead end: where we do not serve the text, this is where to read it. Null only when we hold no government text source for the law.' examples: - https://www.revisor.mn.gov/laws/2025/1/Session+Law/Chapter/1/ available: type: boolean title: Available description: 'False when we do not serve this law''s text; `reason` says why. A page with `available: false` is not charged.' examples: - true reason: anyOf: - type: string - type: 'null' title: Reason description: 'Why `available` is false: `not_held`, `withheld`, `pending` or `empty_text`. Null when the text is served.' examples: - withheld - null 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`: what is wrong with the text we hold. A plain sentence to show, not an enum to branch on.' 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 text: anyOf: - type: string - type: 'null' title: Text description: This page of the act's text, exactly as printed, in reading order. Concatenating every page's `text` in order reproduces the whole text. Where `amendatoryMarkup` is `preserved`, struck and inserted language is in the text in the convention `markupConvention` names. Null when `available` is false. examples: - 'CHAPTER 1--S.F.No. 1552 An act relating to agriculture; ...' pageStart: anyOf: - type: integer - type: 'null' title: Pagestart description: 'Character offset in the full text where this page starts (0-based). Pages are contiguous: the next page''s `pageStart` equals this page''s `pageEnd`.' examples: - 0 pageEnd: anyOf: - type: integer - type: 'null' title: Pageend description: Character offset just past this page. A page is about 30,000 characters, cut back to a paragraph break where one is near, so the length varies. examples: - 29987 totalChars: anyOf: - type: integer - type: 'null' title: Totalchars description: Length of the whole text in characters. This page is the last when `pageEnd` equals it. examples: - 310454 totalPages: anyOf: - type: integer - type: 'null' title: Totalpages description: 'Estimated pages in the whole text: `totalChars` divided by the page size, rounded up. Pages are cut back to a paragraph break, so a long act can run a few percent over. Null when no text is served.' examples: - 11 pagePrice: type: integer title: Pageprice description: 'Credits charged for the page in this response, the same as `creditsConsumed` on this route: the price of one page when a page was served, 0 when none was (`available` is false). Each further page costs the same.' default: 0 examples: - 6 estimatedRemainingCredits: anyOf: - type: integer - type: 'null' title: Estimatedremainingcredits description: 'Estimated credits to read the rest of the text from `pageEnd`: the pages still to come (`totalChars` less `pageEnd`, over the page size, rounded up) times the price of a page. 0 on the last page. Null when no text is served. An estimate: a page cut back to a paragraph break can add a page on a long act. 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: - 60 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: - 02693d5b55d4709bdd36fdccee4a9737d2655a3988a90daeb6b7c486ce50260b 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 - null nextCursor: anyOf: - type: string - type: 'null' title: Nextcursor description: 'Opaque cursor for the next page: send it as `cursor` on the same path. Null on the last page. It is tied to this exact text, so a cursor from before the text was re-collected is a 409.' examples: - eyJ2IjoxLCJvIjoyOTk4NywiaCI6IjAyNjkzZDViNTVkNDcwOWIifQ hasMore: type: boolean title: Hasmore description: True when more pages follow; fetch them with `nextCursor`. Each page is charged. default: false examples: - true type: object required: - sessionLawId - citation - jurisdiction - session - available - textStatus title: SessionLawBodyResponse description: Response for `GET /us/session-laws/{sessionLawId}/body`. 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. 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.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.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.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.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.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.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. 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. SessionLawChange: properties: id: type: integer title: Id description: 'The entry''s position in the feed: an integer that only ever grows. Send the largest `id` you hold as `sinceId` to read what came after it.' examples: - 1501 kind: type: string enum: - added - text_available - corrected - served - unserved - withdrawn - merged title: Kind description: 'What happened to the law. `added`: the registry learned the act exists. `text_available`: its text was collected. `corrected`: our reading of the law (its identity, dates or text) was corrected, so a copy you hold may be stale. `served`: it began to be served by this API. `unserved`: it stopped being served. `withdrawn`: it was removed from the registry, a tombstone: `GET /us/session-laws/{sessionLawId}` no longer answers it. `merged`: it was found to be the same law as another and merged into it, also a tombstone. So far every entry is `served`, one per law served when the registry went live; the other kinds appear as laws change. A consumer should treat a kind it does not know as `corrected`: re-read the law.' examples: - served sessionLawId: type: string title: Sessionlawid description: The law this entry is about. Read it at `GET /us/session-laws/{sessionLawId}`, except after `withdrawn` or `merged`, when it no longer answers. examples: - SSL_MN_2025R_G_Y2025_C1 jurisdiction: type: string title: Jurisdiction description: Lowercase two-letter code of the state, `dc` or `pr`. examples: - mn detectedAt: type: string title: Detectedat description: 'When we recorded the change, ISO 8601 in UTC: the start of the transaction that wrote it. An upper bound on when the law changed in the world, never the date the law took effect or was approved.' examples: - '2026-10-05T09:04:11.120118+00:00' type: object required: - id - kind - sessionLawId - jurisdiction - detectedAt title: SessionLawChange description: One entry of the registry feed. SessionLawListResponse: properties: processingTimeMs: type: number title: Processingtimems description: Server-side time for this request in milliseconds, excluding network transit. Not billed on. default: 0.0 examples: - 747.5 creditsConsumed: type: integer title: Creditsconsumed description: 'Credits actually charged for this call, never the list price. It includes the `/us/statutes/resolve` fee when a citation was sent where an id goes. 0 when the call was not charged or was refunded (a body that answers `available: false`).' default: 0 examples: - 2 results: items: $ref: '#/components/schemas/SessionLawSummary' type: array title: Results description: 'The page of laws, by `session.code` and then `sessionLawId`, both as text in the database''s collation, not chapter order (so `..._C10` comes before `..._C2`; sort by `number` client-side if you need chapter order). The record without its dates list, sources or text: fetch those with `GET /us/session-laws/{sessionLawId}`.' count: type: integer title: Count description: 'Rows on this page. Never a total: the list is paged by cursor and has no corpus-wide count.' default: 0 examples: - 25 nextCursor: anyOf: - type: string - type: 'null' title: Nextcursor description: 'Opaque cursor for the next page: send it as `cursor`, with the same filters. Null on the last page.' examples: - eyJ2IjoxLCJqIjoibW4iLCJzIjoiMjAyNVIiLCJpIjoiU1NMX01OXzIwMjVSX0dfWTIwMjVfQzEzIn0 hasMore: type: boolean title: Hasmore description: True when another page follows. Each page is charged, an empty one included, except an empty page that `coverage` reports as a gap in our collection. default: false examples: - true coverage: anyOf: - $ref: '#/components/schemas/SessionLawListCoverage' - type: 'null' description: 'Present only on an EMPTY page: what we hold of the session (or state) you asked about, so you can tell `nothing matches your filters` from `we have not collected this`. `status: complete` means the first: the page is charged. `partial` (the collection stopped short) and `not_held` (we hold nothing of it) mean the second: the page is NOT charged and `creditsConsumed` is 0. Omitted when the coverage cannot be read, in which case the empty page is charged as before.' type: object title: SessionLawListResponse description: Response for `GET /us/session-laws/list`. SessionLawSummary: 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|B}`. 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/SessionLawSession' description: The legislative session the law was enacted in. 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`. 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' type: object required: - sessionLawId - jurisdiction - citation - session - series - instrumentType - enactmentOutcome - textStatus - identityConfidence title: SessionLawSummary description: One session law, as it appears in lists and citation results. SessionLawNotFoundError: properties: detail: type: string title: Detail description: 'Human-readable reason, safe to show a user. Branch on `reason`, not on this string: the wording can change.' 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. sessionLawId: type: string title: Sessionlawid description: The identifier exactly as you sent it. examples: - SSL_MN_1801R_G_Y1801_C9999 reason: type: string enum: - not_in_registry - wrong_case - unresolved_citation - ambiguous_citation - federal_session_law - missing_session_law_id - needs_jurisdiction - session_not_fully_collected title: Reason description: '`not_in_registry`: no law carries this id. `wrong_case`: it exists in another letter case, see `didYouMean`. `unresolved_citation`: you sent a citation and no law carries it. `ambiguous_citation`: the citation names several laws, all in `didYouMean`, none chosen for you; `defaultSessionLawId` is the publisher''s conventional reading when one is recorded. `federal_session_law`: federal acts are served by /us/statutes/section. `missing_session_law_id`: the URL names an endpoint where the id goes. `needs_jurisdiction`: the citation is in a form several states share and names none, so none was chosen for you; `jurisdictions` lists the states where it exists and `didYouMean` one law per state. `session_not_fully_collected`: nothing matched, and the session the id or citation points into is only partly collected, so the law may exist; `sessionCoverage` says how much of the session we hold. The route''s price is never charged on a 404; a citation''s resolution fee is kept on `unresolved_citation`, `ambiguous_citation` and `needs_jurisdiction`, and refunded on `session_not_fully_collected`: a miss in a partly collected session is never charged.' examples: - not_in_registry didYouMean: items: type: string type: array title: Didyoumean description: 'Real `sessionLawId`s the input points at: the one that exists in a different 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_citation`, the conventional reading when the registry records one, otherwise null. 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 you sent exists. Name one of them in the citation and send it again. Absent on every other reason. examples: - - il - mn - tx candidateCount: anyOf: - type: integer - type: 'null' title: Candidatecount description: 'On `ambiguous_citation` and `needs_jurisdiction`, how many laws the citation names in all. Compare it with `len(didYouMean)`: when it is larger, `truncated` is true and the list is a sample, not the full set.' examples: - 22 truncated: anyOf: - type: boolean - type: 'null' title: Truncated description: True when `didYouMean` was capped (at most 20 ids) and `candidateCount` is larger than the list. Absent on reasons that carry no candidates. examples: - true sessionCoverage: anyOf: - $ref: '#/components/schemas/SessionLawSessionCoverage' - type: 'null' description: 'On `session_not_fully_collected`, the partly collected session the id or citation points into: how many laws we hold of how many it is expected to have (`denominator`), and how many are still open. Absent on every other reason. The same block is in `sessionLaws.sessions` on `GET /us/statutes/coverage`.' type: object required: - detail - sessionLawId - reason title: SessionLawNotFoundError description: The 404 from `GET /us/session-laws/{sessionLawId}` and its `/body`. 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. SessionLawResponse: properties: processingTimeMs: type: number title: Processingtimems description: Server-side time for this request in milliseconds, excluding network transit. Not billed on. default: 0.0 examples: - 747.5 creditsConsumed: type: integer title: Creditsconsumed description: 'Credits actually charged for this call, never the list price. It includes the `/us/statutes/resolve` fee when a citation was sent where an id goes. 0 when the call was not charged or was refunded (a body that answers `available: false`).' default: 0 examples: - 2 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|B}`. 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`. 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. resolvedFrom: anyOf: - $ref: '#/components/schemas/SessionLawResolution' - type: 'null' description: 'Present only when your input did not match an id as sent: it says what was matched and how. Null when you sent an exact id.' type: object required: - sessionLawId - jurisdiction - citation - session - series - instrumentType - enactmentOutcome - textStatus - identityConfidence title: SessionLawResponse description: Response for `GET /us/session-laws/{sessionLawId}`. SessionLawSearchParsed: properties: text: type: string title: Text description: The free words, quoted parts removed. examples: - sheriff debit card phrases: items: type: string type: array title: Phrases description: Quoted phrases, matched verbatim. examples: - - debit card citationTokens: items: type: string type: array title: Citationtokens description: Citation-shaped tokens found in the query (`63-3004`), matched exactly. examples: - - 63-3004 billNumbers: items: type: string type: array title: Billnumbers description: Bill numbers found in the query (`S.F.No. 1552`), matched exactly. examples: - - HB 145 type: object required: - text title: SessionLawSearchParsed description: How the query was read, so a caller can see why a result matched. 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 - 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 - 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`. 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. 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.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. SessionLawSession: 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 type: object required: - code title: SessionLawSession description: The legislative session a law was enacted in. 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. SessionLawSearchPassage: properties: seq: type: integer title: Seq description: Position of this passage within the law, from 0. examples: - 2 ownStart: type: integer title: Ownstart description: Character offset in the law's stored text where this passage begins. Pass it as `startChar` to `GET /us/session-laws/{sessionLawId}/body` to read the law from here. examples: - 8120 ownEnd: type: integer title: Ownend description: Character offset where this passage ends, in the same scale as `ownStart`. examples: - 11940 pageStart: anyOf: - type: integer - type: 'null' title: Pagestart description: The printed page the passage starts on, 1-based, where the publisher's pages are known; else null. examples: - 3 heading: anyOf: - type: string - type: 'null' title: Heading description: The section heading the passage sits under (`Section 3.`), where one was found; else null. examples: - Section 3. snippet: type: string title: Snippet description: About 280 characters of the ENACTED text around your words, plain text, with `…` where it was cut. Language the act strikes out is never shown here. examples: - …the sheriff may establish procedures for using a credit card or debit card to make purchases… highlights: items: items: type: integer type: array type: array title: Highlights description: '`[start, end]` character offsets INSIDE `snippet` (end exclusive) of each word that matched, so you can draw the highlight yourself. The snippet carries no markup.' examples: - - - 13 - 18 - - 58 - 64 bodyHref: type: string title: Bodyhref description: 'Where to read the text from this passage: the law''s `/body` with `startChar` set.' examples: - https://api.vaquill.ai/api/v1/us/session-laws/SSL_AL_2025R_G_Y2025_C2025-127/body?startChar=8120 type: object required: - seq - ownStart - ownEnd - snippet - bodyHref title: SessionLawSearchPassage description: The passage of the law that matched best, with a cut of its text. 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.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.' 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. 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. 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.' externalDocs: description: Full API Reference url: https://www.vaquill.ai/docs/api-reference/ x-refined-from: - vaquill-ai-openapi.json - vaquill-ai-openapi.yml