Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it.
Each item in the body’s changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text.
The body carries two sets of counters over different populations. Read sections*, and read rows* only if you already built on it:
sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch’s scope, which the body echoes back, and omitted when the refresh classified no change events.
rowsAdded / rowsUpdated / rowsDeleted are the refresh’s raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections.
API key issued from the developer dashboard. Pass as Authorization: Bearer vq_key_... (preferred).
Body
application/json
corpusType
enum<string>
required
Board's corpus_type (e.g. state, state_regulation, federal_register, agency_guidance). One of the published values; anything else is a 422 that lists them. Matched case-insensitively, and the uppercase search-style token for the same body of law (USC, CFR, REGULATION) is accepted and stored as the board key (REGULATION becomes state_regulation). This is the board vocabulary, not the /us/statutes/searchcorpusType token set: the names overlap where spelled alike (usc, cfr, state) and differ elsewhere. GET /boards says which (corpusType, state) pairs are live.
Available options:
agency_adjudication,
agency_guidance,
agency_manuals,
cfr,
federal_local_rules,
federal_primary_law,
federal_register,
federal_register_notice,
federal_rules,
session_law,
state,
state_ag_opinion,
state_constitution,
state_insurance_bulletins,
state_regulation,
state_rules,
statute_compilation,
usc
Example:
"state"
state
enum<string> | null
Board's state (2-letter, case-insensitive). For a federal board (USC, eCFR, the Federal Register) pass federal or omit this entirely; the two are equivalent. Must otherwise match the state GET /boards returned for this corpusType: GET /boards?corpusType=<type> lists exactly those.
Available options:
federal,
al,
ak,
as,
az,
ar,
ca,
co,
ct,
de,
dc,
fl,
ga,
gu,
hi,
id,
il,
in,
ia,
ks,
ky,
la,
me,
md,
ma,
mi,
mn,
ms,
mo,
mt,
ne,
nv,
nh,
nj,
nm,
ny,
nc,
nd,
mp,
oh,
ok,
or,
pa,
pr,
ri,
sc,
sd,
tn,
tx,
ut,
vt,
vi,
va,
wa,
wv,
wi,
wy
Example:
"wa"
channel
enum<string>
default:webhook
Available options:
webhook,
email,
both
webhookUrl
string | null
Required when channel is webhook or both.
webhookSecret
string | null
Optional signing secret, stored encrypted and never returned. When set, every delivery carries an X-Vaquill-Signature: sha256=<hex> header: HMAC-SHA256 of the raw request body bytes, keyed with this secret. To verify, compute the same HMAC over the raw body you received (before parsing JSON) and compare it, constant-time, to the hex digest after sha256=. Deliveries also carry Standard Webhooks headers (webhook-id, webhook-timestamp, webhook-signature: v1,<base64>), signed over {webhook-id}.{webhook-timestamp}.{raw body}; prefer these, as they add replay protection. The HMAC key is the base64 decoding of the secret after whsec_ when it has that prefix, otherwise the secret's UTF-8 bytes. X-Vaquill-Signature is deprecated but remains in place for at least 12 months.
emailAddress
string | null
Required when channel is email or both.
scope
Scope · object | null
Optional narrowing so this alert covers one citation instead of an entire source. Four mutually exclusive forms. Omit entirely to watch the whole source.
Hierarchy prefix: keys title, chapter, part, section, e.g. {"title": "21", "part": "314"} for 21 CFR part 314. Every level you set must match. title is required whenever any narrower level is set, and section also needs chapter or part. Sources without a title/chapter/part hierarchy return 400 (see scopable on GET /boards).
Exact section: {"actId": "CFR_T21_P314_S314_50"}, using the actId from search results and change events. Case-sensitive and validated at create time: an act_id we do not hold, or one from a different source, is a 400. Works on every source, and is the only way to follow a single Federal Register document.
Named source: {"source": "fdic_fil"}, for corpora that fold several independent bodies of law behind one corpusType. The agency_guidance board alone carries 47 named sources across 24 agencies, so an unscoped watch on it delivers FDIC letters, IRS notices, OFAC FAQs and DOE appliance standards together. Accepted on agency_adjudication, agency_guidance, agency_manuals, cfr, federal_rules; anything else returns 400. Pickable values are on the board's sources array in GET /boards.
Publishing agency: {"agency": "irs"}, covering every source that agency issues on the board (the IRS alone publishes 5 named series). Expanded when an event is matched, not when the watch is created, so a source registered later is covered automatically. Accepted on agency_adjudication, agency_guidance, agency_manuals; pickable values are on the board's agencies array in GET /boards.
Show child attributes
Example:
{ "part": "314", "title": "21" }
webhookAuth
WebhookAuthRequest · object | null
Optional outbound credential sent on every delivery, so your gateway can authenticate us with the header it already reads. Independent of webhookSecret: set neither, either, or both. Only valid on a webhook or both channel watch.
Show child attributes
Response
The created watch.
data
WatchResponse · object
required
Show child attributes
meta
ResponseMeta · object
required
The meta block every board-watch route returns beside data.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Vaquill AI","description":"US primary law as a developer API. The US Code, the CFR, the Federal Register, state and territory statute codes, state regulations, constitutions and court rules, with Bluebook citation resolution and point-in-time retrieval over REST, MCP and SQL.","colors":{"primary":"#6E3730","light":"#8C4A3F","dark":"#5A2D27"},"logo":{"light":"https://mintcdn.com/vaquill/HoYf91pjRoTl4-t3/logo/light.png?fit=max\u0026auto=format\u0026n=HoYf91pjRoTl4-t3\u0026q=85\u0026s=1c97b6018caaa1fee0a743b05651bb81","dark":"https://mintcdn.com/vaquill/HoYf91pjRoTl4-t3/logo/dark.png?fit=max\u0026auto=format\u0026n=HoYf91pjRoTl4-t3\u0026q=85\u0026s=857ee7c2383d363ffe7fac6f94ad862b","href":"https://vaquill.ai"},"favicon":"https://mintcdn.com/vaquill/HoYf91pjRoTl4-t3/favicon.png?fit=max\u0026auto=format\u0026n=HoYf91pjRoTl4-t3\u0026q=85\u0026s=e9fd33556ddcb3576db2925e6f4e27fe","api":{"openapi":"https://api.vaquill.ai/external/openapi.json","playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["bash","python","javascript","go"],"prefill":true},"mdx":{"auth":{"method":"bearer","name":"Authorization"},"server":"https://api.vaquill.ai"}},"appearance":{"default":"light","strict":true},"background":{"color":{"light":"#FAFAF9"}},"navbar":{"links":[{"icon":"github","href":"https://vaquill.ai/open-us-law","label":"Open US Law Dataset"},{"href":"mailto:contact@vaquill.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.vaquill.ai"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/vaquill","youtube":"https://www.youtube.com/@vaquill","slack":"https://join.slack.com/t/vaquillaicommunity/shared_invite/zt-3qxv4mtxg-64mtkVe2PxodDMwKGPfvMQ","github":"https://github.com/Vaquill-AI"},"links":[{"header":"Company","items":[{"label":"About","href":"https://vaquill.ai/about"},{"label":"Contact","href":"https://vaquill.ai/contact"},{"label":"Data Sources \u0026 Credits","href":"https://vaquill.ai/partners"},{"label":"Blog","href":"https://vaquill.ai/blog"},{"label":"Engineering","href":"https://vaquill.ai/engineering"}]},{"header":"Developers","items":[{"label":"Data API","href":"https://vaquill.ai/legal-api"},{"label":"MCP Servers","href":"https://vaquill.ai/mcp"},{"label":"API Reference","href":"/api-reference/us-statutes/search-us-statutes-constitutions-court-rules-and-executive-actions"},{"label":"Open US Law Dataset","href":"https://vaquill.ai/open-us-law"}]},{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://vaquill.ai/privacy"},{"label":"Terms of Service","href":"https://vaquill.ai/terms"},{"label":"DPA","href":"https://vaquill.ai/dpa"},{"label":"Cookie Policy","href":"https://vaquill.ai/cookies"},{"label":"Refund Policy","href":"https://vaquill.ai/refund-policy"},{"label":"Delete My Data","href":"https://vaquill.ai/delete-data"},{"label":"Security","href":"https://vaquill.ai/security"},{"label":"Accessibility","href":"https://vaquill.ai/accessibility"},{"label":"Do Not Sell or Share My Personal Information","href":"https://vaquill.ai/privacy"}]}]},"search":{"prompt":"Search docs, guides, and the API reference..."},"seo":{"metatags":{"canonical":"https://www.vaquill.ai/docs","og:site_name":"Vaquill AI Docs","og:locale":"en_US","twitter:card":"summary_large_image","twitter:site":"@vaquillai"},"indexing":"all"},"fonts":{"heading":{"family":"Source Serif 4","weight":400},"body":{"family":"Schibsted Grotesk","weight":400}},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"github-light"},"latex":false},"errors":{"404":{"redirect":false,"title":"Page not found","description":"That page doesn't exist, or the URL changed. Try the search bar above, or start from the [API overview](/api-guide/overview)."}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","perplexity","cursor","vscode","windsurf","mcp"],"display":"header"},"thumbnails":{"appearance":"light","fonts":{"family":"Source Serif 4"}},"metadata":{"timestamp":true},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock","href":"/api-guide/changelog"},{"anchor":"MCP","icon":"plug","href":"/integrations/mcp/vaquill"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vaquill","hasAudioNarration":false,"actualSubdomain":"vaquill","customDomains":["vaquill.ai"],"gitSource":{"type":"github","owner":"vaquill-ai","repo":"vaquill-ai-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af66826b5a5c75a1e2c683d","clientVersion":"0.0.4131","searchFilterCounts":[{"language":"default","tag":"India API reference","count":59},{"language":"default","tag":"Guide","count":56},{"language":"default","tag":"Endpoints","count":51},{"language":"default","tag":"US API reference","count":50},{"language":"default","tag":"Indian Acts and Legislation","count":20},{"language":"default","tag":"US Statutes","count":18},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"Core concepts","count":15},{"language":"default","tag":"Integrations","count":14},{"language":"default","tag":"Get started","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"custom.css","content":":root{--vq-ink: #1c1a17;--vq-muted: #5f5a52;--vq-hairline: #e4e3e0;--vq-raised: #f2f1ef;--vq-radius: 6px}#navbar img{height:3rem;width:auto}footer img{height:3rem;width:auto}#page-title,#content h2,#content h3{font-family:\"Source Serif 4\", Georgia, serif;font-weight:400;letter-spacing:-0.01em;color:var(--vq-ink)}#content h4,#content h5{font-weight:500}.card,.callout,.accordion,.accordion-group,[data-component-part=\"code-block-root\"]{border-radius:var(--vq-radius)!important;box-shadow:none!important}.card,.accordion,.accordion-group{border:1px solid var(--vq-hairline)}.accordion-group .accordion{border:0!important;border-radius:0!important;margin-bottom:0}.accordion-group .accordion+.accordion{border-top:1px solid var(--vq-hairline)!important}.card:hover{border-color:#6e3730!important}.callout{background-color:var(--vq-raised);border:1px solid var(--vq-hairline)}.callout[data-callout-type=\"warning\"]{border-color:#7d5310}.callout[data-callout-type=\"danger\"]{border-color:#a4123c}code,pre,.shiki{font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}[data-component-part=\"code-block-root\"]{border:1px solid var(--vq-hairline)}"}],"page":{"pagePath":"api-reference/board-watches/create-a-board-watch","slug":"/api-reference/board-watches/create-a-board-watch","pageMetadata":{"title":"Create a board watch","description":"Subscribe to a board. `webhookUrl` is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every `board.updated` delivery body carries a `deliveryId`, stable per watch per refresh event even across our own retries, so you can dedupe on it.\n\nEach item in the body's `changes[]` carries the same `id` and `detectedAt` as `GET /watches/{watchId}/changes`. Pass its `id` as `sinceId` to page the rest of a change set that overflowed `changesOverflowCount`, or to `GET /watches/{watchId}/changes/{changeId}/diff` for the before and after text.\n\nThe body carries two sets of counters over different populations. Read `sections*`, and read `rows*` only if you already built on it:\n\n- `sectionsAdded` / `sectionsAmended` / `sectionsRemoved` count sections, one per change event, the same unit as `changes[]`. They are narrowed by this watch's `scope`, which the body echoes back, and omitted when the refresh classified no change events.\n- `rowsAdded` / `rowsUpdated` / `rowsDeleted` are the refresh's raw storage counters for the whole board. They are never narrowed by `scope` and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive `rowsUpdated: 480` next to `sectionsAmended: 1`. Do not present the `rows*` keys as three populations of sections.\n\nFree.","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/watches","href":"/api-reference/board-watches/create-a-board-watch","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Subscribe to a board. \", _jsx(_components.code, {\n children: \"webhookUrl\"\n }), \" is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every \", _jsx(_components.code, {\n children: \"board.updated\"\n }), \" delivery body carries a \", _jsx(_components.code, {\n children: \"deliveryId\"\n }), \", stable per watch per refresh event even across our own retries, so you can dedupe on it.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Each item in the body’s \", _jsx(_components.code, {\n children: \"changes[]\"\n }), \" carries the same \", _jsx(_components.code, {\n children: \"id\"\n }), \" and \", _jsx(_components.code, {\n children: \"detectedAt\"\n }), \" as \", _jsx(_components.code, {\n children: \"GET /watches/{watchId}/changes\"\n }), \". Pass its \", _jsx(_components.code, {\n children: \"id\"\n }), \" as \", _jsx(_components.code, {\n children: \"sinceId\"\n }), \" to page the rest of a change set that overflowed \", _jsx(_components.code, {\n children: \"changesOverflowCount\"\n }), \", or to \", _jsx(_components.code, {\n children: \"GET /watches/{watchId}/changes/{changeId}/diff\"\n }), \" for the before and after text.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The body carries two sets of counters over different populations. Read \", _jsx(_components.code, {\n children: \"sections*\"\n }), \", and read \", _jsx(_components.code, {\n children: \"rows*\"\n }), \" only if you already built on it:\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"sectionsAdded\"\n }), \" / \", _jsx(_components.code, {\n children: \"sectionsAmended\"\n }), \" / \", _jsx(_components.code, {\n children: \"sectionsRemoved\"\n }), \" count sections, one per change event, the same unit as \", _jsx(_components.code, {\n children: \"changes[]\"\n }), \". They are narrowed by this watch’s \", _jsx(_components.code, {\n children: \"scope\"\n }), \", which the body echoes back, and omitted when the refresh classified no change events.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"rowsAdded\"\n }), \" / \", _jsx(_components.code, {\n children: \"rowsUpdated\"\n }), \" / \", _jsx(_components.code, {\n children: \"rowsDeleted\"\n }), \" are the refresh’s raw storage counters for the whole board. They are never narrowed by \", _jsx(_components.code, {\n children: \"scope\"\n }), \" and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive \", _jsx(_components.code, {\n children: \"rowsUpdated: 480\"\n }), \" next to \", _jsx(_components.code, {\n children: \"sectionsAmended: 1\"\n }), \". Do not present the \", _jsx(_components.code, {\n children: \"rows*\"\n }), \" keys as three populations of sections.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Free.\"\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":{"theme":"github-light"},"config":{},"pageMetadata":{"title":"Create a board watch","description":"Subscribe to a board. `webhookUrl` is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every `board.updated` delivery body carries a `deliveryId`, stable per watch per refresh event even across our own retries, so you can dedupe on it.\n\nEach item in the body's `changes[]` carries the same `id` and `detectedAt` as `GET /watches/{watchId}/changes`. Pass its `id` as `sinceId` to page the rest of a change set that overflowed `changesOverflowCount`, or to `GET /watches/{watchId}/changes/{changeId}/diff` for the before and after text.\n\nThe body carries two sets of counters over different populations. Read `sections*`, and read `rows*` only if you already built on it:\n\n- `sectionsAdded` / `sectionsAmended` / `sectionsRemoved` count sections, one per change event, the same unit as `changes[]`. They are narrowed by this watch's `scope`, which the body echoes back, and omitted when the refresh classified no change events.\n- `rowsAdded` / `rowsUpdated` / `rowsDeleted` are the refresh's raw storage counters for the whole board. They are never narrowed by `scope` and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive `rowsUpdated: 480` next to `sectionsAmended: 1`. Do not present the `rows*` keys as three populations of sections.\n\nFree.","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/watches","href":"/api-reference/board-watches/create-a-board-watch","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Board Watches"],"summary":"Create a board watch","description":"Subscribe to a board. `webhookUrl` is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every `board.updated` delivery body carries a `deliveryId`, stable per watch per refresh event even across our own retries, so you can dedupe on it.\n\nEach item in the body's `changes[]` carries the same `id` and `detectedAt` as `GET /watches/{watchId}/changes`. Pass its `id` as `sinceId` to page the rest of a change set that overflowed `changesOverflowCount`, or to `GET /watches/{watchId}/changes/{changeId}/diff` for the before and after text.\n\nThe body carries two sets of counters over different populations. Read `sections*`, and read `rows*` only if you already built on it:\n\n- `sectionsAdded` / `sectionsAmended` / `sectionsRemoved` count sections, one per change event, the same unit as `changes[]`. They are narrowed by this watch's `scope`, which the body echoes back, and omitted when the refresh classified no change events.\n- `rowsAdded` / `rowsUpdated` / `rowsDeleted` are the refresh's raw storage counters for the whole board. They are never narrowed by `scope` and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive `rowsUpdated: 480` next to `sectionsAmended: 1`. Do not present the `rows*` keys as three populations of sections.\n\nFree.","operationId":"create_watch","requestBody":"89822888-ef67-419e-a045-971cd7b306db","responses":{"201":"a66a7727-c2b7-484b-bdfb-1555e7d977fd","400":"3cbf0814-b044-4f1f-b9b2-dc0b725a01d9","401":"375967c9-4f5e-4b42-ae78-6cb3d43c0755","403":"f03915e9-ddc7-4e2d-a7fc-8e661cddfd16","404":"732d95ec-cc9f-4979-8606-f38504260383","409":"9b715fda-dfa2-4c52-9df8-ed976d16e6a8","422":"f400060a-cb1b-40d5-b9d8-063c525e25df","429":"57db9e7e-21d8-476d-934c-7571ce3384db","500":"08d5b3dd-430b-4ece-9a58-9289e27f176d"},"method":"post","type":"path","servers":["fe509590-d9b0-43fa-8081-f4cab426bd5e"],"security":["f4d0a5c6-0622-420e-b171-023df038007d","e376de42-5dbe-4b44-9558-2becc7f2ed2d"],"path":"/api/v1/watches","baseUrlOptions":["https://api.vaquill.ai"],"title":"Create a board watch","codeSamples":[],"requestExampleLanguages":["bash","python","javascript","go"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.corpusType":"state","body.state.oneOf.0":"wa","body.channel":"webhook","body.webhookUrl.oneOf.0":"\u003cstring>","body.webhookSecret.oneOf.0":"\u003cstring>","body.emailAddress.oneOf.0":"\u003cstring>","body.scope.oneOf.0.part":"314","body.scope.oneOf.0.title":"21","body.webhookAuth.oneOf.0.scheme":"none","body.webhookAuth.oneOf.0.secret.oneOf.0":"\u003cstring>","body.webhookAuth.oneOf.0.headerName.oneOf.0":"X-Api-Key"}]},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"corpusType":{"type":"string","enum":["agency_adjudication","agency_guidance","agency_manuals","cfr","federal_local_rules","federal_primary_law","federal_register","federal_register_notice","federal_rules","session_law","state","state_ag_opinion","state_constitution","state_insurance_bulletins","state_regulation","state_rules","statute_compilation","usc"],"title":"Corpustype","description":"Board's corpus_type (e.g. `state`, `state_regulation`, `federal_register`, `agency_guidance`). One of the published values; anything else is a 422 that lists them. Matched case-insensitively, and the uppercase search-style token for the same body of law (`USC`, `CFR`, `REGULATION`) is accepted and stored as the board key (`REGULATION` becomes `state_regulation`). This is the board vocabulary, not the `/us/statutes/search` `corpusType` token set: the names overlap where spelled alike (`usc`, `cfr`, `state`) and differ elsewhere. `GET /boards` says which (corpusType, state) pairs are live.","examples":["state"],"isRequired":true,"uniqueKey":"corpusType","typeLabel":"enum\u003cstring>"},"state":{"oneOf":[{"type":"string","title":"State","description":"Board's state (2-letter, case-insensitive). For a federal board (USC, eCFR, the Federal Register) pass `federal` or omit this entirely; the two are equivalent. Must otherwise match the `state` GET /boards returned for this corpusType: `GET /boards?corpusType=\u003ctype>` lists exactly those.","enum":["federal","al","ak","as","az","ar","ca","co","ct","de","dc","fl","ga","gu","hi","id","il","in","ia","ks","ky","la","me","md","ma","mi","mn","ms","mo","mt","ne","nv","nh","nj","nm","ny","nc","nd","mp","oh","ok","or","pa","pr","ri","sc","sd","tn","tx","ut","vt","vi","va","wa","wv","wi","wy"],"example":"wa","uniqueKey":"state.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"State","description":"Board's state (2-letter, case-insensitive). For a federal board (USC, eCFR, the Federal Register) pass `federal` or omit this entirely; the two are equivalent. Must otherwise match the `state` GET /boards returned for this corpusType: `GET /boards?corpusType=\u003ctype>` lists exactly those.","example":"wa","uniqueKey":"state.oneOf.1","typeLabel":"null"}],"uniqueKey":"state","typeLabel":"enum\u003cstring> | null"},"channel":{"type":"string","enum":["webhook","email","both"],"title":"Channel","default":"webhook","uniqueKey":"channel","typeLabel":"enum\u003cstring>"},"webhookUrl":{"oneOf":[{"type":"string","title":"Webhookurl","description":"Required when channel is webhook or both.","uniqueKey":"webhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","title":"Webhookurl","description":"Required when channel is webhook or both.","uniqueKey":"webhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhookUrl","typeLabel":"string | null"},"webhookSecret":{"oneOf":[{"type":"string","title":"Webhooksecret","description":"Optional signing secret, stored encrypted and never returned. When set, every delivery carries an `X-Vaquill-Signature: sha256=\u003chex>` header: HMAC-SHA256 of the raw request body bytes, keyed with this secret. To verify, compute the same HMAC over the raw body you received (before parsing JSON) and compare it, constant-time, to the hex digest after `sha256=`. Deliveries also carry Standard Webhooks headers (`webhook-id`, `webhook-timestamp`, `webhook-signature: v1,\u003cbase64>`), signed over `{webhook-id}.{webhook-timestamp}.{raw body}`; prefer these, as they add replay protection. The HMAC key is the base64 decoding of the secret after `whsec_` when it has that prefix, otherwise the secret's UTF-8 bytes. `X-Vaquill-Signature` is deprecated but remains in place for at least 12 months.","uniqueKey":"webhookSecret.oneOf.0","typeLabel":"string"},{"type":"null","title":"Webhooksecret","description":"Optional signing secret, stored encrypted and never returned. When set, every delivery carries an `X-Vaquill-Signature: sha256=\u003chex>` header: HMAC-SHA256 of the raw request body bytes, keyed with this secret. To verify, compute the same HMAC over the raw body you received (before parsing JSON) and compare it, constant-time, to the hex digest after `sha256=`. Deliveries also carry Standard Webhooks headers (`webhook-id`, `webhook-timestamp`, `webhook-signature: v1,\u003cbase64>`), signed over `{webhook-id}.{webhook-timestamp}.{raw body}`; prefer these, as they add replay protection. The HMAC key is the base64 decoding of the secret after `whsec_` when it has that prefix, otherwise the secret's UTF-8 bytes. `X-Vaquill-Signature` is deprecated but remains in place for at least 12 months.","uniqueKey":"webhookSecret.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhookSecret","typeLabel":"string | null"},"emailAddress":{"oneOf":[{"type":"string","title":"Emailaddress","description":"Required when channel is email or both.","uniqueKey":"emailAddress.oneOf.0","typeLabel":"string"},{"type":"null","title":"Emailaddress","description":"Required when channel is email or both.","uniqueKey":"emailAddress.oneOf.1","typeLabel":"null"}],"uniqueKey":"emailAddress","typeLabel":"string | null"},"scope":{"oneOf":[{"type":"object","title":"Scope","description":"Optional narrowing so this alert covers one citation instead of an entire source. Four mutually exclusive forms. Omit entirely to watch the whole source.\n\nHierarchy prefix: keys `title`, `chapter`, `part`, `section`, e.g. `{\"title\": \"21\", \"part\": \"314\"}` for 21 CFR part 314. Every level you set must match. `title` is required whenever any narrower level is set, and `section` also needs `chapter` or `part`. Sources without a title/chapter/part hierarchy return 400 (see `scopable` on `GET /boards`).\n\nExact section: `{\"actId\": \"CFR_T21_P314_S314_50\"}`, using the `actId` from search results and change events. Case-sensitive and validated at create time: an act_id we do not hold, or one from a different source, is a 400. Works on every source, and is the only way to follow a single Federal Register document.\n\nNamed source: `{\"source\": \"fdic_fil\"}`, for corpora that fold several independent bodies of law behind one `corpusType`. The `agency_guidance` board alone carries 47 named sources across 24 agencies, so an unscoped watch on it delivers FDIC letters, IRS notices, OFAC FAQs and DOE appliance standards together. Accepted on `agency_adjudication`, `agency_guidance`, `agency_manuals`, `cfr`, `federal_rules`; anything else returns 400. Pickable values are on the board's `sources` array in `GET /boards`.\n\nPublishing agency: `{\"agency\": \"irs\"}`, covering every source that agency issues on the board (the IRS alone publishes 5 named series). Expanded when an event is matched, not when the watch is created, so a source registered later is covered automatically. Accepted on `agency_adjudication`, `agency_guidance`, `agency_manuals`; pickable values are on the board's `agencies` array in `GET /boards`.","example":{"part":"314","title":"21"},"additionalProperties":{"type":"string","uniqueKey":"scope.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"scope.oneOf.0","typeLabel":"Scope · object"},{"type":"null","title":"Scope","description":"Optional narrowing so this alert covers one citation instead of an entire source. Four mutually exclusive forms. Omit entirely to watch the whole source.\n\nHierarchy prefix: keys `title`, `chapter`, `part`, `section`, e.g. `{\"title\": \"21\", \"part\": \"314\"}` for 21 CFR part 314. Every level you set must match. `title` is required whenever any narrower level is set, and `section` also needs `chapter` or `part`. Sources without a title/chapter/part hierarchy return 400 (see `scopable` on `GET /boards`).\n\nExact section: `{\"actId\": \"CFR_T21_P314_S314_50\"}`, using the `actId` from search results and change events. Case-sensitive and validated at create time: an act_id we do not hold, or one from a different source, is a 400. Works on every source, and is the only way to follow a single Federal Register document.\n\nNamed source: `{\"source\": \"fdic_fil\"}`, for corpora that fold several independent bodies of law behind one `corpusType`. The `agency_guidance` board alone carries 47 named sources across 24 agencies, so an unscoped watch on it delivers FDIC letters, IRS notices, OFAC FAQs and DOE appliance standards together. Accepted on `agency_adjudication`, `agency_guidance`, `agency_manuals`, `cfr`, `federal_rules`; anything else returns 400. Pickable values are on the board's `sources` array in `GET /boards`.\n\nPublishing agency: `{\"agency\": \"irs\"}`, covering every source that agency issues on the board (the IRS alone publishes 5 named series). Expanded when an event is matched, not when the watch is created, so a source registered later is covered automatically. Accepted on `agency_adjudication`, `agency_guidance`, `agency_manuals`; pickable values are on the board's `agencies` array in `GET /boards`.","example":{"part":"314","title":"21"},"uniqueKey":"scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"scope","typeLabel":"Scope · object | null"},"webhookAuth":{"oneOf":[{"type":"object","title":"WebhookAuthRequest","description":"Optional outbound credential sent on every delivery, so your gateway can authenticate us with the header it already reads. Independent of `webhookSecret`: set neither, either, or both. Only valid on a webhook or both channel watch.","properties":{"scheme":{"type":"string","enum":["none","bearer","basic","header"],"title":"Scheme","description":"`bearer` sends `Authorization: Bearer \u003csecret>`. `basic` sends `Authorization: Basic \u003csecret>` with the secret already base64-encoded by you. `header` sends `\u003cheaderName>: \u003csecret>`, for gateways that read something like `X-Api-Key`. `none` removes any credential currently stored.","default":"none","uniqueKey":"webhookAuth.oneOf.0.scheme","typeLabel":"enum\u003cstring>"},"secret":{"oneOf":[{"type":"string","title":"Secret","description":"The credential value. Stored encrypted and never returned. Required when setting a scheme for the first time or changing scheme; on PATCH you may omit it to keep the stored one while changing only `headerName`.","uniqueKey":"webhookAuth.oneOf.0.secret.oneOf.0","typeLabel":"string"},{"type":"null","title":"Secret","description":"The credential value. Stored encrypted and never returned. Required when setting a scheme for the first time or changing scheme; on PATCH you may omit it to keep the stored one while changing only `headerName`.","uniqueKey":"webhookAuth.oneOf.0.secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhookAuth.oneOf.0.secret","typeLabel":"string | null"},"headerName":{"oneOf":[{"type":"string","title":"Headername","description":"Header to send the credential on. Required for `header`, and rejected for every other scheme. Cannot be `Authorization` (use `bearer`/`basic`), a transport header, or one of ours.","example":"X-Api-Key","uniqueKey":"webhookAuth.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","title":"Headername","description":"Header to send the credential on. Required for `header`, and rejected for every other scheme. Cannot be `Authorization` (use `bearer`/`basic`), a transport header, or one of ours.","example":"X-Api-Key","uniqueKey":"webhookAuth.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhookAuth.oneOf.0.headerName","typeLabel":"string | null"}},"uniqueKey":"webhookAuth.oneOf.0","typeLabel":"WebhookAuthRequest · object"},{"type":"null","description":"Optional outbound credential sent on every delivery, so your gateway can authenticate us with the header it already reads. Independent of `webhookSecret`: set neither, either, or both. Only valid on a webhook or both channel watch.","uniqueKey":"webhookAuth.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhookAuth","typeLabel":"WebhookAuthRequest · object | null"}},"additionalProperties":false,"type":"object","required":["corpusType"],"title":"CreateWatchRequest","uniqueKey":"","typeLabel":"CreateWatchRequest · object"},"examples":{"Example":{"title":"Example","value":{"corpusType":"state","state":"wa","channel":"webhook","webhookUrl":"\u003cstring>","webhookSecret":"\u003cstring>","emailAddress":"\u003cstring>","scope":{"part":"314","title":"21"},"webhookAuth":{"scheme":"none","secret":"\u003cstring>","headerName":"X-Api-Key"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"a66a7727-c2b7-484b-bdfb-1555e7d977fd":{"description":"The created watch.","content":{"application/json":{"schema":{"properties":{"data":{"properties":{"id":{"type":"string","title":"Id","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"corpusType":{"type":"string","title":"Corpustype","isRequired":true,"uniqueKey":"data.corpusType","typeLabel":"string"},"channel":{"type":"string","title":"Channel","isRequired":true,"uniqueKey":"data.channel","typeLabel":"string"},"isActive":{"type":"boolean","title":"Isactive","isRequired":true,"uniqueKey":"data.isActive","typeLabel":"boolean"},"createdAt":{"type":"string","title":"Createdat","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string"},"state":{"oneOf":[{"type":"string","title":"State","uniqueKey":"data.state.oneOf.0","typeLabel":"string"},{"type":"null","title":"State","uniqueKey":"data.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.state","typeLabel":"string | null"},"webhookUrl":{"oneOf":[{"type":"string","title":"Webhookurl","uniqueKey":"data.webhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","title":"Webhookurl","uniqueKey":"data.webhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.webhookUrl","typeLabel":"string | null"},"emailAddress":{"oneOf":[{"type":"string","title":"Emailaddress","uniqueKey":"data.emailAddress.oneOf.0","typeLabel":"string"},{"type":"null","title":"Emailaddress","uniqueKey":"data.emailAddress.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.emailAddress","typeLabel":"string | null"},"scope":{"oneOf":[{"type":"object","title":"Scope","additionalProperties":{"type":"string","uniqueKey":"data.scope.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.scope.oneOf.0","typeLabel":"Scope · object"},{"type":"null","title":"Scope","uniqueKey":"data.scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.scope","typeLabel":"Scope · object | null"},"updatedAt":{"oneOf":[{"type":"string","title":"Updatedat","uniqueKey":"data.updatedAt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Updatedat","uniqueKey":"data.updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.updatedAt","typeLabel":"string | null"},"lastNotifiedAt":{"oneOf":[{"type":"string","title":"Lastnotifiedat","uniqueKey":"data.lastNotifiedAt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Lastnotifiedat","uniqueKey":"data.lastNotifiedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastNotifiedAt","typeLabel":"string | null"},"lastStatus":{"oneOf":[{"type":"integer","title":"Laststatus","uniqueKey":"data.lastStatus.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Laststatus","uniqueKey":"data.lastStatus.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastStatus","typeLabel":"integer | null"},"webhookAuth":{"oneOf":[{"type":"object","title":"WebhookAuthResponse","description":"Auth CONFIG as read back. Never includes the credential itself.","required":["scheme"],"properties":{"scheme":{"type":"string","title":"Scheme","isRequired":true,"uniqueKey":"data.webhookAuth.oneOf.0.scheme","typeLabel":"string"},"headerName":{"oneOf":[{"type":"string","title":"Headername","uniqueKey":"data.webhookAuth.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","title":"Headername","uniqueKey":"data.webhookAuth.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.webhookAuth.oneOf.0.headerName","typeLabel":"string | null"},"hasSecret":{"type":"boolean","title":"Hassecret","default":false,"uniqueKey":"data.webhookAuth.oneOf.0.hasSecret","typeLabel":"boolean"}},"uniqueKey":"data.webhookAuth.oneOf.0","typeLabel":"WebhookAuthResponse · object"},{"type":"null","uniqueKey":"data.webhookAuth.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.webhookAuth","typeLabel":"WebhookAuthResponse · object | null"},"hasWebhookSecret":{"type":"boolean","title":"Haswebhooksecret","description":"Whether a `webhookSecret` is stored, so deliveries carry a signature. The secret itself is never returned.","default":false,"uniqueKey":"data.hasWebhookSecret","typeLabel":"boolean"},"cadence":{"oneOf":[{"type":"string","title":"Cadence","description":"How often we poll this board's source: `daily`, `weekly`, `monthly` or `annual`. Same value as `GET /boards`. Watching does not change it, and checking `/changes` more often than this gains nothing.","example":"weekly","uniqueKey":"data.cadence.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cadence","description":"How often we poll this board's source: `daily`, `weekly`, `monthly` or `annual`. Same value as `GET /boards`. Watching does not change it, and checking `/changes` more often than this gains nothing.","example":"weekly","uniqueKey":"data.cadence.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.cadence","typeLabel":"string | null"},"lastRetrievedAt":{"oneOf":[{"type":"string","title":"Lastretrievedat","description":"ISO-8601 UTC timestamp of the last refresh run for this board that finished cleanly. A run that found nothing new counts.","uniqueKey":"data.lastRetrievedAt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Lastretrievedat","description":"ISO-8601 UTC timestamp of the last refresh run for this board that finished cleanly. A run that found nothing new counts.","uniqueKey":"data.lastRetrievedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastRetrievedAt","typeLabel":"string | null"},"changeSignal":{"type":"string","title":"Changesignal","description":"`continuous` or `edition_only`. On an `edition_only` board we can only detect a new edition arriving, so silence on this watch means no new edition, not that the law is unchanged. Full definition on `GET /boards`.","default":"continuous","uniqueKey":"data.changeSignal","typeLabel":"string"}},"type":"object","required":["id","corpusType","channel","isActive","createdAt"],"title":"WatchResponse","isRequired":true,"uniqueKey":"data","typeLabel":"WatchResponse · object"},"meta":{"properties":{"processingTimeMs":{"type":"number","title":"Processingtimems","isRequired":true,"uniqueKey":"meta.processingTimeMs","typeLabel":"number"},"creditsConsumed":{"type":"number","title":"Creditsconsumed","isRequired":true,"uniqueKey":"meta.creditsConsumed","typeLabel":"number"},"cursor":{"oneOf":[{"type":"integer","title":"Cursor","description":"Change feeds only: the value to send back as `sinceId`. Null on an empty page. The highest change `id` on the page, except on a full newest-first page read with a `sinceId`, where unread rows sit below the page and the cursor stays at your `sinceId`; use `nextBeforeId` to reach them.","uniqueKey":"meta.cursor.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Cursor","description":"Change feeds only: the value to send back as `sinceId`. Null on an empty page. The highest change `id` on the page, except on a full newest-first page read with a `sinceId`, where unread rows sit below the page and the cursor stays at your `sinceId`; use `nextBeforeId` to reach them.","uniqueKey":"meta.cursor.oneOf.1","typeLabel":"null"}],"uniqueKey":"meta.cursor","typeLabel":"integer | null"},"nextBeforeId":{"oneOf":[{"type":"integer","title":"Nextbeforeid","description":"Change feeds only, full `order=desc` pages: the lowest change `id` on the page. Send it as `beforeId` for the next older page. Null otherwise.","uniqueKey":"meta.nextBeforeId.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Nextbeforeid","description":"Change feeds only, full `order=desc` pages: the lowest change `id` on the page. Send it as `beforeId` for the next older page. Null otherwise.","uniqueKey":"meta.nextBeforeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"meta.nextBeforeId","typeLabel":"integer | null"},"hasMore":{"oneOf":[{"type":"boolean","title":"Hasmore","description":"Change feeds only: true when the page filled to `limit`.","uniqueKey":"meta.hasMore.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Hasmore","description":"Change feeds only: true when the page filled to `limit`.","uniqueKey":"meta.hasMore.oneOf.1","typeLabel":"null"}],"uniqueKey":"meta.hasMore","typeLabel":"boolean | null"}},"type":"object","required":["processingTimeMs","creditsConsumed"],"title":"ResponseMeta","description":"The `meta` block every board-watch route returns beside `data`.","isRequired":true,"uniqueKey":"meta","typeLabel":"ResponseMeta · object"}},"type":"object","required":["data","meta"],"title":"WatchEnvelope","uniqueKey":"","typeLabel":"WatchEnvelope · object"},"example":{"data":{"id":"9f2b1e0a-1234-4a11-8b1c-abcdef123456","corpusType":"state","state":"wa","channel":"webhook","webhookUrl":"https://example.com/hooks/law-changes","isActive":true,"createdAt":"2026-08-07T09:00:00Z","updatedAt":"2026-08-07T09:00:00Z","webhookAuth":{"scheme":"bearer","hasSecret":true},"changeSignal":"continuous"},"meta":{"processingTimeMs":45.2,"creditsConsumed":0}},"examples":{"Example":{"title":"Example","value":{"data":{"id":"9f2b1e0a-1234-4a11-8b1c-abcdef123456","corpusType":"state","state":"wa","channel":"webhook","webhookUrl":"https://example.com/hooks/law-changes","isActive":true,"createdAt":"2026-08-07T09:00:00Z","updatedAt":"2026-08-07T09:00:00Z","webhookAuth":{"scheme":"bearer","hasSecret":true},"changeSignal":"continuous"},"meta":{"processingTimeMs":45.2,"creditsConsumed":0}}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"examples"},"3cbf0814-b044-4f1f-b9b2-dc0b725a01d9":{"description":"Invalid request (bad channel/URL combo, rejected webhook target, or an invalid or unsupported scope).","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"375967c9-4f5e-4b42-ae78-6cb3d43c0755":{"description":"Invalid or missing API key.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"f03915e9-ddc7-4e2d-a7fc-8e661cddfd16":{"description":"API key lacks `research:read` scope, the plan does not include webhook delivery (Business only; email delivery is available on every plan), or the key is an unverified agent trial key (verify the signup email first).","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"732d95ec-cc9f-4979-8606-f38504260383":{"description":"No enabled board for that corpusType + state.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"9b715fda-dfa2-4c52-9df8-ed976d16e6a8":{"description":"You already have a watch on this board for this channel.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"f400060a-cb1b-40d5-b9d8-063c525e25df":{"description":"Validation error: `detail` plus one `errors` entry per rejected field.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"},"57db9e7e-21d8-476d-934c-7571ce3384db":{"description":"Rate limit exceeded (`rate_limited`, retry after `Retry-After`), or you have reached the maximum number of watches your plan allows (3 outside the Business plan): that is code `quota_exceeded` with `retryable: false`. Delete a watch or upgrade to raise it.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"exampleType":"generated"},"08d5b3dd-430b-4ece-9a58-9289e27f176d":{"description":"Internal error (`internal_error`, retryable). Any credits charged for the call are refunded; retry with backoff and quote `requestId` to support if it persists.","content":{"application/json":{"schema":{"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."],"isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"errors.oneOf.0.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | 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","query"]],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value, in plain English.","examples":["Field required"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable error kind, e.g. `missing`, `literal_error`, `json_invalid`.","examples":["missing"],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ApiFieldError","description":"One rejected field in a 422 response.","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"ApiFieldError · object"},"title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.0","typeLabel":"ApiFieldError · object[]"},{"type":"null","title":"Errors","description":"Present on 422 only: every field that failed validation.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"ApiFieldError · object[] | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Stable machine code for the failure. Branch on this, not on `detail`. The set is open: tolerate values you do not know. Known values: authentication_required, invalid_api_key, api_key_expired, permission_denied, insufficient_scope, insufficient_credits, payment_required, rate_limited, quota_exceeded, daily_cap_exceeded, bad_request, validation_error, method_not_allowed, payload_too_large, unsupported_media_type, invalid_query, invalid_citation_input, section_not_found, resource_not_found, idempotency_key_reused, idempotency_in_progress, idempotency_replay_unavailable, upstream_timeout, service_unavailable, internal_error, conflict.","x-known-values":["authentication_required","invalid_api_key","api_key_expired","permission_denied","insufficient_scope","insufficient_credits","payment_required","rate_limited","quota_exceeded","daily_cap_exceeded","bad_request","validation_error","method_not_allowed","payload_too_large","unsupported_media_type","invalid_query","invalid_citation_input","section_not_found","resource_not_found","idempotency_key_reused","idempotency_in_progress","idempotency_replay_unavailable","upstream_timeout","service_unavailable","internal_error","conflict"],"example":"insufficient_credits","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Type","description":"URL naming the error kind, `https://www.vaquill.ai/docs/errors/{code}`.","example":"https://www.vaquill.ai/docs/errors/insufficient_credits","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Short fixed English title for `code`.","example":"Insufficient credits","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Status","description":"Echo of the HTTP status code.","example":402,"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer | null"},"requestId":{"oneOf":[{"type":"string","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Requestid","description":"Equals the `X-Request-ID` response header. Quote it to support.","example":"8d32789e-7b27-44f7-9523-424596e7a929","uniqueKey":"requestId.oneOf.1","typeLabel":"null"}],"uniqueKey":"requestId","typeLabel":"string | null"},"retryable":{"oneOf":[{"type":"boolean","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Retryable","description":"True only when repeating the same request is safe and may succeed.","example":false,"uniqueKey":"retryable.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryable","typeLabel":"boolean | null"},"retryAfterSeconds":{"oneOf":[{"type":"integer","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retryafterseconds","description":"On 429 and 503 when `Retry-After` is set: the same value in seconds.","example":30,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"actId":{"oneOf":[{"type":"string","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Actid","description":"Section routes only, on a miss: the identifier that matched nothing.","example":"UNKNOWN_99999","uniqueKey":"actId.oneOf.1","typeLabel":"null"}],"uniqueKey":"actId","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Section routes only, on a miss: why nothing matched, for example `unsupported_jurisdiction` or `not_in_registry`. The set is open.","example":"not_in_registry","uniqueKey":"reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"reason","typeLabel":"string | null"},"didYouMean":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"didYouMean.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Didyoumean","description":"Section routes only, on a miss: identifiers worth trying instead.","uniqueKey":"didYouMean.oneOf.1","typeLabel":"null"}],"uniqueKey":"didYouMean","typeLabel":"string[] | null"},"sessionLawId":{"oneOf":[{"type":"string","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sessionlawid","description":"Session-law routes only, on a miss: the id or citation that matched nothing.","example":"Pub. L. 117-58","uniqueKey":"sessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionLawId","typeLabel":"string | null"},"defaultSessionLawId":{"oneOf":[{"type":"string","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Defaultsessionlawid","description":"Session-law routes only, on an `ambiguous_citation` miss: the conventional reading, which is NOT chosen for you. `didYouMean` lists every candidate.","example":"us1_ca_2019_ch_123","uniqueKey":"defaultSessionLawId.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaultSessionLawId","typeLabel":"string | null"},"candidateCount":{"oneOf":[{"type":"integer","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Candidatecount","description":"Session-law routes only: how many laws the citation names in all.","example":3,"uniqueKey":"candidateCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"candidateCount","typeLabel":"integer | null"},"truncated":{"oneOf":[{"type":"boolean","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Truncated","description":"Session-law routes only: true when `didYouMean` lists fewer laws than `candidateCount`, so the list is not complete.","example":false,"uniqueKey":"truncated.oneOf.1","typeLabel":"null"}],"uniqueKey":"truncated","typeLabel":"boolean | null"},"jurisdictions":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"jurisdictions.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Jurisdictions","description":"Session-law routes only, on a `needs_jurisdiction` miss: every state where the citation exists. Name one in the citation, or pass `state`.","uniqueKey":"jurisdictions.oneOf.1","typeLabel":"null"}],"uniqueKey":"jurisdictions","typeLabel":"string[] | null"},"sessionCoverage":{"oneOf":[{"type":"object","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","additionalProperties":true,"uniqueKey":"sessionCoverage.oneOf.0","typeLabel":"Sessioncoverage · object"},{"type":"null","title":"Sessioncoverage","description":"Session-law routes only, on a `session_not_fully_collected` miss: how much of the session we hold.","uniqueKey":"sessionCoverage.oneOf.1","typeLabel":"null"}],"uniqueKey":"sessionCoverage","typeLabel":"Sessioncoverage · object | null"},"creditsRequired":{"oneOf":[{"type":"integer","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsrequired","description":"402 only, when known: the credits this call needed.","example":5,"uniqueKey":"creditsRequired.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsRequired","typeLabel":"integer | null"},"creditsAvailable":{"oneOf":[{"type":"integer","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Creditsavailable","description":"402 only, when known: the credits you can spend right now.","example":2,"uniqueKey":"creditsAvailable.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditsAvailable","typeLabel":"integer | null"},"topUpHint":{"oneOf":[{"type":"string","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Topuphint","description":"402 only, when known: where to add credits.","example":"Add credits in the developer dashboard, then retry the same request.","uniqueKey":"topUpHint.oneOf.1","typeLabel":"null"}],"uniqueKey":"topUpHint","typeLabel":"string | null"}},"type":"object","required":["detail"],"title":"ApiDetailError","description":"Error envelope the API actually returns.\n\nEvery error (400/401/402/403/404/405/422/429/5xx) carries a `detail`\nstring, e.g. `{\"detail\": \"Insufficient API credits.\"}`, on every mount of\nthe API. A 422 adds `errors`, one entry per rejected field. Some 404s add\nendpoint-specific diagnosis beside `detail` (the statutes section routes\nadd `actId`, `reason` and `didYouMean`); treat unknown keys as optional.","uniqueKey":"","typeLabel":"ApiDetailError · object"},"examples":{"Example":{"title":"Example","value":{"detail":"Insufficient API credits.","errors":[{"loc":["body","query"],"msg":"Field required","type":"missing"}],"code":"insufficient_credits","type":"https://www.vaquill.ai/docs/errors/insufficient_credits","title":"Insufficient credits","status":402,"requestId":"8d32789e-7b27-44f7-9523-424596e7a929","retryable":false,"retryAfterSeconds":30,"actId":"UNKNOWN_99999","reason":"not_in_registry","didYouMean":["\u003cstring>"],"sessionLawId":"Pub. L. 117-58","defaultSessionLawId":"us1_ca_2019_ch_123","candidateCount":3,"truncated":false,"jurisdictions":["\u003cstring>"],"sessionCoverage":{},"creditsRequired":5,"creditsAvailable":2,"topUpHint":"Add credits in the developer dashboard, then retry the same request."}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current per-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp at which the per-minute window resets.","schema":{"type":"integer"}},"X-RateLimit-Limit-Day":{"description":"Requests allowed per day (the slow-drip backstop).","schema":{"type":"integer"}},"X-RateLimit-Remaining-Day":{"description":"Requests left in the daily window.","schema":{"type":"integer"}},"X-RateLimit-Limit-Hour":{"description":"Requests allowed per hour.","schema":{"type":"integer"}},"X-RateLimit-Remaining-Hour":{"description":"Requests left in the hourly window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Day":{"description":"Unix timestamp at which the daily window resets (next UTC midnight).","schema":{"type":"integer"}},"X-RateLimit-Scope":{"description":"Which bucket the limits above describe: `key` (this API key's own allowance) or `ip` (the shared per-address ceiling, also used when the key did not validate). Absent on requests without an API key.","schema":{"type":"string","enum":["key","ip"]}},"X-Request-ID":{"description":"Correlation id of this request. Quote it when contacting support.","schema":{"type":"string"}}},"exampleType":"generated"}},"security":{"f4d0a5c6-0622-420e-b171-023df038007d":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"vq_key_*","description":"API key issued from the developer dashboard. Pass as `Authorization: Bearer vq_key_...` (preferred).","scopes":[],"schemeName":"ApiKeyAuth"}},"e376de42-5dbe-4b44-9558-2becc7f2ed2d":{"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.","scopes":[],"schemeName":"ApiKeyHeader"}}},"servers":{"fe509590-d9b0-43fa-8081-f4cab426bd5e":{"url":"https://api.vaquill.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"vq_key_*","description":"API key issued from the developer dashboard. Pass as `Authorization: Bearer vq_key_...` (preferred).","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key issued from the developer dashboard. Pass as `Authorization: Bearer vq_key_...` (preferred).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"},{"schemes":[{"scheme":{"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.","scopes":[],"schemeName":"ApiKeyHeader"},"schema":{"title":"X-API-Key","type":"string","description":"The same API key as a bare header value: `X-API-Key: vq_key_...`. Equivalent to the Bearer form.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyHeader","name":"X-API-Key"}],"title":"ApiKeyHeader"}]},"originalFileLocation":"https://api.vaquill.ai/external/openapi.json"},"subdomain":"vaquill","siteName":"Vaquill AI","title":"Create a board watch - Vaquill AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/board-watches/create-a-board-watch.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it. Each item in the body\u0026#x27;s changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text. The body carries two sets of counters over different populations. Read sections, and read rows only if you already built on it: - sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch\u0026#x27;s scope, which the body echoes back, and omitted when the refresh classified no change events. - rowsAdded / rowsUpdated / rowsDeleted are the refresh\u0026#x27;s raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections. Free.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vaquill AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a board watch - Vaquill AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it. Each item in the body\u0026#x27;s changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text. The body carries two sets of counters over different populations. Read sections, and read rows only if you already built on it: - sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch\u0026#x27;s scope, which the body echoes back, and omitted when the refresh classified no change events. - rowsAdded / rowsUpdated / rowsDeleted are the refresh\u0026#x27;s raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections. Free.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vaquill AI Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vaquill.mintlify.site/docs/_mintlify/api/og/v2?division=Board+Watches\u0026amp;title=Create+a+board+watch\u0026amp;description=Subscribe+to+a+board.+%60webhookUrl%60+is+validated+against+an+SSRF+blocklist+%28loopback%2C+private%2C+link-local+and+cloud-metadata+ranges%29+before+acceptance+and+again+\u0026amp;theme=4f8ca970eaa5a0775e273f11\u0026amp;signature=fb0ec13ed0b9b177663022d56923d6f44707c101c6e75aa03dc4e1cc94199c12\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a board watch - Vaquill AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it. Each item in the body\u0026#x27;s changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text. The body carries two sets of counters over different populations. Read sections, and read rows only if you already built on it: - sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch\u0026#x27;s scope, which the body echoes back, and omitted when the refresh classified no change events. - rowsAdded / rowsUpdated / rowsDeleted are the refresh\u0026#x27;s raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections. Free.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vaquill.mintlify.site/docs/_mintlify/api/og/v2?division=Board+Watches\u0026amp;title=Create+a+board+watch\u0026amp;description=Subscribe+to+a+board.+%60webhookUrl%60+is+validated+against+an+SSRF+blocklist+%28loopback%2C+private%2C+link-local+and+cloud-metadata+ranges%29+before+acceptance+and+again+\u0026amp;theme=4f8ca970eaa5a0775e273f11\u0026amp;signature=fb0ec13ed0b9b177663022d56923d6f44707c101c6e75aa03dc4e1cc94199c12\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/vaquill/cxXYvhk1ARjGdjCs/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vaquill AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6E3730\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/board-watches/create-a-board-watch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.vaquill.ai/#organization\",\"name\":\"Vaquill AI\",\"url\":\"https://www.vaquill.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vaquill/HoYf91pjRoTl4-t3/logo/light.png?fit=max\u0026auto=format\u0026n=HoYf91pjRoTl4-t3\u0026q=85\u0026s=1c97b6018caaa1fee0a743b05651bb81\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.vaquill.ai/docs#website\",\"name\":\"Vaquill AI\",\"url\":\"https://www.vaquill.ai/docs\",\"publisher\":{\"@id\":\"https://www.vaquill.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch#webpage\",\"url\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch\",\"name\":\"Create a board watch\",\"description\":\"Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it. Each item in the body's changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text. The body carries two sets of counters over different populations. Read sections, and read rows only if you already built on it: - sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch's scope, which the body echoes back, and omitted when the refresh classified no change events. - rowsAdded / rowsUpdated / rowsDeleted are the refresh's raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections. Free.\",\"isPartOf\":{\"@id\":\"https://www.vaquill.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Board Watches\",\"item\":\"https://www.vaquill.ai/docs/api-reference/board-watches/list-watchable-boards\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a board watch\",\"item\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch#apireference\",\"headline\":\"Create a board watch\",\"name\":\"Create a board watch\",\"description\":\"Subscribe to a board. webhookUrl is validated against an SSRF blocklist (loopback, private, link-local and cloud-metadata ranges) before acceptance and again on every dispatch. Every board.updated delivery body carries a deliveryId, stable per watch per refresh event even across our own retries, so you can dedupe on it. Each item in the body's changes[] carries the same id and detectedAt as GET /watches/{watchId}/changes. Pass its id as sinceId to page the rest of a change set that overflowed changesOverflowCount, or to GET /watches/{watchId}/changes/{changeId}/diff for the before and after text. The body carries two sets of counters over different populations. Read sections, and read rows only if you already built on it: - sectionsAdded / sectionsAmended / sectionsRemoved count sections, one per change event, the same unit as changes[]. They are narrowed by this watch's scope, which the body echoes back, and omitted when the refresh classified no change events. - rowsAdded / rowsUpdated / rowsDeleted are the refresh's raw storage counters for the whole board. They are never narrowed by scope and do not share a unit with each other: added and deleted count storage chunks, updated counts sections. A watch scoped to 21 CFR part 314 can receive rowsUpdated: 480 next to sectionsAmended: 1. Do not present the rows* keys as three populations of sections. Free.\",\"url\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch\",\"mainEntityOfPage\":{\"@id\":\"https://www.vaquill.ai/docs/api-reference/board-watches/create-a-board-watch#webpage\"},\"publisher\":{\"@id\":\"https://www.vaquill.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://www.vaquill.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vaquill AI\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Vaquill AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/api-reference/board-watches/create-a-board-watch.md","siteName":"Vaquill AI","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock","href":"/api-guide/changelog"},{"anchor":"MCP","icon":"plug","href":"/integrations/mcp/vaquill"}]},"tabs":[{"tab":"Guide","pages":[{"title":"Guide","href":"/api-guide/coverage"}]},{"tab":"US API reference","groups":[{"group":"US Statutes","pages":[{"title":"Search US statutes, constitutions, court rules, and executive actions","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/statutes/search","href":"/api-reference/us-statutes/search-us-statutes-constitutions-court-rules-and-executive-actions"},{"title":"Get statute section metadata","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}","href":"/api-reference/us-statutes/get-statute-section-metadata"},{"title":"Resolve a citation to its section","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/resolve","href":"/api-reference/us-statutes/resolve-a-citation-to-its-section"},{"title":"Resolve many citations at once","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/statutes/resolve","href":"/api-reference/us-statutes/resolve-many-citations-at-once"},{"title":"Get the sections around this one","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/related","href":"/api-reference/us-statutes/get-the-sections-around-this-one"},{"title":"Get metadata for many statute sections","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/statutes/sections","href":"/api-reference/us-statutes/get-metadata-for-many-statute-sections"},{"title":"Get statute full text","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/body","href":"/api-reference/us-statutes/get-statute-full-text"},{"title":"Count the sections in a scope","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/statutes/count","href":"/api-reference/us-statutes/count-the-sections-in-a-scope"},{"title":"Coverage matrix by jurisdiction and corpusType","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/coverage","href":"/api-reference/us-statutes/coverage-matrix-by-jurisdiction-and-corpustype"},{"title":"Browse the statutory hierarchy","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/divisions","href":"/api-reference/us-statutes/browse-the-statutory-hierarchy"},{"title":"Get this section's change history","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/changes","href":"/api-reference/us-statutes/get-this-sections-change-history"},{"title":"Which acts a state publisher lists against this section","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/enactments","href":"/api-reference/us-statutes/which-acts-a-state-publisher-lists-against-this-section"},{"title":"Get the Federal Register documents behind a CFR section","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/rulemaking","href":"/api-reference/us-statutes/get-the-federal-register-documents-behind-a-cfr-section"},{"title":"Get every Federal Register document for a CFR part","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/part/{title}/{part}/rulemaking","href":"/api-reference/us-statutes/get-every-federal-register-document-for-a-cfr-part"},{"title":"Find the citations in a text and resolve each","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/statutes/extract-citations","href":"/api-reference/us-statutes/find-the-citations-in-a-text-and-resolve-each"},{"title":"Find the sections that cite this one","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/cited-by","href":"/api-reference/us-statutes/find-the-sections-that-cite-this-one"},{"title":"Get the defined terms that govern this section","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/definitions","href":"/api-reference/us-statutes/get-the-defined-terms-that-govern-this-section"},{"title":"Compare this provision against other states","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/statutes/section/{act_id}/cross-state","href":"/api-reference/us-statutes/compare-this-provision-against-other-states"}]},{"group":"Pricing","pages":[{"title":"Get API credit pricing","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/api-credits/pricing","href":"/api-reference/pricing/get-api-credit-pricing"}]},{"group":"Board Watches","pages":[{"title":"List watchable boards","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/boards","href":"/api-reference/board-watches/list-watchable-boards"},{"title":"List your board watches","description":"List every board watch you own, across every channel and board. Use this to check a watch's `id` for the update/delete/test/deliveries routes below, or to see `lastNotifiedAt`/`lastStatus` for a quick health check without opening the deliveries endpoint.\n\nFree.","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/watches","href":"/api-reference/board-watches/list-your-board-watches"},{"title":"Create a board watch","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/watches","href":"/api-reference/board-watches/create-a-board-watch"},{"title":"Send a test delivery","description":"Fire a one-off test delivery for a watch you own, so you can verify your webhook endpoint or email address before relying on it for real notifications. Sent with `X-Vaquill-Event: board.test` so your handler can tell it apart from a real `board.updated` event. Not persisted to delivery history and does not affect the watch's real last-notified state. Limited to one test send per watch every 30 seconds.\n\nFree.","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/watches/{watch_id}/test","href":"/api-reference/board-watches/send-a-test-delivery"},{"title":"Delete a board watch","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json delete /api/v1/watches/{watch_id}","href":"/api-reference/board-watches/delete-a-board-watch"},{"title":"Update a board watch","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json patch /api/v1/watches/{watch_id}","href":"/api-reference/board-watches/update-a-board-watch"},{"title":"List what changed on a watch's source","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/watches/{watch_id}/changes","href":"/api-reference/board-watches/list-what-changed-on-a-watchs-source"},{"title":"Old-vs-new text for one change","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/watches/{watch_id}/changes/{change_id}/diff","href":"/api-reference/board-watches/old-vs-new-text-for-one-change"},{"title":"List delivery history for a watch","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/watches/{watch_id}/deliveries","href":"/api-reference/board-watches/list-delivery-history-for-a-watch"},{"title":"Law change alert","version":null,"deprecated":null,"openapi":"https://api.vaquill.ai/external/openapi.json webhook board.updated","href":"/api-reference/board-watches/law-change-alert"},{"title":"Webhook test delivery","version":null,"deprecated":null,"openapi":"https://api.vaquill.ai/external/openapi.json webhook board.test","href":"/api-reference/board-watches/webhook-test-delivery"}]},{"group":"Credits","pages":[{"title":"Get your credit balance","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/credits/balance","href":"/api-reference/credits/get-your-credit-balance"}]},{"group":"Agent Onboarding","pages":[{"title":"Start an agent signup and get a trial key","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/agent/signup","href":"/api-reference/agent-onboarding/start-an-agent-signup-and-get-a-trial-key"},{"title":"Check whether the email is verified","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/agent/token","href":"/api-reference/agent-onboarding/check-whether-the-email-is-verified"},{"title":"Verify the emailed code and keep the key","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/agent/verify","href":"/api-reference/agent-onboarding/verify-the-emailed-code-and-keep-the-key"},{"title":"Buy credits with USDC (x402)","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/agent/x402/credits","href":"/api-reference/agent-onboarding/buy-credits-with-usdc-x402"}]},{"group":"US Session Laws","pages":[{"title":"Feed of changes to the session-law registry","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/session-laws/changes","href":"/api-reference/us-session-laws/feed-of-changes-to-the-session-law-registry"},{"title":"Get many state session laws at once, by id or citation","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/session-laws/batch","href":"/api-reference/us-session-laws/get-many-state-session-laws-at-once-by-id-or-citation"},{"title":"Search the text of state session laws","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json post /api/v1/us/session-laws/search","href":"/api-reference/us-session-laws/search-the-text-of-state-session-laws"},{"title":"List every served version of a state session law","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/session-laws/{session_law_id}/versions","href":"/api-reference/us-session-laws/list-every-served-version-of-a-state-session-law"},{"title":"List a state's session laws","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/session-laws/list","href":"/api-reference/us-session-laws/list-a-states-session-laws"},{"title":"Get a state session law's text, current or a past version","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/session-laws/{session_law_id}/body","href":"/api-reference/us-session-laws/get-a-state-session-laws-text-current-or-a-past-version"},{"title":"Get a state session law, by id or by citation","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/session-laws/{session_law_id}","href":"/api-reference/us-session-laws/get-a-state-session-law-by-id-or-by-citation"}]},{"group":"US Rulemaking","pages":[{"title":"What the rulemaking store holds (free)","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/coverage","href":"/api-reference/us-rulemaking/what-the-rulemaking-store-holds-free"},{"title":"List and filter Regulations.gov dockets","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/dockets/list","href":"/api-reference/us-rulemaking/list-and-filter-regulationsgov-dockets"},{"title":"One Regulations.gov docket","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/dockets/{docket_id}","href":"/api-reference/us-rulemaking/one-regulationsgov-docket"},{"title":"Documents of one docket, oldest first","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/dockets/{docket_id}/documents","href":"/api-reference/us-rulemaking/documents-of-one-docket-oldest-first"},{"title":"Everything we hold for one RIN","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/rins/{rin}","href":"/api-reference/us-rulemaking/everything-we-hold-for-one-rin"},{"title":"Unified Agenda history of one RIN","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/rins/{rin}/agenda","href":"/api-reference/us-rulemaking/unified-agenda-history-of-one-rin"},{"title":"List and filter Rules Committee records","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/committee-records/list","href":"/api-reference/us-rulemaking/list-and-filter-rules-committee-records"},{"title":"One Rules Committee record with its page text","deprecated":null,"version":null,"openapi":"https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/committee-records/{record_id}","href":"/api-reference/us-rulemaking/one-rules-committee-record-with-its-page-text"}]}]},{"tab":"India API reference","pages":[{"title":"India API reference","href":"/api-guide/coverage/india"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]}]},"basePath":"","title":"Create a board watch - Vaquill AI","buildId":"dpl_Eok1jboeiLTUE4ccnKdogAktkDhH","deploymentId":"dpl_Eok1jboeiLTUE4ccnKdogAktkDhH","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BO6jLjHP.js","utils-DzK3kjtW.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B_o_sRtB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-w5sf6cTL.js","snippetPresets-C-LqQvlw.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-B86q0r56.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CK4fhXtK.js","shallow-2nSrO3Y1.js","getApiPlaygroundDisplay-iMY8AQYp.js","CodeSnippet-CYrmmkRs.js","CodeSnippets-CpTHX08n.js","Page-B6e_603r.js","getPastedJson-ErXUu_z-.js","icon-DjAwzjTp.js","MethodPill-DWCnd71y.js","DuplicateIcon-CzD5BRfY.js","createIcon-D_pVdVTU.js","DynamicMarkdown-BeNxZ5px.js","SectionHeading-CovuDw0Y.js","axios-vUo_bRtp.js","Markdown-BZjeoXbi.js","clsx-BaM3PNnJ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BfGZDUfd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-wFXGQKnc.js"]}