Vaquill AI · Schema
SessionLawBodyResponse
Response for `GET /us/session-laws/{sessionLawId}/body`.
LegalStatutesRegulationsLegal ResearchLawComplianceLegal TechnologyGovernment DataMCPIndiaContracts
Properties
| Name | Type | Description |
|---|---|---|
| processingTimeMs | number | Server-side time for this request in milliseconds, excluding network transit. Not billed on. |
| creditsConsumed | integer | 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 b |
| sessionLawId | string | The law this page belongs to. |
| citation | string | 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. |
| jurisdiction | string | Lowercase two-letter code of the state, `dc` or `pr`. |
| session | object | The legislative session the law was enacted in. |
| approvedDate | object | 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`. |
| approvedDateDerived | boolean | 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}`. |
| sourceUrl | object | 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 |
| available | boolean | False when we do not serve this law's text; `reason` says why. A page with `available: false` is not charged. |
| reason | object | Why `available` is false: `not_held`, `withheld`, `pending` or `empty_text`. Null when the text is served. |
| textStatus | string | 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 `withheldReas |
| withheldReason | object | 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. |
| text | object | 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 la |
| pageStart | object | 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`. |
| pageEnd | object | 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. |
| totalChars | object | Length of the whole text in characters. This page is the last when `pageEnd` equals it. |
| totalPages | object | 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. |
| pagePrice | integer | 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 cost |
| estimatedRemainingCredits | object | 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 |
| textSha256 | object | 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. |
| amendatoryMarkup | object | 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 d |
| markupConvention | object | 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 |
| nextCursor | object | 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. |
| hasMore | boolean | True when more pages follow; fetch them with `nextCursor`. Each page is charged. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/vaquill-ai/main/json-schema/vaquill-ai-session-law-body-response-schema.json",
"title": "SessionLawBodyResponse",
"description": "Response for `GET /us/session-laws/{sessionLawId}/body`.",
"x-generated": "2026-10-07",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/vaquill-ai-openapi.yml#/components/schemas/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
},
"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
},
"sessionLawId": {
"type": "string",
"title": "Sessionlawid",
"description": "The law this page belongs to."
},
"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."
},
"jurisdiction": {
"type": "string",
"title": "Jurisdiction",
"description": "Lowercase two-letter code of the state, `dc` or `pr`."
},
"session": {
"$ref": "#/$defs/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`."
},
"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
},
"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."
},
"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."
},
"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."
},
"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."
},
"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."
},
"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."
},
"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`."
},
"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."
},
"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."
},
"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."
},
"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
},
"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."
},
"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."
},
"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."
},
"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."
},
"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."
},
"hasMore": {
"type": "boolean",
"title": "Hasmore",
"description": "True when more pages follow; fetch them with `nextCursor`. Each page is charged.",
"default": false
}
},
"type": "object",
"required": [
"sessionLawId",
"citation",
"jurisdiction",
"session",
"available",
"textStatus"
],
"$defs": {
"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`."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label",
"description": "The session's canonical label, as the publisher names it."
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type",
"description": "`regular`, `special`, `extraordinary`, `fiscal`, `veto` or `unknown`."
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year",
"description": "The year the session convened, the same year `code` starts with."
}
},
"type": "object",
"required": [
"code"
],
"title": "SessionLawSession",
"description": "The legislative session a law was enacted in."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/vaquill-ai-session-law-body-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.