message is human-readable and may change over time. Most errors carry exactly these three fields — there is no top-level machine error code, statusCode, timestamp, or path field on a standard error. Branch on the HTTP status code, and on the more specific fields documented below where they apply.
Validation errors
Requests that fail schema validation return400 with a Validation failed message and an errors array of per-field problems:
File upload errors
Upload endpoints add a machine-readableerror field on failures so you can branch programmatically:
Requests whose body itself is too large (not via the upload fields) return
413 with "File size too large. Maximum allowed size is 50MB.". Malformed JSON returns 400 with "Invalid request format.".
Status codes
Common conditions
The backend throws typed errors that map to these statuses. Themessage text varies; the status code is the stable signal.
Some endpoints attach extra context fields under
data alongside the base shape (for example, login’s email-not-verified response includes data.requiresVerification and data.userId). Read the specific endpoint’s reference page for those.