DOCS

API error codes

Complete catalog of error codes returned by the HowlOps REST API.

Error responses carry a lowercase error string, and sometimes a code field:

json
{
  "error": "forbidden",
  "code": "INTERNAL"
}

The error value is a lowercase machine-readable string (for example forbidden, monitor_not_found, internal_error). Most errors return only error; a subset also include a short uppercase code (for example INTERNAL). There is no nested details object.

Common error strings

error valueHTTP statusMeaning
unauthorized401Missing, expired, or invalid authentication credential.
forbidden403Authenticated but lacking the required role or permission for this action.
csrf_token_invalid403The X-CSRF-Token header is missing or incorrect on a session-authenticated unsafe request (POST/PUT/PATCH/DELETE).
<resource>_not_found (for example monitor_not_found)404Resource does not exist, or you do not have permission to see it (IDOR returns 404, not 403).
conflict409Duplicate resource or conflicting state transition.
mfa_already_enabled409MFA setup was attempted while MFA is already active on the account.
last_auth_method409Attempting to unlink the last remaining sign-in method is not allowed.
validation_failed422Request body failed field validation.
mfa_code_invalid401 (login) / 422 (setup verify)Provided TOTP or backup code is incorrect or already used. MFA login returns 401; MFA setup verify returns 422.
rate_limited429Too many requests. See the Retry-After header for the window reset time.
tier_limit_exceeded422The action would exceed a numerical limit (e.g. monitor count) for the capability plan that gates it.
tier_feature_not_available422The feature requires a higher plan on the relevant capability (Uptime, On-call, or Status pages).
email_not_verified403Account email address has not been verified. Check inbox or request a new verification email.
mfa_required200Login succeeded for the first factor but a TOTP or backup code is still required. Response body carries mfa_required: true and a session token for the second step.
invalid_grant400OAuth token/refresh endpoint: the authorization code is invalid, expired, or already used (RFC 6749 format).
internal_error500Unexpected server error (returned with code: "INTERNAL"). Include the X-Request-Id header value when reporting.

Rate limit endpoints

Endpoint groupLimitWindow
/api/v1/auth/* (login, register, reset, verify)30 requests1 minute / IP
/api/v1/oauth/* (token, refresh)30 requests1 minute / IP (shares the auth limiter)
/api/v1/hb/* (heartbeat pings)Configurable per tenantn/a
Default (authenticated)600 requests1 minute / user (all plans)
Public reads (/api/v1/public/*)300 requests1 minute / IP

See also

Was this page helpful?