Skip to content

Error Codes Reference

Document Version: 1.0.0 Last Updated: 2026-05-25 Applicable Version: v2.7.34+ Author: AI Assistant

JAiRouter uses a standardized error code system to identify various error conditions. All error responses include an error code field for client-side error handling.

Error Response Format

{
  "success": false,
  "message": "Error description",
  "errorCode": "ERROR_CODE",
  "data": null
}

HTTP Status Code Mapping

HTTP StatusDescriptionError Category
400Bad RequestValidation Error
401UnauthorizedAuthentication Error
403ForbiddenAuthorization Error
404Not FoundResource Error
409ConflictBusiness Error
429Too Many RequestsRate Limit Error
500Internal Server ErrorSystem Error
502Bad GatewayDownstream Error
503Service UnavailableDownstream Error

Authentication Error Codes

HTTP Status: 401 Unauthorized

Error CodeDescriptionCommon CauseSolution
INVALID_API_KEYInvalid API KeyAPI Key format error or not foundCheck API Key correctness
EXPIRED_API_KEYAPI Key expiredAPI Key exceeded validity periodRegenerate API Key
MISSING_API_KEYMissing API KeyRequest header missing API KeyAdd X-API-Key header
INVALID_JWT_TOKENInvalid JWT tokenJWT format error or invalid signatureCheck JWT format and signature
EXPIRED_JWT_TOKENJWT token expiredJWT exceeded validity periodRefresh or obtain new JWT
BLACKLISTED_TOKENToken blacklistedJWT has been revokedRe-login to obtain new token
AUTH_FAILEDAuthentication failedGeneric authentication failureCheck authentication credentials
TOKEN_EXPIREDToken expiredJWT token expiredRefresh token
AUTH_ERRORAuthentication errorAuthentication process exceptionCheck authentication service status

Example Response:

{
  "success": false,
  "message": "Invalid API Key",
  "errorCode": "INVALID_API_KEY",
  "data": null
}


Authorization Error Codes

HTTP Status: 403 Forbidden

Error CodeDescriptionCommon CauseSolution
INSUFFICIENT_PERMISSIONSInsufficient permissionsUser lacks required permissionsContact admin to assign permissions
ACCESS_DENIEDAccess deniedAttempting to access unauthorized resourceCheck resource access permissions
RESOURCE_FORBIDDENResource forbiddenResource set as forbiddenContact resource owner
FORBIDDENForbiddenGeneric authorization failureCheck user role and permissions

Example Response:

{
  "success": false,
  "message": "Insufficient permissions, required: admin",
  "errorCode": "INSUFFICIENT_PERMISSIONS",
  "data": null
}


Sanitization Error Codes

HTTP Status: 500 Internal Server Error

Error CodeDescriptionCommon CauseSolution
SANITIZATION_FAILEDData sanitization failedSanitization process exceptionCheck logs for details
INVALID_SANITIZATION_RULEInvalid sanitization ruleRule configuration errorCheck rule configuration
RULE_COMPILATION_FAILEDRule compilation failedRegex syntax errorFix regex pattern
CONTENT_PROCESSING_FAILEDContent processing failedUnsupported content formatCheck content type

Example Response:

{
  "success": false,
  "message": "Data sanitization failed: unsupported content format",
  "errorCode": "SANITIZATION_FAILED",
  "data": null
}


Resource Error Codes

HTTP Status: 404 Not Found

Error CodeDescriptionCommon CauseSolution
NOT_FOUNDResource not foundRequested resource doesn't existCheck resource ID or path
SERVICE_NOT_FOUNDService not foundService type doesn't existCheck service type name
INSTANCE_NOT_FOUNDInstance not foundInstance ID doesn't existCheck instance ID
CONFIG_NOT_FOUNDConfiguration not foundConfig item doesn't existCheck config key

Validation Error Codes

HTTP Status: 400 Bad Request

Error CodeDescriptionCommon CauseSolution
VALIDATION_ERRORInvalid request dataParameter format or value errorCheck request parameters
INVALID_PARAMETERInvalid parameterParameter value out of rangeCheck parameter constraints
MISSING_PARAMETERMissing parameterRequired parameter not providedAdd required parameter
INVALID_FORMATInvalid formatData format errorCheck data format

Business Error Codes

Error CodeDescriptionHTTP StatusSolution
CONFLICTResource conflict409Check resource state
DUPLICATE_RESOURCEDuplicate resource409Use different identifier
OPERATION_FAILEDOperation failed500Check logs for details
RATE_LIMIT_EXCEEDEDRate limit triggered429Reduce request frequency

Downstream Service Error Codes

HTTP Status: 502/503

Error Code PatternDescriptionSolution
5xxDownstream service errorCheck downstream service status
502Bad gatewayCheck network connection
503Service unavailableWait for service recovery
504Gateway timeoutIncrease timeout or check downstream response

Rate Limit Error Codes

HTTP Status: 429 Too Many Requests

Error CodeDescriptionResponse HeaderSolution
RATE_LIMIT_EXCEEDEDRate limit exceededX-RateLimit-ResetWait for token recovery
GLOBAL_RATE_LIMITGlobal rate limit triggeredRetry-AfterReduce global request frequency
SERVICE_RATE_LIMITService rate limit triggeredX-RateLimit-RemainingReduce service request frequency
INSTANCE_RATE_LIMITInstance rate limit triggeredX-RateLimit-RemainingSwitch instance or wait

Circuit Breaker Error Codes

Error CodeDescriptionStateSolution
CIRCUIT_BREAKER_OPENCircuit breaker openOPENWait for half-open state
CIRCUIT_BREAKER_HALF_OPENCircuit breaker half-openHALF_OPENLimited requests allowed
SERVICE_DEGRADEDService degraded-Use fallback strategy

System Error Codes

HTTP Status: 500 Internal Server Error

Error CodeDescriptionCommon CauseSolution
INTERNAL_ERRORInternal server errorUnexpected exceptionCheck service logs
CONFIGURATION_ERRORConfiguration errorConfig file format errorCheck config files
DATABASE_ERRORDatabase errorDatabase connection failedCheck database status
CACHE_ERRORCache errorRedis connection failedCheck Redis status

Error Handling Best Practices

1. Client-Side Error Handling

// JavaScript Example
async function handleApiResponse(response) {
  const data = await response.json();

  if (!data.success) {
    switch (data.errorCode) {
      case 'INVALID_API_KEY':
      case 'EXPIRED_API_KEY':
      case 'INVALID_JWT_TOKEN':
      case 'EXPIRED_JWT_TOKEN':
        // Redirect to login page
        window.location.href = '/login';
        break;
      case 'RATE_LIMIT_EXCEEDED':
        // Wait and retry
        const resetTime = response.headers.get('X-RateLimit-Reset');
        await sleep(resetTime * 1000);
        return retryRequest();
        break;
      default:
        // Show error message
        showError(data.message);
    }
    return;
  }

  return data.data;
}

2. Server-Side Error Handling

// Java Example
@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(AuthenticationException.class)
    public ResponseEntity<ErrorResponse> handleAuthException(AuthenticationException ex) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
            .body(new ErrorResponse(ex.getMessage(), ex.getErrorCode()));
    }

    @ExceptionHandler(RateLimitExceededException.class)
    public ResponseEntity<ErrorResponse> handleRateLimit(RateLimitExceededException ex) {
        return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
            .header("X-RateLimit-Reset", ex.getResetTime())
            .body(new ErrorResponse("Too many requests", "RATE_LIMIT_EXCEEDED"));
    }
}

3. Error Logging

// Log error information
log.error("Authentication failed: errorCode={}, message={}", 
    ex.getErrorCode(), ex.getMessage());

Quick Reference by Status Code

StatusError Codes
400VALIDATION_ERROR, INVALID_PARAMETER, MISSING_PARAMETER, INVALID_FORMAT
401INVALID_API_KEY, EXPIRED_API_KEY, MISSING_API_KEY, INVALID_JWT_TOKEN, EXPIRED_JWT_TOKEN, BLACKLISTED_TOKEN
403INSUFFICIENT_PERMISSIONS, ACCESS_DENIED, RESOURCE_FORBIDDEN, FORBIDDEN
404NOT_FOUND, SERVICE_NOT_FOUND, INSTANCE_NOT_FOUND, CONFIG_NOT_FOUND
409CONFLICT, DUPLICATE_RESOURCE
429RATE_LIMIT_EXCEEDED, GLOBAL_RATE_LIMIT, SERVICE_RATE_LIMIT, INSTANCE_RATE_LIMIT
500INTERNAL_ERROR, SANITIZATION_FAILED, CONFIGURATION_ERROR, DATABASE_ERROR, CACHE_ERROR
502/503Downstream service errors

Changelog

VersionDateChanges
1.0.02026-05-25Initial version with all error code definitions

Last updated: 2026-05-25