Skip to main content
The vaquill command line tool wraps the Python SDK for quick lookups and scripts. It uses the same VAQUILL_API_KEY variable as the SDKs.

Install

The CLI ships inside the vaquill package and adds no dependencies.

Commands

Output is a compact table by default. Add --json for the response as JSON on stdout, with the API’s camelCase keys, so you can pipe it to jq. Messages and credits used: N go to stderr, and a failure sets a non-zero exit code (see the table below). search, resolve, section, the statutes and session-laws groups and watches diff spend credits. credits, pricing, coverage, boards and the other watches commands are free. Set --max-credits N to refuse a charged call once N credits have been used in this run. See the SDKs overview for retry and credit behavior, which is the same as the Python client.

Global options

The key comes from --api-key or the VAQUILL_API_KEY variable. It is never stored on disk and never printed: error text and --debug logs have any vq_key_ value replaced with vq_key_[redacted]. Global options work before or after the command name, and the last one given wins. Run vaquill COMMAND --help for the flags of any command.

All commands

Prices are not repeated here: run vaquill pricing for the live table.

Command groups

Two groups cover the rest of the API. Every command in them is charged. search, resolve, section and coverage also exist inside statutes. Each command accepts the same global options. The batch commands (statutes resolve-batch, statutes sections, session-laws batch) take their inputs as arguments or with --file PATH (one per line, - for stdin). Run vaquill statutes --help or vaquill session-laws --help for the full flag list of each.

Pages and cost

By default the CLI does not paginate or loop. search, watches list and watches changes make exactly one request. When the server reports more results, a notice on stderr names the flag that continues (--offset N, --before-id N, --since-id N). Each continued search call is charged again. Add --all to search to fetch every page, or --max-pages N or --max-items N (each implies --all) to stop early. Every page is charged, so set a limit or --max-credits before you use --all.

The api command

vaquill api GET /api/v1/watches --query limit=5 sends one request and prints the JSON body. --query can repeat, and a repeated key becomes a repeated query parameter. --data takes a JSON string, or - to read it from stdin. --limit N sets the limit query parameter. The CLI cannot know which paths are charged, so pass --charged for one that is. That adds an idempotency key, applies --max-credits and counts the credits in credits used. When the body says hasMore, a notice names the next page value if the body has one (nextCursor or nextOffset).

Webhook verification

It makes no network call and needs no API key. The body must be the exact bytes received: a trailing newline added by echo makes the signature fail, so use --file, a redirect (< body.json) or printf %s. --secret falls back to the VAQUILL_WEBHOOK_SECRET variable. Timestamps more than --tolerance seconds (default 300) from the current time are rejected. Only Standard Webhooks headers are accepted; the legacy header has no replay protection. The signature is checked before the body is parsed, so a body that is not a Vaquill event still passes with "event": null.

Exit codes

A failure prints one line to stderr, error: MESSAGE (status N, code C, request id R), and no traceback unless --debug is set.
Last modified on October 29, 2026