Skip to main content
The web app, the wat CLI, and the skills plugin all hit the same API, so they all surface the same errors. With --json, a CLI failure is always the envelope { "success": false, "error": { "code": "...", "message": "..." } } plus the HTTP status.
Naming convention: lower_snake codes come from the server (the API rejected the request). UPPER_CASE codes are synthesized by the CLI itself, before or instead of an API call.

Booking validation and conflicts (server)

Authentication and permissions

When the server returns an error without a code of its own, the CLI derives one from the HTTP status: unauthenticated (401), permission-denied (403), not-found (404), conflict (409), validation (422), internal (5xx), and network-error when no response arrived at all.

CLI-side codes

These never reach the server: the CLI fails fast locally and exits non-zero.