Error codes

A reference for the stable error codes Harriet returns, mostly from the LLM proxy. Desktop apps can show these messages verbatim, so this is what your people will paste into a support thread.

The error envelope

LLM proxy billing and access errors use one JSON shape:

{"error":{"type":"…","code":"…","message":"…","harriet_action":"…"}}

code is stable and safe to match on; message is the human-readable text; harriet_action hints where the app should send the user (for example open_provisioner_console, open_billing_or_add_byok, add_payment_method, open_billing).

Code reference

CodeWhere you see itWhat it meansWhat to do
device_llm_access_denied Desktop app, HTTP 402 from the LLM proxy The device called Harriet's LLM gateway but is not allowed to use it — typically it is configured for Claude Desktop with Claude account only. Message: "This device is not allowed to use Harriet LLM access. Update the device to "Claude Desktop (no Claude account)" in the Harriet console." On the device detail page, enable the right surface under Allowed desktop providers. See Model availability.
insufficient_credits Desktop app, HTTP 402 from the LLM proxy The organization's prepaid managed-credit balance is exhausted, and auto top-up (if enabled) could not refill it. Message: "Your Harriet managed LLM credits have run out. Ask an account admin to top up credits in Harriet → Endpoint AI → Billing, or add your own API key (BYOK) in Provisioner settings." BYOK traffic is unaffected. An admin tops up in Billing → Credits, or adds a BYOK key for the provider.
payment_method_required Desktop app, HTTP 402 from the LLM proxy Balance is empty and automatic top-up is enabled, but no saved card exists. Message: "Automatic top-up is enabled but no saved payment method is on file. An account owner should add a card under Harriet billing, or disable auto top-up and purchase credits manually." An account owner adds a payment method, or the org buys a credit pack manually. See Credits.
monthly_auto_topup_cap_reached Desktop app, HTTP 402 from the LLM proxy Balance is empty and this month's automatic top-ups have already hit the configured cap. Message: "This month's automatic top-up limit has been reached. Ask an admin to raise the monthly cap in Endpoint AI → Billing or purchase credits manually." An admin raises the monthly cap in Billing or purchases credits manually.
mcp_audit_upgrade_required Provisioner console, HTTP 403 on the Audit log (and when enabling tool debug retention) The plan does not include tool-level MCP audit. The console shows "Tool-level MCP audit requires Endpoint AI Team or higher." Upgrade the plan to view audit rows. See Plans and Audit log.

Agent HTTP statuses without a code

The background agent's own requests can fail with bare HTTP statuses, visible in the agent log on the machine:

StatusWhat it usually meansWhat to do
401 Unauthorized The API key stored on the device no longer matches the server — the key was rotated, or the device was deleted and recreated. Also returned by the LLM proxy for an invalid or revoked token, a blocked device, or a provider with no BYOK and no managed key. Remove the local config and re-enroll with a fresh enrollment token. See Device not syncing.
403 Forbidden The device id in the URL does not match the device that authenticated (for example, config copied from another machine), or the organization's provisioner feature was disabled. Re-enroll the machine with its own token; if the whole org is affected, check the plan and feature status.
⚠️

Other auth failures on the LLM proxy stay plain 401 without the envelope. Only billing and device-access blocks use 402 with a coded body.