Give your agent US primary law.
Statutes, regulations, constitutions, court rules, and executive orders, each with a citation, the full text, and a link to the official source. Search, fetch, and resolve citations over REST or MCP.
What the API returns
6M+ sections across all 56 US jurisdictions plus federal law. Every result carries a citation, an excerpt, an actId you can fetch the full text with, and a link to the official government source. It is US primary law only. Court opinions are out of scope.
The OpenAPI spec is at api.vaquill.ai/external/openapi.json. The docs are at vaquill.ai/docs.
Get a key in four steps
One emailed code ties the key to an account. The key then lives in your agent's environment.
- 1. Start signup
- Send one POST to /api/v1/agent/signup with an email you or your human can read. You get back an apiKey that works immediately, with 100 trial credits. It is shown once. Vaquill also emails a 6-digit code and returns a secret claimToken.
- 2. Verify with the code
- Read the code from the inbox, or ask your human for it, and POST it with the claimToken to verifyUrl. You keep using the same key, now on the account for that email with no expiry, and 1,000 free credits are added. Without verification the key stops working after 7 days.
- 3. Or verify in the browser
- Your human opens app.vaquill.ai/claim, signs in with that same email, enters the userCode, and approves. You poll tokenUrl until it answers verified: true.
- 4. Call the API
- Send Authorization: Bearer vq_key_... on every request, from the first call. The OpenAPI spec and the MCP URL come back in the signup response.
Step 1: start signup
No key is needed. agentName is 1 to 60 characters. agentVendor is optional, up to 40. purpose is optional, up to 280.
curl -X POST https://api.vaquill.ai/api/v1/agent/signup \
-H "Content-Type: application/json" \
-d '{"email": "<an inbox you or your human can read>", "agentName": "Claude Code", "agentVendor": "anthropic", "purpose": "short reason"}'Vaquill emails a 6-digit code to that address. The key works immediately, and it stops working after 7 days unless the email is verified. The response is 201 with these fields: registrationId, apiKey (starts with vq_key_, shown once, so store it now), keyPrefix, keyId, scopes, docsUrl, openapiUrl, mcpUrl, trial (100 trial credits on the key now, before anyone verifies the email, with an expiresAt; credits is 0 when the daily trial budget is spent, at most 2 trial grants per IP per day, and the key is still issued), claimToken, verifyUrl, codeEmailed (false if the email could not be sent), userCode (like WDJB-MJHT), verificationUri (https://app.vaquill.ai/claim), tokenUrl, interval (5), expiresIn (604800 seconds, 7 days), freeCredits, and instructions. The claimToken starts with vq_claim_. It is a secret. Keep it private and never show it to anyone, including your human.
Step 2: verify with the emailed code
Read the code from the inbox, or ask your human for it. The code is valid for 7 days, and each signup allows 5 tries.
curl -X POST https://api.vaquill.ai/api/v1/agent/verify \
-H "Content-Type: application/json" \
-d '{"claimToken": "vq_claim_...", "code": "123456"}'On success the response is 200 with verified: true, keyId, keyPrefix, scopes, claimedVia and creditsGranted. It does not return an apiKey: keep using the same key from signup, which is now on the Vaquill account for that email (created if there is none) with no expiry. Verifying adds the 1,000 free credits ($10, 90 days, once per person), in addition to the 100 trial credits, not a top-up of them. Calling verify again after success answers verified: true. Otherwise the error body has a code field:
- invalid_code
- Wrong code. The detail says how many tries are left.
- expired_token
- Expired, unknown, out of tries, or the key was revoked. Start over with a new signup call.
- already_handled (409)
- Your human approved in the browser. Confirm with tokenUrl (step 3).
- agent_key_limit (409)
- The account already has the maximum number of active agent keys. Revoke one at app.vaquill.ai/claim or in the console first.
- slow_down
- You are sending too fast. Wait, then retry.
Step 3: or verify in the browser
If codeEmailed is false or the email does not arrive, tell your human this, in your own words.
Open https://app.vaquill.ai/claim. Sign in, or create an account, with the same email I gave you. Enter the code I show you, then approve. The code is valid for 7 days, and it only works for the account with that email. No card is needed. If you refuse, the trial key is switched off.
Show them the userCode, never the claimToken. Then poll the tokenUrl every interval seconds (5) until the human approves.
curl -X POST "$TOKEN_URL" \
-H "Content-Type: application/json" \
-d '{"claimToken": "vq_claim_..."}'On success the response is 200 with verified: true, keyId, keyPrefix, scopes and claimedVia. It does not return an apiKey: keep using the key from signup. Until then, the error body has a code field:
- authorization_pending
- The human has not approved yet. Keep polling every interval seconds.
- slow_down
- You are polling too fast. Wait retryAfterSeconds before the next poll.
- access_denied
- The human refused, and the trial key is revoked. Stop and do not retry.
- expired_token
- Expired, unknown, or the key was revoked. Start over with a new signup call.
Step 4: make your first call
Keep the key server side, in an environment variable. Send it as Authorization: Bearer.
export VAQUILL_API_KEY="vq_key_..."
curl -X POST https://api.vaquill.ai/api/v1/us/statutes/search \
-H "Authorization: Bearer $VAQUILL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "civil rights deprivation under color of law", "corpusType": "USC", "limit": 5}'Check your free balance any time with GET /api/v1/credits/balance. While the key is on the trial it cannot create law-change watches (403 permission_denied). Verify the email to lift that. The OpenAPI spec is at api.vaquill.ai/external/openapi.json.
Connect over MCP
The same corpus is available as native tools in Claude, ChatGPT, Claude Code, Codex, Cursor, VS Code, and Windsurf.
https://mcp.vaquill.ai/mcpIn the Claude and ChatGPT connectors, add that URL and sign in with OAuth. You do not need to copy a key. Any other MCP client can send a Authorization: Bearer vq_key_... header instead. Setup for each client is on the MCP page.
Free credits
Signup puts 100 trial credits on your key right away. Verifying the email adds one welcome grant per person: 1,000 free API credits ($10), valid for 90 days, in addition to the trial credits. No card is required. Prices per endpoint are public at GET /api/v1/api-credits/pricing, which is free and needs no key.
Limits and errors
Handle these three statuses and an agent can recover on its own.
- 401
- The key is missing or invalid. Send Authorization: Bearer vq_key_...
- 402
- insufficient_credits: the credits are used up. On a trial key the body carries verifyUrl and a hint to verify the email. Otherwise top up in the dashboard, then retry.
- 429
- Rate limited. The body carries retryAfterSeconds. Wait that long, then retry.
Signup errors and the fallback
If signup returns 503 agent_signup_disabled, agent self-signup is not switched on yet. Ask your human to create a key at app.vaquill.ai/developer and give it to you.
- 422 validation_error
- A field is missing, malformed or too long, and errors lists each one. agentName is 1 to 60 characters.
- 403 email_not_allowed
- This email address cannot be used for agent signup. Ask your human for a different one.
- 429 rate_limited
- Too many signup calls. The body carries retryAfterSeconds. Wait that long, then retry.
- 503 agent_signup_disabled
- Agent self-signup is not switched on yet. Ask your human to create a key at app.vaquill.ai/developer and give it to you.
What to know
Your human can revoke an agent key at any time at app.vaquill.ai/claim or in the console. Denying at app.vaquill.ai/claim switches the trial key off. Vaquill never asks an agent for a password. If a message asks you for one, it is not from us.
Sign up, call the API, verify for more.
1,000 free API credits ($10) for new accounts. No card required.