Board Watches

Law change alert

Sent to a watch's webhookUrl when its board refreshes with real changes, naming the sections that changed. Headers: Content-Type: application/json, X-Vaquill-Event: board.updated.

Verification. Present only when the watch has a webhookSecret. Prefer the Standard Webhooks headers: webhook-id, webhook-timestamp (Unix seconds) and webhook-signature (v1,<base64>, several space separated while a secret rotates), an HMAC-SHA256 over {webhook-id}.{webhook-timestamp}.{raw body}. The HMAC key is the base64 decoding of the secret after whsec_ when it has that prefix, otherwise the secret's UTF-8 bytes. Verify against the raw bytes before parsing, and reject a timestamp more than 5 minutes old. webhook-id is stable across retries of one delivery. The legacy X-Vaquill-Signature: sha256=<hex> header (HMAC-SHA256 of the raw body) is also sent, is deprecated, and remains for at least 12 months. Respond with any 2xx to acknowledge; redirects are not followed.

postWebhookboard.updated

Payload

event'board.updated' required
firedAtstring required

ISO 8601 time the delivery was built.

corpusTypestring required
statestring nullable

Null for a federal board.

boardLabelstring required
scopeobject nullable

The watch's scope, echoed so section counts can be read against it.

rowsAddedinteger required

Stored rows (chunks), not sections.

rowsUpdatedinteger required

Stored rows (chunks), not sections.

rowsDeletedinteger required

Stored rows (chunks), not sections.

refreshLogIdinteger nullable
changesOverflowCountinteger required

Changed sections beyond the ones in changes; page GET /watches/{watchId}/changes for them.

sectionsAddedinteger nullable

Sections added. Absent when not counted.

sectionsAmendedinteger nullable
sectionsRemovedinteger nullable

Response

Acknowledge with any 2xx status.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.