Skip to content

Errors

Every error code with its HTTP status, which ones you can actually hit on v1, and the dashboard-only codes that never appear there.

Requires API access to be enabled for your workspace

Errors use the standard envelope — see Response envelope. Branch on error.code, never on the message text.

Codes and statuses

What you can hit on v1 today

v1 is three read-only GET endpoints, so in practice you will see:

  • UNAUTHORIZED — key problems.
  • FORBIDDEN — the three-layer access gate. See
  • RATE_LIMITED — one of the two 120-per-minute limits.
  • INTERNAL_ERROR — rare, and worth reporting.

The upload, chatbot, and domain codes belong to other surfaces — the dashboard, the widget's public endpoints, and knowledge ingestion — and are listed here because one client library usually handles all of them.

Dashboard-session codes

These four exist in the same catalogue and never appear on `/api/v1`:

They describe the state of a signed-in user session, and API keys have no user session. In particular, when a workspace owner is suspended or deleted, v1 does not return ACCOUNT_SUSPENDED — it returns the ordinary access-gate 403 with "API access is not enabled for this workspace.", identical to an entitlement gap, so a key holder cannot detect a moderation action.

Handling them

request.mjs

Retry RATE_LIMITED with backoff and INTERNAL_ERROR sparingly. Do not retry UNAUTHORIZED or FORBIDDEN — nothing about them changes on a second attempt.

Where to go next

Last updated