Skip to content

Error Codes

This page documents all error codes returned by IdentityScribe. Each code includes the message shown to clients and protocol-specific status codes.

When an error occurs on HTTP-based channels (REST, GraphQL), clients receive:

HeaderDescriptionExample
Error-IdUnique error identifier (UUID)a1b2c3d4-e5f6-7890-abcd-ef1234567890
Error-CodeMachine-readable error codeDIRECTORY_BUSY
Error-KindError classificationUNAVAILABLE
Correlation-IdRequest correlation ID (if provided)req-12345
Trace-IdOpenTelemetry trace IDabc123def456...
Span-IdOpenTelemetry span IDabc123def456
Retry-AfterRetry hint (for retryable errors)5 or Mon, 13 Jan 2026 12:00:00 GMT

The Retry-After header uses either:

  • Seconds: delay before retrying (e.g., 5)
  • HTTP-date: specific time to retry (RFC 1123 format)
{
"error": {
"status": 503,
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2026-01-13T10:30:00.123Z",
"code": "DIRECTORY_BUSY",
"kind": "UNAVAILABLE",
"message": "Service temporarily unavailable. Please try again.",
"correlation": "req-12345",
"trace_id": "abc123def456...",
"span_id": "abc123def456",
"details": { "pending_operations": 5 },
"retry": {
"after": "PT5S"
}
}
}

Field Notes:

  • message — Client-safe, always present
  • details — Optional structured diagnostics, may be omitted
  • correlation, trace_id, span_id — Present only if set on the request
  • retry — Present only for retryable errors, contains after (ISO 8601 duration) or at (ISO 8601 instant)

When errors are logged to wide logs (JSON format), the failure block contains:

{
"trace_id": "abc123def456...",
"span_id": "abc123def456",
"duration_seconds": 0.234,
"result": "unavailable",
"failure": {
"kind": "UNAVAILABLE",
"code": "DIRECTORY_BUSY",
"trace_id": "abc123def456...",
"span_id": "abc123def456",
"message": "Directory is busy processing another request",
"details": { "pending_operations": 5 }
},
"scribe.operation": "LDAP.Search",
"scribe.channel": "ldap"
}

General error codes returned when no more specific code applies.

Operation was cancelled, typically by the caller.

Message: Request cancelled.

ProtocolStatus
HTTP499 Client Closed Request
gRPCCANCELLED
LDAP118 (cancelled)

Client specified an invalid argument.

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Client specified an argument that is outside allowed range.

Message: That value is out of range.

ProtocolStatus
HTTP400 Bad Request
gRPCOUT_OF_RANGE
LDAP19 (constraintViolation)

Operation was rejected because the system is not in a state required for execution.

Message: Can’t do that right now.

ProtocolStatus
HTTP409 Conflict
gRPCFAILED_PRECONDITION
LDAP19 (constraintViolation)

Request does not have valid authentication credentials.

Message: Please sign in and try again.

ProtocolStatus
HTTP401 Unauthorized
gRPCUNAUTHENTICATED
LDAP49 (invalidCredentials)

Caller does not have permission to execute the operation.

Message: You don’t have access to do that.

ProtocolStatus
HTTP403 Forbidden
gRPCPERMISSION_DENIED
LDAP50 (insufficientAccessRights)

Requested entity was not found.

Message: Not found.

ProtocolStatus
HTTP404 Not Found
gRPCNOT_FOUND
LDAP32 (noSuchObject)

Entity that a client attempted to create already exists.

Message: That already exists.

ProtocolStatus
HTTP409 Conflict
gRPCALREADY_EXISTS
LDAP68 (entryAlreadyExists)

Concurrency conflict, such as read-modify-write conflict.

Message: That conflicts with an existing value.

ProtocolStatus
HTTP409 Conflict
gRPCABORTED
LDAP51 (busy)

Resource has been exhausted (e.g., quota, rate limit).

Message: Too many requests. Try again in a bit.

Retry: Recommended after 2s

ProtocolStatus
HTTP429 Too Many Requests
gRPCRESOURCE_EXHAUSTED
LDAP51 (busy)

Deadline expired before operation could complete.

Message: Timed out. Please try again.

Retry: Recommended after 1s

ProtocolStatus
HTTP504 Gateway Timeout
gRPCDEADLINE_EXCEEDED
LDAP3 (timeLimitExceeded)

Service is currently unavailable.

Message: Service temporarily unavailable. Please try again.

Retry: Recommended after 5s

ProtocolStatus
HTTP503 Service Unavailable
gRPCUNAVAILABLE
LDAP52 (unavailable)

Operation is not implemented or not supported.

Message: That isn’t supported.

ProtocolStatus
HTTP501 Not Implemented
gRPCUNIMPLEMENTED
LDAP53 (unwillingToPerform)

Internal errors (unexpected).

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCINTERNAL
LDAP80 (other)

Unrecoverable data loss or corruption.

Message: A data error occurred.

ProtocolStatus
HTTP500 Internal Server Error
gRPCDATA_LOSS
LDAP80 (other)

Unknown error.

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCUNKNOWN
LDAP80 (other)

Errors returned for malformed or invalid request parameters.

Invalid JSON syntax in request parameter.

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Wrong JSON value type (e.g., expected ARRAY, got OBJECT).

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Invalid element type in array (e.g., expected STRING, got NUMBER).

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Required field missing in JSON object.

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Mutually exclusive parameters specified together.

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Invalid value format (not a JSON syntax error, but value doesn’t match expected format).

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Errors returned when parsing filter expressions.

General filter parse failure.

Message: Invalid filter syntax.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

SCIM attribute path not supported (e.g., dotted paths like name.familyName).

Message: Unsupported attribute path in filter.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Unsupported filter feature (e.g., ComplexValueFilter).

Message: Unsupported filter feature.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Filter nesting depth exceeds limit.

Message: Filter nesting depth exceeded.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Filter string exceeds maximum length.

Message: Filter too large.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Errors related to directory query execution and resource limits.

Directory connection permits exhausted

Message: Directory service is busy. Please retry later.

Retry: Recommended after 2s

ProtocolStatus
HTTP503 Service Unavailable
gRPCUNAVAILABLE
LDAP51 (busy)

Result set exceeded size limit

Message: Size limit exceeded.

Retry: Not recommended

ProtocolStatus
HTTP429 Too Many Requests
gRPCRESOURCE_EXHAUSTED
LDAP4 (sizeLimitExceeded)

Query exceeded time limit

Message: Timed out. Please try again.

Retry: Recommended after 1s

ProtocolStatus
HTTP504 Gateway Timeout
gRPCDEADLINE_EXCEEDED
LDAP3 (timeLimitExceeded)

Unsupported attribute operation in filter/sort

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Base DN outside configured scopes

Message: That value is out of range.

ProtocolStatus
HTTP400 Bad Request
gRPCOUT_OF_RANGE
LDAP19 (constraintViolation)

Query requires but lacks type constraint

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Inconsistent type constraints in query

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Errors specific to REST API endpoints.

Missing required path parameter

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Invalid/blank path parameter

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Unknown entry type requested

Message: Not found.

ProtocolStatus
HTTP404 Not Found
gRPCNOT_FOUND
LDAP32 (noSuchObject)

Invalid identifier format - not a valid UUID, UOID, or DN

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Errors returned when serving static assets.

Asset path is missing or blank

Message: Not found.

ProtocolStatus
HTTP404 Not Found
gRPCNOT_FOUND
LDAP32 (noSuchObject)

Invalid path characters or traversal attempt

Message: Some inputs are invalid.

ProtocolStatus
HTTP400 Bad Request
gRPCINVALID_ARGUMENT
LDAP2 (protocolError)

Unsupported file extension

Message: Not found.

ProtocolStatus
HTTP404 Not Found
gRPCNOT_FOUND
LDAP32 (noSuchObject)

Asset not found at path

Message: Not found.

ProtocolStatus
HTTP404 Not Found
gRPCNOT_FOUND
LDAP32 (noSuchObject)

IO error reading asset content

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCINTERNAL
LDAP80 (other)

Query depth exceeds configured max-depth limit.

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCUNKNOWN
LDAP80 (other)

Query complexity exceeds configured max-complexity limit.

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCUNKNOWN
LDAP80 (other)

Query string exceeds parser max-characters limit.

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCUNKNOWN
LDAP80 (other)

Query has too many tokens (exceeds parser max-tokens limit).

Message: Something went wrong.

ProtocolStatus
HTTP500 Internal Server Error
gRPCUNKNOWN
LDAP80 (other)