Docs Blog Sign in

Errors

The Helpdesk API uses standard HTTP status codes and returns structured error objects.

Error response format

{
  "error": {
    "code": "NOT_FOUND",
    "message": "Ticket not found",
    "status": 404
  }
}

Some errors include a details field with additional context:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed",
    "status": 422,
    "details": {
      "subject": [{ "code": "REQUIRED", "message": "Subject is required" }]
    }
  }
}

Authentication and authorization errors

CodeStatusDescription
INVALID_API_KEY401API key is missing, invalid, or revoked
MISSING_WORKSPACE400X-Workspace-Id header is required
INSUFFICIENT_API_PERMISSION403API key lacks the required permission level or workspace access

General errors

CodeStatusDescription
BAD_REQUEST400Malformed request body or missing required wrapper object
NOT_FOUND404The requested resource does not exist
VALIDATION_ERROR422A required field is missing or invalid
CONFLICT409Resource conflict (e.g. duplicate value)
RATE_LIMIT_EXCEEDED429Too many requests — retry after the Retry-After header value

Ticket errors

CodeStatusDescription
TICKET_CLOSED403Cannot add messages to closed tickets
CLOSED_STATUS_SYSTEM_ONLY403Closed status can only be set by system automations

Ticket field errors

CodeStatusDescription
IMMUTABLE_FIELD422Cannot change type or fieldKey after creation
SYSTEM_FIELD422System fields cannot be modified or deleted
INVALID_FIELD_TYPE422Options are only available for dropdown/multiselect fields
DUPLICATE_OPTION_VALUE409An option with this value already exists on the field
TOO_MANY_OPTIONS422Maximum of 2000 options per field
OPTION_IN_USE422Cannot delete an option that is in use on tickets

Rate limiting

The API enforces a limit of 400 requests per minute per API key. Every response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait (only on 429 responses)