Docs menu
Get started
Quickstart Install: Claude Code Install: Codex Install: other clients API keysConcepts
How a run works The app profile The severity model What a run does not sayTools
check_access claim_trial_key set_profile run_lint get_law resolve_domain_jurisdiction submit_feedback upload_lint_runGuides
A whole run, end to end Console TestPack in CIReference
Endpoint and transport lexlint.yml schema Errors ChangelogHelp
Support and feedbackReference
Errors
The errors the server returns, and what to do about each.
| Code | When | What to do |
|---|---|---|
-32700 | The body is not valid JSON. | Send a single JSON object as the whole body of the request. |
-32600 | The body is JSON, but its jsonrpc member is not "2.0". | Send "jsonrpc": "2.0", a method and an id. A request with no id is a notification, and gets no answer. |
-32601 | The method is not one this server answers. | Use initialize, ping, tools/list or tools/call. |
-32602 | A tools/call names an unknown tool, names no tool at all, or carries arguments that do not match the tool's parameters. | Take tool names from tools/list and read the tool's page. error.message names the tool or the argument at fault. |
-32001 | No credential, a token that does not validate, or a token without the permission the tool needs. | Send X-API-Key (empty connects keyless), or sign in again. error.data.setup carries the steps. |
-32002 | The UnGovr Open Data API, which LexLint reads from, refused the call. error.data.reason says which kind: daily_free_tier_exhausted (the free allowance is spent), payment_required (the allowance is spent and no reset is coming) or upstream_error (any other refusal, with its HTTP status in error.data.upstream_status). | A spent allowance: wait error.data.retry_after_seconds for the reset, or use another key. A rejected key (upstream_status is 401): follow error.data.setup. |
-32003 | LexLint and its law library disagree about a record. | Nothing on your side: report it with submit_feedback. |
-32004 | The trial claim was refused, whether it came in as a claim token or through claim_trial_key. error.data.reason says why:
| Read error.data.reason. When the reply carries error.data.trial_page, open that page in a browser and paste the key it gives you. error.data.setup carries the steps either way. When error.data.retry_after_seconds is present, wait that long. On key_propagating, retry in ten seconds with the key in error.data.lexlint_trial.api_key. |
-32029 | Too many calls from one address that never reached your key's own allowance. Counted: connection-setup calls, pings, claim token redemptions, and tool calls that carry no key, no tool name, an unknown tool, or arguments that do not validate. | Wait error.data.retryAfter seconds, and connect once rather than in a loop. Send a key, and check a call's tool name and arguments against its tool's page before sending it. |
| HTTP 429 | The edge rate limit on the browser lane. | One call every two seconds. |
A tool that refuses an argument can also answer with a result whose isError is true. Its text says which argument and why.