All error responses use this envelope:
"message" : " Human-readable description. " ,
"requestId" : " abc123-def456 "
The error field is a stable, machine-readable code. The message is for display and may
change between releases. The requestId correlates with server-side logs.
Code HTTP Description not_found404 Resource does not exist forbidden403 Caller lacks RBAC permissions unauthorized401 Authentication missing or invalid conflict409 Resource version conflict (optimistic concurrency) already_exists409 Resource being created already exists bad_request400 Malformed request or invalid parameters internal_error500 Unexpected server failure. Check logs with requestId timeout504 Operation exceeded deadline method_not_allowed405 HTTP method not supported
Code HTTP Description invalid_parameter400 Query or path parameter has invalid value missing_path_param400 Required path parameter absent missing_query_param400 Required query parameter absent invalid_namespace400 Namespace fails K8s name validation invalid_name400 Resource name fails K8s name validation invalid_path_params400 Dynamic handler path variables invalid invalid_input400 User input fails validation invalid_body400 Request body cannot be decoded invalid_json400 Body is not valid JSON missing_field400 Required field missing invalid_field400 Field has invalid value body_too_large413 Body exceeds size limit invalid_propagation400 Invalid deletion propagation policy
Code HTTP Description api_unreachable502 K8s API server unreachable context_not_found404 Kubeconfig context does not exist context_switch_failed500 Context switch failed context_list_failed500 Context enumeration failed invalid_context400 Context cannot be resolved insufficient_permissions403 User lacks RBAC permissions in target cluster source_fetch_failed502 Cross-cluster source fetch failed target_fetch_failed502 Cross-cluster target fetch failed
Code HTTP Description helm_not_found500 helm binary not on $PATHhelm_error500 Helm CLI command failed invalid_revision400 Invalid Helm revision number
Code HTTP Description drain_in_progress409 Drain already running on node dependency_unavailable503 External dependency not reachable too_many_contexts400 Contexts exceed maximum (50)
api_unreachable - K8s API may be temporarily down
timeout - May succeed on retry
internal_error - Transient server failure
Use exponential backoff with jitter.
forbidden / unauthorized - Fix authentication
not_found - Resource doesn’t exist
invalid_* / missing_* - Fix the request
conflict - Re-fetch and retry with updated version